From 5abd2b70c81fbba71ea51994b325ddebc54b53db Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 21 May 2020 00:08:06 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop.yml | 2 - .../components/alert_details.vue | 80 ++++++++++++++--- .../javascripts/alert_management/details.js | 4 +- .../fragments/listItem.fragment.graphql | 1 + .../mutations/create_issue_from_alert.graphql | 8 ++ .../index/components/delete_project_modal.vue | 2 +- .../pages/alert_management/details.scss | 2 +- .../projects/alert_management_controller.rb | 2 +- .../projects/pipelines_controller.rb | 1 + app/controllers/projects/refs_controller.rb | 2 +- .../projects/alert_management_helper.rb | 2 +- app/models/ci/job_artifact.rb | 1 + .../unreleased/leaky-constant-fix-11.yml | 5 ++ .../unreleased/leaky-constant-fix-5.yml | 5 ++ ...2-add-usage-ping-for-terraform-reports.yml | 5 ++ ...app-assets-javascripts-pages-admin-pro.yml | 5 ++ ..._ci_job_artifacts_for_terraform_reports.rb | 18 ++++ ...x_on_name_type_eq_ci_build_to_ci_builds.rb | 36 ++++++++ db/structure.sql | 8 +- doc/ci/pipelines/settings.md | 3 +- doc/topics/airgap/index.md | 9 +- doc/user/application_security/sast/index.md | 27 +++--- lib/gitlab/git/rugged_impl/use_rugged.rb | 2 +- lib/gitlab/gitaly_client.rb | 12 ++- lib/gitlab/instrumentation/redis.rb | 4 +- lib/gitlab/rugged_instrumentation.rb | 7 +- lib/gitlab/usage_data.rb | 2 + lib/peek/views/gitaly.rb | 6 -- locale/gitlab.pot | 13 +++ package.json | 2 +- ...d_pipelines_dependent_relationship_spec.rb | 16 ++-- ...pipelines_independent_relationship_spec.rb | 16 ++-- .../projects/refs_controller_spec.rb | 2 +- spec/factories/usage_data.rb | 3 + spec/features/issues/spam_issues_spec.rb | 2 + .../alert_management_detail_spec.js | 89 +++++++++++++++---- .../alert_management/mocks/alerts.json | 1 + .../__snapshots__/contributors_spec.js.snap | 6 ++ .../pipelines_area_chart_spec.js.snap | 3 + .../projects/alert_management_helper_spec.rb | 4 +- spec/lib/gitlab/gitaly_client_spec.rb | 6 +- spec/lib/gitlab/instrumentation/redis_spec.rb | 15 ++++ .../lib/gitlab/rugged_instrumentation_spec.rb | 6 +- spec/lib/gitlab/sidekiq_middleware_spec.rb | 2 +- spec/lib/gitlab/usage_data_spec.rb | 2 + spec/lib/peek/views/rugged_spec.rb | 2 +- spec/serializers/commit_entity_spec.rb | 6 +- spec/support/helpers/usage_data_helpers.rb | 2 + .../support/shared_contexts/spam_constants.rb | 8 +- yarn.lock | 19 ++-- 50 files changed, 369 insertions(+), 117 deletions(-) create mode 100644 app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql create mode 100644 changelogs/unreleased/leaky-constant-fix-11.yml create mode 100644 changelogs/unreleased/leaky-constant-fix-5.yml create mode 100644 changelogs/unreleased/mattkasa-207532-add-usage-ping-for-terraform-reports.yml create mode 100644 changelogs/unreleased/update-deprecated-slot-syntax-in---app-assets-javascripts-pages-admin-pro.yml create mode 100644 db/migrate/20200512160004_add_index_to_ci_job_artifacts_for_terraform_reports.rb create mode 100644 db/migrate/20200512195442_update_index_on_name_type_eq_ci_build_to_ci_builds.rb create mode 100644 spec/lib/gitlab/instrumentation/redis_spec.rb diff --git a/.rubocop.yml b/.rubocop.yml index 60808f72e24..807d6ca10d3 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -371,10 +371,8 @@ RSpec/LeakyConstantDeclaration: - 'spec/models/concerns/bulk_insertable_associations_spec.rb' - 'spec/models/concerns/triggerable_hooks_spec.rb' - 'spec/models/repository_spec.rb' - - 'spec/serializers/commit_entity_spec.rb' - 'spec/services/clusters/applications/check_installation_progress_service_spec.rb' - 'spec/services/clusters/applications/check_uninstall_progress_service_spec.rb' - - 'spec/support/shared_contexts/spam_constants.rb' - 'spec/support/shared_examples/quick_actions/issuable/issuable_quick_actions_shared_examples.rb' - 'spec/support_specs/matchers/exceed_query_limit_helpers_spec.rb' diff --git a/app/assets/javascripts/alert_management/components/alert_details.vue b/app/assets/javascripts/alert_management/components/alert_details.vue index 89db7db77d5..bb9f092a9ae 100644 --- a/app/assets/javascripts/alert_management/components/alert_details.vue +++ b/app/assets/javascripts/alert_management/components/alert_details.vue @@ -20,6 +20,8 @@ import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { ALERTS_SEVERITY_LABELS } from '../constants'; import updateAlertStatus from '../graphql/mutations/update_alert_status.graphql'; +import createIssueQuery from '../graphql/mutations/create_issue_from_alert.graphql'; +import { visitUrl, joinPaths } from '~/lib/utils/url_utility'; export default { statuses: { @@ -60,7 +62,7 @@ export default { type: String, required: true, }, - newIssuePath: { + projectIssuesPath: { type: String, required: true, }, @@ -85,7 +87,13 @@ export default { }, }, data() { - return { alert: null, errored: false, isErrorDismissed: false }; + return { + alert: null, + errored: false, + isErrorDismissed: false, + createIssueError: '', + issueCreationInProgress: false, + }; }, computed: { loading() { @@ -122,6 +130,33 @@ export default { ); }); }, + createIssue() { + this.issueCreationInProgress = true; + + this.$apollo + .mutate({ + mutation: createIssueQuery, + variables: { + iid: this.alert.iid, + projectPath: this.projectPath, + }, + }) + .then(({ data: { createAlertIssue: { errors, issue } } }) => { + if (errors?.length) { + [this.createIssueError] = errors; + this.issueCreationInProgress = false; + } else if (issue) { + visitUrl(this.issuePath(issue.iid)); + } + }) + .catch(error => { + this.createIssueError = error; + this.issueCreationInProgress = false; + }); + }, + issuePath(issueId) { + return joinPaths(this.projectIssuesPath, issueId); + }, }, }; @@ -130,6 +165,14 @@ export default { {{ $options.i18n.errorMsg }} + + {{ createIssueError }} +
{{ alert.monitoringTool }}
- - {{ s__('AlertManagement|Create issue') }} - +
+ + {{ s__('AlertManagement|View issue') }} + + + {{ s__('AlertManagement|Create issue') }} + +
{ const domEl = document.querySelector(selector); - const { alertId, projectPath, newIssuePath } = domEl.dataset; + const { alertId, projectPath, projectIssuesPath } = domEl.dataset; const apolloProvider = new VueApollo({ defaultClient: createDefaultClient( @@ -39,7 +39,7 @@ export default selector => { props: { alertId, projectPath, - newIssuePath, + projectIssuesPath, }, }); }, diff --git a/app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql b/app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql index fffe07b0cfd..22adfc9800c 100644 --- a/app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql +++ b/app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql @@ -6,4 +6,5 @@ fragment AlertListItem on AlertManagementAlert { startedAt endedAt eventCount + issueIid } diff --git a/app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql b/app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql new file mode 100644 index 00000000000..664596ab88f --- /dev/null +++ b/app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql @@ -0,0 +1,8 @@ +mutation ($projectPath: ID!, $iid: String!) { + createAlertIssue(input: { iid: $iid, projectPath: $projectPath }) { + errors + issue { + iid + } + } +} diff --git a/app/assets/javascripts/pages/admin/projects/index/components/delete_project_modal.vue b/app/assets/javascripts/pages/admin/projects/index/components/delete_project_modal.vue index b22fbf6b833..8bb093da771 100644 --- a/app/assets/javascripts/pages/admin/projects/index/components/delete_project_modal.vue +++ b/app/assets/javascripts/pages/admin/projects/index/components/delete_project_modal.vue @@ -92,7 +92,7 @@ export default { @submit="onSubmit" @cancel="onCancel" > -