From 3b1af5cc7ed2666ff18b718ce5d30fa5a2756674 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 20 Jun 2023 10:43:29 +0000 Subject: Add latest changes from gitlab-org/gitlab@16-1-stable-ee --- app/assets/images/auth_buttons/shibboleth_64.png | Bin 0 -> 2993 bytes .../components/abuse_category_selector.vue | 6 +- .../add_context_commits_modal_trigger.vue | 2 +- .../abuse_report/components/abuse_report_app.vue | 29 +- .../abuse_report/components/report_actions.vue | 206 +++++++ .../abuse_report/components/report_header.vue | 62 +- .../abuse_report/components/reported_content.vue | 9 +- .../javascripts/admin/abuse_report/constants.js | 50 +- .../components/abuse_report_actions.vue | 177 ------ .../javascripts/admin/abuse_reports/constants.js | 10 - .../broadcast_messages/components/message_form.vue | 24 +- .../admin/broadcast_messages/constants.js | 1 + .../javascripts/admin/broadcast_messages/edit.js | 5 +- .../components/alert_mapping_builder.vue | 6 +- .../cycle_analytics/components/filter_bar.vue | 3 + .../components/value_stream_filters.vue | 1 + .../analytics/cycle_analytics/constants.js | 1 + .../shared/components/projects_dropdown_filter.vue | 190 +++---- .../javascripts/analytics/shared/constants.js | 58 +- app/assets/javascripts/api.js | 7 + app/assets/javascripts/api/user_api.js | 11 + app/assets/javascripts/artifacts_settings/index.js | 4 +- .../keep_latest_artifact_checkbox.vue | 104 ---- .../keep_latest_artifact_toggle.vue | 110 ++++ .../password/components/password_input.vue | 10 +- .../batch_comments/components/diff_file_drafts.vue | 15 +- .../batch_comments/components/review_bar.vue | 4 +- .../batch_comments/components/submit_dropdown.vue | 2 +- .../stores/modules/batch_comments/actions.js | 12 +- .../stores/modules/batch_comments/getters.js | 2 +- .../modules/batch_comments/mutation_types.js | 2 + .../stores/modules/batch_comments/mutations.js | 3 + .../stores/modules/batch_comments/state.js | 1 + app/assets/javascripts/behaviors/markdown/utils.js | 27 + .../javascripts/behaviors/shortcuts/keybindings.js | 43 -- .../behaviors/shortcuts/shortcuts_navigation.js | 2 - app/assets/javascripts/blame/streaming/index.js | 4 + .../javascripts/blob/components/table_contents.vue | 5 - .../javascripts/blob/file_template_mediator.js | 2 - .../metrics_dashboard_selector.js | 29 - app/assets/javascripts/boards/boards_util.js | 56 +- .../boards/components/board_add_new_column.vue | 132 ++++- .../components/board_add_new_column_form.vue | 10 +- .../components/board_add_new_column_trigger.vue | 11 +- .../javascripts/boards/components/board_app.vue | 7 + .../components/board_card_move_to_position.vue | 25 +- .../javascripts/boards/components/board_column.vue | 10 +- .../boards/components/board_content.vue | 148 ++++- .../javascripts/boards/components/board_list.vue | 210 ++++++- .../boards/components/board_list_header.vue | 16 +- .../boards/components/board_settings_sidebar.vue | 6 +- .../boards/components/board_top_bar.vue | 12 +- .../boards/components/project_select.vue | 90 ++- app/assets/javascripts/boards/constants.js | 16 + .../javascripts/boards/graphql/cache_updates.js | 118 ++++ .../graphql/issue_move_list.mutation.graphql | 4 +- app/assets/javascripts/boards/stores/actions.js | 8 +- .../branches/components/branch_more_actions.vue | 114 ++++ .../branches/components/delete_branch_button.vue | 85 --- .../branches/components/delete_merged_branches.vue | 10 + .../branches/components/sort_dropdown.vue | 2 +- .../branches/init_branch_more_actions.js | 35 ++ .../branches/init_delete_branch_button.js | 35 -- .../ci/artifacts/components/artifact_row.vue | 5 +- .../artifacts/components/job_artifacts_table.vue | 64 ++- .../ci/artifacts/components/job_checkbox.vue | 4 +- app/assets/javascripts/ci/artifacts/constants.js | 2 +- app/assets/javascripts/ci/artifacts/utils.js | 7 +- .../javascripts/ci/ci_lint/components/ci_lint.vue | 2 +- .../components/ci_variable_modal.vue | 34 +- .../components/ci_variable_table.vue | 163 ++++-- .../javascripts/ci/ci_variable_list/constants.js | 18 +- .../javascripts/ci/ci_variable_list/index.js | 1 + .../components/inherited_ci_variables_app.vue | 110 ++++ .../queries/inherited_ci_variables.query.graphql | 24 + .../javascripts/ci/inherited_ci_variables/index.js | 36 ++ .../components/drawer/pipeline_editor_drawer.vue | 13 +- .../components/editor/ci_editor_header.vue | 32 +- .../components/file_nav/branch_switcher.vue | 2 - .../header/pipeline_editor_mini_graph.vue | 2 +- .../components/header/pipeline_status.vue | 17 +- .../accordion_items/artifacts_and_cache_item.vue | 19 +- .../accordion_items/image_item.vue | 21 +- .../accordion_items/rules_item.vue | 14 +- .../accordion_items/services_item.vue | 23 +- .../components/job_assistant_drawer/constants.js | 23 +- .../job_assistant_drawer/job_assistant_drawer.vue | 14 +- .../components/pipeline_editor_tabs.vue | 12 +- .../javascripts/ci/pipeline_editor/constants.js | 6 + .../ci/pipeline_editor/graphql/resolvers.js | 52 +- app/assets/javascripts/ci/pipeline_editor/index.js | 141 +---- .../javascripts/ci/pipeline_editor/options.js | 142 +++++ .../ci/pipeline_editor/pipeline_editor_home.vue | 84 +-- .../ci/pipeline_new/components/refs_dropdown.vue | 8 + .../components/pipeline_schedules_empty_state.vue | 2 +- .../admin_new_runner/admin_new_runner_app.vue | 6 +- .../admin_runner_show/admin_runner_show_app.vue | 4 +- .../runner/components/cells/runner_status_cell.vue | 11 +- .../components/cells/runner_summary_cell.vue | 9 +- .../components/registration/platforms_drawer.vue | 6 +- .../registration/registration_feedback_banner.vue | 2 +- .../ci/runner/components/runner_create_form.vue | 41 +- .../ci/runner/components/runner_delete_button.vue | 4 + .../ci/runner/components/runner_delete_modal.vue | 49 +- .../ci/runner/components/runner_details.vue | 44 +- .../ci/runner/components/runner_form_fields.vue | 214 ++++--- .../ci/runner/components/runner_header.vue | 38 +- .../runner/components/runner_jobs_empty_state.vue | 8 +- .../runner/components/runner_list_empty_state.vue | 79 ++- .../ci/runner/components/runner_managers_badge.vue | 47 ++ .../runner/components/runner_managers_detail.vue | 111 ++++ .../ci/runner/components/runner_managers_table.vue | 75 +++ .../ci/runner/components/runner_name.vue | 12 +- .../ci/runner/components/runner_pause_button.vue | 16 +- .../ci/runner/components/runner_status_badge.vue | 20 +- .../ci/runner/components/runner_update_form.vue | 143 +---- app/assets/javascripts/ci/runner/constants.js | 26 +- .../edit/runner_fields_shared.fragment.graphql | 2 +- .../graphql/list/list_item_shared.fragment.graphql | 5 +- .../shared/runner_toggle_active.mutation.graphql | 12 - .../shared/runner_toggle_paused.mutation.graphql | 12 + .../show/runner_details_shared.fragment.graphql | 5 +- .../graphql/show/runner_manager.fragment.graphql | 5 + .../show/runner_manager_shared.fragment.graphql | 12 + .../graphql/show/runner_managers.query.graphql | 13 + .../group_new_runner/group_new_runner_app.vue | 6 +- .../group_runner_show/group_runner_show_app.vue | 4 +- .../project_new_runner/project_new_runner_app.vue | 6 +- .../ci/runner/runner_update_form_utils.js | 4 +- app/assets/javascripts/ci/runner/utils.js | 11 + .../clusters_list/components/agent_table.vue | 274 +++++---- .../clusters_list/components/agents.vue | 74 +-- .../components/available_agents_dropdown.vue | 3 - .../components/delete_agent_button.vue | 7 - .../components/install_agent_modal.vue | 11 +- app/assets/javascripts/clusters_list/constants.js | 4 +- .../clusters_list/graphql/cache_update.js | 28 +- .../fragments/cluster_agent.fragment.graphql | 1 + .../graphql/queries/get_agents.query.graphql | 28 +- app/assets/javascripts/code_review/signals.js | 5 + .../commit/pipelines/pipelines_table.vue | 2 +- .../components/bubble_menus/bubble_menu.vue | 3 +- .../bubble_menus/reference_bubble_menu.vue | 218 +++++++ .../content_editor/components/content_editor.vue | 73 ++- .../components/formatting_toolbar.vue | 13 +- .../components/toolbar_table_button.vue | 89 +-- .../components/wrappers/reference.vue | 16 +- .../components/wrappers/reference_label.vue | 13 +- .../components/wrappers/table_cell_base.vue | 156 ++--- .../content_editor/content_editor.stories.js | 23 +- .../javascripts/content_editor/extensions/code.js | 10 + .../content_editor/extensions/description_item.js | 6 + .../content_editor/extensions/details_content.js | 12 +- .../content_editor/extensions/drawio_diagram.js | 5 +- .../javascripts/content_editor/extensions/link.js | 1 - .../content_editor/extensions/paste_markdown.js | 102 +++- .../content_editor/extensions/reference.js | 84 ++- .../content_editor/extensions/reference_label.js | 14 +- .../content_editor/extensions/suggestions.js | 2 +- .../content_editor/services/asset_resolver.js | 39 +- .../content_editor/services/content_editor.js | 4 + .../services/create_content_editor.js | 24 +- .../services/highlight_js_language_loader.js | 4 + .../content_editor/services/markdown_serializer.js | 43 +- .../services/serialization_helpers.js | 52 +- app/assets/javascripts/contextual_sidebar.js | 22 - .../contribution_event_approved.vue | 65 +++ .../contribution_event/contribution_event_base.vue | 54 ++ .../components/contribution_events.vue | 119 ++++ .../components/resource_parent_link.vue | 22 + .../contribution_events/components/target_link.vue | 31 + .../javascripts/contribution_events/constants.js | 14 + app/assets/javascripts/crm/components/crm_form.vue | 12 +- app/assets/javascripts/deprecated_notes.js | 43 +- .../design_description/description_form.vue | 234 ++++++++ .../components/design_notes/design_discussion.vue | 13 +- .../components/design_notes/design_note.vue | 64 ++- .../components/design_notes/design_reply_form.vue | 2 +- .../design_notes/toggle_replies_widget.vue | 10 +- .../components/design_sidebar.vue | 12 + .../design_management/components/list/item.vue | 4 +- .../graphql/fragments/design_list.fragment.graphql | 2 + .../update_design_description.mutation.graphql | 11 + .../graphql/queries/get_design.query.graphql | 4 + .../design_management/mixins/all_designs.js | 2 +- .../design_management/pages/design/index.vue | 1 + .../javascripts/design_management/pages/index.vue | 15 +- .../utils/design_management_utils.js | 2 + .../design_management/utils/error_messages.js | 4 + app/assets/javascripts/diffs/components/app.vue | 113 +--- .../javascripts/diffs/components/diff_content.vue | 46 +- .../javascripts/diffs/components/diff_file.vue | 88 ++- .../diffs/components/diff_file_header.vue | 22 +- .../diffs/components/diff_line_note_form.vue | 1 + .../javascripts/diffs/components/diff_view.vue | 6 +- .../diffs/components/shared/findings_drawer.vue | 6 +- .../javascripts/diffs/components/tree_list.vue | 71 ++- app/assets/javascripts/diffs/constants.js | 1 + app/assets/javascripts/diffs/index.js | 32 -- .../javascripts/diffs/mixins/draft_comments.js | 7 +- app/assets/javascripts/diffs/store/actions.js | 49 +- app/assets/javascripts/diffs/store/getters.js | 14 +- .../javascripts/diffs/store/mutation_types.js | 3 + app/assets/javascripts/diffs/store/mutations.js | 42 +- app/assets/javascripts/diffs/store/utils.js | 7 +- app/assets/javascripts/diffs/utils/diff_file.js | 3 + app/assets/javascripts/drawio/constants.js | 15 +- app/assets/javascripts/drawio/drawio_editor.js | 19 +- .../editor/components/source_editor_toolbar.vue | 19 +- .../components/source_editor_toolbar_button.vue | 14 +- .../extensions/source_editor_extension_base.js | 1 + .../source_editor_markdown_livepreview_ext.js | 23 - app/assets/javascripts/editor/schema/ci.json | 69 ++- app/assets/javascripts/ensure_data.js | 2 +- .../environments/components/deploy_board.vue | 2 +- .../environments/components/edit_environment.vue | 96 +++- .../environments/components/environment_delete.vue | 24 +- .../environments/components/environment_form.vue | 99 +++- .../environments/components/environment_item.vue | 28 +- .../components/environment_monitoring.vue | 24 - .../environments/components/environment_pin.vue | 14 +- .../components/environment_rollback.vue | 22 +- .../components/environment_terminal_button.vue | 14 +- .../components/environments_detail_header.vue | 24 +- .../components/kubernetes_agent_info.vue | 52 +- .../components/kubernetes_overview.vue | 44 +- .../environments/components/kubernetes_pods.vue | 24 +- .../components/kubernetes_status_bar.vue | 39 ++ .../environments/components/kubernetes_summary.vue | 19 +- .../environments/components/kubernetes_tabs.vue | 7 +- .../environments/components/new_environment.vue | 45 +- .../components/new_environment_item.vue | 76 ++- app/assets/javascripts/environments/constants.js | 19 + app/assets/javascripts/environments/edit.js | 31 +- .../components/deployment_actions.vue | 1 + .../mutations/create_environment.mutation.graphql | 9 + .../mutations/update_environment.mutation.graphql | 9 + .../graphql/queries/environment.query.graphql | 14 + .../environment_cluster_agent.query.graphql | 19 + .../queries/k8s_cluster_agent.query.graphql | 15 - .../queries/user_authorized_agents.query.graphql | 13 + app/assets/javascripts/environments/mount_show.js | 1 - app/assets/javascripts/environments/new.js | 18 +- .../error_tracking/components/error_details.vue | 49 +- .../components/error_details_info.vue | 57 +- .../components/error_tracking_actions.vue | 24 +- .../components/error_tracking_list.vue | 120 ++-- .../error_tracking/components/stacktrace.vue | 2 +- .../error_tracking/components/stacktrace_entry.vue | 37 +- .../error_tracking/components/timeline_chart.vue | 129 +++++ app/assets/javascripts/error_tracking/details.js | 5 + .../javascripts/error_tracking/events_tracking.js | 47 +- app/assets/javascripts/error_tracking/list.js | 3 + .../error_tracking/queries/details.query.graphql | 4 + .../javascripts/feature_flags/components/form.vue | 20 +- .../components/strategies/gitlab_user_list.vue | 54 +- .../feature_highlight_popover.vue | 2 +- .../google_cloud/databases/service_table.vue | 2 +- .../components/grafana_integration.vue | 131 ----- .../javascripts/grafana_integration/index.js | 17 - .../grafana_integration/store/actions.js | 44 -- .../javascripts/grafana_integration/store/index.js | 16 - .../grafana_integration/store/mutation_types.js | 3 - .../grafana_integration/store/mutations.js | 13 - .../javascripts/grafana_integration/store/state.js | 8 - .../javascripts/graphql_shared/issuable_client.js | 42 +- .../javascripts/graphql_shared/possible_types.json | 6 + .../queries/users_search.query.graphql | 2 +- .../users_search_with_mr_permissions.graphql | 2 +- app/assets/javascripts/groups/components/app.vue | 4 - .../groups/components/group_name_and_path.vue | 2 +- .../groups/components/overview_tabs.vue | 2 +- app/assets/javascripts/groups/index.js | 7 +- .../javascripts/groups/init_overview_tabs.js | 2 +- .../javascripts/header_search/components/app.vue | 2 +- app/assets/javascripts/header_search/index.js | 4 +- app/assets/javascripts/ide/init_gitlab_web_ide.js | 2 + .../ide/stores/modules/file_templates/getters.js | 4 - .../import_groups/components/import_table.vue | 2 +- app/assets/javascripts/integrations/constants.js | 27 + .../integrations/edit/components/dynamic_field.vue | 2 +- .../edit/components/jira_auth_fields.vue | 152 +++++ .../edit/components/override_dropdown.vue | 35 +- .../edit/components/sections/connection.vue | 36 +- .../integrations/gitlab_slack_application/api.js | 7 + .../components/gitlab_slack_application.vue | 135 +++++ .../components/projects_dropdown.vue | 55 ++ .../gitlab_slack_application/constants.js | 15 + .../integrations/gitlab_slack_application/index.js | 34 ++ .../components/import_project_members_modal.vue | 48 +- .../components/members_token_select.vue | 6 +- app/assets/javascripts/invite_members/constants.js | 2 + .../init_import_project_members_modal.js | 8 +- .../components/csv_import_export_buttons.vue | 51 +- .../components/issuable_header_warnings.vue | 5 +- .../issuable/components/related_issuable_item.vue | 2 +- app/assets/javascripts/issues/constants.js | 1 + .../dashboard/components/issues_dashboard_app.vue | 19 +- app/assets/javascripts/issues/dashboard/index.js | 6 +- .../dashboard/queries/get_issues.query.graphql | 5 +- .../dashboard/queries/issue.fragment.graphql | 56 -- .../components/empty_state_with_any_issues.vue | 8 +- .../components/empty_state_without_any_issues.vue | 16 +- .../issues/list/components/issues_list_app.vue | 91 ++- app/assets/javascripts/issues/list/constants.js | 6 + .../issues/list/queries/search_users.query.graphql | 5 +- .../javascripts/issues/show/components/app.vue | 29 +- .../issues/show/components/description.vue | 60 +- .../issues/show/components/fields/type.vue | 2 +- .../javascripts/issues/show/components/form.vue | 2 +- .../issues/show/components/header_actions.vue | 38 +- .../show/components/task_list_item_actions.vue | 6 - .../javascripts/issues/show/components/title.vue | 1 - app/assets/javascripts/issues/show/index.js | 1 + .../components/add_namespace_button.vue | 3 +- .../add_namespace_modal/add_namespace_modal.vue | 3 +- .../components/add_namespace_modal/groups_list.vue | 19 +- .../components/browser_support_alert.vue | 5 +- .../components/sign_in_oauth_button.vue | 1 + .../components/subscriptions_list.vue | 6 +- .../subscriptions/components/user_link.vue | 1 + .../jira_connect/subscriptions/constants.js | 27 +- .../pages/sign_in/sign_in_gitlab_com.vue | 6 +- .../sign_in/sign_in_gitlab_multiversion/index.vue | 8 +- .../self_managed_alert.vue | 4 +- .../setup_instructions.vue | 4 +- .../version_select_form.vue | 10 +- .../subscriptions/pages/sign_in/sign_in_page.vue | 1 + .../subscriptions/pages/subscriptions_page.vue | 6 +- .../components/job/sidebar/stages_dropdown.vue | 25 +- .../jobs/components/table/cells/job_cell.vue | 24 +- .../labels/components/promote_label_modal.vue | 9 +- app/assets/javascripts/layout_nav.js | 47 +- .../javascripts/lib/apollo/persistence_mapper.js | 4 +- app/assets/javascripts/lib/graphql.js | 5 +- app/assets/javascripts/lib/utils/common_utils.js | 18 +- app/assets/javascripts/lib/utils/constants.js | 2 +- .../lib/utils/datetime/date_calculation_utility.js | 10 + app/assets/javascripts/lib/utils/dom_utils.js | 2 +- .../javascripts/lib/utils/listbox_helpers.js | 45 ++ app/assets/javascripts/lib/utils/number_utils.js | 2 +- .../javascripts/lib/utils/secret_detection.js | 26 +- app/assets/javascripts/lib/utils/text_utility.js | 9 + app/assets/javascripts/lib/utils/url_utility.js | 80 +-- .../action_dropdowns/leave_group_dropdown_item.vue | 18 +- .../remove_member_dropdown_item.vue | 18 +- .../action_dropdowns/user_action_dropdown.vue | 27 +- .../members/components/table/role_dropdown.vue | 63 +-- app/assets/javascripts/merge_request.js | 11 - app/assets/javascripts/merge_request_tabs.js | 1 + .../merge_requests/components/sticky_header.vue | 9 +- app/assets/javascripts/milestones/index.js | 26 + .../show/components/candidate_detail_row.vue | 17 +- .../routes/candidates/show/ml_candidates_show.vue | 79 ++- .../routes/candidates/show/translations.js | 6 +- .../index/components/ml_experiments_index.vue | 40 +- .../routes/experiments/index/translations.js | 6 +- .../monitoring/components/charts/empty_chart.vue | 2 +- .../monitoring/components/dashboard.vue | 34 -- .../monitoring/components/dashboard_header.vue | 2 +- app/assets/javascripts/mr_more_dropdown.js | 57 ++ app/assets/javascripts/mr_notes/init.js | 29 +- app/assets/javascripts/mr_notes/init_mr_notes.js | 2 +- .../javascripts/notes/components/comment_form.vue | 8 +- .../notes/components/diff_discussion_header.vue | 6 + .../notes/components/diff_with_note.vue | 89 +-- .../notes/components/discussion_notes.vue | 11 + .../javascripts/notes/components/note_actions.vue | 12 - .../notes/components/note_actions/reply_button.vue | 2 +- .../javascripts/notes/components/note_form.vue | 7 +- .../javascripts/notes/components/note_header.vue | 3 - .../notes/components/noteable_discussion.vue | 38 +- .../javascripts/notes/components/noteable_note.vue | 42 +- app/assets/javascripts/notes/i18n.js | 6 + .../notes/mixins/diff_line_note_form.js | 33 +- .../notes/mixins/discussion_navigation.js | 2 +- app/assets/javascripts/notes/stores/actions.js | 36 +- .../javascripts/notes/stores/modules/index.js | 52 +- app/assets/javascripts/notes/stores/mutations.js | 4 +- app/assets/javascripts/notes/stores/state.js | 53 ++ app/assets/javascripts/notes/utils.js | 17 + .../components/form_group/dashboard_timezone.vue | 60 -- .../components/form_group/external_dashboard.vue | 48 -- .../components/metrics_settings.vue | 55 -- app/assets/javascripts/operation_settings/index.js | 17 - .../operation_settings/store/actions.js | 41 -- .../javascripts/operation_settings/store/index.js | 16 - .../operation_settings/store/mutation_types.js | 2 - .../operation_settings/store/mutations.js | 10 - .../javascripts/operation_settings/store/state.js | 10 - .../explorer/constants/details.js | 2 +- .../harbor_registry/constants/details.js | 2 +- .../details/components/package_files.vue | 31 +- .../list/components/packages_list_app.vue | 1 - .../components/details/package_files.vue | 269 +++++++-- .../components/details/package_title.vue | 12 - .../package_registry/constants.js | 4 + .../package_registry/graphql/index.js | 3 + .../queries/get_package_details.query.graphql | 15 - .../queries/get_package_files.query.graphql | 20 + .../package_registry/pages/details.vue | 180 +----- .../package_registry/pages/list.vue | 1 - .../components/packages_cleanup_policy_form.vue | 2 +- .../javascripts/pages/admin/clusters/show/index.js | 2 - .../pages/admin/jobs/components/constants.js | 12 +- .../javascripts/pages/admin/topics/edit/index.js | 5 +- .../javascripts/pages/admin/topics/new/index.js | 5 +- .../pages/groups/clusters/show/index.js | 2 - .../pages/groups/group_members/index.js | 4 - .../pages/groups/new/components/app.vue | 10 +- app/assets/javascripts/pages/groups/new/index.js | 2 + .../pages/groups/shared/group_details.js | 2 - .../javascripts/pages/profiles/show/index.js | 3 + .../javascripts/pages/profiles/slacks/index.js | 3 + .../pages/projects/branches/index/index.js | 6 +- .../pages/projects/clusters/show/cluster_health.js | 18 - .../pages/projects/clusters/show/index.js | 2 - .../pages/projects/merge_requests/show/index.js | 2 + .../pages/projects/pipelines/show/index.js | 2 +- .../pages/projects/project_members/index.js | 4 - .../pages/projects/settings/ci_cd/show/index.js | 2 + .../projects/settings/operations/show/index.js | 4 - .../permissions/components/ci_catalog_settings.vue | 165 ++++++ .../permissions/components/settings_panel.vue | 88 +-- .../pages/projects/shared/permissions/constants.js | 5 + .../catalog_resources_create.mutation.graphql | 5 + .../queries/get_ci_catalog_settings.query.graphql | 6 + .../pages/projects/shared/permissions/index.js | 11 + .../pages/projects/shared/web_ide_link/index.js | 12 + .../javascripts/pages/projects/show/index.js | 4 - .../javascripts/pages/projects/work_items/index.js | 2 - .../pages/shared/wikis/components/wiki_form.vue | 7 +- app/assets/javascripts/pages/shared/wikis/edit.js | 1 + app/assets/javascripts/pages/users/index.js | 9 +- app/assets/javascripts/pages/users/show/index.js | 6 +- app/assets/javascripts/persistent_user_callouts.js | 5 +- .../components/pipeline_details_header.vue | 629 +++++++++++++++++++++ .../graphql_pipeline_mini_graph.vue | 149 +++++ .../failure_widget/pipeline_failed_jobs_widget.vue | 143 +++++ .../pipelines_list/failure_widget/utils.js | 15 + .../failure_widget/widget_failed_job_row.vue | 107 ++++ .../components/pipelines_list/pipeline_url.vue | 94 +-- .../components/pipelines_list/pipelines.vue | 41 +- .../components/pipelines_list/pipelines_table.vue | 129 +++-- .../components/pipelines_list/time_ago.vue | 53 +- app/assets/javascripts/pipelines/constants.js | 4 + .../graphql/queries/get_failed_jobs.query.graphql | 2 +- .../queries/get_linked_pipelines.query.graphql | 43 ++ .../queries/get_pipeline_failed_jobs.query.graphql | 34 ++ .../queries/get_pipeline_header_data.query.graphql | 9 + .../queries/get_pipeline_stages.query.graphql | 19 + .../pipelines/pipeline_details_bundle.js | 34 +- .../pipelines/pipeline_details_header.js | 71 +++ .../javascripts/pipelines/pipelines_index.js | 2 + .../javascripts/profile/components/follow.vue | 88 +++ .../profile/components/followers_tab.vue | 54 +- .../profile/components/following_tab.vue | 4 +- .../graphql/get_user_snippets.query.graphql | 39 ++ .../profile/components/overview_tab.vue | 45 +- .../profile/components/profile_tabs.vue | 4 +- .../profile/components/snippets/snippet_row.vue | 119 ++++ .../profile/components/snippets/snippets_tab.vue | 110 ++++ .../profile/components/snippets_tab.vue | 17 - .../profile/components/user_achievements.vue | 69 ++- app/assets/javascripts/profile/constants.js | 2 + .../profile/edit/components/profile_edit_app.vue | 10 + app/assets/javascripts/profile/edit/index.js | 16 + app/assets/javascripts/profile/index.js | 21 +- .../commit/components/commit_options_dropdown.vue | 160 ++++-- .../components/commit_box_pipeline_mini_graph.vue | 45 +- .../commit_box/info/components/commit_refs.vue | 134 +++++ .../commit_box/info/components/refs_list.vue | 112 ++++ .../projects/commit_box/info/constants.js | 18 +- .../commit_containing_branches.query.graphql | 10 + .../queries/commit_containing_tags.query.graphql | 10 + .../queries/commit_references.query.graphql | 19 + .../queries/get_linked_pipelines.query.graphql | 43 -- .../queries/get_pipeline_stages.query.graphql | 19 - .../javascripts/projects/commit_box/info/index.js | 6 +- .../commit_box/info/init_commit_references.js | 32 ++ .../projects/commit_box/info/load_branches.js | 24 - .../projects/compare/components/repo_dropdown.vue | 55 +- .../javascripts/projects/new/components/app.vue | 8 +- app/assets/javascripts/projects/project_new.js | 2 +- .../components/edit/branch_dropdown.vue | 2 +- .../branch_rules/components/view/constants.js | 2 +- .../settings/components/access_dropdown.vue | 31 + .../components/service_desk_root.vue | 4 + .../components/service_desk_setting.vue | 34 +- .../projects/settings_service_desk/index.js | 2 + .../protected_branches/protected_branch_create.js | 6 +- .../components/add_issuable_form.vue | 2 +- .../components/related_issuable_input.vue | 2 +- .../components/related_issues_block.vue | 1 - .../components/related_issues_list.vue | 4 +- .../components/blob_viewers/geo_json/constants.js | 24 + .../blob_viewers/geo_json/geo_json_viewer.vue | 32 ++ .../components/blob_viewers/geo_json/utils.js | 47 ++ .../repository/components/blob_viewers/index.js | 3 +- .../repository/components/fork_info.vue | 5 +- app/assets/javascripts/search/index.js | 2 +- .../javascripts/search/sidebar/components/app.vue | 34 +- .../sidebar/components/confidentiality_filter.vue | 2 +- .../search/sidebar/components/issues_filters.vue | 85 +++ .../search/sidebar/components/label_filter/data.js | 23 + .../sidebar/components/label_filter/index.vue | 291 ++++++++++ .../label_filter/label_dropdown_items.vue | 43 ++ .../sidebar/components/label_filter/tracking.js | 21 + .../components/language_filter/checkbox_filter.vue | 91 +++ .../sidebar/components/language_filter/index.vue | 121 ++-- .../search/sidebar/components/radio_filter.vue | 4 +- .../sidebar/components/scope_legacy_navigation.vue | 85 +++ .../search/sidebar/components/scope_navigation.vue | 85 --- .../sidebar/components/scope_new_navigation.vue | 40 -- .../components/scope_sidebar_navigation.vue | 40 ++ .../search/sidebar/components/status_filter.vue | 2 +- .../javascripts/search/sidebar/constants/index.js | 7 +- .../javascripts/search/sort/components/app.vue | 58 +- app/assets/javascripts/search/store/actions.js | 19 +- app/assets/javascripts/search/store/constants.js | 2 + app/assets/javascripts/search/store/getters.js | 38 ++ app/assets/javascripts/search/store/index.js | 4 +- .../javascripts/search/store/mutation_types.js | 2 + app/assets/javascripts/search/store/mutations.js | 3 + app/assets/javascripts/search/store/state.js | 5 +- .../security_configuration/components/app.vue | 11 +- .../components/auto_dev_ops_alert.vue | 2 +- .../security_configuration/components/constants.js | 6 +- .../components/feature_card.vue | 6 +- .../components/training_provider_list.vue | 2 + app/assets/javascripts/sentry/index.js | 2 +- .../components/assignees/sidebar_participant.vue | 6 + .../sidebar/components/lock/issuable_lock_form.vue | 115 +++- .../sidebar/components/sidebar_editable_item.vue | 1 - .../sidebar/components/status/status_dropdown.vue | 45 +- .../subscriptions/sidebar_subscriptions_widget.vue | 35 +- .../subscriptions/subscriptions_dropdown.vue | 40 +- app/assets/javascripts/sidebar/mount_sidebar.js | 4 - .../javascripts/snippets/components/show.vue | 11 +- .../components/snippet_blob_actions_edit.vue | 10 +- app/assets/javascripts/snippets/constants.js | 4 +- .../handle_streamed_relative_timestamps.js | 80 +++ .../super_sidebar/components/brand_logo.vue | 45 ++ .../super_sidebar/components/context_switcher.vue | 6 +- .../components/context_switcher_toggle.vue | 2 +- .../super_sidebar/components/create_menu.vue | 18 +- .../components/frequent_items_list.vue | 24 +- .../command_palette/command_palette_items.vue | 191 +++++++ .../global_search/command_palette/constants.js | 45 ++ .../command_palette/fake_search_input.vue | 42 ++ .../global_search/command_palette/search_item.vue | 57 ++ .../global_search/command_palette/utils.js | 47 ++ .../global_search/components/global_search.vue | 56 +- .../super_sidebar/components/groups_list.vue | 4 +- .../super_sidebar/components/help_center.vue | 39 +- .../super_sidebar/components/items_list.vue | 19 +- .../super_sidebar/components/menu_section.vue | 2 +- .../super_sidebar/components/nav_item.vue | 15 +- .../super_sidebar/components/projects_list.vue | 4 +- .../super_sidebar/components/sidebar_menu.vue | 11 +- .../super_sidebar/components/user_bar.vue | 27 +- .../super_sidebar/components/user_menu.vue | 14 +- .../super_sidebar/popper_max_size_modifier.js | 43 -- .../super_sidebar/super_sidebar_bundle.js | 6 + .../super_sidebar_collapsed_state_manager.js | 2 +- .../surveys/merge_request_experience/app.vue | 2 +- .../javascripts/tags/components/sort_dropdown.vue | 32 +- .../components/sectioned_percentage_bar.stories.js | 46 ++ .../components/sectioned_percentage_bar.vue | 87 +++ .../storage/components/project_storage_detail.vue | 10 +- .../storage/components/storage_type_icon.vue | 8 +- .../storage/components/usage_graph.vue | 19 +- .../javascripts/usage_quotas/storage/constants.js | 16 +- .../storage/queries/project_storage.query.graphql | 8 + .../javascripts/usage_quotas/storage/utils.js | 20 +- .../components/approvals/approvals.vue | 8 +- .../deployment/deployment_action_button.vue | 69 ++- .../components/deployment/deployment_actions.vue | 34 +- .../components/states/mr_widget_merging.vue | 1 - .../components/states/mr_widget_preparing.vue | 23 + .../components/states/nothing_to_merge.vue | 43 +- .../components/states/ready_to_merge.vue | 18 +- .../components/states/unresolved_discussions.vue | 12 - .../components/widget/app.vue | 4 +- .../vue_merge_request_widget/constants.js | 1 + .../javascripts/vue_merge_request_widget/i18n.js | 4 + .../vue_merge_request_widget/mixins/approvals.js | 10 +- .../vue_merge_request_widget/mr_widget_options.vue | 23 +- .../queries/get_state.subscription.graphql | 1 + .../stores/get_state_key.js | 4 +- .../stores/mr_widget_store.js | 5 +- .../vue_merge_request_widget/stores/state_maps.js | 2 + .../vue_shared/components/actions_button.vue | 116 ++-- .../vue_shared/components/ci_badge_link.vue | 76 ++- .../vue_shared/components/clone_dropdown.vue | 91 --- .../clone_dropdown/clone_dropdown.stories.js | 33 ++ .../components/clone_dropdown/clone_dropdown.vue | 59 ++ .../clone_dropdown/clone_dropdown_item.vue | 56 ++ .../vue_shared/components/confirm_fork_modal.vue | 68 --- .../dropdown/dropdown_widget/dropdown_widget.vue | 1 - .../filtered_search_bar_root.vue | 5 +- .../filtered_search_bar/filtered_search_utils.js | 9 - .../filtered_search_bar/tokens/base_token.vue | 17 +- .../filtered_search_bar/tokens/emoji_token.vue | 2 +- .../filtered_search_bar/tokens/label_token.vue | 2 +- .../filtered_search_bar/tokens/milestone_token.vue | 2 +- .../markdown/comment_templates_dropdown.vue | 3 +- .../vue_shared/components/markdown/header.vue | 3 +- .../components/markdown/markdown_editor.vue | 15 +- .../components/markdown/mount_markdown_editor.js | 10 +- .../components/markdown_drawer/markdown_drawer.vue | 10 +- .../vue_shared/components/mr_more_dropdown.vue | 361 ++++++++++++ .../components/notes/placeholder_note.vue | 15 +- .../components/source_viewer/components/chunk.vue | 114 ++-- .../source_viewer/components/chunk_deprecated.vue | 133 ----- .../source_viewer/components/chunk_new.vue | 129 +++++ .../components/source_viewer/constants.js | 4 + .../source_viewer/languages/codeowners.js | 42 ++ .../source_viewer/plugins/wrap_child_nodes.js | 16 +- .../components/source_viewer/source_viewer.vue | 222 +++++++- .../source_viewer/source_viewer_deprecated.vue | 227 -------- .../components/source_viewer/source_viewer_new.vue | 64 +++ .../timezone_dropdown/timezone_dropdown.vue | 73 +-- .../components/truncated_text/constants.js | 9 - .../truncated_text/truncated_text.stories.js | 26 - .../components/truncated_text/truncated_text.vue | 81 --- .../components/user_select/user_select.vue | 4 +- .../components/web_ide/confirm_fork_modal.vue | 114 ++++ .../web_ide/get_writable_forks.query.graphql | 12 + .../vue_shared/components/web_ide_link.vue | 73 +-- .../issuable/list/components/issuable_grid.vue | 1 + .../issuable/list/components/issuable_item.vue | 7 +- .../list/components/issuable_list_root.vue | 17 +- .../new_namespace/new_namespace_page.vue | 11 +- .../javascripts/whats_new/components/app.vue | 10 +- .../javascripts/whats_new/utils/notification.js | 2 +- .../work_items/components/notes/system_note.vue | 110 +--- .../components/notes/work_item_add_note.vue | 17 +- .../components/notes/work_item_comment_form.vue | 41 +- .../components/notes/work_item_discussion.vue | 14 +- .../work_items/components/notes/work_item_note.vue | 27 +- .../components/notes/work_item_note_actions.vue | 138 ++++- .../components/notes/work_item_note_replying.vue | 13 +- .../work_items/components/work_item_actions.vue | 70 ++- .../work_items/components/work_item_assignees.vue | 10 +- .../components/work_item_award_emoji.vue | 173 +++--- .../components/work_item_description.vue | 173 +++--- .../work_items/components/work_item_detail.vue | 100 +--- .../components/work_item_detail_modal.vue | 7 - .../work_items/components/work_item_links/index.js | 6 +- .../work_item_links/work_item_children_wrapper.vue | 105 ++-- .../components/work_item_links/work_item_links.vue | 117 +--- .../work_item_links/work_item_links_form.vue | 11 +- .../components/work_item_links/work_item_tree.vue | 34 +- .../work_items/components/work_item_notes.vue | 6 +- app/assets/javascripts/work_items/constants.js | 13 + .../graphql/add_hierarchy_child.mutation.graphql | 3 - .../graphql/award_emoji.fragment.graphql | 1 + .../javascripts/work_items/graphql/cache_utils.js | 38 +- .../notes/create_work_item_note.mutation.graphql | 2 +- .../notes/update_work_item_note.mutation.graphql | 2 +- .../work_item_discussion_note.fragment.graphql | 2 +- .../graphql/notes/work_item_note.fragment.graphql | 9 + .../work_item_note_updated.subscription.graphql | 2 +- .../notes/work_item_notes_by_iid.query.graphql | 2 +- .../remove_hierarchy_child.mutation.graphql | 3 - .../graphql/update_award_emoji.mutation.graphql | 6 + .../work_items/graphql/work_item.fragment.graphql | 6 +- .../work_items/graphql/work_item.query.graphql | 7 - .../mixins/description_version_history.js | 14 + .../javascripts/work_items/notes/collapse_utils.js | 92 +++ .../work_items/pages/work_item_root.vue | 15 +- app/assets/javascripts/work_items/router/routes.js | 2 +- app/assets/javascripts/work_items/utils.js | 8 +- .../stylesheets/components/content_editor.scss | 42 +- app/assets/stylesheets/components/whats_new.scss | 1 - app/assets/stylesheets/fonts.scss | 30 +- .../stylesheets/framework/broadcast_messages.scss | 4 + app/assets/stylesheets/framework/common.scss | 4 + app/assets/stylesheets/framework/diffs.scss | 2 +- app/assets/stylesheets/framework/files.scss | 7 +- app/assets/stylesheets/framework/filters.scss | 17 +- app/assets/stylesheets/framework/header.scss | 2 +- app/assets/stylesheets/framework/layout.scss | 5 +- .../stylesheets/framework/markdown_area.scss | 1 + app/assets/stylesheets/framework/mixins.scss | 13 +- app/assets/stylesheets/framework/sidebar.scss | 8 +- app/assets/stylesheets/framework/timeline.scss | 5 +- app/assets/stylesheets/framework/variables.scss | 5 +- app/assets/stylesheets/highlight/themes/dark.scss | 4 - .../stylesheets/highlight/themes/monokai.scss | 4 - app/assets/stylesheets/highlight/themes/none.scss | 4 - .../highlight/themes/solarized-dark.scss | 4 - .../highlight/themes/solarized-light.scss | 4 - app/assets/stylesheets/highlight/white_base.scss | 4 - app/assets/stylesheets/notify_enhanced.scss | 4 + .../page_bundles/alert_management_settings.scss | 8 - .../page_bundles/design_management.scss | 21 +- app/assets/stylesheets/page_bundles/editor.scss | 29 +- .../page_bundles/error_tracking_details.scss | 31 - .../page_bundles/error_tracking_index.scss | 18 +- app/assets/stylesheets/page_bundles/login.scss | 23 +- .../stylesheets/page_bundles/merge_requests.scss | 41 +- .../stylesheets/page_bundles/oncall_schedules.scss | 75 --- app/assets/stylesheets/page_bundles/search.scss | 59 +- .../stylesheets/page_bundles/web_ide_loader.scss | 38 ++ app/assets/stylesheets/pages/note_form.scss | 8 +- app/assets/stylesheets/pages/notes.scss | 4 +- app/assets/stylesheets/pages/pipelines.scss | 6 - app/assets/stylesheets/startup/startup-dark.scss | 51 +- .../stylesheets/startup/startup-general.scss | 33 +- app/assets/stylesheets/startup/startup-signin.scss | 62 +- .../stylesheets/themes/dark_mode_overrides.scss | 5 +- app/assets/stylesheets/themes/theme_helper.scss | 4 +- .../stylesheets/themes/theme_light_gray.scss | 2 +- app/assets/stylesheets/utilities.scss | 18 - app/components/diffs/base_component.rb | 2 - .../layouts/horizontal_section_component.rb | 2 - app/components/pajamas/alert_component.html.haml | 8 +- app/components/pajamas/alert_component.rb | 8 + app/components/pajamas/component.rb | 2 - app/controllers/abuse_reports_controller.rb | 4 +- app/controllers/admin/abuse_reports_controller.rb | 7 +- .../admin/background_migrations_controller.rb | 2 +- .../admin/broadcast_messages_controller.rb | 1 + app/controllers/admin/groups_controller.rb | 2 +- app/controllers/admin/hooks_controller.rb | 1 - app/controllers/admin/projects_controller.rb | 2 +- app/controllers/admin/topics/avatars_controller.rb | 2 +- app/controllers/admin/topics_controller.rb | 8 +- app/controllers/admin/users_controller.rb | 14 +- app/controllers/application_controller.rb | 2 +- app/controllers/autocomplete_controller.rb | 2 +- app/controllers/clusters/base_controller.rb | 2 +- app/controllers/clusters/clusters_controller.rb | 1 - app/controllers/concerns/creates_commit.rb | 2 + app/controllers/concerns/impersonation.rb | 2 +- app/controllers/concerns/integrations/actions.rb | 9 + app/controllers/concerns/integrations/params.rb | 1 + app/controllers/concerns/membership_actions.rb | 2 +- .../metrics/dashboard/prometheus_api_proxy.rb | 51 -- app/controllers/concerns/metrics_dashboard.rb | 2 + app/controllers/concerns/notes_actions.rb | 22 +- app/controllers/concerns/renders_notes.rb | 2 +- app/controllers/concerns/search_rate_limitable.rb | 4 +- .../concerns/skips_already_signed_in_message.rb | 24 + app/controllers/concerns/snippets_actions.rb | 2 +- .../captcha_check/html_format_actions_support.rb | 5 + app/controllers/concerns/uploads_actions.rb | 12 +- app/controllers/concerns/web_hooks/hook_actions.rb | 1 + .../concerns/web_hooks/hook_log_actions.rb | 2 +- app/controllers/concerns/web_ide_csp.rb | 34 +- app/controllers/concerns/wiki_actions.rb | 3 +- app/controllers/dashboard/groups_controller.rb | 2 +- app/controllers/dashboard/projects_controller.rb | 2 +- app/controllers/dashboard_controller.rb | 4 + app/controllers/explore/groups_controller.rb | 2 +- app/controllers/explore/projects_controller.rb | 6 +- app/controllers/graphql_controller.rb | 60 +- .../groups/autocomplete_sources_controller.rb | 2 +- app/controllers/groups/avatars_controller.rb | 2 +- app/controllers/groups/children_controller.rb | 2 +- .../dependency_proxy_for_containers_controller.rb | 2 +- app/controllers/groups/group_links_controller.rb | 2 +- app/controllers/groups/group_members_controller.rb | 2 +- app/controllers/groups/milestones_controller.rb | 14 +- .../groups/settings/integrations_controller.rb | 4 +- .../groups/shared_projects_controller.rb | 2 +- app/controllers/groups/uploads_controller.rb | 2 +- app/controllers/groups/usage_quotas_controller.rb | 2 +- app/controllers/groups_controller.rb | 7 +- .../jira_connect/app_descriptor_controller.rb | 7 +- app/controllers/omniauth_callbacks_controller.rb | 42 +- .../organizations/application_controller.rb | 21 + .../organizations/organizations_controller.rb | 11 + app/controllers/profiles/preferences_controller.rb | 1 + app/controllers/profiles/slacks_controller.rb | 32 ++ .../profiles/two_factor_auths_controller.rb | 4 +- .../profiles/webauthn_registrations_controller.rb | 3 +- app/controllers/projects/artifacts_controller.rb | 4 - .../projects/autocomplete_sources_controller.rb | 2 +- app/controllers/projects/avatars_controller.rb | 2 +- app/controllers/projects/blame_controller.rb | 5 + app/controllers/projects/blob_controller.rb | 1 - app/controllers/projects/branches_controller.rb | 10 + .../projects/ci/pipeline_editor_controller.rb | 3 +- app/controllers/projects/commit_controller.rb | 5 +- .../projects/cycle_analytics_controller.rb | 1 - app/controllers/projects/discussions_controller.rb | 2 +- .../environments/prometheus_api_controller.rb | 20 - .../projects/environments_controller.rb | 64 +-- app/controllers/projects/group_links_controller.rb | 2 +- app/controllers/projects/hooks_controller.rb | 1 - app/controllers/projects/issues_controller.rb | 11 +- .../merge_requests/creations_controller.rb | 12 +- .../projects/merge_requests/diffs_controller.rb | 4 +- .../projects/merge_requests_controller.rb | 13 +- .../projects/metrics_dashboard_controller.rb | 55 -- app/controllers/projects/milestones_controller.rb | 11 +- .../projects/ml/candidates_controller.rb | 6 +- .../projects/ml/experiments_controller.rb | 6 +- .../projects/pages_domains_controller.rb | 3 + app/controllers/projects/pipelines_controller.rb | 7 +- .../projects/project_members_controller.rb | 2 +- .../projects/prometheus/alerts_controller.rb | 21 - .../projects/prometheus/metrics_controller.rb | 5 + app/controllers/projects/redirect_controller.rb | 2 +- app/controllers/projects/releases_controller.rb | 2 +- .../projects/settings/branch_rules_controller.rb | 4 +- .../projects/settings/operations_controller.rb | 12 +- .../projects/settings/repository_controller.rb | 1 - .../projects/settings/slacks_controller.rb | 78 +++ app/controllers/projects/starrers_controller.rb | 2 +- app/controllers/projects/tree_controller.rb | 1 - app/controllers/projects_controller.rb | 17 +- .../registrations/welcome_controller.rb | 37 +- app/controllers/registrations_controller.rb | 1 + app/controllers/search_controller.rb | 4 +- app/controllers/sent_notifications_controller.rb | 4 + app/controllers/sessions_controller.rb | 13 +- app/controllers/uploads_controller.rb | 2 +- .../readme_advanced.md.tt | 2 +- .../alert_management/http_integrations_finder.rb | 27 +- app/finders/crm/organizations_finder.rb | 38 +- app/finders/deployments_finder.rb | 16 +- app/finders/groups/environment_scopes_finder.rb | 50 ++ app/finders/groups_finder.rb | 32 +- app/finders/merge_requests_finder.rb | 12 +- app/finders/namespaces/projects_finder.rb | 2 + app/finders/releases_finder.rb | 30 +- app/finders/template_finder.rb | 12 +- app/finders/uploader_finder.rb | 4 +- app/finders/users_finder.rb | 10 +- app/graphql/cached_introspection_query.rb | 107 ++++ app/graphql/graphql_triggers.rb | 10 +- .../achievements/delete_user_achievement.rb | 33 ++ app/graphql/mutations/ci/ci_cd_settings_update.rb | 17 - .../mutations/ci/job_artifact/bulk_destroy.rb | 5 - app/graphql/mutations/ci/pipeline/cancel.rb | 6 +- .../dependency_proxy/group_settings/update.rb | 9 +- .../image_ttl_group_policy/update.rb | 6 + app/graphql/mutations/environments/create.rb | 58 ++ app/graphql/mutations/environments/delete.rb | 29 + app/graphql/mutations/environments/update.rb | 61 ++ app/graphql/mutations/issues/create.rb | 4 +- app/graphql/mutations/issues/set_confidential.rb | 7 +- app/graphql/mutations/issues/update.rb | 3 +- .../mutations/namespace/package_settings/update.rb | 6 + app/graphql/mutations/notes/update/base.rb | 7 +- app/graphql/mutations/projects/sync_fork.rb | 3 - app/graphql/mutations/snippets/create.rb | 3 +- app/graphql/mutations/snippets/update.rb | 3 +- .../mutations/users/set_namespace_commit_email.rb | 44 ++ app/graphql/mutations/work_items/convert.rb | 4 +- app/graphql/mutations/work_items/create.rb | 2 - .../mutations/work_items/create_from_task.rb | 5 +- app/graphql/mutations/work_items/update.rb | 3 +- app/graphql/mutations/work_items/update_task.rb | 4 +- app/graphql/queries/snippet/snippet.query.graphql | 1 + .../audit_event_definitions_resolver.rb | 13 + app/graphql/resolvers/blobs_resolver.rb | 14 +- .../resolvers/group_environment_scopes_resolver.rb | 23 + app/graphql/resolvers/last_commit_resolver.rb | 3 +- .../resolvers/namespace_projects_resolver.rb | 6 + app/graphql/resolvers/noteable/notes_resolver.rb | 36 ++ app/graphql/resolvers/paginated_tree_resolver.rb | 12 +- app/graphql/resolvers/timelog_resolver.rb | 7 +- app/graphql/resolvers/tree_resolver.rb | 8 +- app/graphql/subscriptions/work_item_updated.rb | 21 + app/graphql/types/alert_management/alert_type.rb | 4 - app/graphql/types/audit_events/definition_type.rb | 50 ++ app/graphql/types/ci/catalog/resource_type.rb | 27 - .../ci/group_environment_scope_connection_type.rb | 10 + .../types/ci/group_environment_scope_type.rb | 18 + app/graphql/types/ci/job_artifact_type.rb | 2 +- app/graphql/types/ci/job_type.rb | 2 + app/graphql/types/ci/runner_manager_type.rb | 2 + app/graphql/types/environment_type.rb | 7 + app/graphql/types/global_id_type.rb | 6 +- app/graphql/types/group_type.rb | 16 + app/graphql/types/mutation_type.rb | 10 +- app/graphql/types/notes/note_type.rb | 15 + app/graphql/types/notes/noteable_interface.rb | 2 +- app/graphql/types/permission_types/work_item.rb | 3 +- app/graphql/types/query_type.rb | 6 + app/graphql/types/ref_type_enum.rb | 11 + app/graphql/types/subscription_type.rb | 5 + .../types/time_tracking/timelog_sort_enum.rb | 14 +- app/graphql/types/user_interface.rb | 35 ++ .../admin/application_settings/settings_helper.rb | 49 ++ app/helpers/appearances_helper.rb | 8 +- app/helpers/application_helper.rb | 15 +- app/helpers/application_settings_helper.rb | 12 +- app/helpers/auth_helper.rb | 4 +- app/helpers/avatars_helper.rb | 19 +- app/helpers/blob_helper.rb | 4 - app/helpers/branches_helper.rb | 21 + app/helpers/broadcast_messages_helper.rb | 3 +- app/helpers/ci/catalog/resources_helper.rb | 4 + app/helpers/ci/pipelines_helper.rb | 11 +- app/helpers/ci/runners_helper.rb | 7 +- app/helpers/ci/secure_files_helper.rb | 1 + app/helpers/clusters_helper.rb | 6 - app/helpers/form_helper.rb | 2 +- app/helpers/groups_helper.rb | 4 +- app/helpers/ide_helper.rb | 12 +- app/helpers/integrations_helper.rb | 27 + app/helpers/invite_members_helper.rb | 5 +- app/helpers/issuables_helper.rb | 6 - app/helpers/issues_helper.rb | 4 +- app/helpers/members_helper.rb | 2 +- app/helpers/nav_helper.rb | 2 - app/helpers/preferences_helper.rb | 3 +- app/helpers/profiles_helper.rb | 5 + app/helpers/projects/error_tracking_helper.rb | 13 +- app/helpers/projects/pipeline_helper.rb | 24 + app/helpers/projects/topics_helper.rb | 19 + app/helpers/projects_helper.rb | 16 +- app/helpers/registrations_helper.rb | 5 + .../resource_events/abuse_report_events_helper.rb | 24 + app/helpers/safe_format_helper.rb | 66 ++- app/helpers/search_helper.rb | 96 +++- app/helpers/ssh_keys_helper.rb | 2 +- app/helpers/tree_helper.rb | 6 +- app/helpers/users/callouts_helper.rb | 13 + app/helpers/users_helper.rb | 20 +- app/mailers/emails/service_desk.rb | 8 +- app/models/abuse/event.rb | 18 + app/models/abuse/trust_score.rb | 1 + app/models/abuse_report.rb | 17 +- app/models/alert_management/http_integration.rb | 28 +- .../analytics/cycle_analytics/aggregation.rb | 4 +- .../analytics/cycle_analytics/value_stream.rb | 1 + app/models/application_setting.rb | 72 ++- app/models/application_setting_implementation.rb | 9 +- app/models/audit_event.rb | 34 ++ app/models/blob.rb | 3 +- app/models/blob_viewer/geo_json.rb | 12 + app/models/blob_viewer/metrics_dashboard_yml.rb | 45 -- app/models/broadcast_message.rb | 13 +- app/models/ci/build.rb | 37 +- app/models/ci/catalog/listing.rb | 17 +- app/models/ci/catalog/resource.rb | 9 +- app/models/ci/group_variable.rb | 13 + app/models/ci/job_annotation.rb | 19 + app/models/ci/job_artifact.rb | 4 +- app/models/ci/pipeline.rb | 67 +-- app/models/ci/runner.rb | 5 +- app/models/ci/secure_file.rb | 5 + app/models/clusters/agent.rb | 33 +- app/models/clusters/cluster.rb | 2 +- app/models/commit.rb | 4 +- app/models/commit_status.rb | 10 + app/models/commit_user_mention.rb | 2 +- .../concerns/admin_changed_password_notifier.rb | 12 +- .../analytics/cycle_analytics/stage_event_model.rb | 4 +- .../concerns/application_setting_masked_attrs.rb | 14 + app/models/concerns/awardable.rb | 2 +- app/models/concerns/ci/partitionable.rb | 1 + app/models/concerns/diff_positionable_note.rb | 10 +- app/models/concerns/enums/abuse/category.rb | 16 + app/models/concerns/enums/ci/pipeline.rb | 4 + app/models/concerns/has_user_type.rb | 20 +- app/models/concerns/issuable.rb | 1 + .../issues/forbid_issue_type_column_usage.rb | 59 ++ app/models/concerns/noteable.rb | 4 +- app/models/concerns/packages/downloadable.rb | 15 + .../concerns/project_features_compatibility.rb | 4 + app/models/concerns/recoverable_by_any_email.rb | 39 ++ app/models/concerns/sanitizable.rb | 4 +- app/models/concerns/spammable.rb | 46 +- app/models/concerns/storage/legacy_namespace.rb | 2 +- app/models/deploy_key.rb | 4 + app/models/deploy_keys_project.rb | 1 + app/models/deployment.rb | 2 +- app/models/design_management/repository.rb | 2 + app/models/design_user_mention.rb | 2 +- app/models/diff_discussion.rb | 4 +- app/models/diff_note_position.rb | 3 +- app/models/diff_viewer/base.rb | 2 +- app/models/discussion.rb | 34 +- app/models/environment.rb | 32 +- app/models/generic_commit_status.rb | 4 +- app/models/grafana_integration.rb | 4 +- app/models/group.rb | 76 ++- app/models/group_group_link.rb | 3 +- app/models/hooks/web_hook.rb | 26 +- app/models/import_failure.rb | 6 +- app/models/integration.rb | 26 +- app/models/integrations/apple_app_store.rb | 31 +- app/models/integrations/base_chat_notification.rb | 6 +- .../integrations/chat_message/push_message.rb | 4 +- app/models/integrations/clickup.rb | 39 ++ app/models/integrations/datadog.rb | 2 +- app/models/integrations/hangouts_chat.rb | 4 +- app/models/integrations/jira.rb | 125 ++-- app/models/integrations/telegram.rb | 105 ++++ app/models/issue.rb | 65 ++- app/models/issue_link.rb | 3 + app/models/issue_user_mention.rb | 2 +- app/models/jira_connect_installation.rb | 6 +- app/models/key.rb | 2 +- app/models/lfs_object.rb | 12 +- app/models/member.rb | 1 + app/models/members/group_member.rb | 7 +- app/models/members/last_group_owner_assigner.rb | 14 +- app/models/merge_request.rb | 21 +- app/models/merge_request/diff_llm_summary.rb | 1 + app/models/merge_request_diff.rb | 6 +- app/models/merge_request_user_mention.rb | 2 +- app/models/namespace.rb | 16 +- app/models/namespace/aggregation_schedule.rb | 2 +- app/models/namespace/root_storage_statistics.rb | 8 +- app/models/namespace_setting.rb | 17 + app/models/namespaces/project_namespace.rb | 3 +- app/models/namespaces/traversal/linear_scopes.rb | 9 - app/models/note.rb | 19 + app/models/note_diff_file.rb | 2 +- app/models/organization.rb | 26 - app/models/organizations/organization.rb | 40 ++ app/models/packages/cleanup/policy.rb | 9 +- app/models/packages/conan/metadatum.rb | 6 +- app/models/packages/debian/file_entry.rb | 14 +- app/models/packages/go/module.rb | 3 +- app/models/packages/go/module_version.rb | 46 +- app/models/packages/npm/metadata_cache.rb | 1 + app/models/packages/nuget/metadatum.rb | 19 +- app/models/packages/package.rb | 45 +- app/models/packages/rpm/metadatum.rb | 35 +- app/models/pages_domain.rb | 4 +- app/models/pages_domain_acme_order.rb | 8 +- app/models/personal_access_token.rb | 33 +- app/models/plan_limits.rb | 42 ++ app/models/preloaders/projects/notes_preloader.rb | 22 + app/models/project.rb | 245 +++++--- app/models/project_feature.rb | 16 +- app/models/project_import_data.rb | 12 +- app/models/project_setting.rb | 7 + app/models/project_statistics.rb | 5 - app/models/project_team.rb | 16 +- app/models/projects/topic.rb | 13 + app/models/prometheus_alert.rb | 2 +- app/models/protected_branch.rb | 10 +- app/models/release.rb | 38 +- app/models/release_highlight.rb | 16 +- app/models/releases/source.rb | 8 +- app/models/remote_mirror.rb | 18 +- app/models/repository.rb | 38 +- app/models/resource_events/abuse_report_event.rb | 6 + app/models/resource_timebox_event.rb | 5 +- app/models/sent_notification.rb | 27 +- app/models/snippet.rb | 11 +- app/models/snippet_user_mention.rb | 2 +- app/models/suggestion.rb | 2 +- app/models/system_note_metadata.rb | 2 +- app/models/terraform/state.rb | 2 +- app/models/time_tracking/timelog_category.rb | 6 +- app/models/timelog.rb | 15 +- app/models/todo.rb | 2 +- app/models/tree.rb | 16 +- app/models/uploads/fog.rb | 43 +- app/models/user.rb | 121 +++- app/models/user_custom_attribute.rb | 8 + app/models/user_detail.rb | 1 + app/models/user_preference.rb | 4 + app/models/users/callout.rb | 9 +- app/models/users/calloutable.rb | 4 + app/models/users/group_callout.rb | 7 +- app/models/vulnerability.rb | 6 - app/models/work_item.rb | 7 +- app/models/work_items/widgets/base.rb | 8 +- app/policies/audit_events/definition_policy.rb | 11 + app/policies/group_policy.rb | 19 +- app/policies/organizations/organization_policy.rb | 9 + app/policies/project_policy.rb | 17 + app/policies/user_policy.rb | 1 + app/presenters/blob_presenter.rb | 29 +- app/presenters/ci/pipeline_presenter.rb | 26 +- app/presenters/merge_request_presenter.rb | 4 +- app/presenters/ml/candidate_details_presenter.rb | 5 +- app/presenters/packages/conan/package_presenter.rb | 5 +- .../packages/nuget/packages_metadata_presenter.rb | 7 +- app/presenters/packages/nuget/presenter_helpers.rb | 11 +- .../packages/nuget/search_results_presenter.rb | 37 +- .../packages/nuget/service_index_presenter.rb | 21 +- app/presenters/packages/nuget/version_helpers.rb | 88 +++ app/presenters/tree_entry_presenter.rb | 17 +- app/presenters/work_item_presenter.rb | 4 + .../admin/abuse_report_details_entity.rb | 21 +- app/serializers/environment_serializer.rb | 2 +- .../harbor_serializers/repository_entity.rb | 4 +- app/serializers/note_entity.rb | 2 - app/serializers/profile/event_entity.rb | 50 +- .../destroy_user_achievement_service.rb | 33 ++ app/services/admin/abuse_report_update_service.rb | 6 +- app/services/admin/plan_limits/update_service.rb | 38 ++ .../http_integrations/base_service.rb | 57 ++ .../http_integrations/create_service.rb | 64 +-- .../http_integrations/destroy_service.rb | 11 + .../http_integrations/update_service.rb | 49 +- .../process_prometheus_alert_service.rb | 6 +- .../merge_when_pipeline_succeeds_service.rb | 9 + app/services/boards/issues/create_service.rb | 2 +- .../bulk_imports/archive_extraction_service.rb | 4 +- app/services/bulk_imports/create_service.rb | 5 +- .../bulk_imports/file_decompression_service.rb | 4 +- app/services/bulk_imports/file_download_service.rb | 2 +- app/services/ci/cancel_pipeline_service.rb | 122 ++++ app/services/ci/delete_unit_tests_service.rb | 4 +- app/services/ci/destroy_pipeline_service.rb | 8 +- app/services/ci/job_artifacts/create_service.rb | 3 +- .../ci/job_token_scope/remove_project_service.rb | 2 +- .../cancel_redundant_pipelines_service.rb | 66 ++- .../atomic_processing_service.rb | 46 +- .../atomic_processing_service/status_collection.rb | 5 + app/services/ci/pipelines/add_job_service.rb | 6 - app/services/ci/reset_skipped_jobs_service.rb | 27 +- app/services/ci/runners/assign_runner_service.rb | 4 + .../ci/runners/stale_managers_cleanup_service.rb | 17 +- .../clusters/agent_tokens/create_service.rb | 12 + app/services/commits/cherry_pick_service.rb | 13 +- app/services/concerns/search/filter.rb | 13 + .../concerns/update_repository_storage_methods.rb | 8 +- app/services/database/mark_migration_service.rb | 58 ++ app/services/environments/create_service.rb | 44 ++ app/services/environments/destroy_service.rb | 23 + app/services/environments/update_service.rb | 42 ++ .../error_tracking/collect_error_service.rb | 82 --- app/services/feature_flags/base_service.rb | 4 +- app/services/git/branch_hooks_service.rb | 40 +- .../google_cloud/enable_vision_ai_service.rb | 19 + .../google_cloud/generate_pipeline_service.rb | 16 +- app/services/groups/transfer_service.rb | 2 +- app/services/import_csv/base_service.rb | 6 +- .../incidents/create_service.rb | 2 +- .../incident_modal_submit_service.rb | 2 +- app/services/issuable/callbacks/base.rb | 1 + app/services/issuable/destroy_service.rb | 4 + app/services/issuable/discussions_list_service.rb | 5 +- app/services/issuable_base_service.rb | 13 +- app/services/issues/base_service.rb | 4 + app/services/issues/clone_service.rb | 6 +- app/services/issues/close_service.rb | 5 + app/services/issues/create_service.rb | 19 +- app/services/issues/move_service.rb | 6 +- app/services/issues/reopen_service.rb | 6 + app/services/issues/update_service.rb | 26 +- .../jira_connect_installations/update_service.rb | 2 +- .../merge_requests/after_create_service.rb | 15 + app/services/merge_requests/build_service.rb | 2 +- app/services/merge_requests/close_service.rb | 7 + app/services/merge_requests/create_service.rb | 1 + app/services/merge_requests/merge_service.rb | 6 +- app/services/merge_requests/mergeability/logger.rb | 10 +- app/services/merge_requests/reopen_service.rb | 2 + app/services/merge_requests/update_service.rb | 5 + app/services/notes/create_service.rb | 29 +- app/services/notes/quick_actions_service.rb | 16 +- app/services/notes/update_service.rb | 15 +- .../delete_stale_direct_uploads_service.rb | 35 ++ .../packages/cleanup/execute_policy_service.rb | 5 +- .../packages/cleanup/update_policy_service.rb | 5 +- .../packages/composer/create_package_service.rb | 5 +- .../packages/debian/create_package_file_service.rb | 10 +- .../debian/extract_changes_metadata_service.rb | 37 +- .../debian/generate_distribution_key_service.rb | 7 +- .../debian/generate_distribution_service.rb | 10 +- .../packages/debian/process_changes_service.rb | 22 +- .../debian/process_package_file_service.rb | 81 ++- app/services/packages/helm/process_file_service.rb | 27 +- .../maven/metadata/base_create_xml_service.rb | 7 +- .../maven/metadata/create_plugins_xml_service.rb | 39 +- .../maven/metadata/create_versions_xml_service.rb | 42 +- .../packages/maven/metadata/sync_service.rb | 19 +- .../ml_model/create_package_file_service.rb | 46 ++ .../ml_model/find_or_create_package_service.rb | 11 + .../packages/npm/create_metadata_cache_service.rb | 11 +- .../packages/npm/create_package_service.rb | 53 +- app/services/packages/npm/create_tag_service.rb | 5 +- .../packages/nuget/metadata_extraction_service.rb | 31 +- app/services/packages/nuget/search_service.rb | 22 +- .../packages/nuget/sync_metadatum_service.rb | 47 +- .../nuget/update_package_from_metadata_service.rb | 46 +- .../packages/pypi/create_package_service.rb | 5 +- app/services/packages/rpm/parse_package_service.rb | 5 +- .../rubygems/dependency_resolver_service.rb | 5 +- .../packages/rubygems/process_gem_service.rb | 18 +- .../terraform_module/create_package_service.rb | 10 +- app/services/packages/update_tags_service.rb | 5 +- .../personal_access_tokens/create_service.rb | 20 +- .../personal_access_tokens/last_used_service.rb | 9 +- app/services/post_receive_service.rb | 9 +- app/services/projects/create_service.rb | 4 +- app/services/projects/import_service.rb | 6 + .../projects/lfs_pointers/lfs_import_service.rb | 2 +- app/services/projects/operations/update_service.rb | 19 - app/services/projects/participants_service.rb | 2 +- .../projects/prometheus/alerts/notify_service.rb | 16 +- app/services/projects/readme_renderer_service.rb | 4 +- .../projects/slack_application_install_service.rb | 76 +++ app/services/releases/create_service.rb | 8 +- app/services/releases/links/base_service.rb | 12 +- app/services/releases/links/params.rb | 29 + app/services/repositories/base_service.rb | 2 +- .../resource_access_tokens/create_service.rb | 18 +- app/services/search/global_service.rb | 10 +- app/services/search/group_service.rb | 2 +- app/services/search/project_service.rb | 12 +- app/services/search_service.rb | 4 + .../custom_email_verifications/base_service.rb | 49 ++ .../custom_email_verifications/create_service.rb | 74 +++ .../custom_email_verifications/update_service.rb | 90 +++ app/services/service_ping/submit_service.rb | 2 +- app/services/snippets/create_service.rb | 20 +- app/services/snippets/update_service.rb | 19 +- app/services/spam/spam_action_service.rb | 44 +- app/services/spam/spam_verdict_service.rb | 2 +- app/services/tasks_to_be_done/base_service.rb | 2 +- app/services/user_agent_detail_service.rb | 13 +- app/services/users/activate_service.rb | 52 ++ .../users/set_namespace_commit_email_service.rb | 87 +++ app/services/webauthn/destroy_service.rb | 30 + app/services/work_items/callbacks/award_emoji.rb | 33 ++ app/services/work_items/callbacks/base.rb | 13 + app/services/work_items/create_and_link_service.rb | 6 +- .../work_items/create_from_task_service.rb | 6 +- app/services/work_items/create_service.rb | 4 +- app/services/work_items/delete_task_service.rb | 2 +- app/services/work_items/update_service.rb | 5 +- .../widgets/award_emoji_service/update_service.rb | 33 -- app/uploaders/ci/secure_file_uploader.rb | 4 + app/uploaders/gitlab_uploader.rb | 4 +- app/uploaders/object_storage.rb | 30 +- app/validators/abstract_path_validator.rb | 17 +- .../json_schemas/abuse_event_metadata.json | 7 + .../json_schemas/abuse_report_evidence.json | 107 ++++ .../json_schemas/ci_job_annotation_data.json | 19 + .../json_schemas/ci_job_external_link_data.json | 13 + .../default_branch_protection_defaults.json | 76 +++ .../json_schemas/plan_limits_history.json | 115 ++++ app/validators/json_schemas/position.json | 6 + app/validators/key_restriction_validator.rb | 2 +- app/validators/organizations/path_validator.rb | 15 + .../_account_and_limit.html.haml | 8 +- .../application_settings/_ai_access.html.haml | 32 ++ .../application_settings/_diagramsnet.html.haml | 25 + .../application_settings/_diff_limits.html.haml | 2 +- .../admin/application_settings/_pages.html.haml | 2 +- .../application_settings/_performance.html.haml | 6 +- ...mit_setting_registration_features_cta.html.haml | 2 +- .../admin/application_settings/_signin.html.haml | 2 +- .../_user_restrictions.html.haml | 1 + .../admin/application_settings/general.html.haml | 2 + .../service_usage_data.html.haml | 2 +- app/views/admin/jobs/index.html.haml | 6 +- app/views/admin/labels/index.html.haml | 2 +- app/views/admin/projects/index.html.haml | 6 +- app/views/admin/sessions/_new_base.html.haml | 2 +- app/views/admin/sessions/_signin_box.html.haml | 2 +- app/views/admin/sessions/_two_factor_otp.html.haml | 2 +- app/views/admin/sessions/new.html.haml | 2 +- app/views/admin/sessions/two_factor.html.haml | 17 +- app/views/admin/spam_logs/_spam_log.html.haml | 2 + app/views/admin/spam_logs/index.html.haml | 1 + app/views/admin/topics/_form.html.haml | 17 +- app/views/admin/topics/_topic.html.haml | 2 +- app/views/admin/users/_users.html.haml | 4 +- app/views/ci/group_variables/_index.html.haml | 19 +- app/views/ci/variables/_content.html.haml | 10 - app/views/ci/variables/_index.html.haml | 11 + app/views/clusters/clusters/_banner.html.haml | 4 +- .../clusters/clusters/_deprecation_alert.html.haml | 2 +- app/views/clusters/clusters/_details_tab.html.haml | 2 +- .../clusters/_gcp_signup_offer_banner.html.haml | 4 +- app/views/clusters/clusters/_health.html.haml | 8 - app/views/clusters/clusters/_health_tab.html.haml | 4 - app/views/clusters/clusters/show.html.haml | 1 - app/views/dashboard/_projects_head.html.haml | 6 +- app/views/dashboard/groups/_groups.html.haml | 2 +- app/views/dashboard/merge_requests.html.haml | 16 +- .../projects/_blank_state_admin_welcome.html.haml | 2 +- .../projects/_blank_state_welcome.html.haml | 4 +- app/views/devise/confirmations/new.html.haml | 2 +- app/views/devise/passwords/edit.html.haml | 5 +- app/views/devise/passwords/new.html.haml | 19 +- app/views/devise/registrations/new.html.haml | 3 + app/views/devise/sessions/_new_base.html.haml | 34 +- .../sessions/_new_base_user_login_label.html.haml | 1 - app/views/devise/sessions/_new_crowd.html.haml | 29 +- app/views/devise/sessions/_new_ldap.html.haml | 25 +- app/views/devise/sessions/email_verification.haml | 4 +- app/views/devise/sessions/two_factor.html.haml | 35 +- app/views/devise/shared/_error_messages.html.haml | 2 +- app/views/devise/shared/_omniauth_box.html.haml | 2 +- app/views/devise/shared/_signup_box.html.haml | 8 +- .../shared/_signup_omniauth_provider_list.haml | 5 +- .../devise/shared/_signup_omniauth_providers.haml | 2 +- .../shared/_signup_omniauth_providers_top.haml | 3 - app/views/explore/groups/_groups.html.haml | 2 +- app/views/explore/projects/_filter.html.haml | 2 +- app/views/explore/projects/_head.html.haml | 2 +- app/views/groups/labels/index.html.haml | 2 +- app/views/groups/settings/_advanced.html.haml | 4 +- app/views/groups/settings/_lfs.html.haml | 4 +- app/views/groups/settings/_permissions.html.haml | 3 +- app/views/groups/show.html.haml | 2 +- app/views/ide/_show.html.haml | 3 +- app/views/import/shared/_errors.html.haml | 2 +- app/views/layouts/_header_search.html.haml | 2 +- app/views/layouts/_loading_hints.html.haml | 6 +- app/views/layouts/_page.html.haml | 2 + app/views/layouts/devise.html.haml | 16 +- app/views/layouts/fullscreen.html.haml | 2 +- app/views/layouts/group.html.haml | 3 + .../header/_current_user_dropdown.html.haml | 5 +- app/views/layouts/header/_default.html.haml | 2 +- .../header/_registration_enabled_callout.html.haml | 4 +- app/views/layouts/project.html.haml | 3 + app/views/layouts/terms.html.haml | 4 +- .../merge_when_pipeline_succeeds_email.html.haml | 4 +- .../merge_when_pipeline_succeeds_email.text.haml | 2 +- .../organizations/directory.html.haml | 2 + app/views/profiles/accounts/show.html.haml | 71 ++- app/views/profiles/active_sessions/index.html.haml | 2 +- app/views/profiles/chat_names/new.html.haml | 6 +- app/views/profiles/keys/_key_details.html.haml | 8 +- app/views/profiles/notifications/show.html.haml | 2 +- app/views/profiles/preferences/show.html.haml | 5 +- app/views/profiles/show.html.haml | 377 ++++++------ app/views/profiles/slacks/edit.html.haml | 6 + app/views/profiles/two_factor_auths/show.html.haml | 6 +- app/views/projects/_files.html.haml | 6 +- .../_merge_request_merge_method_settings.html.haml | 6 +- app/views/projects/_new_project_fields.html.haml | 2 +- .../projects/_service_desk_settings.html.haml | 1 + app/views/projects/blame/_page.html.haml | 2 +- app/views/projects/blob/_blob.html.haml | 6 +- app/views/projects/blob/_editor.html.haml | 7 +- app/views/projects/blob/_render_error.html.haml | 2 +- .../projects/blob/_template_selectors.html.haml | 2 - .../projects/blob/viewers/_contributing.html.haml | 2 +- app/views/projects/branches/_branch.html.haml | 109 ++-- app/views/projects/branches/_commit.html.haml | 6 +- .../branches/_delete_branch_modal_button.html.haml | 18 - app/views/projects/branches/index.html.haml | 6 +- app/views/projects/buttons/_download.html.haml | 3 +- app/views/projects/commit/_commit_box.html.haml | 5 +- .../projects/commit/_signature_badge.html.haml | 2 +- app/views/projects/commits/_commits.html.haml | 12 +- app/views/projects/diffs/_file.html.haml | 7 +- app/views/projects/diffs/_text_file.html.haml | 53 +- app/views/projects/edit.html.haml | 6 +- app/views/projects/empty.html.haml | 10 +- app/views/projects/environments/edit.html.haml | 3 +- app/views/projects/environments/new.html.haml | 2 +- app/views/projects/issues/_issue.html.haml | 68 --- .../projects/issues/_issue_estimate.html.haml | 7 - app/views/projects/issues/_issues.html.haml | 2 +- .../projects/issues/_work_item_links.html.haml | 1 + .../projects/issues/service_desk/_issue.html.haml | 67 +++ .../issues/service_desk/_issue_estimate.html.haml | 7 + .../_service_desk_empty_state.html.haml | 4 +- .../_service_desk_info_content.html.haml | 2 +- .../service_desk/icons/_service_desk_callout.svg | 1 + .../icons/_service_desk_empty_state.svg | 1 + .../service_desk/icons/_service_desk_setup.svg | 39 ++ app/views/projects/labels/index.html.haml | 4 +- .../_close_reopen_draft_report_toggle.html.haml | 68 +-- .../merge_requests/_merge_request.html.haml | 1 - .../projects/merge_requests/_mr_title.html.haml | 2 +- app/views/projects/merge_requests/_page.html.haml | 2 +- .../creations/_new_compare.html.haml | 10 + .../merge_requests/creations/_new_submit.html.haml | 12 +- .../projects/mirrors/_branch_filter.html.haml | 15 +- .../projects/mirrors/_mirror_repos_push.html.haml | 15 +- app/views/projects/network/show.html.haml | 9 +- app/views/projects/network/show.json.erb | 2 +- app/views/projects/pages/_waiting.html.haml | 2 +- app/views/projects/pages_domains/show.html.haml | 9 - app/views/projects/pipelines/_info.html.haml | 2 +- app/views/projects/pipelines/show.html.haml | 7 +- app/views/projects/project_members/index.html.haml | 5 +- app/views/projects/readme_templates/default.md.tt | 2 +- .../projects/runners/_project_runners.html.haml | 3 +- .../settings/access_tokens/_form.html.haml | 14 + .../settings/access_tokens/index.html.haml | 14 +- .../operations/_grafana_integration.html.haml | 2 - .../operations/_metrics_dashboard.html.haml | 5 - .../projects/settings/operations/show.html.haml | 7 - .../projects/settings/repository/show.html.haml | 3 +- app/views/projects/settings/slacks/edit.html.haml | 20 + app/views/projects/tags/new.html.haml | 6 +- app/views/projects/tags/show.html.haml | 4 +- .../_create_protected_branch.html.haml | 4 +- .../shared/_create_protected_branch.html.haml | 8 +- app/views/registrations/welcome/show.html.haml | 3 +- app/views/search/_results.html.haml | 2 - app/views/search/_results_list.html.haml | 3 + app/views/shared/_alert_info.html.haml | 2 +- app/views/shared/_auto_devops_callout.html.haml | 2 +- ...auto_devops_implicitly_enabled_banner.html.haml | 4 +- app/views/shared/_broadcast_message.html.haml | 28 +- app/views/shared/_choose_avatar_button.html.haml | 2 +- app/views/shared/_custom_attributes.html.haml | 4 +- app/views/shared/_event_filter.html.haml | 6 +- app/views/shared/_ide_root.html.haml | 9 +- app/views/shared/_import_form.html.haml | 2 +- app/views/shared/_model_version_conflict.html.haml | 2 +- .../shared/_new_merge_request_checkbox.html.haml | 15 +- app/views/shared/_new_nav_announcement.html.haml | 33 ++ app/views/shared/_no_password.html.haml | 4 +- app/views/shared/_no_ssh.html.haml | 4 +- app/views/shared/_outdated_browser.html.haml | 2 +- app/views/shared/_project_limit.html.haml | 4 +- ...mit_setting_registration_features_cta.html.haml | 2 +- app/views/shared/_service_ping_consent.html.haml | 4 +- ...o_factor_auth_recovery_settings_check.html.haml | 4 +- app/views/shared/_web_ide_button.html.haml | 2 +- app/views/shared/access_tokens/_form.html.haml | 16 +- app/views/shared/admin/_admin_note.html.haml | 4 +- app/views/shared/empty_states/_issues.html.haml | 4 +- .../empty_states/icons/_service_desk_callout.svg | 1 - .../icons/_service_desk_empty_state.svg | 1 - .../empty_states/icons/_service_desk_setup.svg | 39 -- .../shared/errors/_gitaly_unavailable.html.haml | 2 +- app/views/shared/file_hooks/_index.html.haml | 6 +- app/views/shared/hook_logs/_content.html.haml | 5 +- ...slack_notifications_deprecation_alert.html.haml | 4 +- .../gitlab_slack_application/_help.html.haml | 10 + .../_slack_button.html.haml | 4 + .../_slack_integration_form.html.haml | 32 ++ .../gitlab_slack_application/_top.html.haml | 5 + .../prometheus/_custom_metrics.html.haml | 4 +- .../integrations/prometheus/_metrics.html.haml | 8 +- app/views/shared/issuable/_search_bar.html.haml | 2 +- app/views/shared/issuable/_sidebar.html.haml | 2 +- .../shared/issuable/form/_branch_chooser.html.haml | 2 +- .../shared/issuable/form/_merge_params.html.haml | 8 +- app/views/shared/issuable/form/_metadata.html.haml | 8 +- app/views/shared/issuable/form/_title.html.haml | 4 +- .../shared/issue_type/_details_content.html.haml | 2 +- app/views/shared/members/_requests.html.haml | 4 +- app/views/shared/milestones/_description.html.haml | 4 +- app/views/shared/milestones/_issuables.html.haml | 4 +- .../milestones/_milestone_complete_alert.html.haml | 2 +- app/views/shared/milestones/_tabs.html.haml | 6 +- app/views/shared/notes/_edit_form.html.haml | 1 + app/views/shared/notes/_notes_with_form.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 18 +- app/views/shared/projects/_topics.html.haml | 4 +- .../promotions/_promote_servicedesk.html.haml | 2 +- app/views/shared/runners/_form.html.haml | 4 +- app/views/shared/runners/_runner_details.html.haml | 2 +- .../shared/runners/_runner_type_alert.html.haml | 4 +- .../shared/runners/_runner_type_badge.html.haml | 14 +- app/views/shared/topics/_topic.html.haml | 4 +- app/views/shared/users/_user.html.haml | 2 +- app/views/shared/web_hooks/_hook_errors.html.haml | 6 +- app/views/shared/web_hooks/_index.html.haml | 4 +- .../web_hooks/_web_hook_disabled_alert.html.haml | 4 +- app/views/shared/wikis/empty.html.haml | 2 +- app/views/users/_profile_basic_info.html.haml | 2 +- app/views/users/show.html.haml | 6 +- app/workers/all_queues.yml | 81 +-- app/workers/ci/cancel_pipeline_worker.rb | 10 +- .../ci/update_locked_unknown_artifacts_worker.rb | 2 - .../integrations/check_prometheus_health_worker.rb | 10 +- .../gitlab/github_import/object_importer.rb | 8 +- .../concerns/gitlab/github_import/stage_methods.rb | 8 +- app/workers/concerns/worker_attributes.rb | 17 + .../record_data_repair_detail_worker.rb | 7 +- .../execution_worker.rb | 1 + .../single_database_worker.rb | 27 +- .../database/monitor_locked_tables_worker.rb | 52 ++ .../disallow_two_factor_for_group_worker.rb | 2 +- .../disallow_two_factor_for_subgroups_worker.rb | 2 +- app/workers/file_hook_worker.rb | 2 +- .../github_gists_import/import_gist_worker.rb | 75 ++- .../import_pull_request_merged_by_worker.rb | 25 - .../import_pull_request_review_worker.rb | 25 - .../import_release_attachments_worker.rb | 23 - .../stage/import_pull_requests_worker.rb | 17 + app/workers/group_destroy_worker.rb | 2 +- .../incident_management/close_incident_worker.rb | 2 +- .../member_invitation_reminder_emails_worker.rb | 2 +- .../mergeability_check_batch_worker.rb | 34 ++ .../dashboard/prune_old_annotations_worker.rb | 7 +- .../dashboard/schedule_annotations_prune_worker.rb | 6 +- .../metrics/dashboard/sync_dashboards_worker.rb | 9 +- app/workers/new_issue_worker.rb | 10 + .../delete_stale_direct_uploads_worker.rb | 27 + .../cleanup/delete_orphaned_dependencies_worker.rb | 6 - .../packages/debian/process_package_file_worker.rb | 2 +- .../packages/npm/create_metadata_cache_worker.rb | 29 + app/workers/post_receive.rb | 15 + .../projects/record_target_platforms_worker.rb | 2 +- app/workers/web_hook_worker.rb | 2 +- app/workers/web_hooks/log_destroy_worker.rb | 2 +- app/workers/web_hooks/log_execution_worker.rb | 2 +- 1499 files changed, 23181 insertions(+), 11028 deletions(-) create mode 100644 app/assets/images/auth_buttons/shibboleth_64.png create mode 100644 app/assets/javascripts/admin/abuse_report/components/report_actions.vue delete mode 100644 app/assets/javascripts/admin/abuse_reports/components/abuse_report_actions.vue delete mode 100644 app/assets/javascripts/artifacts_settings/keep_latest_artifact_checkbox.vue create mode 100644 app/assets/javascripts/artifacts_settings/keep_latest_artifact_toggle.vue create mode 100644 app/assets/javascripts/behaviors/markdown/utils.js delete mode 100644 app/assets/javascripts/blob/template_selectors/metrics_dashboard_selector.js create mode 100644 app/assets/javascripts/boards/graphql/cache_updates.js create mode 100644 app/assets/javascripts/branches/components/branch_more_actions.vue delete mode 100644 app/assets/javascripts/branches/components/delete_branch_button.vue create mode 100644 app/assets/javascripts/branches/init_branch_more_actions.js delete mode 100644 app/assets/javascripts/branches/init_delete_branch_button.js create mode 100644 app/assets/javascripts/ci/inherited_ci_variables/components/inherited_ci_variables_app.vue create mode 100644 app/assets/javascripts/ci/inherited_ci_variables/graphql/queries/inherited_ci_variables.query.graphql create mode 100644 app/assets/javascripts/ci/inherited_ci_variables/index.js create mode 100644 app/assets/javascripts/ci/pipeline_editor/options.js create mode 100644 app/assets/javascripts/ci/runner/components/runner_managers_badge.vue create mode 100644 app/assets/javascripts/ci/runner/components/runner_managers_detail.vue create mode 100644 app/assets/javascripts/ci/runner/components/runner_managers_table.vue delete mode 100644 app/assets/javascripts/ci/runner/graphql/shared/runner_toggle_active.mutation.graphql create mode 100644 app/assets/javascripts/ci/runner/graphql/shared/runner_toggle_paused.mutation.graphql create mode 100644 app/assets/javascripts/ci/runner/graphql/show/runner_manager.fragment.graphql create mode 100644 app/assets/javascripts/ci/runner/graphql/show/runner_manager_shared.fragment.graphql create mode 100644 app/assets/javascripts/ci/runner/graphql/show/runner_managers.query.graphql create mode 100644 app/assets/javascripts/content_editor/components/bubble_menus/reference_bubble_menu.vue create mode 100644 app/assets/javascripts/contribution_events/components/contribution_event/contribution_event_approved.vue create mode 100644 app/assets/javascripts/contribution_events/components/contribution_event/contribution_event_base.vue create mode 100644 app/assets/javascripts/contribution_events/components/contribution_events.vue create mode 100644 app/assets/javascripts/contribution_events/components/resource_parent_link.vue create mode 100644 app/assets/javascripts/contribution_events/components/target_link.vue create mode 100644 app/assets/javascripts/contribution_events/constants.js create mode 100644 app/assets/javascripts/design_management/components/design_description/description_form.vue create mode 100644 app/assets/javascripts/design_management/graphql/mutations/update_design_description.mutation.graphql delete mode 100644 app/assets/javascripts/environments/components/environment_monitoring.vue create mode 100644 app/assets/javascripts/environments/components/kubernetes_status_bar.vue create mode 100644 app/assets/javascripts/environments/graphql/mutations/create_environment.mutation.graphql create mode 100644 app/assets/javascripts/environments/graphql/mutations/update_environment.mutation.graphql create mode 100644 app/assets/javascripts/environments/graphql/queries/environment.query.graphql create mode 100644 app/assets/javascripts/environments/graphql/queries/environment_cluster_agent.query.graphql delete mode 100644 app/assets/javascripts/environments/graphql/queries/k8s_cluster_agent.query.graphql create mode 100644 app/assets/javascripts/environments/graphql/queries/user_authorized_agents.query.graphql create mode 100644 app/assets/javascripts/error_tracking/components/timeline_chart.vue delete mode 100644 app/assets/javascripts/grafana_integration/components/grafana_integration.vue delete mode 100644 app/assets/javascripts/grafana_integration/index.js delete mode 100644 app/assets/javascripts/grafana_integration/store/actions.js delete mode 100644 app/assets/javascripts/grafana_integration/store/index.js delete mode 100644 app/assets/javascripts/grafana_integration/store/mutation_types.js delete mode 100644 app/assets/javascripts/grafana_integration/store/mutations.js delete mode 100644 app/assets/javascripts/grafana_integration/store/state.js create mode 100644 app/assets/javascripts/integrations/edit/components/jira_auth_fields.vue create mode 100644 app/assets/javascripts/integrations/gitlab_slack_application/api.js create mode 100644 app/assets/javascripts/integrations/gitlab_slack_application/components/gitlab_slack_application.vue create mode 100644 app/assets/javascripts/integrations/gitlab_slack_application/components/projects_dropdown.vue create mode 100644 app/assets/javascripts/integrations/gitlab_slack_application/constants.js create mode 100644 app/assets/javascripts/integrations/gitlab_slack_application/index.js delete mode 100644 app/assets/javascripts/issues/dashboard/queries/issue.fragment.graphql create mode 100644 app/assets/javascripts/lib/utils/listbox_helpers.js create mode 100644 app/assets/javascripts/mr_more_dropdown.js create mode 100644 app/assets/javascripts/notes/stores/state.js delete mode 100644 app/assets/javascripts/operation_settings/components/form_group/dashboard_timezone.vue delete mode 100644 app/assets/javascripts/operation_settings/components/form_group/external_dashboard.vue delete mode 100644 app/assets/javascripts/operation_settings/components/metrics_settings.vue delete mode 100644 app/assets/javascripts/operation_settings/index.js delete mode 100644 app/assets/javascripts/operation_settings/store/actions.js delete mode 100644 app/assets/javascripts/operation_settings/store/index.js delete mode 100644 app/assets/javascripts/operation_settings/store/mutation_types.js delete mode 100644 app/assets/javascripts/operation_settings/store/mutations.js delete mode 100644 app/assets/javascripts/operation_settings/store/state.js create mode 100644 app/assets/javascripts/packages_and_registries/package_registry/graphql/queries/get_package_files.query.graphql create mode 100644 app/assets/javascripts/pages/profiles/slacks/index.js delete mode 100644 app/assets/javascripts/pages/projects/clusters/show/cluster_health.js create mode 100644 app/assets/javascripts/pages/projects/shared/permissions/components/ci_catalog_settings.vue create mode 100644 app/assets/javascripts/pages/projects/shared/permissions/graphql/mutations/catalog_resources_create.mutation.graphql create mode 100644 app/assets/javascripts/pages/projects/shared/permissions/graphql/queries/get_ci_catalog_settings.query.graphql create mode 100644 app/assets/javascripts/pipelines/components/pipeline_details_header.vue create mode 100644 app/assets/javascripts/pipelines/components/pipeline_mini_graph/graphql_pipeline_mini_graph.vue create mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/failure_widget/pipeline_failed_jobs_widget.vue create mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/failure_widget/utils.js create mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/failure_widget/widget_failed_job_row.vue create mode 100644 app/assets/javascripts/pipelines/graphql/queries/get_linked_pipelines.query.graphql create mode 100644 app/assets/javascripts/pipelines/graphql/queries/get_pipeline_failed_jobs.query.graphql create mode 100644 app/assets/javascripts/pipelines/graphql/queries/get_pipeline_stages.query.graphql create mode 100644 app/assets/javascripts/profile/components/follow.vue create mode 100644 app/assets/javascripts/profile/components/graphql/get_user_snippets.query.graphql create mode 100644 app/assets/javascripts/profile/components/snippets/snippet_row.vue create mode 100644 app/assets/javascripts/profile/components/snippets/snippets_tab.vue delete mode 100644 app/assets/javascripts/profile/components/snippets_tab.vue create mode 100644 app/assets/javascripts/profile/edit/components/profile_edit_app.vue create mode 100644 app/assets/javascripts/profile/edit/index.js create mode 100644 app/assets/javascripts/projects/commit_box/info/components/commit_refs.vue create mode 100644 app/assets/javascripts/projects/commit_box/info/components/refs_list.vue create mode 100644 app/assets/javascripts/projects/commit_box/info/graphql/queries/commit_containing_branches.query.graphql create mode 100644 app/assets/javascripts/projects/commit_box/info/graphql/queries/commit_containing_tags.query.graphql create mode 100644 app/assets/javascripts/projects/commit_box/info/graphql/queries/commit_references.query.graphql delete mode 100644 app/assets/javascripts/projects/commit_box/info/graphql/queries/get_linked_pipelines.query.graphql delete mode 100644 app/assets/javascripts/projects/commit_box/info/graphql/queries/get_pipeline_stages.query.graphql create mode 100644 app/assets/javascripts/projects/commit_box/info/init_commit_references.js delete mode 100644 app/assets/javascripts/projects/commit_box/info/load_branches.js create mode 100644 app/assets/javascripts/repository/components/blob_viewers/geo_json/constants.js create mode 100644 app/assets/javascripts/repository/components/blob_viewers/geo_json/geo_json_viewer.vue create mode 100644 app/assets/javascripts/repository/components/blob_viewers/geo_json/utils.js create mode 100644 app/assets/javascripts/search/sidebar/components/issues_filters.vue create mode 100644 app/assets/javascripts/search/sidebar/components/label_filter/data.js create mode 100644 app/assets/javascripts/search/sidebar/components/label_filter/index.vue create mode 100644 app/assets/javascripts/search/sidebar/components/label_filter/label_dropdown_items.vue create mode 100644 app/assets/javascripts/search/sidebar/components/label_filter/tracking.js create mode 100644 app/assets/javascripts/search/sidebar/components/language_filter/checkbox_filter.vue create mode 100644 app/assets/javascripts/search/sidebar/components/scope_legacy_navigation.vue delete mode 100644 app/assets/javascripts/search/sidebar/components/scope_navigation.vue delete mode 100644 app/assets/javascripts/search/sidebar/components/scope_new_navigation.vue create mode 100644 app/assets/javascripts/search/sidebar/components/scope_sidebar_navigation.vue create mode 100644 app/assets/javascripts/streaming/handle_streamed_relative_timestamps.js create mode 100644 app/assets/javascripts/super_sidebar/components/brand_logo.vue create mode 100644 app/assets/javascripts/super_sidebar/components/global_search/command_palette/command_palette_items.vue create mode 100644 app/assets/javascripts/super_sidebar/components/global_search/command_palette/constants.js create mode 100644 app/assets/javascripts/super_sidebar/components/global_search/command_palette/fake_search_input.vue create mode 100644 app/assets/javascripts/super_sidebar/components/global_search/command_palette/search_item.vue create mode 100644 app/assets/javascripts/super_sidebar/components/global_search/command_palette/utils.js delete mode 100644 app/assets/javascripts/super_sidebar/popper_max_size_modifier.js create mode 100644 app/assets/javascripts/usage_quotas/components/sectioned_percentage_bar.stories.js create mode 100644 app/assets/javascripts/usage_quotas/components/sectioned_percentage_bar.vue create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_preparing.vue delete mode 100644 app/assets/javascripts/vue_shared/components/clone_dropdown.vue create mode 100644 app/assets/javascripts/vue_shared/components/clone_dropdown/clone_dropdown.stories.js create mode 100644 app/assets/javascripts/vue_shared/components/clone_dropdown/clone_dropdown.vue create mode 100644 app/assets/javascripts/vue_shared/components/clone_dropdown/clone_dropdown_item.vue delete mode 100644 app/assets/javascripts/vue_shared/components/confirm_fork_modal.vue create mode 100644 app/assets/javascripts/vue_shared/components/mr_more_dropdown.vue delete mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_deprecated.vue create mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/components/chunk_new.vue create mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/languages/codeowners.js delete mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_deprecated.vue create mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/source_viewer_new.vue delete mode 100644 app/assets/javascripts/vue_shared/components/truncated_text/constants.js delete mode 100644 app/assets/javascripts/vue_shared/components/truncated_text/truncated_text.stories.js delete mode 100644 app/assets/javascripts/vue_shared/components/truncated_text/truncated_text.vue create mode 100644 app/assets/javascripts/vue_shared/components/web_ide/confirm_fork_modal.vue create mode 100644 app/assets/javascripts/vue_shared/components/web_ide/get_writable_forks.query.graphql create mode 100644 app/assets/javascripts/vue_shared/issuable/list/components/issuable_grid.vue delete mode 100644 app/assets/javascripts/work_items/graphql/add_hierarchy_child.mutation.graphql delete mode 100644 app/assets/javascripts/work_items/graphql/remove_hierarchy_child.mutation.graphql create mode 100644 app/assets/javascripts/work_items/graphql/update_award_emoji.mutation.graphql delete mode 100644 app/assets/javascripts/work_items/graphql/work_item.query.graphql create mode 100644 app/assets/javascripts/work_items/mixins/description_version_history.js create mode 100644 app/assets/javascripts/work_items/notes/collapse_utils.js create mode 100644 app/assets/stylesheets/page_bundles/web_ide_loader.scss delete mode 100644 app/controllers/concerns/metrics/dashboard/prometheus_api_proxy.rb create mode 100644 app/controllers/concerns/skips_already_signed_in_message.rb create mode 100644 app/controllers/organizations/application_controller.rb create mode 100644 app/controllers/organizations/organizations_controller.rb create mode 100644 app/controllers/profiles/slacks_controller.rb delete mode 100644 app/controllers/projects/environments/prometheus_api_controller.rb delete mode 100644 app/controllers/projects/metrics_dashboard_controller.rb create mode 100644 app/controllers/projects/settings/slacks_controller.rb create mode 100644 app/finders/groups/environment_scopes_finder.rb create mode 100644 app/graphql/cached_introspection_query.rb create mode 100644 app/graphql/mutations/achievements/delete_user_achievement.rb delete mode 100644 app/graphql/mutations/ci/ci_cd_settings_update.rb create mode 100644 app/graphql/mutations/environments/create.rb create mode 100644 app/graphql/mutations/environments/delete.rb create mode 100644 app/graphql/mutations/environments/update.rb create mode 100644 app/graphql/mutations/users/set_namespace_commit_email.rb create mode 100644 app/graphql/resolvers/audit_events/audit_event_definitions_resolver.rb create mode 100644 app/graphql/resolvers/group_environment_scopes_resolver.rb create mode 100644 app/graphql/resolvers/noteable/notes_resolver.rb create mode 100644 app/graphql/subscriptions/work_item_updated.rb create mode 100644 app/graphql/types/audit_events/definition_type.rb delete mode 100644 app/graphql/types/ci/catalog/resource_type.rb create mode 100644 app/graphql/types/ci/group_environment_scope_connection_type.rb create mode 100644 app/graphql/types/ci/group_environment_scope_type.rb create mode 100644 app/graphql/types/ref_type_enum.rb create mode 100644 app/helpers/projects/topics_helper.rb create mode 100644 app/helpers/resource_events/abuse_report_events_helper.rb create mode 100644 app/models/abuse/event.rb create mode 100644 app/models/blob_viewer/geo_json.rb delete mode 100644 app/models/blob_viewer/metrics_dashboard_yml.rb create mode 100644 app/models/ci/job_annotation.rb create mode 100644 app/models/concerns/application_setting_masked_attrs.rb create mode 100644 app/models/concerns/enums/abuse/category.rb create mode 100644 app/models/concerns/issues/forbid_issue_type_column_usage.rb create mode 100644 app/models/concerns/packages/downloadable.rb create mode 100644 app/models/concerns/recoverable_by_any_email.rb create mode 100644 app/models/integrations/clickup.rb create mode 100644 app/models/integrations/telegram.rb delete mode 100644 app/models/organization.rb create mode 100644 app/models/organizations/organization.rb create mode 100644 app/models/preloaders/projects/notes_preloader.rb create mode 100644 app/policies/audit_events/definition_policy.rb create mode 100644 app/policies/organizations/organization_policy.rb create mode 100644 app/presenters/packages/nuget/version_helpers.rb create mode 100644 app/presenters/work_item_presenter.rb create mode 100644 app/services/achievements/destroy_user_achievement_service.rb create mode 100644 app/services/admin/plan_limits/update_service.rb create mode 100644 app/services/alert_management/http_integrations/base_service.rb create mode 100644 app/services/ci/cancel_pipeline_service.rb create mode 100644 app/services/concerns/search/filter.rb create mode 100644 app/services/database/mark_migration_service.rb create mode 100644 app/services/environments/create_service.rb create mode 100644 app/services/environments/destroy_service.rb create mode 100644 app/services/environments/update_service.rb delete mode 100644 app/services/error_tracking/collect_error_service.rb create mode 100644 app/services/google_cloud/enable_vision_ai_service.rb create mode 100644 app/services/object_storage/delete_stale_direct_uploads_service.rb create mode 100644 app/services/packages/ml_model/create_package_file_service.rb create mode 100644 app/services/packages/ml_model/find_or_create_package_service.rb create mode 100644 app/services/projects/slack_application_install_service.rb create mode 100644 app/services/releases/links/params.rb create mode 100644 app/services/service_desk/custom_email_verifications/base_service.rb create mode 100644 app/services/service_desk/custom_email_verifications/create_service.rb create mode 100644 app/services/service_desk/custom_email_verifications/update_service.rb create mode 100644 app/services/users/activate_service.rb create mode 100644 app/services/users/set_namespace_commit_email_service.rb create mode 100644 app/services/webauthn/destroy_service.rb create mode 100644 app/services/work_items/callbacks/award_emoji.rb create mode 100644 app/services/work_items/callbacks/base.rb delete mode 100644 app/services/work_items/widgets/award_emoji_service/update_service.rb create mode 100644 app/validators/json_schemas/abuse_event_metadata.json create mode 100644 app/validators/json_schemas/abuse_report_evidence.json create mode 100644 app/validators/json_schemas/ci_job_annotation_data.json create mode 100644 app/validators/json_schemas/ci_job_external_link_data.json create mode 100644 app/validators/json_schemas/default_branch_protection_defaults.json create mode 100644 app/validators/json_schemas/plan_limits_history.json create mode 100644 app/validators/organizations/path_validator.rb create mode 100644 app/views/admin/application_settings/_ai_access.html.haml create mode 100644 app/views/admin/application_settings/_diagramsnet.html.haml delete mode 100644 app/views/clusters/clusters/_health.html.haml delete mode 100644 app/views/clusters/clusters/_health_tab.html.haml delete mode 100644 app/views/devise/sessions/_new_base_user_login_label.html.haml delete mode 100644 app/views/devise/shared/_signup_omniauth_providers_top.haml create mode 100644 app/views/organizations/organizations/directory.html.haml create mode 100644 app/views/profiles/slacks/edit.html.haml delete mode 100644 app/views/projects/branches/_delete_branch_modal_button.html.haml delete mode 100644 app/views/projects/issues/_issue.html.haml delete mode 100644 app/views/projects/issues/_issue_estimate.html.haml create mode 100644 app/views/projects/issues/service_desk/_issue.html.haml create mode 100644 app/views/projects/issues/service_desk/_issue_estimate.html.haml create mode 100644 app/views/projects/issues/service_desk/icons/_service_desk_callout.svg create mode 100644 app/views/projects/issues/service_desk/icons/_service_desk_empty_state.svg create mode 100644 app/views/projects/issues/service_desk/icons/_service_desk_setup.svg create mode 100644 app/views/projects/settings/access_tokens/_form.html.haml delete mode 100644 app/views/projects/settings/operations/_grafana_integration.html.haml delete mode 100644 app/views/projects/settings/operations/_metrics_dashboard.html.haml create mode 100644 app/views/projects/settings/slacks/edit.html.haml create mode 100644 app/views/shared/_new_nav_announcement.html.haml delete mode 100644 app/views/shared/empty_states/icons/_service_desk_callout.svg delete mode 100644 app/views/shared/empty_states/icons/_service_desk_empty_state.svg delete mode 100644 app/views/shared/empty_states/icons/_service_desk_setup.svg create mode 100644 app/views/shared/integrations/gitlab_slack_application/_help.html.haml create mode 100644 app/views/shared/integrations/gitlab_slack_application/_slack_button.html.haml create mode 100644 app/views/shared/integrations/gitlab_slack_application/_slack_integration_form.html.haml create mode 100644 app/views/shared/integrations/gitlab_slack_application/_top.html.haml create mode 100644 app/workers/database/monitor_locked_tables_worker.rb delete mode 100644 app/workers/gitlab/github_import/import_pull_request_merged_by_worker.rb delete mode 100644 app/workers/gitlab/github_import/import_pull_request_review_worker.rb delete mode 100644 app/workers/gitlab/github_import/import_release_attachments_worker.rb create mode 100644 app/workers/merge_requests/mergeability_check_batch_worker.rb create mode 100644 app/workers/object_storage/delete_stale_direct_uploads_worker.rb create mode 100644 app/workers/packages/npm/create_metadata_cache_worker.rb (limited to 'app') diff --git a/app/assets/images/auth_buttons/shibboleth_64.png b/app/assets/images/auth_buttons/shibboleth_64.png new file mode 100644 index 00000000000..d4c752f9400 Binary files /dev/null and b/app/assets/images/auth_buttons/shibboleth_64.png differ diff --git a/app/assets/javascripts/abuse_reports/components/abuse_category_selector.vue b/app/assets/javascripts/abuse_reports/components/abuse_category_selector.vue index 4a7c12e5e51..266950e2769 100644 --- a/app/assets/javascripts/abuse_reports/components/abuse_category_selector.vue +++ b/app/assets/javascripts/abuse_reports/components/abuse_category_selector.vue @@ -60,11 +60,11 @@ export default { }; }, computed: { - drawerOffsetTop() { + getDrawerHeaderHeight() { // avoid calculating this in advance because it causes layout thrashing // https://gitlab.com/gitlab-org/gitlab/-/issues/331172#note_1269378396 if (!this.showDrawer) return '0'; - return getContentWrapperHeight('.content-wrapper'); + return getContentWrapperHeight(); }, }, mounted() { @@ -81,7 +81,7 @@ export default { @@ -256,9 +274,13 @@ export default { :loading="loading" :disabled="messageBlank" data-testid="submit-button" + class="gl-mr-2" > {{ isAddForm ? $options.i18n.add : $options.i18n.update }} + + {{ $options.i18n.cancel }} + diff --git a/app/assets/javascripts/admin/broadcast_messages/constants.js b/app/assets/javascripts/admin/broadcast_messages/constants.js index 9f64b2dcaa0..ed137181a48 100644 --- a/app/assets/javascripts/admin/broadcast_messages/constants.js +++ b/app/assets/javascripts/admin/broadcast_messages/constants.js @@ -30,4 +30,5 @@ export const NEW_BROADCAST_MESSAGE = { targetAccessLevels: [], startsAt: new Date(), endsAt: new Date(), + showInCli: true, }; diff --git a/app/assets/javascripts/admin/broadcast_messages/edit.js b/app/assets/javascripts/admin/broadcast_messages/edit.js index 91dae949d45..33b3b028c58 100644 --- a/app/assets/javascripts/admin/broadcast_messages/edit.js +++ b/app/assets/javascripts/admin/broadcast_messages/edit.js @@ -1,4 +1,5 @@ import Vue from 'vue'; +import { parseBoolean } from '~/lib/utils/common_utils'; import MessageForm from './components/message_form.vue'; export default () => { @@ -16,6 +17,7 @@ export default () => { targetPath, startsAt, endsAt, + showInCli, } = el.dataset; return new Vue({ @@ -34,11 +36,12 @@ export default () => { message, broadcastType, theme, - dismissable: dismissable === 'true', + dismissable: parseBoolean(dismissable), targetAccessLevels: JSON.parse(targetAccessLevels), targetPath, startsAt: new Date(startsAt), endsAt: new Date(endsAt), + showInCli: parseBoolean(showInCli), }, }, }); diff --git a/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue b/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue index 1a586bd1e91..bc4df04cb30 100644 --- a/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue +++ b/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue @@ -159,8 +159,10 @@ export default {
-
- +
+
diff --git a/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue b/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue index 133513d6c21..33d6eb139f7 100644 --- a/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue +++ b/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue @@ -22,6 +22,7 @@ import UserToken from '~/vue_shared/components/filtered_search_bar/tokens/user_t import LabelToken from '~/vue_shared/components/filtered_search_bar/tokens/label_token.vue'; import MilestoneToken from '~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue'; import UrlSync from '~/vue_shared/components/url_sync.vue'; +import { MAX_LABELS } from '../constants'; export default { name: 'FilterBar', @@ -70,6 +71,7 @@ export default { symbol: '~', operators: OPERATORS_IS, fetchLabels: this.fetchLabels, + maxSuggestions: MAX_LABELS, }, { icon: 'pencil', @@ -146,6 +148,7 @@ export default { :search-input-placeholder="__('Filter results')" :tokens="tokens" :initial-filter-value="initialFilterValue()" + terms-as-tokens @onFilter="handleFilter" /> diff --git a/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_filters.vue b/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_filters.vue index b9d1c4b0fe0..0de62013a63 100644 --- a/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_filters.vue +++ b/app/assets/javascripts/analytics/cycle_analytics/components/value_stream_filters.vue @@ -82,6 +82,7 @@ export default {
-import { - GlIcon, - GlLoadingIcon, - GlAvatar, - GlDropdown, - GlDropdownSectionHeader, - GlDropdownItem, - GlSearchBoxByType, - GlTruncate, -} from '@gitlab/ui'; +import { GlButton, GlIcon, GlAvatar, GlCollapsibleListbox, GlTruncate } from '@gitlab/ui'; import { debounce } from 'lodash'; import { filterBySearchTerm } from '~/analytics/shared/utils'; import { getIdFromGraphQLId } from '~/graphql_shared/utils'; @@ -18,17 +9,15 @@ import { n__, s__, __ } from '~/locale'; import getProjects from '../graphql/projects.query.graphql'; const sortByProjectName = (projects = []) => projects.sort((a, b) => a.name.localeCompare(b.name)); +const mapItemToListboxFormat = (item) => ({ ...item, value: item.id, text: item.name }); export default { name: 'ProjectsDropdownFilter', components: { + GlButton, GlIcon, - GlLoadingIcon, GlAvatar, - GlDropdown, - GlDropdownSectionHeader, - GlDropdownItem, - GlSearchBoxByType, + GlCollapsibleListbox, GlTruncate, }, props: { @@ -61,6 +50,11 @@ export default { required: false, default: false, }, + toggleClasses: { + type: String, + required: false, + default: '', + }, }, data() { return { @@ -94,6 +88,9 @@ export default { selectedProjectIds() { return this.selectedProjects.map((p) => p.id); }, + selectedListBoxItems() { + return this.multiSelect ? this.selectedProjectIds : this.selectedProjectIds[0]; + }, hasSelectedProjects() { return Boolean(this.selectedProjects.length); }, @@ -110,6 +107,28 @@ export default { unselectedItems() { return this.availableProjects.filter(({ id }) => !this.selectedProjectIds.includes(id)); }, + selectedGroupOptions() { + return this.selectedItems.map(mapItemToListboxFormat); + }, + unSelectedGroupOptions() { + return this.unselectedItems.map(mapItemToListboxFormat); + }, + listBoxItems() { + if (this.selectedGroupOptions.length === 0) { + return this.unSelectedGroupOptions; + } + + return [ + { + text: __('Selected'), + options: this.selectedGroupOptions, + }, + { + text: __('Unselected'), + options: this.unSelectedGroupOptions, + }, + ]; + }, }, watch: { searchTerm() { @@ -129,32 +148,29 @@ export default { search: debounce(function debouncedSearch() { this.fetchData(); }, DEFAULT_DEBOUNCE_AND_THROTTLE_MS), - getSelectedProjects(selectedProject, isSelected) { - return isSelected - ? this.selectedProjects.concat([selectedProject]) - : this.selectedProjects.filter((project) => project.id !== selectedProject.id); - }, singleSelectedProject(selectedObj, isMarking) { return isMarking ? [selectedObj] : []; }, - setSelectedProjects(project) { + setSelectedProjects(payload) { this.selectedProjects = this.multiSelect - ? this.getSelectedProjects(project, !this.isProjectSelected(project)) - : this.singleSelectedProject(project, !this.isProjectSelected(project)); + ? payload + : this.singleSelectedProject(payload, !this.isProjectSelected(payload)); }, - onClick(project) { + onClick(projectId) { + const project = this.availableProjects.find(({ id }) => id === projectId); this.setSelectedProjects(project); this.handleUpdatedSelectedProjects(); }, - onMultiSelectClick(project) { - this.setSelectedProjects(project); + onMultiSelectClick(projectIds) { + const projects = this.availableProjects.filter(({ id }) => projectIds.includes(id)); + this.setSelectedProjects(projects); this.isDirty = true; }, - onSelected(project) { + onSelected(payload) { if (this.multiSelect) { - this.onMultiSelectClick(project); + this.onMultiSelectClick(payload); } else { - this.onClick(project); + this.onClick(payload); } }, onHide() { @@ -201,97 +217,67 @@ export default { getEntityId(project) { return getIdFromGraphQLId(project.id); }, + setSearchTerm(val) { + this.searchTerm = val; + }, }, AVATAR_SHAPE_OPTION_RECT, }; diff --git a/app/assets/javascripts/analytics/shared/constants.js b/app/assets/javascripts/analytics/shared/constants.js index c98cf90f406..25699c17b10 100644 --- a/app/assets/javascripts/analytics/shared/constants.js +++ b/app/assets/javascripts/analytics/shared/constants.js @@ -1,4 +1,5 @@ -import { masks } from '~/lib/dateformat'; +import dateFormat, { masks } from '~/lib/dateformat'; +import { nDaysBefore, getStartOfDay } from '~/lib/utils/datetime_utility'; import { s__ } from '~/locale'; import { helpPagePath } from '~/helpers/help_page_helper'; @@ -13,12 +14,19 @@ export const dateFormats = { month: 'mmmm', }; +const startOfToday = getStartOfDay(new Date(), { utc: true }); +const last180Days = nDaysBefore(startOfToday, DATE_RANGE_LIMIT, { utc: true }); +const formatDateParam = (d) => dateFormat(d, dateFormats.isoDate, true); + export const METRIC_POPOVER_LABEL = s__('ValueStreamAnalytics|View details'); -export const KEY_METRICS = { +export const ISSUES_COMPLETED_TYPE = 'issues_completed'; + +export const FLOW_METRICS = { LEAD_TIME: 'lead_time', CYCLE_TIME: 'cycle_time', ISSUES: 'issues', + ISSUES_COMPLETED: ISSUES_COMPLETED_TYPE, COMMITS: 'commits', DEPLOYS: 'deploys', }; @@ -33,7 +41,7 @@ export const DORA_METRICS = { const VSA_FLOW_METRICS_GROUP = { key: 'key_metrics', title: s__('ValueStreamAnalytics|Key metrics'), - keys: Object.values(KEY_METRICS), + keys: Object.values(FLOW_METRICS), }; export const VSA_METRICS_GROUPS = [VSA_FLOW_METRICS_GROUP]; @@ -46,6 +54,12 @@ export const VULNERABILITY_METRICS = { HIGH: VULNERABILITY_HIGH_TYPE, }; +export const MERGE_REQUEST_THROUGHPUT_TYPE = 'merge_request_throughput'; + +export const MERGE_REQUEST_METRICS = { + THROUGHPUT: MERGE_REQUEST_THROUGHPUT_TYPE, +}; + export const METRIC_TOOLTIPS = { [DORA_METRICS.DEPLOYMENT_FREQUENCY]: { description: s__( @@ -79,7 +93,7 @@ export const METRIC_TOOLTIPS = { projectLink: '-/pipelines/charts?chart=change-failure-rate', docsLink: helpPagePath('user/analytics/dora_metrics', { anchor: 'change-failure-rate' }), }, - [KEY_METRICS.LEAD_TIME]: { + [FLOW_METRICS.LEAD_TIME]: { description: s__('ValueStreamAnalytics|Median time from issue created to issue closed.'), groupLink: '-/analytics/value_stream_analytics', projectLink: '-/value_stream_analytics', @@ -87,7 +101,7 @@ export const METRIC_TOOLTIPS = { anchor: 'view-the-lead-time-and-cycle-time-for-issues', }), }, - [KEY_METRICS.CYCLE_TIME]: { + [FLOW_METRICS.CYCLE_TIME]: { description: s__( "ValueStreamAnalytics|Median time from the earliest commit of a linked issue's merge request to when that issue is closed.", ), @@ -97,13 +111,21 @@ export const METRIC_TOOLTIPS = { anchor: 'view-the-lead-time-and-cycle-time-for-issues', }), }, - [KEY_METRICS.ISSUES]: { + [FLOW_METRICS.ISSUES]: { description: s__('ValueStreamAnalytics|Number of new issues created.'), groupLink: '-/issues_analytics', projectLink: '-/analytics/issues_analytics', docsLink: helpPagePath('user/analytics/issue_analytics'), }, - [KEY_METRICS.DEPLOYS]: { + [FLOW_METRICS.ISSUES_COMPLETED]: { + description: s__('ValueStreamAnalytics|Number of issues closed by month.'), + groupLink: '-/analytics/value_stream_analytics', + projectLink: '-/value_stream_analytics', + docsLink: helpPagePath('user/analytics/value_streams_dashboard', { + anchor: 'dashboard-metrics-and-drill-down-reports', + }), + }, + [FLOW_METRICS.DEPLOYS]: { description: s__('ValueStreamAnalytics|Total number of deploys to production.'), groupLink: '-/analytics/productivity_analytics', projectLink: '-/analytics/merge_request_analytics', @@ -111,15 +133,25 @@ export const METRIC_TOOLTIPS = { }, [VULNERABILITY_METRICS.CRITICAL]: { description: s__('ValueStreamAnalytics|Critical vulnerabilities over time.'), - groupLink: '-/security/vulnerabilities', - projectLink: '-/security/vulnerability_report', - docsLink: helpPagePath('user/application_security/vulnerability_report/index'), + groupLink: '-/security/vulnerabilities?severity=CRITICAL', + projectLink: '-/security/vulnerability_report?severity=CRITICAL', + docsLink: helpPagePath('user/application_security/vulnerabilities/severities.html'), }, [VULNERABILITY_METRICS.HIGH]: { description: s__('ValueStreamAnalytics|High vulnerabilities over time.'), - groupLink: '-/security/vulnerabilities', - projectLink: '-/security/vulnerability_report', - docsLink: helpPagePath('user/application_security/vulnerability_report/index'), + groupLink: '-/security/vulnerabilities?severity=HIGH', + projectLink: '-/security/vulnerability_report?severity=HIGH', + docsLink: helpPagePath('user/application_security/vulnerabilities/severities.html'), + }, + [MERGE_REQUEST_METRICS.THROUGHPUT]: { + description: s__('ValueStreamAnalytics|The number of merge requests merged by month.'), + groupLink: '-/analytics/productivity_analytics', + projectLink: `-/analytics/merge_request_analytics?start_date=${formatDateParam( + last180Days, + )}&end_date=${formatDateParam(startOfToday)}`, + docsLink: helpPagePath('user/analytics/merge_request_analytics', { + anchor: 'view-the-number-of-merge-requests-in-a-date-range', + }), }, }; diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 87c74438d00..95da3b3cf49 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -97,6 +97,7 @@ const Api = { secureFilePath: '/api/:version/projects/:project_id/secure_files/:secure_file_id', secureFilesPath: '/api/:version/projects/:project_id/secure_files', dependencyProxyPath: '/api/:version/groups/:id/dependency_proxy/cache', + markdownPath: '/api/:version/markdown', group(groupId, callback = () => {}) { const url = Api.buildUrl(Api.groupPath).replace(':id', groupId); @@ -1017,6 +1018,12 @@ const Api = { return axios.delete(url, { params: { ...options } }); }, + + markdown(data = {}) { + const url = Api.buildUrl(this.markdownPath); + + return axios.post(url, data); + }, }; export default Api; diff --git a/app/assets/javascripts/api/user_api.js b/app/assets/javascripts/api/user_api.js index 3ebb07807d2..17ad1a0b31d 100644 --- a/app/assets/javascripts/api/user_api.js +++ b/app/assets/javascripts/api/user_api.js @@ -10,6 +10,7 @@ const USER_PROJECTS_PATH = '/api/:version/users/:id/projects'; const USER_POST_STATUS_PATH = '/api/:version/user/status'; const USER_FOLLOW_PATH = '/api/:version/users/:id/follow'; const USER_UNFOLLOW_PATH = '/api/:version/users/:id/unfollow'; +const USER_FOLLOWERS_PATH = '/api/:version/users/:id/followers'; const USER_ASSOCIATIONS_COUNT_PATH = '/api/:version/users/:id/associations_count'; export function getUsers(query, options) { @@ -71,6 +72,16 @@ export function unfollowUser(userId) { return axios.post(url); } +export function getUserFollowers(userId, params) { + const url = buildApiUrl(USER_FOLLOWERS_PATH).replace(':id', encodeURIComponent(userId)); + return axios.get(url, { + params: { + per_page: DEFAULT_PER_PAGE, + ...params, + }, + }); +} + export function associationsCount(userId) { const url = buildApiUrl(USER_ASSOCIATIONS_COUNT_PATH).replace(':id', encodeURIComponent(userId)); return axios.get(url); diff --git a/app/assets/javascripts/artifacts_settings/index.js b/app/assets/javascripts/artifacts_settings/index.js index 531b42bc185..86728f1b586 100644 --- a/app/assets/javascripts/artifacts_settings/index.js +++ b/app/assets/javascripts/artifacts_settings/index.js @@ -1,6 +1,6 @@ import Vue from 'vue'; import VueApollo from 'vue-apollo'; -import KeepLatestArtifactCheckbox from '~/artifacts_settings/keep_latest_artifact_checkbox.vue'; +import KeepLatestArtifactToggle from '~/artifacts_settings/keep_latest_artifact_toggle.vue'; import createDefaultClient from '~/lib/graphql'; Vue.use(VueApollo); @@ -26,7 +26,7 @@ export default (containerId = 'js-artifacts-settings-app') => { helpPagePath, }, render(createElement) { - return createElement(KeepLatestArtifactCheckbox); + return createElement(KeepLatestArtifactToggle); }, }); }; diff --git a/app/assets/javascripts/artifacts_settings/keep_latest_artifact_checkbox.vue b/app/assets/javascripts/artifacts_settings/keep_latest_artifact_checkbox.vue deleted file mode 100644 index 8e7ccb80784..00000000000 --- a/app/assets/javascripts/artifacts_settings/keep_latest_artifact_checkbox.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - diff --git a/app/assets/javascripts/artifacts_settings/keep_latest_artifact_toggle.vue b/app/assets/javascripts/artifacts_settings/keep_latest_artifact_toggle.vue new file mode 100644 index 00000000000..db7d1057402 --- /dev/null +++ b/app/assets/javascripts/artifacts_settings/keep_latest_artifact_toggle.vue @@ -0,0 +1,110 @@ + + + diff --git a/app/assets/javascripts/authentication/password/components/password_input.vue b/app/assets/javascripts/authentication/password/components/password_input.vue index fa9a7782b74..6e3af96cf33 100644 --- a/app/assets/javascripts/authentication/password/components/password_input.vue +++ b/app/assets/javascripts/authentication/password/components/password_input.vue @@ -15,27 +15,27 @@ export default { title: { type: String, required: false, - default: '', + default: null, }, id: { type: String, required: false, - default: '', + default: null, }, minimumPasswordLength: { type: String, required: false, - default: '', + default: null, }, qaSelector: { type: String, required: false, - default: '', + default: null, }, testid: { type: String, required: false, - default: '', + default: null, }, autocomplete: { type: String, diff --git a/app/assets/javascripts/batch_comments/components/diff_file_drafts.vue b/app/assets/javascripts/batch_comments/components/diff_file_drafts.vue index 2ebde10c229..74917da6426 100644 --- a/app/assets/javascripts/batch_comments/components/diff_file_drafts.vue +++ b/app/assets/javascripts/batch_comments/components/diff_file_drafts.vue @@ -15,11 +15,23 @@ export default { type: String, required: true, }, + showPin: { + type: Boolean, + required: false, + default: true, + }, + positionType: { + type: String, + required: false, + default: '', + }, }, computed: { ...mapGetters('batchComments', ['draftsForFile']), drafts() { - return this.draftsForFile(this.fileHash); + return this.draftsForFile(this.fileHash).filter( + (f) => f.position?.position_type === this.positionType, + ); }, }, }; @@ -34,6 +46,7 @@ export default { >
import { mapActions, mapGetters } from 'vuex'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; +import { SET_REVIEW_BAR_RENDERED } from '~/batch_comments/stores/modules/batch_comments/mutation_types'; import { REVIEW_BAR_VISIBLE_CLASS_NAME } from '../constants'; import PreviewDropdown from './preview_dropdown.vue'; import SubmitDropdown from './submit_dropdown.vue'; @@ -23,6 +24,7 @@ export default { }, mounted() { document.body.classList.add(REVIEW_BAR_VISIBLE_CLASS_NAME); + this.$store.commit(`batchComments/${SET_REVIEW_BAR_RENDERED}`); }, beforeDestroy() { document.body.classList.remove(REVIEW_BAR_VISIBLE_CLASS_NAME); @@ -34,7 +36,7 @@ export default {