From 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 20 Aug 2020 18:42:06 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-3-stable-ee --- .../mailers/approval/icon-merge-request-gray.gif | Bin 0 -> 704 bytes .../add_context_commits_modal_trigger.vue | 49 ++ .../add_context_commits_modal_wrapper.vue | 279 ++++++++ .../components/review_tab_container.vue | 57 ++ .../add_context_commits_modal/event_hub.js | 3 + .../javascripts/add_context_commits_modal/index.js | 64 ++ .../add_context_commits_modal/store/actions.js | 134 ++++ .../add_context_commits_modal/store/index.js | 15 + .../store/mutation_types.js | 20 + .../add_context_commits_modal/store/mutations.js | 56 ++ .../add_context_commits_modal/store/state.js | 13 + .../javascripts/add_context_commits_modal/utils.js | 32 + .../admin/statistics_panel/store/actions.js | 5 +- .../admin/statistics_panel/store/getters.js | 4 +- .../alert_management/components/alert_details.vue | 106 +-- .../components/alert_management_empty_state.vue | 22 +- .../components/alert_management_table.vue | 41 +- .../alert_management/components/alert_status.vue | 14 +- .../components/sidebar/sidebar_assignee.vue | 8 +- .../components/sidebar/sidebar_assignees.vue | 38 +- .../components/sidebar/sidebar_header.vue | 2 +- .../components/sidebar/sidebar_status.vue | 2 +- .../components/sidebar/sidebar_todo.vue | 84 ++- app/assets/javascripts/alert_management/details.js | 5 +- .../graphql/fragments/detail_item.fragment.graphql | 6 + .../graphql/mutations/alert_todo_create.graphql | 11 - .../mutations/alert_todo_create.mutation.graphql | 10 + .../alert_todo_mark_done.mutation.graphql | 8 + .../graphql/queries/alert_help_url.query.graphql | 3 + app/assets/javascripts/alert_management/list.js | 9 +- app/assets/javascripts/alert_management/router.js | 13 + .../components/alerts_service_form.vue | 10 +- .../components/alerts_settings_form.vue | 148 ++-- .../javascripts/alerts_settings/constants.js | 4 +- app/assets/javascripts/alerts_settings/index.js | 56 +- .../cycle_analytics/mixins/filter_mixins.js | 1 - .../product_analytics/activity_charts_bundle.js | 28 + .../components/activity_chart.vue | 42 ++ app/assets/javascripts/api.js | 70 +- app/assets/javascripts/awards_handler.js | 2 +- .../javascripts/badges/components/badge_form.vue | 18 +- .../badges/components/badge_settings.vue | 22 +- .../batch_comments/components/draft_note.vue | 38 +- .../batch_comments/components/drafts_count.vue | 10 +- .../batch_comments/components/preview_item.vue | 2 +- .../batch_comments/components/publish_button.vue | 28 +- .../batch_comments/components/review_bar.vue | 12 +- .../stores/modules/batch_comments/actions.js | 5 +- .../stores/modules/batch_comments/getters.js | 3 - .../javascripts/behaviors/markdown/copy_as_gfm.js | 4 + .../javascripts/behaviors/markdown/render_math.js | 2 +- .../behaviors/markdown/render_mermaid.js | 4 +- .../javascripts/behaviors/preview_markdown.js | 2 +- app/assets/javascripts/behaviors/quick_submit.js | 2 +- app/assets/javascripts/blob/balsamiq_viewer.js | 2 +- .../blob/components/blob_content_error.vue | 2 +- .../blob/components/blob_edit_content.vue | 37 +- .../blob/components/blob_edit_header.vue | 47 +- .../javascripts/blob/components/blob_header.vue | 2 +- .../components/blob_header_default_actions.vue | 32 +- .../components/blob_header_viewer_switcher.vue | 17 +- .../javascripts/blob/file_template_mediator.js | 4 +- .../javascripts/blob/notebook/notebook_viewer.vue | 2 +- app/assets/javascripts/blob/openapi/index.js | 2 +- app/assets/javascripts/blob/pdf/pdf_viewer.vue | 2 +- .../blob/pipeline_tour_success_modal.vue | 26 +- .../suggest_gitlab_ci_yml/components/popover.vue | 12 +- .../metrics_dashboard_selector.js | 28 + app/assets/javascripts/blob/utils.js | 11 +- app/assets/javascripts/blob/viewer/index.js | 2 +- app/assets/javascripts/blob_edit/edit_blob.js | 2 +- app/assets/javascripts/boards/boards_util.js | 21 + .../javascripts/boards/components/board_column.vue | 2 +- .../boards/components/board_content.vue | 7 +- .../javascripts/boards/components/board_form.vue | 2 +- .../javascripts/boards/components/board_list.vue | 2 +- .../boards/components/board_list_header.vue | 4 +- .../boards/components/board_new_issue.vue | 2 +- .../boards/components/board_settings_sidebar.vue | 92 +++ .../javascripts/boards/components/board_sidebar.js | 2 +- .../boards/components/boards_selector.vue | 50 +- .../boards/components/issue_due_date.vue | 6 +- .../boards/components/issue_time_estimate.vue | 7 +- .../javascripts/boards/components/modal/footer.vue | 2 +- .../javascripts/boards/components/modal/header.vue | 2 +- .../javascripts/boards/components/modal/tabs.vue | 2 +- .../boards/components/new_list_dropdown.js | 2 +- .../boards/components/project_select.vue | 4 +- .../boards/components/sidebar/remove_issue.vue | 10 +- app/assets/javascripts/boards/constants.js | 2 +- app/assets/javascripts/boards/eventhub.js | 4 +- .../javascripts/boards/filtered_search_boards.js | 3 +- app/assets/javascripts/boards/index.js | 11 +- app/assets/javascripts/boards/models/list.js | 15 +- .../queries/board_list_shared.fragment.graphql | 1 + .../queries/group_lists_issues.query.graphql | 18 + .../boards/queries/issue.fragment.graphql | 31 + .../queries/project_lists_issues.query.graphql | 18 + app/assets/javascripts/boards/stores/actions.js | 41 +- .../javascripts/boards/stores/boards_store.js | 45 +- .../javascripts/boards/stores/mutation_types.js | 6 +- app/assets/javascripts/boards/stores/mutations.js | 22 +- app/assets/javascripts/boards/stores/state.js | 8 +- .../branches/components/divergence_graph.vue | 2 +- .../javascripts/branches/components/graph_bar.vue | 2 +- .../javascripts/branches/divergence_graph.js | 2 +- .../ci_variable_list/ajax_variable_list.js | 2 +- .../components/ci_environments_dropdown.vue | 32 +- .../components/ci_variable_modal.vue | 18 +- .../components/ci_variable_popover.vue | 21 +- .../components/ci_variable_settings.vue | 2 +- .../components/ci_variable_table.vue | 23 +- .../javascripts/ci_variable_list/store/actions.js | 2 +- app/assets/javascripts/clusters/clusters_bundle.js | 37 +- .../clusters/components/application_row.vue | 22 +- .../clusters/components/applications.vue | 101 ++- .../components/crossplane_provider_stack.vue | 18 +- .../components/fluentd_output_settings.vue | 22 +- .../components/ingress_modsecurity_settings.vue | 26 +- .../clusters/components/knative_domain_editor.vue | 26 +- .../components/remove_cluster_confirmation.vue | 41 +- app/assets/javascripts/clusters/constants.js | 1 + .../clusters/forms/components/integration_form.vue | 163 +++++ .../javascripts/clusters/forms/show/index.js | 27 + .../javascripts/clusters/forms/stores/index.js | 12 + .../javascripts/clusters/forms/stores/state.js | 13 + .../clusters/services/application_state_machine.js | 36 +- .../javascripts/clusters/stores/clusters_store.js | 8 + .../clusters_list/components/clusters.vue | 2 +- .../javascripts/clusters_list/store/actions.js | 7 +- .../commit/pipelines/pipelines_table.vue | 92 ++- app/assets/javascripts/compare_autocomplete.js | 2 +- .../components/dropdown.vue | 18 +- .../components/project_form_group.vue | 2 +- .../javascripts/contributors/stores/actions.js | 6 +- .../javascripts/contributors/stores/getters.js | 3 - .../create_cluster/eks_cluster/store/actions.js | 2 +- .../components/gke_project_id_dropdown.vue | 77 +- .../create_cluster/gke_cluster/index.js | 2 +- .../create_cluster/gke_cluster/store/actions.js | 3 - .../javascripts/create_merge_request_dropdown.js | 2 +- .../components/custom_metrics_form.vue | 15 +- .../components/stage_review_component.vue | 5 +- .../cycle_analytics/cycle_analytics_bundle.js | 4 +- .../components/deploy_freeze_modal.vue | 149 ++++ .../components/deploy_freeze_settings.vue | 18 + .../components/deploy_freeze_table.vue | 83 +++ app/assets/javascripts/deploy_freeze/index.js | 22 + .../javascripts/deploy_freeze/store/actions.js | 63 ++ .../javascripts/deploy_freeze/store/index.js | 14 + .../deploy_freeze/store/mutation_types.js | 12 + .../javascripts/deploy_freeze/store/mutations.js | 54 ++ .../javascripts/deploy_freeze/store/state.js | 17 + .../javascripts/deploy_keys/components/app.vue | 2 +- .../design_management/components/delete_button.vue | 65 +- .../components/design_destroyer.vue | 9 +- .../components/design_note_pin.vue | 8 +- .../components/design_notes/design_discussion.vue | 4 +- .../components/design_notes/design_note.vue | 4 +- .../design_notes/toggle_replies_widget.vue | 6 +- .../components/design_sidebar.vue | 10 +- .../design_management/components/list/item.vue | 6 +- .../components/toolbar/design_navigation.vue | 86 +++ .../design_management/components/toolbar/index.vue | 78 +- .../components/toolbar/pagination.vue | 83 --- .../components/toolbar/pagination_button.vue | 48 -- .../design_management/components/upload/button.vue | 11 +- .../components/upload/design_dropzone.vue | 53 +- .../components/upload/design_version_dropdown.vue | 65 +- .../create_image_diff_note.mutation.graphql | 6 +- .../graphql/mutations/move_design.mutation.graphql | 18 + .../mutations/upload_design.mutation.graphql | 8 +- .../graphql/queries/app_data.query.graphql | 4 - .../graphql/queries/get_design.query.graphql | 22 +- .../graphql/queries/get_design_list.query.graphql | 12 +- app/assets/javascripts/design_management/index.js | 38 +- .../design_management/mixins/all_designs.js | 15 +- .../design_management/mixins/all_versions.js | 25 +- .../design_management/pages/design/index.vue | 13 +- .../javascripts/design_management/pages/index.vue | 164 ++++- .../design_management/router/constants.js | 1 - .../javascripts/design_management/router/index.js | 5 +- .../javascripts/design_management/router/routes.js | 47 +- .../design_management/utils/cache_update.js | 90 +-- .../utils/design_management_utils.js | 53 +- .../design_management/utils/error_messages.js | 6 +- .../design_management_legacy/components/app.vue | 3 + .../components/delete_button.vue | 64 ++ .../components/design_destroyer.vue | 66 ++ .../components/design_note_pin.vue | 61 ++ .../components/design_notes/design_discussion.vue | 297 ++++++++ .../components/design_notes/design_note.vue | 156 ++++ .../components/design_notes/design_reply_form.vue | 141 ++++ .../design_notes/toggle_replies_widget.vue | 70 ++ .../components/design_overlay.vue | 287 ++++++++ .../components/design_presentation.vue | 322 +++++++++ .../components/design_scaler.vue | 65 ++ .../components/design_sidebar.vue | 178 +++++ .../design_management_legacy/components/image.vue | 110 +++ .../components/list/item.vue | 174 +++++ .../components/toolbar/index.vue | 126 ++++ .../components/toolbar/pagination.vue | 83 +++ .../components/toolbar/pagination_button.vue | 48 ++ .../components/upload/button.vue | 58 ++ .../components/upload/design_dropzone.vue | 134 ++++ .../components/upload/design_version_dropdown.vue | 76 ++ .../design_management_legacy/constants.js | 16 + .../design_management_legacy/graphql.js | 45 ++ .../graphql/fragments/design.fragment.graphql | 24 + .../graphql/fragments/design_list.fragment.graphql | 8 + .../graphql/fragments/design_note.fragment.graphql | 29 + .../graphql/fragments/diff_refs.fragment.graphql | 5 + .../discussion_resolved_status.fragment.graphql | 9 + .../fragments/note_permissions.fragment.graphql | 3 + .../graphql/fragments/version.fragment.graphql | 4 + .../create_image_diff_note.mutation.graphql | 21 + .../graphql/mutations/create_note.mutation.graphql | 10 + .../mutations/destroy_design.mutation.graphql | 10 + .../toggle_resolve_discussion.mutation.graphql | 17 + .../update_active_discussion.mutation.graphql | 3 + .../update_image_diff_note.mutation.graphql | 10 + .../graphql/mutations/update_note.mutation.graphql | 10 + .../mutations/upload_design.mutation.graphql | 21 + .../queries/active_discussion.query.graphql | 6 + .../graphql/queries/app_data.query.graphql | 4 + .../queries/design_permissions.query.graphql | 10 + .../graphql/queries/get_design.query.graphql | 31 + .../graphql/queries/get_design_list.query.graphql | 26 + .../graphql/typedefs.graphql | 12 + .../javascripts/design_management_legacy/index.js | 61 ++ .../design_management_legacy/mixins/all_designs.js | 49 ++ .../mixins/all_versions.js | 62 ++ .../pages/design/index.vue | 378 ++++++++++ .../design_management_legacy/pages/index.vue | 323 +++++++++ .../design_management_legacy/router/constants.js | 3 + .../design_management_legacy/router/index.js | 35 + .../design_management_legacy/router/routes.js | 44 ++ .../design_management_legacy/utils/cache_update.js | 276 +++++++ .../utils/design_management_utils.js | 128 ++++ .../utils/error_messages.js | 95 +++ .../design_management_legacy/utils/tracking.js | 27 + .../design_management_new/components/app.vue | 3 - .../components/delete_button.vue | 81 --- .../components/design_destroyer.vue | 67 -- .../components/design_note_pin.vue | 61 -- .../components/design_notes/design_discussion.vue | 297 -------- .../components/design_notes/design_note.vue | 156 ---- .../components/design_notes/design_reply_form.vue | 141 ---- .../design_notes/toggle_replies_widget.vue | 70 -- .../components/design_overlay.vue | 287 -------- .../components/design_presentation.vue | 322 --------- .../components/design_scaler.vue | 65 -- .../components/design_sidebar.vue | 178 ----- .../design_management_new/components/image.vue | 110 --- .../design_management_new/components/list/item.vue | 174 ----- .../components/toolbar/index.vue | 124 ---- .../components/toolbar/pagination.vue | 83 --- .../components/toolbar/pagination_button.vue | 48 -- .../components/upload/button.vue | 59 -- .../components/upload/design_dropzone.vue | 136 ---- .../components/upload/design_version_dropdown.vue | 76 -- .../javascripts/design_management_new/constants.js | 16 - .../javascripts/design_management_new/graphql.js | 45 -- .../graphql/fragments/design.fragment.graphql | 24 - .../graphql/fragments/design_list.fragment.graphql | 8 - .../graphql/fragments/design_note.fragment.graphql | 29 - .../graphql/fragments/diff_refs.fragment.graphql | 5 - .../discussion_resolved_status.fragment.graphql | 9 - .../fragments/note_permissions.fragment.graphql | 3 - .../graphql/fragments/version.fragment.graphql | 4 - .../create_image_diff_note.mutation.graphql | 21 - .../graphql/mutations/create_note.mutation.graphql | 10 - .../mutations/destroy_design.mutation.graphql | 10 - .../toggle_resolve_discussion.mutation.graphql | 17 - .../update_active_discussion.mutation.graphql | 3 - .../update_image_diff_note.mutation.graphql | 10 - .../graphql/mutations/update_note.mutation.graphql | 10 - .../mutations/upload_design.mutation.graphql | 21 - .../queries/active_discussion.query.graphql | 6 - .../queries/design_permissions.query.graphql | 10 - .../graphql/queries/get_design.query.graphql | 31 - .../graphql/queries/get_design_list.query.graphql | 26 - .../design_management_new/graphql/typedefs.graphql | 12 - .../javascripts/design_management_new/index.js | 33 - .../design_management_new/mixins/all_designs.js | 49 -- .../design_management_new/mixins/all_versions.js | 59 -- .../design_management_new/pages/design/index.vue | 367 ---------- .../design_management_new/pages/index.vue | 346 --------- .../design_management_new/router/constants.js | 2 - .../design_management_new/router/index.js | 32 - .../design_management_new/router/routes.js | 29 - .../design_management_new/utils/cache_update.js | 276 ------- .../utils/design_management_utils.js | 128 ---- .../design_management_new/utils/error_messages.js | 95 --- .../design_management_new/utils/tracking.js | 27 - app/assets/javascripts/diff.js | 2 +- .../diff_notes/components/resolve_btn.js | 2 +- .../javascripts/diff_notes/services/resolve.js | 2 +- app/assets/javascripts/diffs/components/app.vue | 69 +- .../javascripts/diffs/components/commit_item.vue | 51 +- .../javascripts/diffs/components/commit_widget.vue | 9 +- .../diffs/components/compare_versions.vue | 9 +- .../javascripts/diffs/components/diff_content.vue | 2 +- .../diffs/components/diff_expansion_cell.vue | 2 +- .../javascripts/diffs/components/diff_file.vue | 24 +- .../diffs/components/diff_line_note_form.vue | 4 +- .../javascripts/diffs/components/diff_stats.vue | 13 +- .../diffs/components/diff_table_cell.vue | 51 +- .../diffs/components/hidden_files_warning.vue | 2 +- app/assets/javascripts/diffs/constants.js | 3 + app/assets/javascripts/diffs/diff_file.js | 28 + app/assets/javascripts/diffs/index.js | 2 +- app/assets/javascripts/diffs/store/actions.js | 9 +- app/assets/javascripts/diffs/store/getters.js | 4 - .../javascripts/diffs/store/modules/diff_state.js | 1 + app/assets/javascripts/diffs/store/mutations.js | 1 + app/assets/javascripts/diffs/store/utils.js | 17 +- app/assets/javascripts/dropzone_input.js | 4 - app/assets/javascripts/editor/editor_lite.js | 29 +- .../components/enable_review_app_button.vue | 8 +- .../components/environment_external_url.vue | 14 +- .../environments/components/environment_stop.vue | 17 +- .../environments/components/environments_app.vue | 2 +- .../environments/components/environments_table.vue | 2 +- .../environments/mixins/environments_mixin.js | 2 +- .../error_tracking/components/error_details.vue | 36 +- .../components/error_tracking_actions.vue | 30 +- .../components/error_tracking_list.vue | 55 +- .../error_tracking/components/stacktrace_entry.vue | 4 +- .../javascripts/error_tracking/store/actions.js | 4 +- .../error_tracking/store/details/actions.js | 5 +- .../error_tracking/store/details/getters.js | 3 +- .../error_tracking/store/list/actions.js | 4 +- .../error_tracking_settings/components/app.vue | 22 +- .../components/project_dropdown.vue | 14 +- .../error_tracking_settings/store/actions.js | 5 +- .../error_tracking_settings/store/getters.js | 3 - .../javascripts/error_tracking_settings/utils.js | 2 - .../feature_highlight/feature_highlight_helper.js | 2 +- .../add_extra_tokens_for_merge_requests.js | 60 +- .../filtered_search/available_dropdown_mappings.js | 2 +- .../recent_searches_dropdown_content.vue | 18 +- .../filtered_search/dropdown_ajax_filter.js | 2 +- .../javascripts/filtered_search/dropdown_emoji.js | 2 +- .../filtered_search/dropdown_non_user.js | 2 +- .../filtered_search/filtered_search_manager.js | 15 +- .../filtered_search_visual_tokens.js | 4 +- .../group_runners_filtered_search_token_keys.js | 27 + .../filtered_search/visual_token_value.js | 2 +- app/assets/javascripts/flash.js | 62 +- .../javascripts/frequent_items/store/actions.js | 3 - .../javascripts/frequent_items/store/getters.js | 4 +- app/assets/javascripts/frequent_items/utils.js | 4 +- app/assets/javascripts/gpg_badges.js | 2 +- .../components/grafana_integration.vue | 16 +- .../grafana_integration/store/actions.js | 2 +- .../fragments/pageInfoCursorsOnly.fragment.graphql | 4 + app/assets/javascripts/group.js | 2 +- app/assets/javascripts/group_label_subscription.js | 2 +- .../javascripts/groups/components/item_actions.vue | 4 +- .../javascripts/groups/components/item_stats.vue | 4 +- app/assets/javascripts/groups_select.js | 2 +- app/assets/javascripts/helpers/monitor_helper.js | 3 +- .../components/commit_sidebar/editor_header.vue | 2 +- .../ide/components/commit_sidebar/form.vue | 4 +- .../ide/components/commit_sidebar/list.vue | 2 +- .../components/commit_sidebar/list_collapsed.vue | 4 +- .../ide/components/ide_project_header.vue | 6 +- .../ide/components/new_dropdown/modal.vue | 4 +- .../javascripts/ide/components/repo_editor.vue | 4 +- app/assets/javascripts/ide/ide_router.js | 2 +- app/assets/javascripts/ide/index.js | 5 +- app/assets/javascripts/ide/lib/editor.js | 9 +- app/assets/javascripts/ide/stores/actions.js | 2 +- .../ide/stores/actions/merge_request.js | 2 +- .../javascripts/ide/stores/actions/project.js | 2 +- app/assets/javascripts/ide/stores/index.js | 2 - .../ide/stores/modules/branches/actions.js | 2 - .../ide/stores/modules/commit/actions.js | 2 +- .../ide/stores/modules/file_templates/getters.js | 6 +- .../ide/stores/modules/merge_requests/actions.js | 2 - .../ide/stores/modules/pipelines/actions.js | 2 - .../ide/stores/modules/pipelines/getters.js | 2 - .../ide/stores/modules/terminal/actions/index.js | 1 - .../modules/terminal/actions/session_controls.js | 2 +- .../modules/terminal/actions/session_status.js | 2 +- .../ide/stores/modules/terminal/getters.js | 3 +- .../ide/stores/modules/terminal/messages.js | 4 +- app/assets/javascripts/ide/utils.js | 2 +- .../components/bitbucket_status_table.vue | 3 +- .../components/import_projects_table.vue | 177 +++-- .../components/imported_project_table_row.vue | 28 +- .../components/incompatible_repo_table_row.vue | 8 +- .../components/page_query_param_sync.vue | 39 + .../components/provider_repo_table_row.vue | 105 +-- .../javascripts/import_projects/event_hub.js | 3 - app/assets/javascripts/import_projects/index.js | 37 +- .../javascripts/import_projects/store/actions.js | 142 +++- .../javascripts/import_projects/store/getters.js | 42 +- .../javascripts/import_projects/store/index.js | 8 +- .../import_projects/store/mutation_types.js | 10 + .../javascripts/import_projects/store/mutations.js | 100 ++- .../javascripts/import_projects/store/state.js | 16 +- app/assets/javascripts/import_projects/utils.js | 7 + app/assets/javascripts/importer_status.js | 2 +- .../incidents/components/incidents_list.vue | 407 +++++++++++ app/assets/javascripts/incidents/constants.js | 37 + .../queries/get_count_by_status.query.graphql | 9 + .../graphql/queries/get_incidents.query.graphql | 52 ++ app/assets/javascripts/incidents/list.js | 44 ++ .../incidents_settings/components/alerts_form.vue | 23 +- .../components/incidents_settings_tabs.vue | 16 +- .../components/pagerduty_form.vue | 45 +- .../javascripts/incidents_settings/constants.js | 3 +- .../incidents_settings_service.js | 2 +- .../integrations/edit/components/active_toggle.vue | 37 +- .../integrations/edit/components/dynamic_field.vue | 4 +- .../edit/components/jira_issues_fields.vue | 2 +- .../edit/components/jira_trigger_fields.vue | 75 +- .../edit/components/override_dropdown.vue | 6 +- .../edit/components/trigger_fields.vue | 2 +- .../integrations/integration_settings_form.js | 2 +- .../javascripts/issuable_bulk_update_actions.js | 2 +- app/assets/javascripts/issuable_form.js | 25 +- app/assets/javascripts/issuable_index.js | 2 +- .../issuables_list/components/issuable.vue | 154 ++-- .../components/issuables_list_app.vue | 65 +- app/assets/javascripts/issuables_list/index.js | 8 +- .../issuables_list/service_desk_helper.js | 55 ++ app/assets/javascripts/issue.js | 2 +- .../javascripts/issue_show/components/app.vue | 2 +- .../issue_show/components/description.vue | 2 +- .../components/issuable_header_warnings.vue | 28 - app/assets/javascripts/issue_show/index.js | 12 - .../javascripts/issue_show/utils/parse_data.js | 2 +- .../jira_import/components/jira_import_app.vue | 106 +-- .../jira_import/components/jira_import_form.vue | 159 +++-- .../queries/get_jira_user_mapping.mutation.graphql | 2 + .../javascripts/jira_import/utils/constants.js | 29 + .../jobs/components/artifacts_block.vue | 2 +- .../javascripts/jobs/components/empty_state.vue | 7 +- .../jobs/components/environments_block.vue | 2 +- app/assets/javascripts/jobs/components/job_app.vue | 22 +- .../jobs/components/job_log_controllers.vue | 15 +- .../jobs/components/manual_variables_form.vue | 2 +- app/assets/javascripts/jobs/components/sidebar.vue | 3 +- .../javascripts/jobs/components/stuck_block.vue | 68 +- app/assets/javascripts/jobs/store/actions.js | 5 +- app/assets/javascripts/jobs/store/getters.js | 3 - app/assets/javascripts/label_manager.js | 2 +- app/assets/javascripts/labels_select.js | 37 +- app/assets/javascripts/layout_nav.js | 2 + app/assets/javascripts/lib/chrome_84_icon_fix.js | 78 ++ app/assets/javascripts/lib/graphql.js | 2 +- .../javascripts/lib/utils/axios_startup_calls.js | 19 +- app/assets/javascripts/lib/utils/common_utils.js | 4 +- .../javascripts/lib/utils/datetime_utility.js | 34 + app/assets/javascripts/lib/utils/highlight.js | 4 +- app/assets/javascripts/lib/utils/http_status.js | 1 + app/assets/javascripts/lib/utils/keys.js | 4 +- app/assets/javascripts/lib/utils/poll.js | 17 + app/assets/javascripts/lib/utils/text_markdown.js | 4 +- app/assets/javascripts/lib/utils/url_utility.js | 41 +- .../logs/components/environment_logs.vue | 38 +- .../logs/components/log_simple_filters.vue | 31 +- app/assets/javascripts/logs/stores/actions.js | 3 - app/assets/javascripts/logs/stores/mutations.js | 4 +- app/assets/javascripts/logs/utils.js | 2 +- app/assets/javascripts/main.js | 9 +- .../maintenance_mode_settings/components/app.vue | 6 +- app/assets/javascripts/manual_ordering.js | 2 +- .../merge_conflicts/components/diff_file_editor.js | 2 +- .../merge_conflicts/merge_conflicts_bundle.js | 2 +- app/assets/javascripts/merge_request.js | 2 +- app/assets/javascripts/merge_request_tabs.js | 14 +- app/assets/javascripts/milestone.js | 2 +- .../milestones/project_milestone_combobox.vue | 4 +- .../javascripts/mini_pipeline_graph_dropdown.js | 2 +- app/assets/javascripts/mirrors/mirror_repos.js | 2 +- app/assets/javascripts/mirrors/ssh_mirror.js | 2 +- .../monitoring/components/alert_widget.vue | 12 +- .../monitoring/components/alert_widget_form.vue | 40 +- .../monitoring/components/charts/gauge.vue | 122 ++++ .../monitoring/components/charts/heatmap.vue | 2 +- .../monitoring/components/charts/options.js | 64 ++ .../monitoring/components/charts/single_stat.vue | 2 +- .../monitoring/components/charts/time_series.vue | 17 +- .../monitoring/components/dashboard.vue | 32 +- .../components/dashboard_actions_menu.vue | 291 ++++++++ .../monitoring/components/dashboard_header.vue | 287 ++------ .../monitoring/components/dashboard_panel.vue | 84 ++- .../components/dashboard_panel_builder.vue | 199 ++++++ .../monitoring/components/dashboards_dropdown.vue | 76 +- .../components/duplicate_dashboard_form.vue | 2 +- .../monitoring/components/group_empty_state.vue | 2 +- .../monitoring/components/links_section.vue | 2 +- .../monitoring/components/refresh_button.vue | 23 +- .../components/variables/dropdown_field.vue | 17 +- app/assets/javascripts/monitoring/constants.js | 11 +- app/assets/javascripts/monitoring/csv_export.js | 147 ++++ .../monitoring/pages/panel_new_page.vue | 45 ++ .../queries/getAnnotations.query.graphql | 1 + .../queries/getEnvironments.query.graphql | 1 + .../javascripts/monitoring/requests/index.js | 46 ++ .../javascripts/monitoring/router/constants.js | 9 +- app/assets/javascripts/monitoring/router/routes.js | 13 +- .../monitoring/services/alerts_service.js | 25 +- .../javascripts/monitoring/stores/actions.js | 130 ++-- .../monitoring/stores/embed_group/actions.js | 3 +- .../monitoring/stores/embed_group/getters.js | 3 +- .../stores/embed_group/mutation_types.js | 3 +- .../javascripts/monitoring/stores/getters.js | 3 - .../monitoring/stores/mutation_types.js | 14 + .../javascripts/monitoring/stores/mutations.js | 76 +- app/assets/javascripts/monitoring/stores/state.js | 13 + app/assets/javascripts/monitoring/stores/utils.js | 12 +- app/assets/javascripts/monitoring/utils.js | 6 + app/assets/javascripts/monitoring/validators.js | 13 +- app/assets/javascripts/mr_notes/init_notes.js | 8 +- app/assets/javascripts/mr_notes/stores/getters.js | 5 + .../mr_tabs_popover/components/popover.vue | 69 -- app/assets/javascripts/mr_tabs_popover/index.js | 12 - app/assets/javascripts/namespaces/leave_by_url.js | 2 +- app/assets/javascripts/network/branch_graph.js | 36 +- app/assets/javascripts/notebook/cells/markdown.vue | 81 +-- .../javascripts/notebook/cells/output/html.vue | 7 +- app/assets/javascripts/notes.js | 11 +- .../javascripts/notes/components/comment_form.vue | 2 +- .../notes/components/discussion_actions.vue | 11 +- .../notes/components/discussion_filter_note.vue | 12 +- .../components/discussion_keyboard_navigator.vue | 20 - .../notes/components/discussion_navigator.vue | 26 + .../notes/components/discussion_notes.vue | 18 +- .../discussion_resolve_with_issue_button.vue | 13 +- .../javascripts/notes/components/note_actions.vue | 4 +- .../notes/components/note_awards_list.vue | 2 +- .../javascripts/notes/components/note_header.vue | 2 +- .../notes/components/noteable_discussion.vue | 7 +- .../javascripts/notes/components/noteable_note.vue | 58 +- .../javascripts/notes/components/notes_app.vue | 6 +- app/assets/javascripts/notes/event_hub.js | 4 +- app/assets/javascripts/notes/index.js | 5 + .../notes/mixins/diff_line_note_form.js | 2 +- .../notes/mixins/discussion_navigation.js | 10 +- app/assets/javascripts/notes/mixins/resolvable.js | 2 +- app/assets/javascripts/notes/stores/actions.js | 54 +- app/assets/javascripts/notes/stores/getters.js | 7 +- .../javascripts/notes/stores/mutation_types.js | 2 + app/assets/javascripts/notes/stores/mutations.js | 9 + app/assets/javascripts/notifications_dropdown.js | 2 +- app/assets/javascripts/notifications_form.js | 2 +- app/assets/javascripts/onboarding_issues/index.js | 18 +- .../components/form_group/dashboard_timezone.vue | 2 +- .../components/metrics_settings.vue | 16 +- .../operation_settings/store/actions.js | 5 +- .../details/components/additional_metadata.vue | 98 +++ .../packages/details/components/app.vue | 289 ++++++++ .../details/components/code_instruction.vue | 63 ++ .../details/components/composer_installation.vue | 60 ++ .../details/components/conan_installation.vue | 56 ++ .../packages/details/components/dependency_row.vue | 35 + .../details/components/history_element.vue | 35 + .../details/components/installation_commands.vue | 53 ++ .../details/components/maven_installation.vue | 84 +++ .../details/components/npm_installation.vue | 80 +++ .../details/components/nuget_installation.vue | 55 ++ .../details/components/package_history.vue | 114 +++ .../packages/details/components/package_title.vue | 112 +++ .../details/components/pypi_installation.vue | 68 ++ .../javascripts/packages/details/constants.js | 47 ++ app/assets/javascripts/packages/details/index.js | 32 + .../javascripts/packages/details/store/actions.js | 23 + .../javascripts/packages/details/store/getters.js | 115 +++ .../javascripts/packages/details/store/index.js | 20 + .../packages/details/store/mutation_types.js | 2 + .../packages/details/store/mutations.js | 14 + app/assets/javascripts/packages/details/utils.js | 23 + .../packages/list/coming_soon/helpers.js | 55 ++ .../list/coming_soon/packages_coming_soon.vue | 172 +++++ .../list/coming_soon/queries/issues.graphql | 20 + .../packages/list/components/packages_filter.vue | 21 + .../packages/list/components/packages_list.vue | 129 ++++ .../packages/list/components/packages_list_app.vue | 111 +++ .../packages/list/components/packages_sort.vue | 60 ++ app/assets/javascripts/packages/list/constants.js | 101 +++ .../packages/list/packages_list_app_bundle.js | 31 + .../javascripts/packages/list/stores/actions.js | 73 ++ .../javascripts/packages/list/stores/getters.js | 5 + .../javascripts/packages/list/stores/index.js | 20 + .../packages/list/stores/mutation_types.js | 8 + .../javascripts/packages/list/stores/mutations.js | 45 ++ .../javascripts/packages/list/stores/state.js | 57 ++ app/assets/javascripts/packages/list/utils.js | 25 + .../shared/components/package_list_row.vue | 139 ++++ .../packages/shared/components/package_tags.vue | 108 +++ .../shared/components/packages_list_loader.vue | 86 +++ .../packages/shared/components/publish_method.vue | 61 ++ .../javascripts/packages/shared/constants.js | 24 + app/assets/javascripts/packages/shared/utils.js | 36 + .../application_settings/payload_previewer.js | 2 +- .../admin/broadcast_messages/broadcast_message.js | 2 +- .../javascripts/pages/admin/clusters/show/index.js | 2 + .../jobs/index/components/stop_jobs_modal.vue | 2 +- .../javascripts/pages/admin/runners/index.js | 1 + .../admin/users/components/delete_user_modal.vue | 21 +- .../javascripts/pages/dashboard/issues/index.js | 1 + .../pages/dashboard/merge_requests/index.js | 1 + .../javascripts/pages/dashboard/projects/index.js | 5 - .../index/components/customize_homepage_banner.vue | 66 ++ .../pages/dashboard/projects/index/index.js | 8 + .../index/init_customize_homepage_banner.js | 16 + .../pages/dashboard/todos/index/todos.js | 2 +- .../javascripts/pages/groups/clusters/index.js | 2 + .../javascripts/pages/groups/issues/index.js | 1 + .../pages/groups/merge_requests/index.js | 1 + .../pages/groups/new/group_path_validator.js | 2 +- .../pages/groups/packages/index/index.js | 7 + .../pages/groups/settings/ci_cd/show/index.js | 5 +- .../pages/import/bitbucket/status/index.js | 4 +- .../components/bitbucket_server_status_table.vue | 7 +- .../pages/import/bitbucket_server/status/index.js | 6 +- .../pages/import/manifest/status/index.js | 7 + .../shared/components/delete_milestone_modal.vue | 2 +- .../shared/components/promote_milestone_modal.vue | 2 +- .../javascripts/pages/profiles/show/index.js | 2 +- .../javascripts/pages/projects/blob/show/index.js | 6 +- .../pages/projects/clusters/show/index.js | 2 + .../pages/projects/commit/show/index.js | 50 +- .../javascripts/pages/projects/edit/index.js | 4 +- .../forks/new/components/fork_groups_list.vue | 2 +- .../forks/new/components/fork_groups_list_item.vue | 16 +- .../javascripts/pages/projects/forks/new/index.js | 24 +- .../pages/projects/graphs/charts/index.js | 2 +- .../projects/graphs/components/code_coverage.vue | 22 +- .../pages/projects/incidents/index/index.js | 5 + .../pages/projects/issues/index/index.js | 1 + .../issues/service_desk/filtered_search.js | 1 + .../pages/projects/issues/service_desk/index.js | 10 +- .../javascripts/pages/projects/issues/show.js | 14 +- .../labels/components/promote_label_modal.vue | 41 +- .../pages/projects/merge_requests/index/index.js | 1 + .../merge_requests/init_merge_request_show.js | 7 - .../pages/projects/merge_requests/show/index.js | 3 + app/assets/javascripts/pages/projects/new/index.js | 2 +- .../projects/packages/packages/index/index.js | 7 + .../pages/projects/packages/packages/show/index.js | 3 + .../pages/projects/pipelines/new/index.js | 17 +- .../projects/product_analytics/graphs/index.js | 3 + app/assets/javascripts/pages/projects/project.js | 2 +- .../pages/projects/settings/ci_cd/show/index.js | 2 + .../pages/projects/settings/repository/form.js | 2 +- .../permissions/mixins/settings_pannel_mixin.js | 1 - .../javascripts/pages/projects/show/index.js | 2 +- .../javascripts/pages/projects/tree/show/index.js | 2 +- .../javascripts/pages/registrations/new/index.js | 11 - .../pages/search/init_filtered_search.js | 2 + app/assets/javascripts/pages/search/show/search.js | 2 +- app/assets/javascripts/pages/sessions/new/index.js | 14 - .../pages/sessions/new/username_validator.js | 2 +- .../javascripts/pages/users/activity_calendar.js | 2 +- app/assets/javascripts/pages/users/user_tabs.js | 2 +- app/assets/javascripts/performance_constants.js | 12 + app/assets/javascripts/persistent_user_callout.js | 2 +- app/assets/javascripts/persistent_user_callouts.js | 1 - .../pipeline_new/components/pipeline_new_form.vue | 247 +++++++ app/assets/javascripts/pipeline_new/constants.js | 2 + app/assets/javascripts/pipeline_new/index.js | 36 + .../javascripts/pipelines/components/dag/dag.vue | 115 +-- .../pipelines/components/dag/parsing_utils.js | 50 +- .../components/graph/action_component.vue | 12 +- .../pipelines/components/graph/graph_component.vue | 2 +- .../pipelines/components/graph/linked_pipeline.vue | 20 +- .../components/graph/linked_pipelines_column.vue | 2 +- .../pipelines/components/header_component.vue | 43 +- .../components/pipelines_list/empty_state.vue | 11 +- .../components/pipelines_list/pipeline_url.vue | 66 +- .../components/pipelines_list/pipelines.vue | 2 +- .../pipelines_list/pipelines_actions.vue | 2 +- .../pipelines_list/pipelines_filtered_search.vue | 2 +- .../pipelines/components/pipelines_list/stage.vue | 2 +- .../tokens/pipeline_branch_name_token.vue | 4 +- .../tokens/pipeline_tag_name_token.vue | 4 +- .../tokens/pipeline_trigger_author_token.vue | 10 +- .../components/test_reports/test_reports.vue | 10 +- .../components/test_reports/test_suite_table.vue | 24 +- .../components/test_reports/test_summary_table.vue | 2 +- app/assets/javascripts/pipelines/event_hub.js | 4 +- .../graphql/queries/get_dag_vis_data.query.graphql | 27 + .../mixins/graph_pipeline_bundle_mixin.js | 2 +- .../javascripts/pipelines/mixins/pipelines.js | 2 +- .../pipelines/pipeline_details_bundle.js | 69 +- .../javascripts/pipelines/pipeline_details_dag.js | 39 + .../pipelines/pipeline_details_mediator.js | 2 +- .../pipelines/stores/test_reports/actions.js | 45 +- .../pipelines/stores/test_reports/getters.js | 3 - .../stores/test_reports/mutation_types.js | 2 +- .../pipelines/stores/test_reports/mutations.js | 33 +- .../pipelines/stores/test_reports/state.js | 10 +- app/assets/javascripts/pipelines/utils.js | 3 +- .../account/components/delete_account_modal.vue | 1 + .../profile/account/components/update_username.vue | 2 +- app/assets/javascripts/profile/profile.js | 2 +- app/assets/javascripts/project_find_file.js | 4 +- app/assets/javascripts/project_fork.js | 9 - .../javascripts/project_label_subscription.js | 2 +- app/assets/javascripts/project_select.js | 2 +- .../javascripts/projects/commits/store/actions.js | 2 +- .../projects/components/project_delete_button.vue | 52 ++ .../projects/components/remove_modal.vue | 108 --- .../projects/components/shared/delete_button.vue | 101 +++ .../components/app.vue | 2 +- .../components/welcome.vue | 2 +- .../projects/pipelines/charts/components/app.vue | 2 +- .../javascripts/projects/project_delete_button.js | 23 + app/assets/javascripts/projects/project_new.js | 2 +- .../javascripts/projects/project_remove_modal.js | 24 - .../projects/settings/access_dropdown.js | 524 ++++++++++++++ .../javascripts/projects/settings/constants.js | 13 + .../components/service_desk_setting.vue | 10 +- .../commit_pipeline_status_component.vue | 2 +- .../prometheus_alerts/components/reset_key.vue | 31 +- .../prometheus_metrics/prometheus_metrics.js | 9 +- .../javascripts/protected_branches/constants.js | 18 + .../protected_branch_access_dropdown.js | 28 - .../protected_branches/protected_branch_create.js | 109 ++- .../protected_branches/protected_branch_edit.js | 171 +++-- .../protected_branch_edit_list.js | 1 + .../protected_tags/protected_tag_edit.js | 2 +- .../ref/components/ref_results_section.vue | 2 +- .../javascripts/ref/components/ref_selector.vue | 16 +- .../components/details_page/details_row.vue | 26 - .../components/details_page/tags_list_row.vue | 2 +- .../registry/explorer/components/list_item.vue | 4 +- .../explorer/components/list_page/cli_commands.vue | 8 +- .../components/list_page/image_list_row.vue | 4 +- .../components/list_page/registry_header.vue | 2 +- .../registry/explorer/pages/details.vue | 2 +- .../javascripts/registry/explorer/pages/index.vue | 4 +- .../javascripts/registry/explorer/pages/list.vue | 2 +- .../registry/explorer/stores/actions.js | 4 +- .../javascripts/registry/settings/store/actions.js | 3 - .../registry/shared/components/details_row.vue | 42 ++ .../related_merge_requests/store/actions.js | 5 +- .../javascripts/releases/components/app_edit.vue | 220 ------ .../releases/components/app_edit_new.vue | 194 +++++ .../javascripts/releases/components/app_new.vue | 9 - .../releases/components/asset_links_form.vue | 14 +- .../releases/components/form_field_container.vue | 12 + .../releases/components/release_block_assets.vue | 4 +- .../releases/components/release_block_author.vue | 2 +- .../components/release_block_milestone_info.vue | 2 +- .../javascripts/releases/components/tag_field.vue | 20 + .../releases/components/tag_field_existing.vue | 51 ++ .../releases/components/tag_field_new.vue | 100 +++ app/assets/javascripts/releases/mount_edit.js | 4 +- app/assets/javascripts/releases/mount_new.js | 7 +- .../releases/stores/modules/detail/actions.js | 167 +++-- .../releases/stores/modules/detail/getters.js | 15 +- .../stores/modules/detail/mutation_types.js | 10 +- .../releases/stores/modules/detail/mutations.js | 26 +- .../releases/stores/modules/detail/state.js | 10 +- .../releases/stores/modules/list/actions.js | 5 +- app/assets/javascripts/releases/util.js | 41 ++ .../reports/accessibility_report/store/actions.js | 3 - .../reports/accessibility_report/store/getters.js | 3 - .../components/grouped_test_reports_app.vue | 5 +- .../javascripts/reports/components/modal.vue | 2 +- .../reports/components/modal_open_name.vue | 22 +- app/assets/javascripts/reports/store/actions.js | 3 - app/assets/javascripts/reports/store/getters.js | 4 +- .../repository/components/breadcrumbs.vue | 37 +- .../repository/components/last_commit.vue | 22 +- .../repository/components/preview/index.vue | 8 +- .../repository/components/table/index.vue | 6 +- .../repository/components/table/row.vue | 4 +- .../repository/components/tree_content.vue | 46 +- app/assets/javascripts/repository/index.js | 3 +- app/assets/javascripts/repository/log_tree.js | 14 +- .../javascripts/repository/mixins/get_ref.js | 4 +- .../javascripts/repository/mixins/preload.js | 8 +- .../repository/queries/commit.query.graphql | 7 + .../repository/queries/commits.query.graphql | 7 + .../repository/queries/files.query.graphql | 60 ++ .../repository/queries/getCommit.query.graphql | 7 - .../repository/queries/getCommits.query.graphql | 7 - .../repository/queries/getFiles.query.graphql | 60 -- .../queries/getPermissions.query.graphql | 9 - .../queries/getProjectPath.query.graphql | 3 - .../queries/getProjectShortPath.query.graphql | 3 - .../repository/queries/getReadme.query.graphql | 5 - .../repository/queries/getRef.query.graphql | 4 - .../queries/pathLastCommit.query.graphql | 38 - .../queries/path_last_commit.query.graphql | 38 + .../repository/queries/permissions.query.graphql | 9 + .../repository/queries/project_path.query.graphql | 3 + .../queries/project_short_path.query.graphql | 3 + .../repository/queries/readme.query.graphql | 5 + .../repository/queries/ref.query.graphql | 4 + app/assets/javascripts/right_sidebar.js | 2 +- app/assets/javascripts/search_autocomplete.js | 10 + .../components/sentry_error_stack_trace.vue | 2 +- .../serverless/components/empty_state.vue | 62 +- .../serverless/components/function_details.vue | 10 - .../serverless/components/functions.vue | 27 +- .../serverless/components/missing_prometheus.vue | 10 +- .../javascripts/serverless/serverless_bundle.js | 26 +- app/assets/javascripts/serverless/store/actions.js | 5 +- app/assets/javascripts/serverless/store/getters.js | 3 - app/assets/javascripts/serverless/store/index.js | 6 +- app/assets/javascripts/serverless/store/state.js | 10 +- .../javascripts/serverless/survey_banner.vue | 2 +- app/assets/javascripts/serverless/utils.js | 3 - .../set_status_modal/set_status_modal_wrapper.vue | 2 +- .../components/assignees/sidebar_assignees.vue | 2 +- .../confidential/confidential_issue_sidebar.vue | 60 +- .../sidebar/components/confidential/edit_form.vue | 38 +- .../components/confidential/edit_form_buttons.vue | 38 +- .../update_issue_confidential.mutation.graphql | 8 + .../update_issue_confidential.mutation.graphql | 7 - .../sidebar/components/lock/edit_form.vue | 62 +- .../sidebar/components/lock/edit_form_buttons.vue | 57 +- .../sidebar/components/lock/issuable_lock_form.vue | 129 ++++ .../sidebar/components/lock/lock_issue_sidebar.vue | 140 ---- .../mutations/update_issue_lock.mutation.graphql | 8 + .../update_merge_request_lock.mutation.graphql | 8 + .../subscriptions/sidebar_subscriptions.vue | 2 +- .../components/time_tracking/time_tracker.vue | 4 +- .../sidebar/components/todo_toggle/todo.vue | 2 +- app/assets/javascripts/sidebar/mount_sidebar.js | 33 +- .../sidebar/services/sidebar_service.js | 4 +- app/assets/javascripts/sidebar/sidebar_mediator.js | 2 +- app/assets/javascripts/single_file_diff.js | 2 +- .../javascripts/snippets/components/edit.vue | 87 +-- .../javascripts/snippets/components/show.vue | 25 +- .../components/snippet_blob_actions_edit.vue | 156 ++++ .../snippets/components/snippet_blob_edit.vue | 104 ++- .../snippets/components/snippet_blob_view.vue | 28 +- .../snippets/components/snippet_header.vue | 35 +- app/assets/javascripts/snippets/constants.js | 3 + app/assets/javascripts/snippets/index.js | 4 +- app/assets/javascripts/snippets/mixins/snippets.js | 3 +- .../queries/snippet.blob.content.query.graphql | 3 +- app/assets/javascripts/snippets/utils/blob.js | 66 ++ app/assets/javascripts/star.js | 2 +- .../static_site_editor/components/app.vue | 12 +- .../static_site_editor/components/edit_area.vue | 18 +- .../components/saved_changes_message.vue | 79 --- .../static_site_editor/image_repository.js | 2 +- app/assets/javascripts/static_site_editor/index.js | 15 +- .../javascripts/static_site_editor/pages/home.vue | 2 +- .../static_site_editor/pages/success.vue | 72 +- .../static_site_editor/services/formatter.js | 14 + .../static_site_editor/services/templater.js | 89 +++ app/assets/javascripts/task_list.js | 2 +- app/assets/javascripts/toggle_buttons.js | 2 +- app/assets/javascripts/usage_ping_consent.js | 2 +- app/assets/javascripts/user_popovers.js | 2 +- app/assets/javascripts/users_select/index.js | 8 +- .../components/approvals/approvals.vue | 2 +- .../approvals/approvals_summary_optional.vue | 11 +- .../components/approvals/messages.js | 2 - .../components/deployment/deployment_actions.vue | 2 +- .../deployment/deployment_view_button.vue | 16 +- .../components/mr_widget_expandable_section.vue | 2 +- .../components/mr_widget_pipeline.vue | 3 - .../components/mr_widget_suggest_pipeline.vue | 75 +- .../components/source_branch_removal_status.vue | 27 +- .../components/states/commit_message_dropdown.vue | 14 +- .../states/mr_widget_auto_merge_enabled.vue | 2 +- .../components/states/mr_widget_merged.vue | 2 +- .../components/states/mr_widget_rebase.vue | 2 +- .../components/states/ready_to_merge.vue | 73 +- .../components/states/squash_before_merge.vue | 2 +- .../components/states/unresolved_discussions.vue | 37 +- .../components/states/work_in_progress.vue | 156 +++- .../terraform/mr_widget_terraform_container.vue | 2 +- .../components/terraform/terraform_plan.vue | 2 +- .../vue_merge_request_widget/constants.js | 15 + .../javascripts/vue_merge_request_widget/index.js | 2 +- .../mixins/merge_request_query_variables.js | 10 + .../mixins/ready_to_merge.js | 3 + .../vue_merge_request_widget/mr_widget_options.vue | 39 +- .../queries/get_state.query.graphql | 8 + .../queries/states/work_in_progress.query.graphql | 9 + .../queries/toggle_wip.mutation.graphql | 9 + .../stores/artifacts_list/actions.js | 3 - .../stores/artifacts_list/getters.js | 4 +- .../stores/get_state_key.js | 12 +- .../stores/mr_widget_store.js | 27 +- .../vue_shared/components/blob_viewers/mixins.js | 16 + .../components/blob_viewers/simple_viewer.vue | 2 +- .../vue_shared/components/clone_dropdown.vue | 2 +- .../vue_shared/components/confirm_modal.vue | 2 +- .../content_viewer/viewers/download_viewer.vue | 2 +- .../content_viewer/viewers/markdown_viewer.vue | 2 +- .../date_time_picker/date_time_picker.vue | 40 +- .../components/dismissible_container.vue | 54 ++ .../components/dismissible_feedback_alert.vue | 66 ++ .../vue_shared/components/expand_button.vue | 20 +- .../vue_shared/components/file_icon.vue | 2 +- .../components/file_icon/file_icon_map.js | 13 +- .../components/filtered_search_bar/constants.js | 15 + .../filtered_search_bar_root.vue | 62 +- .../filtered_search_bar/filtered_search_utils.js | 4 + .../filtered_search_bar/tokens/author_token.vue | 8 +- .../filtered_search_bar/tokens/label_token.vue | 126 ++++ .../filtered_search_bar/tokens/milestone_token.vue | 110 +++ .../vue_shared/components/gl_mentions.vue | 224 +++--- .../vue_shared/components/header_ci_component.vue | 2 +- .../javascripts/vue_shared/components/icon.vue | 7 +- .../issuable/init_issuable_header_warning.js | 12 + .../issuable/issuable_header_warnings.vue | 43 ++ .../components/issue/issue_assignees.vue | 6 +- .../components/issue/related_issuable_item.vue | 35 +- .../vue_shared/components/markdown/field.vue | 8 +- .../vue_shared/components/markdown/header.vue | 41 +- .../vue_shared/components/markdown/suggestions.vue | 2 +- .../components/rich_content_editor/constants.js | 9 +- .../modals/add_image/add_image_modal.vue | 2 +- .../modals/add_image/upload_image_tab.vue | 2 +- .../rich_content_editor/rich_content_editor.vue | 17 +- .../services/build_custom_renderer.js | 61 +- .../services/build_html_to_markdown_renderer.js | 39 +- .../rich_content_editor/services/editor_service.js | 10 + .../services/renderers/build_uneditable_token.js | 2 +- .../renderers/render_embedded_ruby_text.js | 6 +- .../renderers/render_identifier_paragraph.js | 5 +- .../services/renderers/render_kramdown_list.js | 5 +- .../services/renderers/render_kramdown_text.js | 6 +- .../services/renderers/render_softbreak.js | 7 + .../services/renderers/render_utils.js | 10 + .../sidebar/labels_select/dropdown_button.vue | 4 +- .../labels_select/dropdown_search_input.vue | 4 +- .../sidebar/labels_select/dropdown_title.vue | 2 +- .../sidebar/labels_select_vue/dropdown_button.vue | 7 +- .../labels_select_vue/dropdown_contents.vue | 15 + .../dropdown_contents_create_view.vue | 4 +- .../dropdown_contents_labels_view.vue | 26 +- .../sidebar/labels_select_vue/dropdown_title.vue | 12 +- .../labels_select_vue/labels_select_root.vue | 24 + .../sidebar/labels_select_vue/store/actions.js | 5 +- .../sidebar/labels_select_vue/store/getters.js | 3 - .../vue_shared/components/split_button.vue | 22 +- .../vue_shared/components/time_ago_tooltip.vue | 10 +- .../vue_shared/components/timezone_dropdown.vue | 102 +++ .../vue_shared/components/toggle_button.vue | 20 +- .../components/user_avatar/user_avatar_list.vue | 12 +- .../components/user_popover/user_popover.vue | 14 +- app/assets/javascripts/vue_shared/constants.js | 4 +- app/assets/javascripts/vuex_shared/bindings.js | 3 +- .../vuex_shared/modules/modal/actions.js | 3 - .../javascripts/whats_new/components/app.vue | 29 + .../javascripts/whats_new/components/trigger.vue | 19 + app/assets/javascripts/whats_new/index.js | 32 + app/assets/javascripts/whats_new/store/actions.js | 10 + app/assets/javascripts/whats_new/store/index.js | 13 + .../javascripts/whats_new/store/mutation_types.js | 2 + .../javascripts/whats_new/store/mutations.js | 10 + app/assets/javascripts/whats_new/store/state.js | 3 + app/assets/stylesheets/application.scss | 8 +- app/assets/stylesheets/components/avatar.scss | 2 +- .../stylesheets/components/dashboard_skeleton.scss | 6 +- .../components/design_management/design.scss | 4 +- .../design_management/design_list_item.scss | 9 - .../stylesheets/components/related_items_list.scss | 24 +- .../components/rich_content_editor.scss | 6 +- app/assets/stylesheets/fontawesome_custom.scss | 332 +++++++++ app/assets/stylesheets/framework/awards.scss | 2 +- app/assets/stylesheets/framework/badges.scss | 2 +- .../stylesheets/framework/broadcast_messages.scss | 2 +- app/assets/stylesheets/framework/buttons.scss | 6 +- .../stylesheets/framework/ci_variable_list.scss | 3 +- app/assets/stylesheets/framework/common.scss | 12 +- app/assets/stylesheets/framework/dropdowns.scss | 1 + .../stylesheets/framework/feature_highlight.scss | 6 - app/assets/stylesheets/framework/files.scss | 2 +- app/assets/stylesheets/framework/filters.scss | 42 +- app/assets/stylesheets/framework/forms.scss | 2 +- app/assets/stylesheets/framework/gitlab_theme.scss | 12 +- app/assets/stylesheets/framework/icons.scss | 6 +- app/assets/stylesheets/framework/images.scss | 8 + app/assets/stylesheets/framework/lists.scss | 6 +- app/assets/stylesheets/framework/mixins.scss | 4 +- .../stylesheets/framework/responsive_tables.scss | 2 +- .../framework/secondary_navigation_elements.scss | 4 - app/assets/stylesheets/framework/selects.scss | 2 +- app/assets/stylesheets/framework/sidebar.scss | 7 +- app/assets/stylesheets/framework/snippets.scss | 4 + app/assets/stylesheets/framework/spinner.scss | 2 +- .../framework/stacked_progress_bar.scss | 4 +- app/assets/stylesheets/framework/tables.scss | 4 +- app/assets/stylesheets/framework/toggle.scss | 51 +- app/assets/stylesheets/framework/typography.scss | 6 +- app/assets/stylesheets/framework/variables.scss | 31 +- .../page_bundles/_ide_theme_overrides.scss | 2 +- app/assets/stylesheets/page_bundles/ide.scss | 11 +- .../pages/alert_management/details.scss | 6 +- .../stylesheets/pages/alert_management/list.scss | 85 --- .../pages/alert_management/severity-icons.scss | 4 +- app/assets/stylesheets/pages/boards.scss | 34 +- app/assets/stylesheets/pages/builds.scss | 4 +- app/assets/stylesheets/pages/clusters.scss | 2 +- app/assets/stylesheets/pages/commits.scss | 6 + app/assets/stylesheets/pages/diff.scss | 3 +- app/assets/stylesheets/pages/editor.scss | 11 +- app/assets/stylesheets/pages/environments.scss | 9 - app/assets/stylesheets/pages/graph.scss | 4 +- .../pages/incident_management_list.scss | 135 ++++ app/assets/stylesheets/pages/issuable.scss | 20 +- app/assets/stylesheets/pages/labels.scss | 4 +- app/assets/stylesheets/pages/members.scss | 4 - app/assets/stylesheets/pages/merge_requests.scss | 7 +- app/assets/stylesheets/pages/note_form.scss | 4 +- app/assets/stylesheets/pages/notes.scss | 29 +- app/assets/stylesheets/pages/packages.scss | 11 + app/assets/stylesheets/pages/pipelines.scss | 39 +- app/assets/stylesheets/pages/projects.scss | 35 +- app/assets/stylesheets/pages/prometheus.scss | 21 +- app/assets/stylesheets/pages/reports.scss | 2 +- app/assets/stylesheets/pages/runners.scss | 4 - app/assets/stylesheets/pages/search.scss | 2 +- app/assets/stylesheets/pages/settings.scss | 5 +- app/assets/stylesheets/pages/status.scss | 4 +- app/assets/stylesheets/pages/todos.scss | 4 + app/assets/stylesheets/pages/tree.scss | 6 - app/assets/stylesheets/pages/users.scss | 6 +- app/assets/stylesheets/startup/_cloaking.scss | 13 + .../stylesheets/startup/startup-general.scss | 5 + app/assets/stylesheets/utilities.scss | 10 +- .../admin/application_settings_controller.rb | 10 +- app/controllers/admin/integrations_controller.rb | 2 +- app/controllers/admin/services_controller.rb | 3 - app/controllers/clusters/base_controller.rb | 4 - .../concerns/authenticates_with_two_factor.rb | 12 +- app/controllers/concerns/checks_collaboration.rb | 2 +- .../concerns/graceful_timeout_handling.rb | 15 + app/controllers/concerns/integrations_actions.rb | 3 - app/controllers/concerns/issuable_collections.rb | 2 +- app/controllers/concerns/packages_access.rb | 20 + app/controllers/concerns/paginated_collection.rb | 2 +- app/controllers/concerns/renders_blob.rb | 8 +- app/controllers/concerns/send_file_upload.rb | 21 +- app/controllers/concerns/snippets_actions.rb | 22 +- app/controllers/concerns/wiki_actions.rb | 10 +- app/controllers/dashboard/projects_controller.rb | 2 +- app/controllers/dashboard/todos_controller.rb | 2 - app/controllers/explore/projects_controller.rb | 2 +- app/controllers/groups/packages_controller.rb | 13 + app/controllers/groups/releases_controller.rb | 23 + app/controllers/groups/variables_controller.rb | 7 +- .../import/available_namespaces_controller.rb | 7 + app/controllers/import/base_controller.rb | 8 +- app/controllers/import/gitea_controller.rb | 10 + app/controllers/import/github_controller.rb | 76 +- app/controllers/import/manifest_controller.rb | 57 +- app/controllers/invites_controller.rb | 46 +- app/controllers/omniauth_callbacks_controller.rb | 7 + app/controllers/profiles/passwords_controller.rb | 2 +- .../profiles/personal_access_tokens_controller.rb | 8 +- app/controllers/projects/artifacts_controller.rb | 2 +- app/controllers/projects/blob_controller.rb | 2 - app/controllers/projects/ci/lints_controller.rb | 34 +- app/controllers/projects/commit_controller.rb | 8 +- .../projects/cycle_analytics/events_controller.rb | 1 + .../projects/cycle_analytics_controller.rb | 1 + .../projects/environments_controller.rb | 15 +- app/controllers/projects/forks_controller.rb | 14 +- app/controllers/projects/incidents_controller.rb | 8 + app/controllers/projects/issues_controller.rb | 20 +- .../projects/merge_requests/diffs_controller.rb | 2 +- .../projects/merge_requests_controller.rb | 19 +- .../metrics/dashboards/builder_controller.rb | 42 ++ .../projects/metrics_dashboard_controller.rb | 3 +- .../projects/packages/package_files_controller.rb | 16 + .../projects/packages/packages_controller.rb | 24 + .../projects/pipelines/tests_controller.rb | 19 +- app/controllers/projects/pipelines_controller.rb | 11 +- .../projects/product_analytics_controller.rb | 53 ++ .../projects/prometheus/alerts_controller.rb | 8 +- .../projects/protected_refs_controller.rb | 2 +- app/controllers/projects/releases_controller.rb | 2 +- app/controllers/projects/services_controller.rb | 1 - .../projects/settings/operations_controller.rb | 6 +- .../projects/snippets/blobs_controller.rb | 2 +- app/controllers/projects/snippets_controller.rb | 4 + app/controllers/projects/variables_controller.rb | 7 +- app/controllers/projects_controller.rb | 8 + .../registrations/experience_levels_controller.rb | 4 +- app/controllers/registrations_controller.rb | 14 +- .../repositories/git_http_controller.rb | 2 +- .../repositories/lfs_storage_controller.rb | 5 +- app/controllers/root_controller.rb | 5 + app/controllers/search_controller.rb | 14 +- app/controllers/sessions_controller.rb | 7 +- app/controllers/snippets_controller.rb | 4 + .../ci/daily_build_group_report_results_finder.rb | 16 +- app/finders/concerns/merged_at_filter.rb | 33 + app/finders/context_commits_finder.rb | 4 +- app/finders/design_management/designs_finder.rb | 7 +- app/finders/group_members_finder.rb | 2 +- app/finders/issues_finder.rb | 10 + app/finders/members_finder.rb | 8 +- app/finders/merge_requests_finder.rb | 27 +- app/finders/milestones_finder.rb | 8 + app/finders/personal_access_tokens_finder.rb | 13 +- app/finders/releases_finder.rb | 41 +- app/finders/template_finder.rb | 9 +- app/finders/todos_finder.rb | 10 +- app/graphql/gitlab_schema.rb | 16 + .../mutations/boards/issues/issue_move_list.rb | 91 +++ app/graphql/mutations/boards/lists/base.rb | 28 + app/graphql/mutations/boards/lists/create.rb | 73 ++ app/graphql/mutations/boards/lists/update.rb | 52 ++ .../mutations/concerns/mutations/assignable.rb | 52 ++ .../concerns/mutations/resolves_subscription.rb | 25 + app/graphql/mutations/design_management/move.rb | 46 ++ app/graphql/mutations/issues/base.rb | 2 +- app/graphql/mutations/issues/set_assignees.rb | 15 + app/graphql/mutations/issues/set_subscription.rb | 11 + app/graphql/mutations/issues/update.rb | 21 + app/graphql/mutations/merge_requests/create.rb | 17 +- .../mutations/merge_requests/set_assignees.rb | 39 +- .../mutations/merge_requests/set_subscription.rb | 17 +- app/graphql/mutations/notes/update/base.rb | 2 +- app/graphql/mutations/notes/update/note.rb | 7 +- app/graphql/mutations/snippets/create.rb | 8 +- app/graphql/mutations/snippets/update.rb | 8 +- .../resolvers/board_list_issues_resolver.rb | 19 + app/graphql/resolvers/board_lists_resolver.rb | 23 +- .../resolvers/ci/pipeline_stages_resolver.rb | 21 + .../resolvers/ci_configuration/sast_resolver.rb | 17 - .../resolvers/concerns/issue_resolver_fields.rb | 77 ++ .../resolvers/concerns/resolves_merge_requests.rb | 3 + .../design_management/designs_resolver.rb | 9 +- app/graphql/resolvers/group_issues_resolver.rb | 10 + app/graphql/resolvers/group_milestones_resolver.rb | 28 + .../resolvers/issue_status_counts_resolver.rb | 13 + app/graphql/resolvers/issues_resolver.rb | 61 +- app/graphql/resolvers/merge_requests_resolver.rb | 6 + app/graphql/resolvers/milestone_resolver.rb | 71 -- app/graphql/resolvers/milestones_resolver.rb | 55 ++ .../resolvers/project_milestones_resolver.rb | 20 + app/graphql/resolvers/project_pipeline_resolver.rb | 2 +- .../resolvers/projects/jira_projects_resolver.rb | 9 +- app/graphql/resolvers/todo_resolver.rb | 16 +- app/graphql/types/alert_management/alert_type.rb | 26 +- app/graphql/types/board_list_type.rb | 27 + app/graphql/types/ci/group_type.rb | 17 + app/graphql/types/ci/job_type.rb | 15 + .../types/ci/pipeline_config_source_enum.rb | 11 + app/graphql/types/ci/pipeline_type.rb | 13 +- app/graphql/types/ci/stage_type.rb | 15 + .../ci_configuration/sast/analyzers_entity_type.rb | 25 - .../types/ci_configuration/sast/entity_type.rb | 34 - .../ci_configuration/sast/options_entity_type.rb | 19 - app/graphql/types/ci_configuration/sast/type.rb | 22 - app/graphql/types/commit_type.rb | 3 + app/graphql/types/countable_connection_type.rb | 24 + app/graphql/types/environment_type.rb | 5 + app/graphql/types/group_type.rb | 6 +- app/graphql/types/issuable_state_enum.rb | 1 + app/graphql/types/issue_connection_type.rb | 13 - app/graphql/types/issue_status_counts_type.rb | 23 + app/graphql/types/issue_type.rb | 6 +- app/graphql/types/issue_type_enum.rb | 12 + app/graphql/types/merge_request_type.rb | 13 + app/graphql/types/mutation_type.rb | 6 + app/graphql/types/project_type.rb | 18 +- .../types/projects/services/jira_service_type.rb | 2 - app/graphql/types/prometheus_alert_type.rb | 20 + app/graphql/types/query_type.rb | 9 + app/graphql/types/snippet_type.rb | 3 +- app/graphql/types/snippets/blob_action_enum.rb | 15 + .../types/snippets/blob_action_input_type.rb | 26 + .../types/snippets/file_input_action_enum.rb | 15 - app/graphql/types/snippets/file_input_type.rb | 26 - app/graphql/types/time_type.rb | 2 + app/graphql/types/tree/blob_type.rb | 2 + app/graphql/types/tree/tree_entry_type.rb | 2 + app/graphql/types/user_status_type.rb | 15 + app/graphql/types/user_type.rb | 6 + app/helpers/active_sessions_helper.rb | 2 +- app/helpers/application_helper.rb | 16 + app/helpers/application_settings_helper.rb | 3 +- app/helpers/award_emoji_helper.rb | 2 +- app/helpers/blob_helper.rb | 36 +- app/helpers/branches_helper.rb | 8 + app/helpers/ci/pipelines_helper.rb | 18 + app/helpers/clusters_helper.rb | 12 + app/helpers/custom_metrics_helper.rb | 4 +- app/helpers/dashboard_helper.rb | 2 +- app/helpers/environment_helper.rb | 2 +- app/helpers/environments_helper.rb | 7 +- app/helpers/events_helper.rb | 3 +- app/helpers/form_helper.rb | 2 +- app/helpers/gitlab_routing_helper.rb | 30 +- app/helpers/graph_helper.rb | 2 +- app/helpers/groups_helper.rb | 12 +- app/helpers/icons_helper.rb | 25 +- app/helpers/import_helper.rb | 2 +- app/helpers/issuables_helper.rb | 9 +- app/helpers/issues_helper.rb | 2 +- app/helpers/merge_requests_helper.rb | 6 - app/helpers/mirror_helper.rb | 2 +- .../namespace_storage_limit_alert_helper.rb | 9 + app/helpers/notes_helper.rb | 16 +- app/helpers/notifications_helper.rb | 4 - app/helpers/operations_helper.rb | 2 +- app/helpers/packages_helper.rb | 59 ++ app/helpers/preferences_helper.rb | 2 +- app/helpers/product_analytics_helper.rb | 11 + app/helpers/projects/alert_management_helper.rb | 3 +- app/helpers/projects/incidents_helper.rb | 16 + app/helpers/projects/issues/service_desk_helper.rb | 35 + app/helpers/projects_helper.rb | 44 +- app/helpers/releases_helper.rb | 5 +- app/helpers/search_helper.rb | 1 + app/helpers/services_helper.rb | 27 - app/helpers/snippets_helper.rb | 15 +- app/helpers/sorting_helper.rb | 43 +- app/helpers/timeboxes_helper.rb | 6 +- app/helpers/todos_helper.rb | 3 +- app/helpers/user_callouts_helper.rb | 12 +- app/helpers/wiki_helper.rb | 2 +- app/mailers/emails/profile.rb | 11 + app/models/alert_management/alert.rb | 2 + app/models/application_record.rb | 8 +- app/models/application_setting.rb | 10 +- app/models/application_setting_implementation.rb | 70 +- app/models/audit_event.rb | 8 +- app/models/audit_event_partitioned.rb | 14 + app/models/blob.rb | 2 + app/models/ci/build.rb | 68 +- app/models/ci/build_trace_chunk.rb | 39 +- app/models/ci/build_trace_chunks/database.rb | 18 +- app/models/ci/build_trace_chunks/fog.rb | 20 +- app/models/ci/build_trace_chunks/redis.rb | 38 + app/models/ci/group.rb | 12 +- app/models/ci/instance_variable.rb | 10 +- app/models/ci/job_artifact.rb | 41 +- app/models/ci/legacy_stage.rb | 2 +- app/models/ci/pipeline.rb | 86 +-- app/models/ci/pipeline_artifact.rb | 37 + app/models/ci/pipeline_enums.rb | 4 + app/models/ci/ref.rb | 12 +- app/models/ci/runner.rb | 2 +- app/models/ci/stage.rb | 4 +- app/models/clusters/agent.rb | 20 + app/models/clusters/agent_token.rb | 14 + app/models/clusters/applications/cert_manager.rb | 6 +- app/models/clusters/applications/crossplane.rb | 3 +- app/models/clusters/applications/elastic_stack.rb | 9 +- app/models/clusters/applications/fluentd.rb | 3 +- app/models/clusters/applications/helm.rb | 6 +- app/models/clusters/applications/ingress.rb | 5 +- app/models/clusters/applications/jupyter.rb | 3 +- app/models/clusters/applications/knative.rb | 6 +- app/models/clusters/applications/prometheus.rb | 9 +- app/models/clusters/applications/runner.rb | 5 +- app/models/clusters/cluster.rb | 31 +- app/models/clusters/concerns/application_core.rb | 2 +- app/models/clusters/concerns/application_data.rb | 17 +- app/models/clusters/concerns/application_status.rb | 20 +- app/models/clusters/providers/aws.rb | 3 + app/models/commit.rb | 1 - app/models/commit_collection.rb | 5 +- app/models/commit_status.rb | 30 +- app/models/commit_status_enums.rb | 3 +- app/models/concerns/avatarable.rb | 11 + app/models/concerns/cache_markdown_field.rb | 8 + app/models/concerns/ci/artifactable.rb | 20 + app/models/concerns/ci/contextable.rb | 20 +- app/models/concerns/ci/has_status.rb | 58 +- app/models/concerns/counter_attribute.rb | 143 ++++ app/models/concerns/file_store_mounter.rb | 21 + app/models/concerns/has_wiki.rb | 2 +- app/models/concerns/issuable.rb | 4 +- app/models/concerns/milestoneable.rb | 2 +- app/models/concerns/relative_positioning.rb | 403 +++++++++-- app/models/concerns/sha_attribute.rb | 13 +- app/models/concerns/time_trackable.rb | 2 + app/models/concerns/triggerable_hooks.rb | 3 +- app/models/concerns/update_project_statistics.rb | 2 +- app/models/deployment.rb | 1 + app/models/design_management/design.rb | 36 +- app/models/design_management/design_collection.rb | 4 + app/models/discussion.rb | 1 + app/models/environment.rb | 5 + app/models/event.rb | 7 + app/models/experiment.rb | 27 + app/models/experiment_user.rb | 10 + app/models/external_pull_request.rb | 2 + app/models/group.rb | 10 + app/models/group_deploy_key.rb | 22 + app/models/group_deploy_keys_group.rb | 10 + app/models/hooks/project_hook.rb | 3 +- app/models/individual_note_discussion.rb | 8 +- app/models/issue.rb | 31 +- app/models/iteration.rb | 8 + app/models/lfs_object.rb | 11 +- app/models/member.rb | 1 + app/models/merge_request.rb | 40 +- app/models/merge_request/metrics.rb | 13 +- app/models/merge_request_context_commit.rb | 3 + app/models/merge_request_diff.rb | 47 +- app/models/milestone.rb | 2 +- app/models/network/graph.rb | 8 +- app/models/note.rb | 8 +- app/models/notification_recipient.rb | 13 +- app/models/notification_setting.rb | 9 +- app/models/packages/package_file.rb | 15 +- app/models/pages_domain.rb | 10 +- app/models/personal_access_token.rb | 1 + app/models/personal_snippet.rb | 4 + app/models/postgresql/replication_slot.rb | 2 +- app/models/product_analytics_event.rb | 8 + app/models/project.rb | 70 +- app/models/project_repository_storage_move.rb | 13 +- app/models/project_services/buildkite_service.rb | 37 +- .../gitlab_issue_tracker_service.rb | 45 -- app/models/project_services/jira_service.rb | 7 +- app/models/project_services/jira_tracker_data.rb | 2 + app/models/project_services/prometheus_service.rb | 8 +- app/models/prometheus_alert.rb | 8 +- app/models/raw_usage_data.rb | 10 + app/models/release.rb | 10 +- app/models/releases/link.rb | 2 +- app/models/repository.rb | 52 +- app/models/resource_iteration_event.rb | 5 + app/models/resource_milestone_event.rb | 19 +- app/models/resource_timebox_event.rb | 23 + app/models/service.rb | 19 +- app/models/suggestion.rb | 22 +- app/models/terraform/state.rb | 17 +- app/models/user.rb | 17 +- app/models/user_callout_enums.rb | 4 +- app/models/wiki.rb | 1 + app/models/wiki_page.rb | 28 +- app/policies/ci/build_policy.rb | 2 +- app/policies/ci/pipeline_policy.rb | 2 +- app/policies/concerns/crud_policy_helpers.rb | 10 +- app/policies/concerns/readonly_abilities.rb | 52 ++ app/policies/group_deploy_key_policy.rb | 8 + app/policies/group_deploy_keys_group_policy.rb | 9 + app/policies/group_policy.rb | 1 + app/policies/issue_policy.rb | 7 + app/policies/personal_access_token_policy.rb | 10 + app/policies/project_policy.rb | 54 +- app/policies/prometheus_alert_policy.rb | 5 + app/policies/suggestion_policy.rb | 2 +- app/policies/user_policy.rb | 1 + app/presenters/alert_management/alert_presenter.rb | 12 + .../alert_management/prometheus_alert_presenter.rb | 6 + app/presenters/blob_presenter.rb | 4 + app/presenters/ci/build_runner_presenter.rb | 2 + app/presenters/clusters/cluster_presenter.rb | 2 +- app/presenters/commit_presenter.rb | 4 - app/presenters/commit_status_presenter.rb | 3 +- app/presenters/event_presenter.rb | 2 +- app/presenters/gitlab/blame_presenter.rb | 2 +- app/presenters/issue_presenter.rb | 4 - app/presenters/merge_request_presenter.rb | 6 +- .../packages/detail/package_presenter.rb | 6 +- app/presenters/project_presenter.rb | 2 +- .../projects/prometheus/alert_presenter.rb | 12 +- app/presenters/prometheus_alert_presenter.rb | 18 + app/presenters/snippet_blob_presenter.rb | 15 +- app/presenters/snippet_presenter.rb | 6 +- app/presenters/tree_entry_presenter.rb | 4 + app/presenters/user_presenter.rb | 4 - app/serializers/build_details_entity.rb | 10 +- app/serializers/cluster_entity.rb | 4 + app/serializers/cluster_error_entity.rb | 7 + app/serializers/cluster_serializer.rb | 1 + app/serializers/diffs_metadata_entity.rb | 19 + app/serializers/discussion_entity.rb | 2 +- app/serializers/environment_entity.rb | 6 + app/serializers/group_basic_entity.rb | 10 + app/serializers/group_deploy_key_entity.rb | 17 + app/serializers/group_deploy_key_serializer.rb | 5 + app/serializers/group_deploy_keys_group_entity.rb | 6 + .../bitbucket_server_provider_repo_entity.rb | 4 + .../import/manifest_provider_repo_entity.rb | 23 + app/serializers/import/provider_repo_serializer.rb | 2 + .../merge_request_poll_widget_entity.rb | 16 +- app/serializers/merge_request_widget_entity.rb | 20 +- app/serializers/merge_requests/pipeline_entity.rb | 42 ++ app/serializers/pipeline_entity.rb | 6 +- app/serializers/pipeline_serializer.rb | 1 + app/serializers/prometheus_alert_entity.rb | 1 + app/serializers/release_entity.rb | 6 + app/serializers/release_serializer.rb | 5 + app/serializers/suggestion_entity.rb | 18 +- app/serializers/test_report_summary_entity.rb | 4 +- app/serializers/triggered_pipeline_entity.rb | 4 +- .../admin/propagate_integration_service.rb | 6 +- .../alert_management/alerts/update_service.rb | 6 +- .../alert_management/create_alert_issue_service.rb | 32 +- app/services/award_emojis/copy_service.rb | 30 + app/services/boards/issues/list_service.rb | 20 +- app/services/boards/issues/move_service.rb | 2 +- app/services/boards/lists/create_service.rb | 41 +- app/services/boards/lists/list_service.rb | 3 +- app/services/branches/create_service.rb | 5 +- app/services/ci/build_report_result_service.rb | 1 - app/services/ci/change_variable_service.rb | 33 + app/services/ci/change_variables_service.rb | 11 + .../ci/create_cross_project_pipeline_service.rb | 2 +- app/services/ci/create_job_artifacts_service.rb | 2 +- app/services/ci/create_pipeline_service.rb | 53 +- app/services/ci/create_web_ide_terminal_service.rb | 2 +- .../legacy_processing_service.rb | 122 ---- app/services/ci/process_pipeline_service.rb | 14 +- app/services/ci/register_job_service.rb | 28 +- app/services/ci/retry_pipeline_service.rb | 8 +- .../clusters/aws/authorize_role_service.rb | 4 +- .../parse_cluster_applications_artifact_service.rb | 6 +- app/services/cohorts_service.rb | 2 +- app/services/commits/change_service.rb | 4 +- app/services/commits/create_service.rb | 3 +- .../concerns/incident_management/settings.rb | 3 + .../design_management/move_designs_service.rb | 84 +++ .../capture_diff_note_position_service.rb | 4 +- app/services/discussions/resolve_service.rb | 2 +- app/services/event_create_service.rb | 59 +- app/services/git/process_ref_changes_service.rb | 2 - app/services/git/tag_push_service.rb | 4 - app/services/git/wiki_push_service.rb | 7 +- app/services/git/wiki_push_service/change.rb | 4 + app/services/groups/transfer_service.rb | 16 +- app/services/groups/update_service.rb | 16 + app/services/import/github_service.rb | 2 +- .../create_incident_label_service.rb | 20 +- .../incident_management/create_issue_service.rb | 93 --- .../incidents/create_service.rb | 50 ++ .../pager_duty/create_incident_issue_service.rb | 34 +- .../pager_duty/process_webhook_service.rb | 3 +- app/services/issuable/clone/base_service.rb | 32 +- app/services/issuable/clone/content_rewriter.rb | 74 -- .../issuable/common_system_notes_service.rb | 2 +- app/services/issues/build_service.rb | 2 +- app/services/issues/close_service.rb | 17 + app/services/issues/reorder_service.rb | 2 +- app/services/issues/update_service.rb | 4 +- .../jira/requests/projects/list_service.rb | 6 +- .../jira_import/cloud_users_mapper_service.rb | 19 + .../jira_import/server_users_mapper_service.rb | 19 + app/services/jira_import/start_import_service.rb | 2 +- app/services/jira_import/users_importer.rb | 38 +- app/services/jira_import/users_mapper.rb | 30 - app/services/jira_import/users_mapper_service.rb | 52 ++ app/services/labels/available_labels_service.rb | 6 +- app/services/markdown_content_rewriter_service.rb | 32 + .../merge_requests/after_create_service.rb | 2 + .../merge_requests/conflicts/list_service.rb | 2 +- app/services/merge_requests/ff_merge_service.rb | 1 + .../merge_requests/mergeability_check_service.rb | 2 +- .../merge_requests/pushed_branches_service.rb | 2 +- app/services/merge_requests/update_service.rb | 2 +- app/services/metrics/dashboard/base_service.rb | 4 +- .../metrics/dashboard/clone_dashboard_service.rb | 10 +- .../metrics/dashboard/cluster_dashboard_service.rb | 5 +- .../metrics/dashboard/custom_dashboard_service.rb | 13 +- .../dashboard/custom_metric_embed_service.rb | 1 - .../metrics/dashboard/dynamic_embed_service.rb | 2 +- .../dashboard/gitlab_alert_embed_service.rb | 4 +- .../dashboard/grafana_metric_embed_service.rb | 4 +- .../metrics/dashboard/panel_preview_service.rb | 54 ++ .../metrics/dashboard/pod_dashboard_service.rb | 22 +- .../dashboard/predefined_dashboard_service.rb | 8 +- .../dashboard/self_monitoring_dashboard_service.rb | 9 +- .../metrics/dashboard/system_dashboard_service.rb | 5 +- .../metrics/dashboard/update_dashboard_service.rb | 4 +- app/services/notes/copy_service.rb | 68 ++ app/services/notes/create_service.rb | 7 +- app/services/notes/quick_actions_service.rb | 5 + app/services/notes/update_service.rb | 2 +- app/services/notification_service.rb | 19 +- .../maven/find_or_create_package_service.rb | 39 +- .../packages/nuget/metadata_extraction_service.rb | 2 +- app/services/packages/nuget/search_service.rb | 4 +- .../personal_access_tokens/revoke_service.rb | 36 + .../product_analytics/build_graph_service.rb | 29 + app/services/projects/alerting/notify_service.rb | 4 - .../projects/auto_devops/disable_service.rb | 2 +- app/services/projects/cleanup_service.rb | 2 +- .../container_repository/cleanup_tags_service.rb | 11 +- .../container_repository/delete_tags_service.rb | 78 +- .../gitlab/delete_tags_service.rb | 29 + .../third_party/delete_tags_service.rb | 64 ++ app/services/projects/create_service.rb | 6 +- app/services/projects/destroy_service.rb | 2 +- app/services/projects/fork_service.rb | 4 +- .../projects/prometheus/alerts/notify_service.rb | 6 +- .../projects/propagate_service_template.rb | 6 +- app/services/projects/transfer_service.rb | 8 + .../projects/update_pages_configuration_service.rb | 17 +- app/services/projects/update_pages_service.rb | 2 +- .../projects/update_remote_mirror_service.rb | 6 - .../projects/update_repository_storage_service.rb | 65 +- app/services/projects/update_service.rb | 8 +- .../resource_access_tokens/create_service.rb | 4 +- .../resource_events/base_change_timebox_service.rb | 35 + .../resource_events/change_milestone_service.rb | 29 +- app/services/search_service.rb | 2 +- .../service_desk_settings/update_service.rb | 2 + app/services/submit_usage_ping_service.rb | 44 +- app/services/system_note_service.rb | 2 +- .../system_notes/alert_management_service.rb | 20 +- app/services/system_notes/issuables_service.rb | 2 +- app/services/todo_service.rb | 14 +- .../users/refresh_authorized_projects_service.rb | 17 +- app/services/web_hook_service.rb | 10 +- app/services/wiki_pages/base_service.rb | 8 +- app/services/wiki_pages/create_service.rb | 6 +- app/services/wiki_pages/destroy_service.rb | 4 + app/services/wiki_pages/event_create_service.rb | 4 +- app/uploaders/ci/pipeline_artifact_uploader.rb | 21 + app/uploaders/job_artifact_uploader.rb | 7 +- app/uploaders/object_storage.rb | 16 +- app/uploaders/packages/package_file_uploader.rb | 7 +- app/validators/html_safety_validator.rb | 2 +- .../sast_ui_schema.json | 83 +-- .../_account_and_limit.html.haml | 14 +- .../admin/application_settings/_ci_cd.html.haml | 4 +- .../application_settings/_diff_limits.html.haml | 4 +- .../admin/application_settings/_eks.html.haml | 2 +- .../_external_authorization_service_form.html.haml | 4 +- .../_initial_branch_name.html.haml | 4 +- .../admin/application_settings/_plantuml.html.haml | 2 +- .../_repository_check.html.haml | 8 +- .../_repository_mirrors_form.html.haml | 3 +- .../_repository_static_objects.html.haml | 3 +- .../_repository_storage.html.haml | 4 +- .../admin/application_settings/_signin.html.haml | 4 +- .../admin/application_settings/_signup.html.haml | 4 +- .../admin/application_settings/_snowplow.html.haml | 3 +- .../application_settings/_sourcegraph.html.haml | 2 +- .../admin/application_settings/_terminal.html.haml | 4 +- .../admin/application_settings/_terms.html.haml | 4 +- .../_third_party_offers.html.haml | 3 +- .../_visibility_and_access.html.haml | 4 +- .../application_settings/ci/_header.html.haml | 6 +- .../admin/application_settings/general.html.haml | 21 +- .../application_settings/integrations.html.haml | 40 +- .../metrics_and_profiling.html.haml | 2 +- .../admin/application_settings/network.html.haml | 4 +- .../application_settings/preferences.html.haml | 2 +- .../application_settings/repository.html.haml | 2 +- app/views/admin/broadcast_messages/_form.html.haml | 4 +- app/views/admin/broadcast_messages/index.html.haml | 6 +- app/views/admin/dashboard/index.html.haml | 6 +- app/views/admin/dashboard/stats.html.haml | 2 +- app/views/admin/deploy_keys/index.html.haml | 11 +- app/views/admin/groups/_group.html.haml | 8 +- app/views/admin/groups/show.html.haml | 20 +- app/views/admin/health_check/show.html.haml | 2 +- app/views/admin/hook_logs/show.html.haml | 4 +- app/views/admin/labels/destroy.js.haml | 2 +- app/views/admin/projects/show.html.haml | 13 +- app/views/admin/requests_profiles/index.html.haml | 2 +- app/views/admin/runners/_runner.html.haml | 8 +- app/views/admin/runners/show.html.haml | 2 +- app/views/admin/services/index.html.haml | 2 +- app/views/admin/sessions/_signin_box.html.haml | 2 +- app/views/admin/users/_head.html.haml | 8 +- app/views/admin/users/_user_listing_note.html.haml | 2 +- app/views/ci/deploy_freeze/_index.html.haml | 2 + app/views/ci/runner/_how_to_setup_runner.html.haml | 4 +- .../_how_to_setup_runner_automatically.html.haml | 2 +- .../ci/status/_dropdown_graph_badge.html.haml | 2 +- app/views/ci/variables/_content.html.haml | 9 +- .../ci/variables/_url_query_variable_row.html.haml | 4 +- app/views/ci/variables/_variable_row.html.haml | 4 +- .../clusters/clusters/_advanced_settings.html.haml | 10 +- app/views/clusters/clusters/_banner.html.haml | 8 +- .../clusters/_gcp_signup_offer_banner.html.haml | 3 +- .../clusters/_gitlab_integration_form.html.haml | 35 +- .../clusters/_provider_details_form.html.haml | 2 +- app/views/clusters/clusters/show.html.haml | 3 +- app/views/dashboard/_activities.html.haml | 4 +- app/views/dashboard/_projects_head.html.haml | 1 + app/views/dashboard/projects/index.html.haml | 8 + .../dashboard/projects/shared/_common.html.haml | 13 + app/views/dashboard/projects/starred.html.haml | 15 +- app/views/devise/registrations/new.html.haml | 2 +- app/views/devise/sessions/_new_base.html.haml | 2 +- ...xperimental_separate_sign_up_flow_box.html.haml | 5 +- app/views/devise/shared/_omniauth_box.html.haml | 2 +- app/views/devise/shared/_signin_box.html.haml | 2 +- app/views/devise/shared/_signup_box.html.haml | 2 +- app/views/devise/shared/_tabs_ldap.html.haml | 2 +- app/views/doorkeeper/applications/_form.html.haml | 2 +- app/views/doorkeeper/applications/index.html.haml | 2 +- app/views/doorkeeper/authorizations/new.html.haml | 2 +- app/views/explore/groups/index.html.haml | 2 +- app/views/explore/projects/_filter.html.haml | 3 +- app/views/groups/_activities.html.haml | 5 +- app/views/groups/_flash_messages.html.haml | 1 - app/views/groups/_home_panel.html.haml | 2 +- app/views/groups/edit.html.haml | 2 +- app/views/groups/group_members/index.html.haml | 115 +-- .../group_members/tab_pane/_form_item.html.haml | 2 + .../group_members/tab_pane/_header.html.haml | 2 + .../groups/group_members/tab_pane/_title.html.haml | 2 + app/views/groups/issues.html.haml | 4 +- app/views/groups/merge_requests.html.haml | 2 +- .../groups/packages/_legacy_package_list.haml | 59 ++ app/views/groups/packages/index.html.haml | 5 + app/views/groups/projects.html.haml | 2 +- app/views/groups/runners/_runner.html.haml | 6 +- app/views/groups/settings/_advanced.html.haml | 13 +- app/views/groups/settings/_export.html.haml | 5 +- app/views/groups/settings/_general.html.haml | 6 +- .../groups/settings/_pages_settings.html.haml | 2 +- .../groups/settings/_permanent_deletion.html.haml | 4 +- app/views/groups/settings/_permissions.html.haml | 5 +- .../settings/ci_cd/_auto_devops_form.html.haml | 2 +- app/views/groups/sidebar/_packages.html.haml | 23 +- .../instance_configuration/_ssh_info.html.haml | 2 +- app/views/help/ui.html.haml | 524 -------------- app/views/import/_githubish_status.html.haml | 5 +- app/views/import/bitbucket_server/status.html.haml | 2 +- app/views/import/fogbugz/new_user_map.html.haml | 2 +- app/views/import/gitlab/status.html.haml | 2 +- app/views/import/gitlab_projects/new.html.haml | 2 +- app/views/import/google_code/new.html.haml | 20 +- .../import/google_code/new_user_map.html.haml | 10 +- app/views/import/google_code/status.html.haml | 2 +- app/views/import/manifest/_form.html.haml | 2 +- app/views/import/manifest/status.html.haml | 37 +- app/views/import/phabricator/new.html.haml | 6 +- .../dev_ops_score/_card.html.haml | 8 +- app/views/invites/show.html.haml | 29 +- app/views/layouts/_flash.html.haml | 7 +- app/views/layouts/_head.html.haml | 12 +- app/views/layouts/_page.html.haml | 2 + app/views/layouts/_search.html.haml | 6 +- app/views/layouts/_startup_css.haml | 4 + app/views/layouts/_startup_css_activation.haml | 7 + ...devise_experimental_onboarding_issues.html.haml | 11 + app/views/layouts/group.html.haml | 1 + app/views/layouts/header/_default.html.haml | 44 +- app/views/layouts/header/_new_dropdown.haml | 2 +- app/views/layouts/nav/_breadcrumbs.html.haml | 4 +- app/views/layouts/nav/_dashboard.html.haml | 2 +- app/views/layouts/nav/sidebar/_admin.html.haml | 2 +- app/views/layouts/nav/sidebar/_group.html.haml | 4 +- app/views/layouts/nav/sidebar/_profile.html.haml | 4 +- app/views/layouts/nav/sidebar/_project.html.haml | 25 +- .../nav/sidebar/_project_packages_link.html.haml | 23 +- app/views/layouts/project.html.haml | 1 + .../notify/_relabeled_issuable_email.text.erb | 2 +- .../access_token_about_to_expire_email.html.haml | 2 +- .../access_token_about_to_expire_email.text.erb | 2 +- .../notify/access_token_expired_email.html.haml | 7 + .../notify/access_token_expired_email.text.erb | 5 + app/views/notify/reassigned_issue_email.text.erb | 2 +- .../notify/reassigned_merge_request_email.text.erb | 2 +- .../notify/service_desk_new_note_email.html.haml | 2 +- .../notify/service_desk_new_note_email.text.erb | 4 +- .../notify/service_desk_thank_you_email.html.haml | 2 +- .../notify/service_desk_thank_you_email.text.erb | 4 +- app/views/profiles/accounts/show.html.haml | 4 +- app/views/profiles/chat_names/new.html.haml | 11 +- app/views/profiles/emails/index.html.haml | 2 +- app/views/profiles/gpg_keys/_key.html.haml | 2 +- app/views/profiles/keys/_key.html.haml | 8 +- .../profiles/preferences/_sourcegraph.html.haml | 2 +- app/views/profiles/preferences/show.html.haml | 12 +- app/views/profiles/show.html.haml | 2 +- .../profiles/two_factor_auths/_codes.html.haml | 4 +- app/views/profiles/two_factor_auths/show.html.haml | 4 +- app/views/projects/_activity.html.haml | 13 +- app/views/projects/_export.html.haml | 3 +- app/views/projects/_flash_messages.html.haml | 1 - app/views/projects/_home_panel.html.haml | 4 +- app/views/projects/_import_project_pane.html.haml | 7 +- .../projects/_merge_request_settings.html.haml | 2 +- app/views/projects/_remove.html.haml | 9 +- .../projects/_service_desk_settings.html.haml | 3 +- app/views/projects/_visibility_modal.html.haml | 11 +- app/views/projects/blame/show.html.haml | 2 +- app/views/projects/blob/_editor.html.haml | 7 +- app/views/projects/blob/_header_content.html.haml | 2 + .../projects/blob/_template_selectors.html.haml | 2 + app/views/projects/blob/edit.html.haml | 3 - app/views/projects/blob/new.html.haml | 3 - .../projects/blob/viewers/_changelog.html.haml | 2 +- .../projects/blob/viewers/_contributing.html.haml | 2 +- .../blob/viewers/_dependency_manager.html.haml | 7 +- app/views/projects/blob/viewers/_license.html.haml | 2 +- .../blob/viewers/_metrics_dashboard_yml.html.haml | 2 +- .../_metrics_dashboard_yml_loading.html.haml | 2 +- app/views/projects/blob/viewers/_readme.html.haml | 2 +- app/views/projects/branches/_panel.html.haml | 2 +- app/views/projects/buttons/_dropdown.html.haml | 6 +- app/views/projects/ci/builds/_build.html.haml | 6 +- app/views/projects/ci/lints/_create.html.haml | 77 +- .../projects/ci/lints/_lint_warnings.html.haml | 6 + app/views/projects/ci/lints/show.html.haml | 8 +- app/views/projects/cleanup/_show.html.haml | 8 +- app/views/projects/commit/_change.html.haml | 2 +- app/views/projects/commit/_commit_box.html.haml | 2 +- ..._user_different_email_signature_badge.html.haml | 2 +- .../commit/_unverified_signature_badge.html.haml | 2 +- app/views/projects/commit/diff_files.html.haml | 3 + .../x509/_verified_signature_badge.html.haml | 2 +- app/views/projects/commits/_commit.html.haml | 7 +- app/views/projects/commits/_commits.html.haml | 19 +- app/views/projects/commits/show.html.haml | 4 +- app/views/projects/compare/_form.html.haml | 4 +- app/views/projects/compare/index.html.haml | 4 +- app/views/projects/default_branch/_show.html.haml | 5 +- app/views/projects/deploy_keys/edit.html.haml | 2 +- app/views/projects/deployments/_actions.haml | 2 +- .../deployments/_confirm_rollback_modal.html.haml | 2 +- app/views/projects/diffs/_diffs.html.haml | 10 +- app/views/projects/diffs/_file.html.haml | 2 +- app/views/projects/diffs/_stats.html.haml | 2 +- app/views/projects/diffs/_warning.html.haml | 2 +- app/views/projects/edit.html.haml | 31 +- app/views/projects/environments/_form.html.haml | 2 +- app/views/projects/environments/show.html.haml | 2 +- app/views/projects/forks/_fork_button.html.haml | 40 +- app/views/projects/forks/error.html.haml | 2 +- app/views/projects/forks/new.html.haml | 15 +- app/views/projects/hooks/edit.html.haml | 2 +- app/views/projects/hooks/index.html.haml | 5 +- app/views/projects/incidents/index.html.haml | 3 + .../_alert_moved_from_service_desk.html.haml | 4 +- app/views/projects/issues/_discussion.html.haml | 2 + app/views/projects/issues/_form.html.haml | 2 +- app/views/projects/issues/_issue.html.haml | 6 +- .../projects/issues/_issue_estimate.html.haml | 2 +- app/views/projects/issues/_issues.html.haml | 11 +- .../issues/_service_desk_empty_state.html.haml | 33 + .../issues/_service_desk_info_content.html.haml | 44 +- .../projects/issues/export_csv/_modal.html.haml | 4 +- app/views/projects/issues/service_desk.html.haml | 18 +- app/views/projects/issues/show.html.haml | 8 +- app/views/projects/issues/verify.html.haml | 4 +- app/views/projects/labels/index.html.haml | 4 +- .../merge_requests/_approvals_count.html.haml | 2 +- .../merge_requests/_awards_block.html.haml | 7 +- .../projects/merge_requests/_commits.html.haml | 18 +- app/views/projects/merge_requests/_form.html.haml | 2 +- .../merge_requests/_how_to_merge.html.haml | 4 +- .../merge_requests/_merge_request.html.haml | 6 +- .../projects/merge_requests/_mr_box.html.haml | 7 +- .../projects/merge_requests/_mr_title.html.haml | 7 +- .../projects/merge_requests/_widget.html.haml | 3 - .../creations/_new_compare.html.haml | 2 +- .../merge_requests/creations/_new_submit.html.haml | 2 +- .../merge_requests/diffs/_commit_widget.html.haml | 6 +- app/views/projects/merge_requests/show.html.haml | 31 +- app/views/projects/milestones/_form.html.haml | 2 +- app/views/projects/milestones/show.html.haml | 2 +- app/views/projects/mirrors/_instructions.html.haml | 8 +- app/views/projects/mirrors/_mirror_repos.html.haml | 11 +- .../projects/mirrors/_mirror_repos_push.html.haml | 2 +- .../projects/mirrors/_ssh_host_keys.html.haml | 2 +- app/views/projects/no_repo.html.haml | 2 +- app/views/projects/notes/_actions.html.haml | 2 +- .../packages/_legacy_package_list.html.haml | 60 ++ .../projects/packages/packages/index.html.haml | 5 + .../projects/packages/packages/show.html.haml | 25 + app/views/projects/pages/_access.html.haml | 2 +- app/views/projects/pages/_list.html.haml | 2 +- app/views/projects/pages/_pages_settings.html.haml | 4 +- app/views/projects/pages/show.html.haml | 2 +- .../projects/pages_domains/_certificate.html.haml | 4 +- app/views/projects/pages_domains/new.html.haml | 2 +- app/views/projects/pages_domains/show.html.haml | 2 +- .../projects/pipeline_schedules/_form.html.haml | 4 +- .../_pipeline_schedule.html.haml | 6 +- app/views/projects/pipelines/_info.html.haml | 6 +- .../pipelines/_pipeline_warnings.html.haml | 6 + app/views/projects/pipelines/_with_tabs.html.haml | 23 +- app/views/projects/pipelines/new.html.haml | 67 +- app/views/projects/pipelines/show.html.haml | 8 +- .../projects/product_analytics/_graph.html.haml | 6 + .../projects/product_analytics/_links.html.haml | 10 + .../projects/product_analytics/_tracker.html.erb | 10 + .../projects/product_analytics/graphs.html.haml | 12 + .../projects/product_analytics/index.html.haml | 16 + .../projects/product_analytics/setup.html.haml | 12 + .../projects/product_analytics/test.html.haml | 16 + .../projects/project_members/_groups.html.haml | 2 +- app/views/projects/project_members/_team.html.haml | 3 +- app/views/projects/project_members/index.html.haml | 2 +- .../_update_protected_branch.html.haml | 11 +- .../shared/_create_protected_branch.html.haml | 2 +- .../protected_branches/shared/_index.html.haml | 2 +- .../shared/_protected_branch.html.haml | 2 +- .../shared/_create_protected_tag.html.haml | 6 +- .../protected_tags/shared/_protected_tag.html.haml | 2 +- app/views/projects/runners/_runner.html.haml | 9 +- .../projects/runners/_shared_runners.html.haml | 2 +- .../projects/serverless/functions/index.html.haml | 5 +- app/views/projects/services/_form.html.haml | 2 +- app/views/projects/services/alerts/_top.html.haml | 4 +- .../_detailed_help.html.haml | 10 +- .../mattermost_slash_commands/_help.html.haml | 2 +- .../services/prometheus/_metrics.html.haml | 2 +- .../projects/services/prometheus/_top.html.haml | 4 +- app/views/projects/services/slack/_help.haml | 10 +- .../services/slack_slash_commands/_help.html.haml | 14 +- app/views/projects/settings/_archive.html.haml | 5 +- app/views/projects/settings/_general.html.haml | 8 +- .../settings/access_tokens/index.html.haml | 5 +- .../settings/ci_cd/_autodevops_form.html.haml | 4 +- app/views/projects/settings/ci_cd/_form.html.haml | 4 +- app/views/projects/settings/ci_cd/show.html.haml | 19 + .../projects/settings/integrations/show.html.haml | 4 +- .../settings/operations/_error_tracking.html.haml | 4 +- .../operations/_metrics_dashboard.html.haml | 4 +- app/views/projects/snippets/verify.html.haml | 4 +- app/views/projects/starrers/index.html.haml | 2 +- .../projects/static_site_editor/show.html.haml | 2 +- app/views/projects/tags/_tag.html.haml | 2 +- app/views/projects/tags/index.html.haml | 4 +- app/views/projects/tags/show.html.haml | 16 +- app/views/projects/triggers/_form.html.haml | 2 +- app/views/registrations/welcome.html.haml | 2 +- app/views/search/_form.html.haml | 2 +- app/views/search/_results.html.haml | 4 +- app/views/search/results/_issue.html.haml | 2 +- app/views/search/results/_merge_request.html.haml | 2 +- app/views/search/results/_milestone.html.haml | 2 +- app/views/search/results/_note.html.haml | 2 +- app/views/search/show.html.haml | 4 + app/views/sent_notifications/unsubscribe.html.haml | 2 +- app/views/shared/_broadcast_message.html.haml | 2 +- .../shared/_check_recovery_settings.html.haml | 2 +- app/views/shared/_confirm_fork_modal.html.haml | 4 +- app/views/shared/_confirm_modal.html.haml | 2 +- app/views/shared/_delete_label_modal.html.haml | 2 +- app/views/shared/_field.html.haml | 29 - app/views/shared/_file_highlight.html.haml | 2 +- app/views/shared/_group_form.html.haml | 6 +- app/views/shared/_import_form.html.haml | 4 +- app/views/shared/_issuable_meta_data.html.haml | 8 +- app/views/shared/_issues.html.haml | 2 +- app/views/shared/_md_preview.html.haml | 2 +- app/views/shared/_merge_requests.html.haml | 2 +- .../shared/_new_project_item_select.html.haml | 6 +- app/views/shared/_no_ssh.html.haml | 4 +- app/views/shared/_outdated_browser.html.haml | 2 +- app/views/shared/_service_settings.html.haml | 25 - app/views/shared/_sidebar_toggle_button.html.haml | 2 +- app/views/shared/_zen.html.haml | 4 +- app/views/shared/access_tokens/_table.html.haml | 2 +- app/views/shared/boards/_show.html.haml | 2 +- .../boards/components/sidebar/_due_date.html.haml | 6 +- .../boards/components/sidebar/_labels.html.haml | 6 +- .../boards/components/sidebar/_milestone.html.haml | 6 +- .../buttons/_project_feature_toggle.html.haml | 4 +- app/views/shared/deploy_keys/_index.html.haml | 2 +- .../deploy_keys/_project_group_form.html.haml | 6 +- app/views/shared/deploy_tokens/_form.html.haml | 2 +- app/views/shared/deploy_tokens/_index.html.haml | 2 +- app/views/shared/deploy_tokens/_table.html.haml | 2 +- .../shared/empty_states/_deploy_keys.html.haml | 9 + app/views/shared/empty_states/_issues.html.haml | 14 +- .../shared/empty_states/_merge_requests.html.haml | 4 +- app/views/shared/groups/_group.html.haml | 8 +- app/views/shared/integrations/_form.html.haml | 25 +- app/views/shared/issuable/_assignees.html.haml | 4 +- .../shared/issuable/_bulk_update_sidebar.html.haml | 27 +- app/views/shared/issuable/_feed_buttons.html.haml | 4 +- app/views/shared/issuable/_form.html.haml | 13 +- app/views/shared/issuable/_search_bar.html.haml | 5 +- app/views/shared/issuable/_sidebar.html.haml | 2 +- .../shared/issuable/form/_branch_chooser.html.haml | 6 +- .../shared/issuable/form/_merge_params.html.haml | 2 +- app/views/shared/issuable/form/_title.html.haml | 24 +- .../shared/members/_filter_2fa_dropdown.html.haml | 2 +- app/views/shared/members/_group.html.haml | 2 +- app/views/shared/members/_invite_group.html.haml | 2 +- app/views/shared/members/_invite_member.html.haml | 2 +- app/views/shared/members/_member.html.haml | 15 +- app/views/shared/members/_search_field.html.haml | 6 + app/views/shared/members/_sort_dropdown.html.haml | 1 - .../milestones/_deprecation_message.html.haml | 15 - app/views/shared/milestones/_milestone.html.haml | 2 +- app/views/shared/milestones/_sidebar.html.haml | 4 +- app/views/shared/notes/_hints.html.haml | 6 +- app/views/shared/notes/_note.html.haml | 3 +- app/views/shared/notes/_notes_with_form.html.haml | 4 +- app/views/shared/notifications/_button.html.haml | 8 +- .../notifications/_custom_notifications.html.haml | 1 - app/views/shared/packages/_no_packages.html.haml | 7 + app/views/shared/projects/_archived.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 8 +- app/views/shared/projects/_search_bar.html.haml | 3 +- .../_update_protected_branch.html.haml | 35 + .../promotions/_promote_servicedesk.html.haml | 8 +- app/views/shared/snippets/_embed.html.haml | 10 +- app/views/shared/snippets/_form.html.haml | 3 +- app/views/shared/snippets/_header.html.haml | 2 +- app/views/shared/snippets/_snippet.html.haml | 6 +- app/views/shared/snippets/show.js.haml | 2 +- app/views/shared/web_hooks/_form.html.haml | 6 + app/views/shared/wikis/_form.html.haml | 2 +- app/views/shared/wikis/_sidebar.html.haml | 4 +- app/views/shared/wikis/_wiki_directory.html.haml | 2 +- app/views/snippets/verify.html.haml | 4 +- app/views/u2f/_register.html.haml | 8 +- app/views/users/_deletion_guidance.html.haml | 2 +- app/views/users/calendar_activities.html.haml | 6 +- app/views/users/show.html.haml | 34 +- app/views/users/terms/index.html.haml | 2 +- app/workers/admin_email_worker.rb | 2 +- app/workers/all_queues.yml | 790 +++++++++++---------- app/workers/concerns/application_worker.rb | 1 + app/workers/flush_counter_increments_worker.rb | 26 + app/workers/git_garbage_collect_worker.rb | 18 +- app/workers/gitlab/import/advance_stage.rb | 2 +- app/workers/gitlab_usage_ping_worker.rb | 28 +- .../incident_management/process_alert_worker.rb | 27 +- app/workers/pages_update_configuration_worker.rb | 23 + app/workers/pages_worker.rb | 8 +- app/workers/partition_creation_worker.rb | 2 - .../expired_notification_worker.rb | 26 + app/workers/pipeline_process_worker.rb | 6 +- app/workers/pipeline_update_worker.rb | 6 +- app/workers/propagate_service_template_worker.rb | 2 +- 1928 files changed, 28486 insertions(+), 14914 deletions(-) create mode 100644 app/assets/images/mailers/approval/icon-merge-request-gray.gif create mode 100644 app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_trigger.vue create mode 100644 app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_wrapper.vue create mode 100644 app/assets/javascripts/add_context_commits_modal/components/review_tab_container.vue create mode 100644 app/assets/javascripts/add_context_commits_modal/event_hub.js create mode 100644 app/assets/javascripts/add_context_commits_modal/index.js create mode 100644 app/assets/javascripts/add_context_commits_modal/store/actions.js create mode 100644 app/assets/javascripts/add_context_commits_modal/store/index.js create mode 100644 app/assets/javascripts/add_context_commits_modal/store/mutation_types.js create mode 100644 app/assets/javascripts/add_context_commits_modal/store/mutations.js create mode 100644 app/assets/javascripts/add_context_commits_modal/store/state.js create mode 100644 app/assets/javascripts/add_context_commits_modal/utils.js delete mode 100644 app/assets/javascripts/alert_management/graphql/mutations/alert_todo_create.graphql create mode 100644 app/assets/javascripts/alert_management/graphql/mutations/alert_todo_create.mutation.graphql create mode 100644 app/assets/javascripts/alert_management/graphql/mutations/alert_todo_mark_done.mutation.graphql create mode 100644 app/assets/javascripts/alert_management/graphql/queries/alert_help_url.query.graphql create mode 100644 app/assets/javascripts/alert_management/router.js delete mode 100644 app/assets/javascripts/analytics/cycle_analytics/mixins/filter_mixins.js create mode 100644 app/assets/javascripts/analytics/product_analytics/activity_charts_bundle.js create mode 100644 app/assets/javascripts/analytics/product_analytics/components/activity_chart.vue create mode 100644 app/assets/javascripts/blob/template_selectors/metrics_dashboard_selector.js create mode 100644 app/assets/javascripts/boards/components/board_settings_sidebar.vue create mode 100644 app/assets/javascripts/boards/queries/group_lists_issues.query.graphql create mode 100644 app/assets/javascripts/boards/queries/issue.fragment.graphql create mode 100644 app/assets/javascripts/boards/queries/project_lists_issues.query.graphql create mode 100644 app/assets/javascripts/clusters/forms/components/integration_form.vue create mode 100644 app/assets/javascripts/clusters/forms/show/index.js create mode 100644 app/assets/javascripts/clusters/forms/stores/index.js create mode 100644 app/assets/javascripts/clusters/forms/stores/state.js create mode 100644 app/assets/javascripts/deploy_freeze/components/deploy_freeze_modal.vue create mode 100644 app/assets/javascripts/deploy_freeze/components/deploy_freeze_settings.vue create mode 100644 app/assets/javascripts/deploy_freeze/components/deploy_freeze_table.vue create mode 100644 app/assets/javascripts/deploy_freeze/index.js create mode 100644 app/assets/javascripts/deploy_freeze/store/actions.js create mode 100644 app/assets/javascripts/deploy_freeze/store/index.js create mode 100644 app/assets/javascripts/deploy_freeze/store/mutation_types.js create mode 100644 app/assets/javascripts/deploy_freeze/store/mutations.js create mode 100644 app/assets/javascripts/deploy_freeze/store/state.js create mode 100644 app/assets/javascripts/design_management/components/toolbar/design_navigation.vue delete mode 100644 app/assets/javascripts/design_management/components/toolbar/pagination.vue delete mode 100644 app/assets/javascripts/design_management/components/toolbar/pagination_button.vue create mode 100644 app/assets/javascripts/design_management/graphql/mutations/move_design.mutation.graphql delete mode 100644 app/assets/javascripts/design_management/graphql/queries/app_data.query.graphql create mode 100644 app/assets/javascripts/design_management_legacy/components/app.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/delete_button.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_destroyer.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_note_pin.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_notes/design_discussion.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_notes/design_note.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_notes/design_reply_form.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_notes/toggle_replies_widget.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_overlay.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_presentation.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_scaler.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/design_sidebar.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/image.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/list/item.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/toolbar/index.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/toolbar/pagination.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/toolbar/pagination_button.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/upload/button.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/upload/design_dropzone.vue create mode 100644 app/assets/javascripts/design_management_legacy/components/upload/design_version_dropdown.vue create mode 100644 app/assets/javascripts/design_management_legacy/constants.js create mode 100644 app/assets/javascripts/design_management_legacy/graphql.js create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/design.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/design_list.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/design_note.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/diff_refs.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/discussion_resolved_status.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/note_permissions.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/fragments/version.fragment.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/create_image_diff_note.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/create_note.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/destroy_design.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/toggle_resolve_discussion.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/update_active_discussion.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/update_image_diff_note.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/update_note.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/mutations/upload_design.mutation.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/queries/active_discussion.query.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/queries/app_data.query.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/queries/design_permissions.query.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/queries/get_design.query.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/queries/get_design_list.query.graphql create mode 100644 app/assets/javascripts/design_management_legacy/graphql/typedefs.graphql create mode 100644 app/assets/javascripts/design_management_legacy/index.js create mode 100644 app/assets/javascripts/design_management_legacy/mixins/all_designs.js create mode 100644 app/assets/javascripts/design_management_legacy/mixins/all_versions.js create mode 100644 app/assets/javascripts/design_management_legacy/pages/design/index.vue create mode 100644 app/assets/javascripts/design_management_legacy/pages/index.vue create mode 100644 app/assets/javascripts/design_management_legacy/router/constants.js create mode 100644 app/assets/javascripts/design_management_legacy/router/index.js create mode 100644 app/assets/javascripts/design_management_legacy/router/routes.js create mode 100644 app/assets/javascripts/design_management_legacy/utils/cache_update.js create mode 100644 app/assets/javascripts/design_management_legacy/utils/design_management_utils.js create mode 100644 app/assets/javascripts/design_management_legacy/utils/error_messages.js create mode 100644 app/assets/javascripts/design_management_legacy/utils/tracking.js delete mode 100644 app/assets/javascripts/design_management_new/components/app.vue delete mode 100644 app/assets/javascripts/design_management_new/components/delete_button.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_destroyer.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_note_pin.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_notes/design_discussion.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_notes/design_note.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_notes/design_reply_form.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_notes/toggle_replies_widget.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_overlay.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_presentation.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_scaler.vue delete mode 100644 app/assets/javascripts/design_management_new/components/design_sidebar.vue delete mode 100644 app/assets/javascripts/design_management_new/components/image.vue delete mode 100644 app/assets/javascripts/design_management_new/components/list/item.vue delete mode 100644 app/assets/javascripts/design_management_new/components/toolbar/index.vue delete mode 100644 app/assets/javascripts/design_management_new/components/toolbar/pagination.vue delete mode 100644 app/assets/javascripts/design_management_new/components/toolbar/pagination_button.vue delete mode 100644 app/assets/javascripts/design_management_new/components/upload/button.vue delete mode 100644 app/assets/javascripts/design_management_new/components/upload/design_dropzone.vue delete mode 100644 app/assets/javascripts/design_management_new/components/upload/design_version_dropdown.vue delete mode 100644 app/assets/javascripts/design_management_new/constants.js delete mode 100644 app/assets/javascripts/design_management_new/graphql.js delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/design.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/design_list.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/design_note.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/diff_refs.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/discussion_resolved_status.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/note_permissions.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/fragments/version.fragment.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/create_image_diff_note.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/create_note.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/destroy_design.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/toggle_resolve_discussion.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/update_active_discussion.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/update_image_diff_note.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/update_note.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/mutations/upload_design.mutation.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/queries/active_discussion.query.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/queries/design_permissions.query.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/queries/get_design.query.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/queries/get_design_list.query.graphql delete mode 100644 app/assets/javascripts/design_management_new/graphql/typedefs.graphql delete mode 100644 app/assets/javascripts/design_management_new/index.js delete mode 100644 app/assets/javascripts/design_management_new/mixins/all_designs.js delete mode 100644 app/assets/javascripts/design_management_new/mixins/all_versions.js delete mode 100644 app/assets/javascripts/design_management_new/pages/design/index.vue delete mode 100644 app/assets/javascripts/design_management_new/pages/index.vue delete mode 100644 app/assets/javascripts/design_management_new/router/constants.js delete mode 100644 app/assets/javascripts/design_management_new/router/index.js delete mode 100644 app/assets/javascripts/design_management_new/router/routes.js delete mode 100644 app/assets/javascripts/design_management_new/utils/cache_update.js delete mode 100644 app/assets/javascripts/design_management_new/utils/design_management_utils.js delete mode 100644 app/assets/javascripts/design_management_new/utils/error_messages.js delete mode 100644 app/assets/javascripts/design_management_new/utils/tracking.js create mode 100644 app/assets/javascripts/diffs/diff_file.js create mode 100644 app/assets/javascripts/filtered_search/group_runners_filtered_search_token_keys.js create mode 100644 app/assets/javascripts/graphql_shared/fragments/pageInfoCursorsOnly.fragment.graphql create mode 100644 app/assets/javascripts/import_projects/components/page_query_param_sync.vue delete mode 100644 app/assets/javascripts/import_projects/event_hub.js create mode 100644 app/assets/javascripts/import_projects/utils.js create mode 100644 app/assets/javascripts/incidents/components/incidents_list.vue create mode 100644 app/assets/javascripts/incidents/constants.js create mode 100644 app/assets/javascripts/incidents/graphql/queries/get_count_by_status.query.graphql create mode 100644 app/assets/javascripts/incidents/graphql/queries/get_incidents.query.graphql create mode 100644 app/assets/javascripts/incidents/list.js create mode 100644 app/assets/javascripts/issuables_list/service_desk_helper.js delete mode 100644 app/assets/javascripts/issue_show/components/issuable_header_warnings.vue create mode 100644 app/assets/javascripts/jira_import/utils/constants.js create mode 100644 app/assets/javascripts/lib/chrome_84_icon_fix.js create mode 100644 app/assets/javascripts/monitoring/components/charts/gauge.vue create mode 100644 app/assets/javascripts/monitoring/components/dashboard_actions_menu.vue create mode 100644 app/assets/javascripts/monitoring/components/dashboard_panel_builder.vue create mode 100644 app/assets/javascripts/monitoring/csv_export.js create mode 100644 app/assets/javascripts/monitoring/pages/panel_new_page.vue create mode 100644 app/assets/javascripts/monitoring/requests/index.js delete mode 100644 app/assets/javascripts/mr_tabs_popover/components/popover.vue delete mode 100644 app/assets/javascripts/mr_tabs_popover/index.js delete mode 100644 app/assets/javascripts/notes/components/discussion_keyboard_navigator.vue create mode 100644 app/assets/javascripts/notes/components/discussion_navigator.vue create mode 100644 app/assets/javascripts/packages/details/components/additional_metadata.vue create mode 100644 app/assets/javascripts/packages/details/components/app.vue create mode 100644 app/assets/javascripts/packages/details/components/code_instruction.vue create mode 100644 app/assets/javascripts/packages/details/components/composer_installation.vue create mode 100644 app/assets/javascripts/packages/details/components/conan_installation.vue create mode 100644 app/assets/javascripts/packages/details/components/dependency_row.vue create mode 100644 app/assets/javascripts/packages/details/components/history_element.vue create mode 100644 app/assets/javascripts/packages/details/components/installation_commands.vue create mode 100644 app/assets/javascripts/packages/details/components/maven_installation.vue create mode 100644 app/assets/javascripts/packages/details/components/npm_installation.vue create mode 100644 app/assets/javascripts/packages/details/components/nuget_installation.vue create mode 100644 app/assets/javascripts/packages/details/components/package_history.vue create mode 100644 app/assets/javascripts/packages/details/components/package_title.vue create mode 100644 app/assets/javascripts/packages/details/components/pypi_installation.vue create mode 100644 app/assets/javascripts/packages/details/constants.js create mode 100644 app/assets/javascripts/packages/details/index.js create mode 100644 app/assets/javascripts/packages/details/store/actions.js create mode 100644 app/assets/javascripts/packages/details/store/getters.js create mode 100644 app/assets/javascripts/packages/details/store/index.js create mode 100644 app/assets/javascripts/packages/details/store/mutation_types.js create mode 100644 app/assets/javascripts/packages/details/store/mutations.js create mode 100644 app/assets/javascripts/packages/details/utils.js create mode 100644 app/assets/javascripts/packages/list/coming_soon/helpers.js create mode 100644 app/assets/javascripts/packages/list/coming_soon/packages_coming_soon.vue create mode 100644 app/assets/javascripts/packages/list/coming_soon/queries/issues.graphql create mode 100644 app/assets/javascripts/packages/list/components/packages_filter.vue create mode 100644 app/assets/javascripts/packages/list/components/packages_list.vue create mode 100644 app/assets/javascripts/packages/list/components/packages_list_app.vue create mode 100644 app/assets/javascripts/packages/list/components/packages_sort.vue create mode 100644 app/assets/javascripts/packages/list/constants.js create mode 100644 app/assets/javascripts/packages/list/packages_list_app_bundle.js create mode 100644 app/assets/javascripts/packages/list/stores/actions.js create mode 100644 app/assets/javascripts/packages/list/stores/getters.js create mode 100644 app/assets/javascripts/packages/list/stores/index.js create mode 100644 app/assets/javascripts/packages/list/stores/mutation_types.js create mode 100644 app/assets/javascripts/packages/list/stores/mutations.js create mode 100644 app/assets/javascripts/packages/list/stores/state.js create mode 100644 app/assets/javascripts/packages/list/utils.js create mode 100644 app/assets/javascripts/packages/shared/components/package_list_row.vue create mode 100644 app/assets/javascripts/packages/shared/components/package_tags.vue create mode 100644 app/assets/javascripts/packages/shared/components/packages_list_loader.vue create mode 100644 app/assets/javascripts/packages/shared/components/publish_method.vue create mode 100644 app/assets/javascripts/packages/shared/constants.js create mode 100644 app/assets/javascripts/packages/shared/utils.js delete mode 100644 app/assets/javascripts/pages/dashboard/projects/index.js create mode 100644 app/assets/javascripts/pages/dashboard/projects/index/components/customize_homepage_banner.vue create mode 100644 app/assets/javascripts/pages/dashboard/projects/index/index.js create mode 100644 app/assets/javascripts/pages/dashboard/projects/index/init_customize_homepage_banner.js create mode 100644 app/assets/javascripts/pages/groups/packages/index/index.js create mode 100644 app/assets/javascripts/pages/import/manifest/status/index.js create mode 100644 app/assets/javascripts/pages/projects/incidents/index/index.js create mode 100644 app/assets/javascripts/pages/projects/packages/packages/index/index.js create mode 100644 app/assets/javascripts/pages/projects/packages/packages/show/index.js create mode 100644 app/assets/javascripts/pages/projects/product_analytics/graphs/index.js create mode 100644 app/assets/javascripts/performance_constants.js create mode 100644 app/assets/javascripts/pipeline_new/components/pipeline_new_form.vue create mode 100644 app/assets/javascripts/pipeline_new/constants.js create mode 100644 app/assets/javascripts/pipeline_new/index.js create mode 100644 app/assets/javascripts/pipelines/graphql/queries/get_dag_vis_data.query.graphql create mode 100644 app/assets/javascripts/pipelines/pipeline_details_dag.js delete mode 100644 app/assets/javascripts/project_fork.js create mode 100644 app/assets/javascripts/projects/components/project_delete_button.vue delete mode 100644 app/assets/javascripts/projects/components/remove_modal.vue create mode 100644 app/assets/javascripts/projects/components/shared/delete_button.vue create mode 100644 app/assets/javascripts/projects/project_delete_button.js delete mode 100644 app/assets/javascripts/projects/project_remove_modal.js create mode 100644 app/assets/javascripts/projects/settings/access_dropdown.js create mode 100644 app/assets/javascripts/projects/settings/constants.js create mode 100644 app/assets/javascripts/protected_branches/constants.js delete mode 100644 app/assets/javascripts/protected_branches/protected_branch_access_dropdown.js delete mode 100644 app/assets/javascripts/registry/explorer/components/details_page/details_row.vue create mode 100644 app/assets/javascripts/registry/shared/components/details_row.vue delete mode 100644 app/assets/javascripts/releases/components/app_edit.vue create mode 100644 app/assets/javascripts/releases/components/app_edit_new.vue delete mode 100644 app/assets/javascripts/releases/components/app_new.vue create mode 100644 app/assets/javascripts/releases/components/form_field_container.vue create mode 100644 app/assets/javascripts/releases/components/tag_field.vue create mode 100644 app/assets/javascripts/releases/components/tag_field_existing.vue create mode 100644 app/assets/javascripts/releases/components/tag_field_new.vue create mode 100644 app/assets/javascripts/releases/util.js create mode 100644 app/assets/javascripts/repository/queries/commit.query.graphql create mode 100644 app/assets/javascripts/repository/queries/commits.query.graphql create mode 100644 app/assets/javascripts/repository/queries/files.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getCommit.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getCommits.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getFiles.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getPermissions.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getProjectPath.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getProjectShortPath.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getReadme.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/getRef.query.graphql delete mode 100644 app/assets/javascripts/repository/queries/pathLastCommit.query.graphql create mode 100644 app/assets/javascripts/repository/queries/path_last_commit.query.graphql create mode 100644 app/assets/javascripts/repository/queries/permissions.query.graphql create mode 100644 app/assets/javascripts/repository/queries/project_path.query.graphql create mode 100644 app/assets/javascripts/repository/queries/project_short_path.query.graphql create mode 100644 app/assets/javascripts/repository/queries/readme.query.graphql create mode 100644 app/assets/javascripts/repository/queries/ref.query.graphql create mode 100644 app/assets/javascripts/sidebar/components/confidential/mutations/update_issue_confidential.mutation.graphql delete mode 100644 app/assets/javascripts/sidebar/components/confidential/queries/update_issue_confidential.mutation.graphql create mode 100644 app/assets/javascripts/sidebar/components/lock/issuable_lock_form.vue delete mode 100644 app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue create mode 100644 app/assets/javascripts/sidebar/components/lock/mutations/update_issue_lock.mutation.graphql create mode 100644 app/assets/javascripts/sidebar/components/lock/mutations/update_merge_request_lock.mutation.graphql create mode 100644 app/assets/javascripts/snippets/components/snippet_blob_actions_edit.vue create mode 100644 app/assets/javascripts/snippets/utils/blob.js delete mode 100644 app/assets/javascripts/static_site_editor/components/saved_changes_message.vue create mode 100644 app/assets/javascripts/static_site_editor/services/formatter.js create mode 100644 app/assets/javascripts/static_site_editor/services/templater.js create mode 100644 app/assets/javascripts/vue_merge_request_widget/mixins/merge_request_query_variables.js create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/get_state.query.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/work_in_progress.query.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/toggle_wip.mutation.graphql create mode 100644 app/assets/javascripts/vue_shared/components/dismissible_container.vue create mode 100644 app/assets/javascripts/vue_shared/components/dismissible_feedback_alert.vue create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_utils.js create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/label_token.vue create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue create mode 100644 app/assets/javascripts/vue_shared/components/issuable/init_issuable_header_warning.js create mode 100644 app/assets/javascripts/vue_shared/components/issuable/issuable_header_warnings.vue create mode 100644 app/assets/javascripts/vue_shared/components/rich_content_editor/services/renderers/render_softbreak.js create mode 100644 app/assets/javascripts/vue_shared/components/rich_content_editor/services/renderers/render_utils.js create mode 100644 app/assets/javascripts/vue_shared/components/timezone_dropdown.vue create mode 100644 app/assets/javascripts/whats_new/components/app.vue create mode 100644 app/assets/javascripts/whats_new/components/trigger.vue create mode 100644 app/assets/javascripts/whats_new/index.js create mode 100644 app/assets/javascripts/whats_new/store/actions.js create mode 100644 app/assets/javascripts/whats_new/store/index.js create mode 100644 app/assets/javascripts/whats_new/store/mutation_types.js create mode 100644 app/assets/javascripts/whats_new/store/mutations.js create mode 100644 app/assets/javascripts/whats_new/store/state.js create mode 100644 app/assets/stylesheets/fontawesome_custom.scss delete mode 100644 app/assets/stylesheets/pages/alert_management/list.scss create mode 100644 app/assets/stylesheets/pages/incident_management_list.scss create mode 100644 app/assets/stylesheets/pages/packages.scss create mode 100644 app/assets/stylesheets/startup/_cloaking.scss create mode 100644 app/assets/stylesheets/startup/startup-general.scss create mode 100644 app/controllers/concerns/graceful_timeout_handling.rb create mode 100644 app/controllers/concerns/packages_access.rb create mode 100644 app/controllers/groups/packages_controller.rb create mode 100644 app/controllers/groups/releases_controller.rb create mode 100644 app/controllers/import/available_namespaces_controller.rb create mode 100644 app/controllers/projects/incidents_controller.rb create mode 100644 app/controllers/projects/metrics/dashboards/builder_controller.rb create mode 100644 app/controllers/projects/packages/package_files_controller.rb create mode 100644 app/controllers/projects/packages/packages_controller.rb create mode 100644 app/controllers/projects/product_analytics_controller.rb create mode 100644 app/finders/concerns/merged_at_filter.rb create mode 100644 app/graphql/mutations/boards/issues/issue_move_list.rb create mode 100644 app/graphql/mutations/boards/lists/base.rb create mode 100644 app/graphql/mutations/boards/lists/create.rb create mode 100644 app/graphql/mutations/boards/lists/update.rb create mode 100644 app/graphql/mutations/concerns/mutations/assignable.rb create mode 100644 app/graphql/mutations/concerns/mutations/resolves_subscription.rb create mode 100644 app/graphql/mutations/design_management/move.rb create mode 100644 app/graphql/mutations/issues/set_assignees.rb create mode 100644 app/graphql/mutations/issues/set_subscription.rb create mode 100644 app/graphql/resolvers/board_list_issues_resolver.rb create mode 100644 app/graphql/resolvers/ci/pipeline_stages_resolver.rb delete mode 100644 app/graphql/resolvers/ci_configuration/sast_resolver.rb create mode 100644 app/graphql/resolvers/concerns/issue_resolver_fields.rb create mode 100644 app/graphql/resolvers/group_issues_resolver.rb create mode 100644 app/graphql/resolvers/group_milestones_resolver.rb create mode 100644 app/graphql/resolvers/issue_status_counts_resolver.rb delete mode 100644 app/graphql/resolvers/milestone_resolver.rb create mode 100644 app/graphql/resolvers/milestones_resolver.rb create mode 100644 app/graphql/resolvers/project_milestones_resolver.rb create mode 100644 app/graphql/types/ci/group_type.rb create mode 100644 app/graphql/types/ci/job_type.rb create mode 100644 app/graphql/types/ci/pipeline_config_source_enum.rb create mode 100644 app/graphql/types/ci/stage_type.rb delete mode 100644 app/graphql/types/ci_configuration/sast/analyzers_entity_type.rb delete mode 100644 app/graphql/types/ci_configuration/sast/entity_type.rb delete mode 100644 app/graphql/types/ci_configuration/sast/options_entity_type.rb delete mode 100644 app/graphql/types/ci_configuration/sast/type.rb create mode 100644 app/graphql/types/countable_connection_type.rb delete mode 100644 app/graphql/types/issue_connection_type.rb create mode 100644 app/graphql/types/issue_status_counts_type.rb create mode 100644 app/graphql/types/issue_type_enum.rb create mode 100644 app/graphql/types/prometheus_alert_type.rb create mode 100644 app/graphql/types/snippets/blob_action_enum.rb create mode 100644 app/graphql/types/snippets/blob_action_input_type.rb delete mode 100644 app/graphql/types/snippets/file_input_action_enum.rb delete mode 100644 app/graphql/types/snippets/file_input_type.rb create mode 100644 app/graphql/types/user_status_type.rb create mode 100644 app/helpers/ci/pipelines_helper.rb create mode 100644 app/helpers/namespace_storage_limit_alert_helper.rb create mode 100644 app/helpers/packages_helper.rb create mode 100644 app/helpers/product_analytics_helper.rb create mode 100644 app/helpers/projects/incidents_helper.rb create mode 100644 app/helpers/projects/issues/service_desk_helper.rb create mode 100644 app/models/audit_event_partitioned.rb create mode 100644 app/models/ci/pipeline_artifact.rb create mode 100644 app/models/clusters/agent.rb create mode 100644 app/models/clusters/agent_token.rb create mode 100644 app/models/concerns/ci/artifactable.rb create mode 100644 app/models/concerns/counter_attribute.rb create mode 100644 app/models/concerns/file_store_mounter.rb create mode 100644 app/models/experiment.rb create mode 100644 app/models/experiment_user.rb create mode 100644 app/models/group_deploy_keys_group.rb delete mode 100644 app/models/project_services/gitlab_issue_tracker_service.rb create mode 100644 app/models/raw_usage_data.rb create mode 100644 app/models/resource_iteration_event.rb create mode 100644 app/models/resource_timebox_event.rb create mode 100644 app/policies/concerns/readonly_abilities.rb create mode 100644 app/policies/group_deploy_key_policy.rb create mode 100644 app/policies/group_deploy_keys_group_policy.rb create mode 100644 app/policies/personal_access_token_policy.rb create mode 100644 app/policies/prometheus_alert_policy.rb create mode 100644 app/presenters/prometheus_alert_presenter.rb create mode 100644 app/serializers/cluster_error_entity.rb create mode 100644 app/serializers/group_basic_entity.rb create mode 100644 app/serializers/group_deploy_key_entity.rb create mode 100644 app/serializers/group_deploy_key_serializer.rb create mode 100644 app/serializers/group_deploy_keys_group_entity.rb create mode 100644 app/serializers/import/manifest_provider_repo_entity.rb create mode 100644 app/serializers/merge_requests/pipeline_entity.rb create mode 100644 app/serializers/release_entity.rb create mode 100644 app/serializers/release_serializer.rb create mode 100644 app/services/award_emojis/copy_service.rb create mode 100644 app/services/ci/change_variable_service.rb create mode 100644 app/services/ci/change_variables_service.rb delete mode 100644 app/services/ci/pipeline_processing/legacy_processing_service.rb create mode 100644 app/services/design_management/move_designs_service.rb delete mode 100644 app/services/incident_management/create_issue_service.rb create mode 100644 app/services/incident_management/incidents/create_service.rb delete mode 100644 app/services/issuable/clone/content_rewriter.rb create mode 100644 app/services/jira_import/cloud_users_mapper_service.rb create mode 100644 app/services/jira_import/server_users_mapper_service.rb delete mode 100644 app/services/jira_import/users_mapper.rb create mode 100644 app/services/jira_import/users_mapper_service.rb create mode 100644 app/services/markdown_content_rewriter_service.rb create mode 100644 app/services/metrics/dashboard/panel_preview_service.rb create mode 100644 app/services/notes/copy_service.rb create mode 100644 app/services/personal_access_tokens/revoke_service.rb create mode 100644 app/services/product_analytics/build_graph_service.rb create mode 100644 app/services/projects/container_repository/gitlab/delete_tags_service.rb create mode 100644 app/services/projects/container_repository/third_party/delete_tags_service.rb create mode 100644 app/services/resource_events/base_change_timebox_service.rb create mode 100644 app/uploaders/ci/pipeline_artifact_uploader.rb create mode 100644 app/views/ci/deploy_freeze/_index.html.haml create mode 100644 app/views/dashboard/projects/shared/_common.html.haml create mode 100644 app/views/groups/group_members/tab_pane/_form_item.html.haml create mode 100644 app/views/groups/group_members/tab_pane/_header.html.haml create mode 100644 app/views/groups/group_members/tab_pane/_title.html.haml create mode 100644 app/views/groups/packages/_legacy_package_list.haml create mode 100644 app/views/groups/packages/index.html.haml delete mode 100644 app/views/help/ui.html.haml create mode 100644 app/views/layouts/_startup_css.haml create mode 100644 app/views/layouts/_startup_css_activation.haml create mode 100644 app/views/layouts/devise_experimental_onboarding_issues.html.haml create mode 100644 app/views/notify/access_token_expired_email.html.haml create mode 100644 app/views/notify/access_token_expired_email.text.erb create mode 100644 app/views/projects/ci/lints/_lint_warnings.html.haml create mode 100644 app/views/projects/commit/diff_files.html.haml create mode 100644 app/views/projects/incidents/index.html.haml create mode 100644 app/views/projects/issues/_service_desk_empty_state.html.haml create mode 100644 app/views/projects/packages/packages/_legacy_package_list.html.haml create mode 100644 app/views/projects/packages/packages/index.html.haml create mode 100644 app/views/projects/packages/packages/show.html.haml create mode 100644 app/views/projects/pipelines/_pipeline_warnings.html.haml create mode 100644 app/views/projects/product_analytics/_graph.html.haml create mode 100644 app/views/projects/product_analytics/_links.html.haml create mode 100644 app/views/projects/product_analytics/_tracker.html.erb create mode 100644 app/views/projects/product_analytics/graphs.html.haml create mode 100644 app/views/projects/product_analytics/index.html.haml create mode 100644 app/views/projects/product_analytics/setup.html.haml create mode 100644 app/views/projects/product_analytics/test.html.haml delete mode 100644 app/views/shared/_field.html.haml create mode 100644 app/views/shared/empty_states/_deploy_keys.html.haml create mode 100644 app/views/shared/members/_search_field.html.haml delete mode 100644 app/views/shared/milestones/_deprecation_message.html.haml create mode 100644 app/views/shared/packages/_no_packages.html.haml create mode 100644 app/views/shared/projects/protected_branches/_update_protected_branch.html.haml create mode 100644 app/workers/flush_counter_increments_worker.rb create mode 100644 app/workers/pages_update_configuration_worker.rb create mode 100644 app/workers/personal_access_tokens/expired_notification_worker.rb (limited to 'app') diff --git a/app/assets/images/mailers/approval/icon-merge-request-gray.gif b/app/assets/images/mailers/approval/icon-merge-request-gray.gif new file mode 100644 index 00000000000..6eef39d3b1e Binary files /dev/null and b/app/assets/images/mailers/approval/icon-merge-request-gray.gif differ diff --git a/app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_trigger.vue b/app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_trigger.vue new file mode 100644 index 00000000000..78a575ffe96 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_trigger.vue @@ -0,0 +1,49 @@ + + + diff --git a/app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_wrapper.vue b/app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_wrapper.vue new file mode 100644 index 00000000000..cb9aa50fa68 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/components/add_context_commits_modal_wrapper.vue @@ -0,0 +1,279 @@ + + + diff --git a/app/assets/javascripts/add_context_commits_modal/components/review_tab_container.vue b/app/assets/javascripts/add_context_commits_modal/components/review_tab_container.vue new file mode 100644 index 00000000000..36e3449ff27 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/components/review_tab_container.vue @@ -0,0 +1,57 @@ + + diff --git a/app/assets/javascripts/add_context_commits_modal/event_hub.js b/app/assets/javascripts/add_context_commits_modal/event_hub.js new file mode 100644 index 00000000000..e31806ad199 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/event_hub.js @@ -0,0 +1,3 @@ +import createEventHub from '~/helpers/event_hub_factory'; + +export default createEventHub(); diff --git a/app/assets/javascripts/add_context_commits_modal/index.js b/app/assets/javascripts/add_context_commits_modal/index.js new file mode 100644 index 00000000000..b5cd111fabc --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/index.js @@ -0,0 +1,64 @@ +import Vue from 'vue'; +import { parseBoolean } from '~/lib/utils/common_utils'; +import createStore from './store'; +import AddContextCommitsModalTrigger from './components/add_context_commits_modal_trigger.vue'; +import AddContextCommitsModalWrapper from './components/add_context_commits_modal_wrapper.vue'; + +export default function initAddContextCommitsTriggers() { + const addContextCommitsModalTriggerEl = document.querySelector('.add-review-item-modal-trigger'); + const addContextCommitsModalWrapperEl = document.querySelector('.add-review-item-modal-wrapper'); + + if (addContextCommitsModalTriggerEl || addContextCommitsModalWrapperEl) { + // eslint-disable-next-line no-new + new Vue({ + el: addContextCommitsModalTriggerEl, + data() { + const { commitsEmpty, contextCommitsEmpty } = this.$options.el.dataset; + return { + commitsEmpty: parseBoolean(commitsEmpty), + contextCommitsEmpty: parseBoolean(contextCommitsEmpty), + }; + }, + render(createElement) { + return createElement(AddContextCommitsModalTrigger, { + props: { + commitsEmpty: this.commitsEmpty, + contextCommitsEmpty: this.contextCommitsEmpty, + }, + }); + }, + }); + + const store = createStore(); + + // eslint-disable-next-line no-new + new Vue({ + el: addContextCommitsModalWrapperEl, + store, + data() { + const { + contextCommitsPath, + targetBranch, + mergeRequestIid, + projectId, + } = this.$options.el.dataset; + return { + contextCommitsPath, + targetBranch, + mergeRequestIid: Number(mergeRequestIid), + projectId: Number(projectId), + }; + }, + render(createElement) { + return createElement(AddContextCommitsModalWrapper, { + props: { + contextCommitsPath: this.contextCommitsPath, + targetBranch: this.targetBranch, + mergeRequestIid: this.mergeRequestIid, + projectId: this.projectId, + }, + }); + }, + }); + } +} diff --git a/app/assets/javascripts/add_context_commits_modal/store/actions.js b/app/assets/javascripts/add_context_commits_modal/store/actions.js new file mode 100644 index 00000000000..d23955182b2 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/store/actions.js @@ -0,0 +1,134 @@ +import _ from 'lodash'; +import axios from '~/lib/utils/axios_utils'; +import { deprecatedCreateFlash as createFlash } from '~/flash'; +import { s__ } from '~/locale'; +import Api from '~/api'; +import * as types from './mutation_types'; + +export const setBaseConfig = ({ commit }, options) => { + commit(types.SET_BASE_CONFIG, options); +}; + +export const setTabIndex = ({ commit }, tabIndex) => commit(types.SET_TABINDEX, tabIndex); + +export const searchCommits = ({ dispatch, commit, state }, searchText) => { + commit(types.FETCH_COMMITS); + + let params = {}; + if (searchText) { + params = { + params: { + search: searchText, + per_page: 40, + }, + }; + } + + return axios + .get(state.contextCommitsPath, params) + .then(({ data }) => { + let commits = data.map(o => ({ ...o, isSelected: false })); + commits = commits.map(c => { + const isPresent = state.selectedCommits.find( + selectedCommit => selectedCommit.short_id === c.short_id && selectedCommit.isSelected, + ); + if (isPresent) { + return { ...c, isSelected: true }; + } + return c; + }); + if (!searchText) { + dispatch('setCommits', { commits: [...commits, ...state.contextCommits] }); + } else { + dispatch('setCommits', { commits }); + } + }) + .catch(() => { + commit(types.FETCH_COMMITS_ERROR); + }); +}; + +export const setCommits = ({ commit }, { commits: data, silentAddition = false }) => { + let commits = _.uniqBy(data, 'short_id'); + commits = _.orderBy(data, c => new Date(c.committed_date), ['desc']); + if (silentAddition) { + commit(types.SET_COMMITS_SILENT, commits); + } else { + commit(types.SET_COMMITS, commits); + } +}; + +export const createContextCommits = ({ state }, { commits, forceReload = false }) => + Api.createContextCommits(state.projectId, state.mergeRequestIid, { + commits: commits.map(commit => commit.short_id), + }) + .then(() => { + if (forceReload) { + window.location.reload(); + } + + return true; + }) + .catch(() => { + if (forceReload) { + createFlash(s__('ContextCommits|Failed to create context commits. Please try again.')); + } + + return false; + }); + +export const fetchContextCommits = ({ dispatch, commit, state }) => { + commit(types.FETCH_CONTEXT_COMMITS); + return Api.allContextCommits(state.projectId, state.mergeRequestIid) + .then(({ data }) => { + const contextCommits = data.map(o => ({ ...o, isSelected: true })); + dispatch('setContextCommits', contextCommits); + dispatch('setCommits', { + commits: [...state.commits, ...contextCommits], + silentAddition: true, + }); + dispatch('setSelectedCommits', contextCommits); + }) + .catch(() => { + commit(types.FETCH_CONTEXT_COMMITS_ERROR); + }); +}; + +export const setContextCommits = ({ commit }, data) => { + commit(types.SET_CONTEXT_COMMITS, data); +}; + +export const removeContextCommits = ({ state }, forceReload = false) => + Api.removeContextCommits(state.projectId, state.mergeRequestIid, { + commits: state.toRemoveCommits, + }) + .then(() => { + if (forceReload) { + window.location.reload(); + } + + return true; + }) + .catch(() => { + if (forceReload) { + createFlash(s__('ContextCommits|Failed to delete context commits. Please try again.')); + } + + return false; + }); + +export const setSelectedCommits = ({ commit }, selected) => { + let selectedCommits = _.uniqBy(selected, 'short_id'); + selectedCommits = _.orderBy( + selectedCommits, + selectedCommit => new Date(selectedCommit.committed_date), + ['desc'], + ); + commit(types.SET_SELECTED_COMMITS, selectedCommits); +}; + +export const setSearchText = ({ commit }, searchText) => commit(types.SET_SEARCH_TEXT, searchText); + +export const setToRemoveCommits = ({ commit }, data) => commit(types.SET_TO_REMOVE_COMMITS, data); + +export const resetModalState = ({ commit }) => commit(types.RESET_MODAL_STATE); diff --git a/app/assets/javascripts/add_context_commits_modal/store/index.js b/app/assets/javascripts/add_context_commits_modal/store/index.js new file mode 100644 index 00000000000..0bf3441379b --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/store/index.js @@ -0,0 +1,15 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import * as actions from './actions'; +import mutations from './mutations'; +import state from './state'; + +Vue.use(Vuex); + +export default () => + new Vuex.Store({ + namespaced: true, + state: state(), + actions, + mutations, + }); diff --git a/app/assets/javascripts/add_context_commits_modal/store/mutation_types.js b/app/assets/javascripts/add_context_commits_modal/store/mutation_types.js new file mode 100644 index 00000000000..eda82f3984d --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/store/mutation_types.js @@ -0,0 +1,20 @@ +export const SET_BASE_CONFIG = 'SET_BASE_CONFIG'; + +export const SET_TABINDEX = 'SET_TABINDEX'; + +export const FETCH_COMMITS = 'FETCH_COMMITS'; +export const SET_COMMITS = 'SET_COMMITS'; +export const SET_COMMITS_SILENT = 'SET_COMMITS_SILENT'; +export const FETCH_COMMITS_ERROR = 'FETCH_COMMITS_ERROR'; + +export const FETCH_CONTEXT_COMMITS = 'FETCH_CONTEXT_COMMITS'; +export const SET_CONTEXT_COMMITS = 'SET_CONTEXT_COMMITS'; +export const FETCH_CONTEXT_COMMITS_ERROR = 'FETCH_CONTEXT_COMMITS_ERROR'; + +export const SET_SELECTED_COMMITS = 'SET_SELECTED_COMMITS'; + +export const SET_SEARCH_TEXT = 'SET_SEARCH_TEXT'; + +export const SET_TO_REMOVE_COMMITS = 'SET_TO_REMOVE_COMMITS'; + +export const RESET_MODAL_STATE = 'RESET_MODAL_STATE'; diff --git a/app/assets/javascripts/add_context_commits_modal/store/mutations.js b/app/assets/javascripts/add_context_commits_modal/store/mutations.js new file mode 100644 index 00000000000..8a3da0ca248 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/store/mutations.js @@ -0,0 +1,56 @@ +import * as types from './mutation_types'; + +export default { + [types.SET_BASE_CONFIG](state, options) { + Object.assign(state, { ...options }); + }, + [types.SET_TABINDEX](state, tabIndex) { + state.tabIndex = tabIndex; + }, + [types.FETCH_COMMITS](state) { + state.isLoadingCommits = true; + state.commitsLoadingError = false; + }, + [types.SET_COMMITS](state, commits) { + state.commits = commits; + state.isLoadingCommits = false; + state.commitsLoadingError = false; + }, + [types.SET_COMMITS_SILENT](state, commits) { + state.commits = commits; + }, + [types.FETCH_COMMITS_ERROR](state) { + state.commitsLoadingError = true; + state.isLoadingCommits = false; + }, + [types.FETCH_CONTEXT_COMMITS](state) { + state.isLoadingContextCommits = true; + state.contextCommitsLoadingError = false; + }, + [types.SET_CONTEXT_COMMITS](state, contextCommits) { + state.contextCommits = contextCommits; + state.isLoadingContextCommits = false; + state.contextCommitsLoadingError = false; + }, + [types.FETCH_CONTEXT_COMMITS_ERROR](state) { + state.contextCommitsLoadingError = true; + state.isLoadingContextCommits = false; + }, + [types.SET_SELECTED_COMMITS](state, commits) { + state.selectedCommits = commits; + }, + [types.SET_SEARCH_TEXT](state, searchText) { + state.searchText = searchText; + }, + [types.SET_TO_REMOVE_COMMITS](state, commits) { + state.toRemoveCommits = commits; + }, + [types.RESET_MODAL_STATE](state) { + state.tabIndex = 0; + state.commits = []; + state.contextCommits = []; + state.selectedCommits = []; + state.toRemoveCommits = []; + state.searchText = ''; + }, +}; diff --git a/app/assets/javascripts/add_context_commits_modal/store/state.js b/app/assets/javascripts/add_context_commits_modal/store/state.js new file mode 100644 index 00000000000..37239adccbb --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/store/state.js @@ -0,0 +1,13 @@ +export default () => ({ + contextCommitsPath: '', + tabIndex: 0, + isLoadingCommits: false, + commits: [], + commitsLoadingError: false, + selectedCommits: [], + isLoadingContextCommits: false, + contextCommits: [], + contextCommitsLoadingError: false, + searchText: '', + toRemoveCommits: [], +}); diff --git a/app/assets/javascripts/add_context_commits_modal/utils.js b/app/assets/javascripts/add_context_commits_modal/utils.js new file mode 100644 index 00000000000..3495ee17cd3 --- /dev/null +++ b/app/assets/javascripts/add_context_commits_modal/utils.js @@ -0,0 +1,32 @@ +export const findCommitIndex = (commits, commitShortId) => { + return commits.findIndex(commit => commit.short_id === commitShortId); +}; + +export const setCommitStatus = (commits, commitIndex, selected) => { + const tempCommits = [...commits]; + tempCommits[commitIndex] = { + ...tempCommits[commitIndex], + isSelected: selected, + }; + return tempCommits; +}; + +export const removeIfReadyToBeRemoved = (toRemoveCommits, commitShortId) => { + const tempToRemoveCommits = [...toRemoveCommits]; + const isPresentInToRemove = tempToRemoveCommits.indexOf(commitShortId); + if (isPresentInToRemove !== -1) { + tempToRemoveCommits.splice(isPresentInToRemove, 1); + } + + return tempToRemoveCommits; +}; + +export const removeIfPresent = (selectedCommits, commitShortId) => { + const tempSelectedCommits = [...selectedCommits]; + const selectedCommitsIndex = findCommitIndex(tempSelectedCommits, commitShortId); + if (selectedCommitsIndex !== -1) { + tempSelectedCommits.splice(selectedCommitsIndex, 1); + } + + return tempSelectedCommits; +}; diff --git a/app/assets/javascripts/admin/statistics_panel/store/actions.js b/app/assets/javascripts/admin/statistics_panel/store/actions.js index 537025f524c..dd04e492388 100644 --- a/app/assets/javascripts/admin/statistics_panel/store/actions.js +++ b/app/assets/javascripts/admin/statistics_panel/store/actions.js @@ -1,6 +1,6 @@ import Api from '~/api'; import { s__ } from '~/locale'; -import createFlash from '~/flash'; +import { deprecatedCreateFlash as createFlash } from '~/flash'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import * as types from './mutation_types'; @@ -23,6 +23,3 @@ export const receiveStatisticsError = ({ commit }, error) => { commit(types.RECEIVE_STATISTICS_ERROR, error); createFlash(s__('AdminDashboard|Error loading the statistics. Please try again')); }; - -// prevent babel-plugin-rewire from generating an invalid default during karma tests -export default () => {}; diff --git a/app/assets/javascripts/admin/statistics_panel/store/getters.js b/app/assets/javascripts/admin/statistics_panel/store/getters.js index 24437bc76bf..2aa34b8f38e 100644 --- a/app/assets/javascripts/admin/statistics_panel/store/getters.js +++ b/app/assets/javascripts/admin/statistics_panel/store/getters.js @@ -3,6 +3,7 @@ * and returns an array of the following form: * [{ key: "forks", label: "Forks", value: 50 }] */ +// eslint-disable-next-line import/prefer-default-export export const getStatistics = state => labels => Object.keys(labels).map(key => { const result = { @@ -12,6 +13,3 @@ export const getStatistics = state => labels => }; return result; }); - -// prevent babel-plugin-rewire from generating an invalid default during karma tests -export default () => {}; diff --git a/app/assets/javascripts/alert_management/components/alert_details.vue b/app/assets/javascripts/alert_management/components/alert_details.vue index 0731349630c..5d260fcc200 100644 --- a/app/assets/javascripts/alert_management/components/alert_details.vue +++ b/app/assets/javascripts/alert_management/components/alert_details.vue @@ -35,13 +35,24 @@ export default { errorMsg: s__( 'AlertManagement|There was an error displaying the alert. Please refresh the page to try again.', ), - fullAlertDetailsTitle: s__('AlertManagement|Alert details'), - overviewTitle: s__('AlertManagement|Overview'), - metricsTitle: s__('AlertManagement|Metrics'), reportedAt: s__('AlertManagement|Reported %{when}'), reportedAtWithTool: s__('AlertManagement|Reported %{when} by %{tool}'), }, severityLabels: ALERTS_SEVERITY_LABELS, + tabsConfig: [ + { + id: 'overview', + title: s__('AlertManagement|Overview'), + }, + { + id: 'fullDetails', + title: s__('AlertManagement|Alert details'), + }, + { + id: 'metrics', + title: s__('AlertManagement|Metrics'), + }, + ], components: { GlBadge, GlAlert, @@ -102,8 +113,8 @@ export default { errored: false, sidebarStatus: false, isErrorDismissed: false, - createIssueError: '', - issueCreationInProgress: false, + createIncidentError: '', + incidentCreationInProgress: false, sidebarErrorMessage: '', }; }, @@ -119,6 +130,18 @@ export default { showErrorMsg() { return this.errored && !this.isErrorDismissed; }, + activeTab() { + return this.$route.params.tabId || this.$options.tabsConfig[0].id; + }, + currentTabIndex: { + get() { + return this.$options.tabsConfig.findIndex(tab => tab.id === this.activeTab); + }, + set(tabIdx) { + const tabId = this.$options.tabsConfig[tabIdx].id; + this.$router.replace({ name: 'tab', params: { tabId } }); + }, + }, }, mounted() { this.trackPageViews(); @@ -149,8 +172,8 @@ export default { this.errored = true; this.sidebarErrorMessage = errorMessage; }, - createIssue() { - this.issueCreationInProgress = true; + createIncident() { + this.incidentCreationInProgress = true; this.$apollo .mutate({ @@ -162,18 +185,18 @@ export default { }) .then(({ data: { createAlertIssue: { errors, issue } } }) => { if (errors?.length) { - [this.createIssueError] = errors; - this.issueCreationInProgress = false; + [this.createIncidentError] = errors; + this.incidentCreationInProgress = false; } else if (issue) { - visitUrl(this.issuePath(issue.iid)); + visitUrl(this.incidentPath(issue.iid)); } }) .catch(error => { - this.createIssueError = error; - this.issueCreationInProgress = false; + this.createIncidentError = error; + this.incidentCreationInProgress = false; }); }, - issuePath(issueId) { + incidentPath(issueId) { return joinPaths(this.projectIssuesPath, issueId); }, trackPageViews() { @@ -190,12 +213,12 @@ export default {

- {{ createIssueError }} + {{ createIncidentError }}
-
-
- - {{ s__('AlertManagement|Alert') }} - -
+
+ + {{ s__('AlertManagement|Alert') }} + -
+
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 62fef108b47..daade611651 100644 --- a/app/assets/javascripts/blob/components/blob_header_default_actions.vue +++ b/app/assets/javascripts/blob/components/blob_header_default_actions.vue @@ -1,5 +1,5 @@ diff --git a/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue b/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue index 5b15fe2d7cc..902dd0b8eec 100644 --- a/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue +++ b/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue @@ -1,5 +1,5 @@ + + diff --git a/app/assets/javascripts/boards/components/board_sidebar.js b/app/assets/javascripts/boards/components/board_sidebar.js index 056a7b48212..3790c494085 100644 --- a/app/assets/javascripts/boards/components/board_sidebar.js +++ b/app/assets/javascripts/boards/components/board_sidebar.js @@ -3,7 +3,7 @@ import $ from 'jquery'; import Vue from 'vue'; import { GlLabel } from '@gitlab/ui'; -import Flash from '~/flash'; +import { deprecatedCreateFlash as Flash } from '~/flash'; import { sprintf, __ } from '~/locale'; import Sidebar from '~/right_sidebar'; import eventHub from '~/sidebar/event_hub'; diff --git a/app/assets/javascripts/boards/components/boards_selector.vue b/app/assets/javascripts/boards/components/boards_selector.vue index dbe3e0790f6..48f6ba6cfc7 100644 --- a/app/assets/javascripts/boards/components/boards_selector.vue +++ b/app/assets/javascripts/boards/components/boards_selector.vue @@ -3,10 +3,10 @@ import { throttle } from 'lodash'; import { GlLoadingIcon, GlSearchBoxByType, - GlDropdown, - GlDropdownDivider, - GlDropdownHeader, - GlDropdownItem, + GlDeprecatedDropdown, + GlDeprecatedDropdownDivider, + GlDeprecatedDropdownHeader, + GlDeprecatedDropdownItem, } from '@gitlab/ui'; import httpStatusCodes from '~/lib/utils/http_status'; @@ -26,10 +26,10 @@ export default { BoardForm, GlLoadingIcon, GlSearchBoxByType, - GlDropdown, - GlDropdownDivider, - GlDropdownHeader, - GlDropdownItem, + GlDeprecatedDropdown, + GlDeprecatedDropdownDivider, + GlDeprecatedDropdownHeader, + GlDeprecatedDropdownItem, }, props: { currentBoard: { @@ -235,7 +235,7 @@ export default {