From 0ea3fcec397b69815975647f5e2aa5fe944a8486 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 20 Jun 2022 11:10:13 +0000 Subject: Add latest changes from gitlab-org/gitlab@15-1-stable-ee --- app/assets/images/auth_buttons/gitlab_64.png | Bin 2070 -> 1622 bytes .../images/ext_snippet_icons/ext_snippet_icons.png | Bin 1319 -> 1334 bytes .../components/access_token_table_app.vue | 168 +++ .../access_tokens/components/constants.js | 61 ++ .../access_tokens/components/expires_at_field.vue | 10 +- .../components/new_access_token_app.vue | 130 +++ app/assets/javascripts/access_tokens/index.js | 71 +- app/assets/javascripts/activities.js | 4 +- .../inactive_project_deletion/components/form.vue | 249 +++++ .../inactive_project_deletion/index.js | 36 + .../admin/users/components/user_actions.vue | 2 +- .../admin/users/components/users_table.vue | 14 +- .../components/alerts_integrations_list.vue | 18 +- .../shared/components/value_stream_metrics.vue | 8 +- .../usage_trends/components/usage_counts.vue | 6 +- app/assets/javascripts/api.js | 18 +- app/assets/javascripts/api/projects_api.js | 11 +- .../two_factor_auth/components/recovery_codes.vue | 4 +- app/assets/javascripts/awards_handler.js | 40 +- .../batch_comments/components/draft_note.vue | 2 +- .../batch_comments/components/drafts_count.vue | 9 +- .../batch_comments/components/preview_dropdown.vue | 5 + .../batch_comments/components/review_bar.vue | 7 +- .../batch_comments/components/submit_dropdown.vue | 115 ++ .../batch_comments/services/drafts_service.js | 4 +- .../stores/modules/batch_comments/actions.js | 20 +- .../behaviors/components/sandboxed_mermaid.vue | 77 ++ .../javascripts/behaviors/markdown/render_gfm.js | 20 +- .../javascripts/behaviors/markdown/render_kroki.js | 4 +- .../javascripts/behaviors/markdown/render_math.js | 10 +- .../behaviors/markdown/render_mermaid.js | 2 +- .../behaviors/markdown/render_sandboxed_mermaid.js | 9 +- .../blob/blob_line_permalink_updater.js | 5 +- .../javascripts/blob/components/blob_header.vue | 6 + .../components/blob_header_default_actions.vue | 17 + .../blob/components/blob_header_filepath.vue | 4 +- app/assets/javascripts/blob/viewer/index.js | 17 +- .../javascripts/boards/components/board_app.vue | 11 +- .../javascripts/boards/components/board_form.vue | 29 +- .../boards/components/board_list_header.vue | 19 +- .../boards/components/boards_selector.vue | 67 +- .../boards/graphql/board_create.mutation.graphql | 5 +- .../boards/graphql/board_update.mutation.graphql | 5 +- app/assets/javascripts/boards/index.js | 1 - app/assets/javascripts/boards/stores/actions.js | 31 +- .../javascripts/boards/stores/mutation_types.js | 2 +- app/assets/javascripts/boards/stores/mutations.js | 15 +- app/assets/javascripts/boards/stores/state.js | 2 +- app/assets/javascripts/breadcrumb.js | 2 +- .../components/secure_files_list.vue | 2 +- .../components/ci_variable_modal.vue | 3 +- .../components/ci_variable_settings.vue | 27 +- .../components/legacy_ci_environments_dropdown.vue | 81 ++ .../components/legacy_ci_variable_modal.vue | 426 ++++++++ .../components/legacy_ci_variable_settings.vue | 32 + .../components/legacy_ci_variable_table.vue | 199 ++++ app/assets/javascripts/ci_variable_list/index.js | 63 +- .../agents/components/create_token_button.vue | 7 +- .../components/remove_cluster_confirmation.vue | 51 +- .../javascripts/clusters_list/clusters_util.js | 10 +- .../clusters_list/components/agent_token.vue | 11 +- .../clusters_list/components/clusters.vue | 10 +- .../components/install_agent_modal.vue | 7 +- .../javascripts/code_navigation/utils/index.js | 4 +- .../commit/pipelines/pipelines_table.vue | 21 +- .../components/bubble_menus/code_block.vue | 157 ++- .../components/toolbar_more_dropdown.vue | 34 + .../content_editor/components/top_toolbar.vue | 14 +- .../components/wrappers/code_block.vue | 79 +- .../components/wrappers/footnote_definition.vue | 28 + .../components/wrappers/table_cell_base.vue | 7 +- .../extensions/code_block_highlight.js | 3 +- .../content_editor/extensions/diagram.js | 22 +- .../extensions/footnote_definition.js | 27 +- .../extensions/footnote_reference.js | 15 +- .../content_editor/extensions/footnotes_section.js | 5 +- .../content_editor/extensions/sourcemap.js | 18 + .../content_editor/services/asset_resolver.js | 15 +- .../services/code_block_language_loader.js | 8 +- .../content_editor/services/content_editor.js | 4 + .../services/hast_to_prosemirror_converter.js | 329 ++++-- .../content_editor/services/markdown_serializer.js | 39 +- .../services/remark_markdown_deserializer.js | 180 +++- .../services/serialization_helpers.js | 222 +++- .../components/custom_metrics_form.vue | 4 +- app/assets/javascripts/custom_metrics/index.js | 4 +- .../cycle_analytics/components/path_navigation.vue | 11 +- .../cycle_analytics/components/stage_table.vue | 30 +- .../javascripts/cycle_analytics/constants.js | 1 + .../deprecated_jquery_dropdown/render.js | 8 +- .../design_management/components/delete_button.vue | 2 +- .../components/design_presentation.vue | 13 +- .../components/design_sidebar.vue | 180 ++-- .../design_management/components/list/item.vue | 2 +- .../components/toolbar/design_navigation.vue | 4 +- .../design_management/components/toolbar/index.vue | 12 +- .../design_management/pages/design/index.vue | 165 ++- .../javascripts/design_management/pages/index.vue | 12 +- app/assets/javascripts/diff.js | 3 +- app/assets/javascripts/diffs/components/app.vue | 16 +- .../diffs/components/collapsed_files_warning.vue | 2 +- .../javascripts/diffs/components/commit_item.vue | 9 +- .../javascripts/diffs/components/diff_content.vue | 2 +- .../diffs/components/diff_expansion_cell.vue | 47 +- .../javascripts/diffs/components/diff_file.vue | 7 +- .../diffs/components/diff_file_header.vue | 13 +- .../diffs/components/diff_line_note_form.vue | 8 +- .../javascripts/diffs/components/diff_view.vue | 43 +- .../diffs/components/merge_conflict_warning.vue | 4 +- app/assets/javascripts/diffs/store/utils.js | 8 - .../extensions/source_editor_ci_schema_ext.js | 12 +- .../source_editor_markdown_livepreview_ext.js | 27 +- .../editor/extensions/source_editor_webide_ext.js | 28 +- app/assets/javascripts/editor/schema/ci.json | 198 ++-- app/assets/javascripts/editor/source_editor.js | 5 +- .../javascripts/editor/source_editor_extension.js | 2 +- app/assets/javascripts/emoji/constants.js | 2 + app/assets/javascripts/emoji/index.js | 18 +- app/assets/javascripts/emoji/utils.js | 8 + .../environments/components/container.vue | 2 +- .../components/deploy_board_wrapper.vue | 2 +- .../environments/components/environment_folder.vue | 4 +- .../environments/components/environment_form.vue | 33 +- .../components/environments_detail_header.vue | 4 +- .../environments/components/environments_table.vue | 2 +- .../components/new_environment_item.vue | 2 +- .../error_tracking/components/error_details.vue | 7 +- .../components/error_tracking_actions.vue | 2 +- .../components/error_tracking_list.vue | 2 +- .../feature_flags/components/empty_state.vue | 2 +- .../feature_flags/components/feature_flags.vue | 13 +- .../components/feature_flags_table.vue | 20 +- .../javascripts/feature_flags/components/form.vue | 12 +- .../components/new_environments_dropdown.vue | 2 +- .../feature_flags/components/new_feature_flag.vue | 2 +- .../feature_flags/components/strategy.vue | 2 +- .../filtered_search/available_dropdown_mappings.js | 4 +- .../javascripts/filtered_search/dropdown_hint.js | 4 +- .../filtered_search/dropdown_operator.js | 2 +- .../javascripts/filtered_search/dropdown_user.js | 4 +- .../javascripts/filtered_search/dropdown_utils.js | 2 + .../filtered_search/droplab/drop_down.js | 4 +- .../filtered_search/filtered_search_manager.js | 2 +- .../filtered_search/filtered_search_token_keys.js | 20 - .../components/frequent_items_list_item.vue | 6 +- app/assets/javascripts/gfm_auto_complete.js | 2 +- app/assets/javascripts/gl_form.js | 5 +- .../google_cloud/components/gcp_regions_list.vue | 2 +- .../google_cloud/components/revoke_oauth.vue | 2 +- .../components/service_accounts_list.vue | 2 +- app/assets/javascripts/google_tag_manager/index.js | 8 +- .../fragments/issuable_timelogs.fragment.graphql | 3 + .../javascripts/graphql_shared/possible_types.json | 4 + .../components/shared_runners_form.vue | 7 +- app/assets/javascripts/group_settings/constants.js | 3 +- .../group_settings/stale_runner_cleanup.js | 3 + app/assets/javascripts/groups/components/app.vue | 42 +- .../javascripts/groups/components/empty_state.vue | 91 ++ .../javascripts/groups/components/group_folder.vue | 2 +- .../javascripts/groups/components/group_item.vue | 4 +- .../groups/components/group_name_and_path.vue | 279 +++++ .../javascripts/groups/components/groups.vue | 7 +- .../javascripts/groups/components/item_caret.vue | 4 +- .../groups/components/item_type_icon.vue | 4 +- app/assets/javascripts/groups/create_edit_form.js | 29 + app/assets/javascripts/groups/index.js | 25 + .../groups/settings/api/access_dropdown_api.js | 16 + .../groups/settings/components/access_dropdown.vue | 194 ++++ .../javascripts/groups/settings/constants.js | 3 + .../groups/settings/init_access_dropdown.js | 36 + .../components/commit_sidebar/editor_header.vue | 27 +- .../ide/components/commit_sidebar/form.vue | 2 +- .../ide/components/commit_sidebar/list.vue | 28 +- .../commit_sidebar/new_merge_request_option.vue | 48 +- .../ide/components/commit_sidebar/radio_group.vue | 55 +- app/assets/javascripts/ide/components/ide.vue | 2 +- .../javascripts/ide/components/ide_side_bar.vue | 6 +- .../javascripts/ide/components/ide_status_bar.vue | 7 +- .../javascripts/ide/components/ide_tree_list.vue | 6 +- .../ide/components/jobs/detail/description.vue | 2 +- .../javascripts/ide/components/jobs/stage.vue | 2 +- .../javascripts/ide/components/repo_editor.vue | 74 +- .../ide/components/terminal/empty_state.vue | 2 +- .../ide/components/terminal/session.vue | 2 +- app/assets/javascripts/ide/lib/editor_options.js | 1 + app/assets/javascripts/ide/utils.js | 3 +- .../javascripts/image_diff/helpers/dom_helper.js | 2 +- .../import_groups/components/import_table.vue | 54 +- .../import_entities/import_groups/constants.js | 3 + .../components/import_projects_table.vue | 2 +- .../incidents/components/incidents_list.vue | 4 +- app/assets/javascripts/incidents/list.js | 1 - .../components/pagerduty_form.vue | 24 +- app/assets/javascripts/integrations/constants.js | 36 + .../edit/components/integration_form.vue | 10 +- .../edit/components/jira_upgrade_cta.vue | 51 - .../edit/components/sections/configuration.vue | 38 + .../edit/components/sections/trigger.vue | 26 + .../integrations/edit/components/trigger_field.vue | 46 + app/assets/javascripts/integrations/edit/index.js | 4 +- .../overrides/components/integration_overrides.vue | 2 +- .../components/invite_members_modal.vue | 13 + .../components/invite_members_trigger.vue | 13 +- .../components/invite_modal_base.vue | 16 + .../components/user_limit_notification.vue | 33 +- app/assets/javascripts/invite_members/constants.js | 13 +- .../issuable/components/csv_export_modal.vue | 34 +- .../issuable/components/csv_import_modal.vue | 4 + .../components/issuable_header_warnings.vue | 2 +- .../issuable/components/related_issuable_item.vue | 5 +- .../javascripts/issuable/components/status_box.vue | 5 +- app/assets/javascripts/issuable/issuable_form.js | 3 + .../issuable/popover/components/issue_popover.vue | 83 ++ .../issuable/popover/components/mr_popover.vue | 116 ++ .../javascripts/issuable/popover/constants.js | 13 + app/assets/javascripts/issuable/popover/index.js | 85 ++ .../issuable/popover/queries/issue.query.graphql | 11 + .../popover/queries/merge_request.query.graphql | 19 + .../issues/create_merge_request_dropdown.js | 49 +- app/assets/javascripts/issues/index.js | 4 +- .../issues/list/components/issues_list_app.vue | 99 +- app/assets/javascripts/issues/list/constants.js | 6 + app/assets/javascripts/issues/list/index.js | 10 + .../get_issues_counts_without_crm.query.graphql | 136 --- .../queries/get_issues_without_crm.query.graphql | 94 -- app/assets/javascripts/issues/list/utils.js | 11 +- .../issues/new/components/title_suggestions.vue | 28 +- .../issues/show/components/description.vue | 80 +- .../issues/show/components/edit_actions.vue | 2 +- .../queries/get_timeline_events.query.graphql | 21 + .../show/components/incidents/incident_tabs.vue | 21 +- .../components/incidents/timeline_events_list.vue | 73 ++ .../incidents/timeline_events_list_item.vue | 71 ++ .../components/incidents/timeline_events_tab.vue | 70 ++ .../issues/show/components/incidents/utils.js | 18 + .../javascripts/issues/show/components/title.vue | 2 +- app/assets/javascripts/issues/show/index.js | 5 +- .../jira_connect/branches/pages/index.vue | 2 +- .../components/add_namespace_modal/groups_list.vue | 2 +- .../jira_connect/subscriptions/components/app.vue | 86 +- .../components/sign_in_oauth_button.vue | 2 +- .../subscriptions/components/user_link.vue | 25 +- .../subscriptions/pages/subscriptions_page.vue | 2 +- .../jira_import/components/jira_import_app.vue | 2 +- .../jira_import/components/jira_import_form.vue | 4 +- .../jobs/components/job_container_item.vue | 3 +- .../jobs/components/log/line_header.vue | 2 +- .../jobs/components/manual_variables_form.vue | 2 +- .../javascripts/jobs/components/stuck_block.vue | 23 +- .../jobs/components/table/jobs_table_app.vue | 2 +- .../labels/components/promote_label_modal.vue | 2 +- app/assets/javascripts/lazy_loader.js | 9 +- app/assets/javascripts/lib/gfm/index.js | 27 +- app/assets/javascripts/lib/graphql.js | 13 +- app/assets/javascripts/lib/utils/color_utils.js | 2 +- .../confirm_via_gl_modal/confirm_via_gl_modal.js | 2 +- app/assets/javascripts/lib/utils/dom_utils.js | 11 - app/assets/javascripts/lib/utils/forms.js | 4 +- app/assets/javascripts/lib/utils/rails_ujs.js | 4 +- app/assets/javascripts/lib/utils/table_utility.js | 10 + app/assets/javascripts/lib/utils/users_cache.js | 7 +- app/assets/javascripts/logo.js | 4 +- app/assets/javascripts/logs/utils.js | 21 - app/assets/javascripts/main.js | 7 + .../members/components/members_tabs.vue | 4 + .../members/components/table/members_table.vue | 33 +- .../members/components/table/role_dropdown.vue | 2 +- app/assets/javascripts/members/constants.js | 12 +- .../merge_conflict_resolver_app.vue | 4 +- app/assets/javascripts/merge_request.js | 10 +- app/assets/javascripts/merge_request_tabs.js | 3 + .../components/promote_milestone_modal.vue | 2 +- .../components/create_dashboard_modal.vue | 2 +- .../monitoring/components/dashboard.vue | 14 - .../components/dashboard_actions_menu.vue | 2 +- .../monitoring/components/dashboard_header.vue | 2 +- .../components/dashboard_panel_builder.vue | 8 +- .../components/duplicate_dashboard_modal.vue | 27 +- .../monitoring/components/graph_group.vue | 2 +- .../monitoring/services/alerts_service.js | 43 - .../mr_popover/components/mr_popover.vue | 115 -- app/assets/javascripts/mr_popover/constants.js | 13 - app/assets/javascripts/mr_popover/index.js | 67 -- .../mr_popover/queries/merge_request.query.graphql | 19 - .../nav/components/responsive_header.vue | 2 +- .../notes/components/comment_field_layout.vue | 4 +- .../javascripts/notes/components/comment_form.vue | 34 +- .../notes/components/diff_discussion_header.vue | 9 +- .../notes/components/diff_with_note.vue | 11 +- .../notes/components/discussion_counter.vue | 12 +- .../components/email_participants_warning.vue | 2 +- .../javascripts/notes/components/note_actions.vue | 14 +- .../javascripts/notes/components/note_body.vue | 114 +- .../javascripts/notes/components/note_form.vue | 2 +- .../javascripts/notes/components/note_header.vue | 9 +- .../notes/components/noteable_discussion.vue | 2 +- .../javascripts/notes/components/noteable_note.vue | 5 +- .../javascripts/notes/components/notes_app.vue | 6 - .../notes/components/toggle_replies_widget.vue | 2 +- app/assets/javascripts/notes/constants.js | 2 + app/assets/javascripts/notes/i18n.js | 4 +- app/assets/javascripts/notes/stores/actions.js | 14 +- .../javascripts/notes/stores/modules/index.js | 1 + .../javascripts/notes/stores/mutation_types.js | 1 + app/assets/javascripts/notes/stores/mutations.js | 17 +- .../components/details_page/tags_list_row.vue | 5 +- .../components/list_page/cleanup_status.vue | 5 +- .../components/list_page/image_list_row.vue | 4 +- .../components/list_page/registry_header.vue | 2 +- .../explorer/constants/details.js | 2 +- .../container_registry/explorer/constants/list.js | 2 + .../harbor_registry/constants/details.js | 2 +- .../harbor_registry/pages/list.vue | 3 +- .../details/components/package_files.vue | 2 +- .../list/components/infrastructure_search.vue | 2 +- .../list/components/packages_list.vue | 25 +- .../components/details/additional_metadata.vue | 75 +- .../details/additional_metadata_loader.vue | 30 + .../components/details/metadata/composer.vue | 10 +- .../components/details/metadata/conan.vue | 4 +- .../components/details/metadata/maven.vue | 6 +- .../components/details/metadata/nuget.vue | 14 +- .../components/details/metadata/pypi.vue | 4 +- .../components/details/package_files.vue | 10 +- .../components/details/package_history.vue | 52 +- .../components/details/package_history_loader.vue | 24 + .../components/list/package_search.vue | 2 +- .../components/list/packages_list.vue | 19 +- .../package_registry/constants.js | 8 + .../queries/get_package_details.query.graphql | 32 +- .../queries/get_package_metadata.query.graphql | 39 + .../queries/get_package_pipelines.query.graphql | 24 + .../package_registry/pages/details.vue | 27 +- .../group/components/dependency_proxy_settings.vue | 6 +- .../components/container_expiration_policy.vue | 124 +++ .../container_expiration_policy_form.vue | 320 ++++++ .../project/components/expiration_input.vue | 2 +- .../project/components/registry_settings_app.vue | 119 +-- .../settings/project/components/settings_form.vue | 320 ------ .../settings/project/constants.js | 4 + .../shared/components/cli_commands.vue | 2 +- .../shared/components/persisted_search.vue | 2 +- .../shared/components/registry_breadcrumb.vue | 2 +- .../application_settings/payload_downloader.js | 4 +- .../application_settings/payload_previewer.js | 6 +- .../admin/application_settings/repository/index.js | 3 + .../javascripts/pages/admin/groups/edit/index.js | 2 + .../javascripts/pages/admin/groups/new/index.js | 3 + .../pages/admin/impersonation_tokens/index.js | 10 +- .../pages/dashboard/todos/index/todos.js | 6 +- .../pages/groups/group_members/index.js | 22 +- .../javascripts/pages/groups/issues/index.js | 25 +- app/assets/javascripts/pages/groups/new/index.js | 5 +- .../pages/groups/settings/access_tokens/index.js | 8 +- .../pages/groups/settings/ci_cd/show/index.js | 2 + .../components/bulk_imports_history_app.vue | 2 +- .../history/components/import_error_details.vue | 2 +- .../history/components/import_history_app.vue | 2 +- .../pages/profiles/personal_access_tokens/index.js | 10 +- .../pages/profiles/two_factor_auths/index.js | 2 +- .../projects/graphs/components/code_coverage.vue | 11 +- .../pages/projects/incidents/show/index.js | 4 +- .../pages/projects/issues/index/index.js | 32 +- .../pages/projects/issues/show/index.js | 2 + .../projects/merge_requests/conflicts/index.js | 2 - .../merge_requests/creations/new/compare.js | 9 +- .../creations/new/compare_autocomplete.js | 7 +- .../pages/projects/services/edit/index.js | 11 - .../pages/projects/settings/access_tokens/index.js | 8 +- .../pages/projects/settings/branch_rules/index.js | 3 + .../projects/settings/integrations/edit/index.js | 11 + .../projects/settings/integrations/index/index.js | 3 + .../projects/settings/integrations/show/index.js | 3 - .../projects/settings/repository/show/index.js | 3 + .../permissions/components/settings_panel.vue | 131 ++- .../pages/projects/shared/save_project_loader.js | 16 +- .../javascripts/pages/projects/show/index.js | 2 + .../projects/static_site_editor/show/index.js | 3 - .../javascripts/pages/projects/tags/index/index.js | 8 +- .../javascripts/pages/projects/tags/remove_tag.js | 16 - .../javascripts/pages/projects/tags/show/index.js | 9 +- .../pages/shared/nav/sidebar_tracking.js | 10 +- .../javascripts/pages/users/activity_calendar.js | 2 +- .../performance_bar/components/add_request.vue | 34 +- .../components/performance_bar_app.vue | 4 +- .../components/request_selector.vue | 2 +- app/assets/javascripts/performance_bar/index.js | 4 +- .../performance_bar/performance_bar_log.js | 2 +- .../services/performance_bar_service.js | 15 +- .../stores/performance_bar_store.js | 10 +- app/assets/javascripts/persistent_user_callouts.js | 4 +- .../components/commit/commit_form.vue | 6 +- .../drawer/cards/first_pipeline_card.vue | 11 +- .../cards/pipeline_config_reference_card.vue | 43 +- .../components/editor/ci_editor_header.vue | 13 +- .../components/file_nav/branch_switcher.vue | 2 +- .../file_nav/pipeline_editor_file_nav.vue | 8 +- .../components/lint/ci_lint_results.vue | 2 +- .../components/pipeline_editor_tabs.vue | 23 +- .../components/popovers/file_tree_popover.vue | 7 +- .../components/validate/ci_validate.vue | 65 ++ .../javascripts/pipeline_editor/constants.js | 21 +- app/assets/javascripts/pipeline_editor/index.js | 2 + .../pipeline_editor/pipeline_editor_home.vue | 7 +- .../pipeline_wizard/components/input.vue | 100 -- .../pipeline_wizard/components/input_wrapper.vue | 100 ++ .../pipeline_wizard/components/step.vue | 2 +- .../javascripts/pipeline_wizard/templates/.gitkeep | 0 .../pipelines/components/graph/linked_pipeline.vue | 40 +- .../components/jobs/failed_jobs_table.vue | 8 +- .../pipelines/components/jobs/jobs_app.vue | 2 +- .../deprecated_type_keyword_notification.vue | 102 -- .../pipelines/components/pipeline_tabs.vue | 31 +- .../pipelines_list/pipeline_mini_graph.vue | 4 +- .../components/pipelines_list/pipeline_stage.vue | 43 +- .../components/pipelines_list/pipeline_url.vue | 3 +- .../components/test_reports/test_case_details.vue | 23 +- .../components/test_reports/test_suite_table.vue | 58 +- .../components/test_reports/test_summary.vue | 2 +- .../queries/get_pipeline_warnings.query.graphql | 12 - .../pipelines/pipeline_details_bundle.js | 28 +- .../pipelines/pipeline_details_notification.js | 31 - app/assets/javascripts/pipelines/pipeline_tabs.js | 40 +- .../javascripts/pipelines/pipeline_test_details.js | 11 +- .../profile/account/components/update_username.vue | 5 +- app/assets/javascripts/project_select.js | 204 ++-- .../components/clusters_deprecation_alert.vue | 23 + .../projects/clusters_deprecation_alert/index.js | 21 + .../projects/commit/components/form_modal.vue | 2 +- .../projects/commits/components/author_select.vue | 2 +- .../projects/compare/components/app.vue | 4 +- .../projects/compare/components/revision_card.vue | 10 +- .../projects/default_project_templates.js | 8 + .../projects/pipelines/charts/components/app.vue | 12 +- .../projects/project_import_gitlab_project.js | 15 +- app/assets/javascripts/projects/project_new.js | 154 ++- .../javascripts/projects/project_visibility.js | 6 +- .../branch_rules/components/branch_dropdown.vue | 110 ++ .../settings/branch_rules/components/rule_edit.vue | 38 + .../settings/branch_rules/mount_branch_rules.js | 26 + .../branch_rules/queries/branches.query.graphql | 8 + .../settings/repository/branch_rules/app.vue | 16 + .../repository/branch_rules/mount_branch_rules.js | 13 + app/assets/javascripts/related_issues/constants.js | 11 + app/assets/javascripts/related_issues/index.js | 3 +- .../javascripts/releases/components/app_index.vue | 2 +- .../releases/components/release_block_header.vue | 2 +- .../graphql/fragments/release.fragment.graphql | 1 + .../fragments/release_for_editing.fragment.graphql | 1 + .../mutations/create_release.mutation.graphql | 1 + .../graphql/queries/all_releases.query.graphql | 1 + .../javascripts/reports/components/summary_row.vue | 2 +- .../repository/components/blob_content_viewer.vue | 23 +- .../repository/components/blob_viewers/index.js | 1 + .../components/blob_viewers/sketch_viewer.vue | 31 + .../repository/components/last_commit.vue | 2 +- .../repository/components/preview/index.vue | 2 +- .../repository/components/table/index.vue | 14 +- .../repository/components/table/row.vue | 8 +- app/assets/javascripts/rest_api.js | 1 + app/assets/javascripts/right_sidebar.js | 2 +- .../admin_runner_show/admin_runner_show_app.vue | 30 +- .../runner/admin_runners/admin_runners_app.vue | 18 +- .../javascripts/runner/admin_runners/index.js | 4 + .../runner/components/cells/runner_status_cell.vue | 7 + .../registration/registration_dropdown.vue | 26 +- .../components/registration/registration_token.vue | 18 +- .../runner/components/runner_details.vue | 27 +- .../javascripts/runner/components/runner_jobs.vue | 8 +- .../javascripts/runner/components/runner_list.vue | 2 +- .../runner/components/runner_list_empty_state.vue | 75 ++ .../runner/components/runner_projects.vue | 8 +- .../runner/components/runner_update_form.vue | 12 +- .../graphql/list/admin_runners.query.graphql | 2 +- .../graphql/list/group_runners.query.graphql | 2 +- .../runner/graphql/list/list_item.fragment.graphql | 21 +- .../graphql/list/list_item_shared.fragment.graphql | 20 + .../runner/graphql/show/runner.query.graphql | 40 +- .../graphql/show/runner_details.fragment.graphql | 5 + .../show/runner_details_shared.fragment.graphql | 39 + .../group_runner_show/group_runner_show_app.vue | 114 ++ .../javascripts/runner/group_runner_show/index.js | 36 + .../runner/group_runners/group_runners_app.vue | 17 +- .../javascripts/runner/group_runners/index.js | 4 + .../javascripts/runner/runner_search_utils.js | 14 + app/assets/javascripts/search/store/actions.js | 18 +- app/assets/javascripts/search_autocomplete.js | 2 +- .../search_settings/components/search_settings.vue | 2 +- .../security_configuration/components/app.vue | 28 +- .../security_configuration/components/constants.js | 4 - .../graphql/current_license.query.graphql | 6 - .../javascripts/security_configuration/index.js | 1 + .../components/assignees/assignee_avatar_link.vue | 6 +- .../sidebar/components/assignees/assignees.vue | 7 +- .../components/assignees/collapsed_assignee.vue | 2 +- .../assignees/collapsed_assignee_list.vue | 2 +- .../assignees/uncollapsed_assignee_list.vue | 2 +- .../components/attention_requested_toggle.vue | 6 +- .../confidential/sidebar_confidentiality_form.vue | 13 +- .../components/date/sidebar_date_widget.vue | 2 +- .../sidebar/components/lock/edit_form_buttons.vue | 2 +- .../components/participants/participants.vue | 4 +- .../components/reviewers/collapsed_reviewer.vue | 2 +- .../reviewers/collapsed_reviewer_list.vue | 2 +- .../sidebar/components/sidebar_dropdown_widget.vue | 2 +- .../components/time_tracking/collapsed_state.vue | 2 +- .../time_tracking/graphql/cache_update.js | 20 + .../mutations/delete_timelog.mutation.graphql | 5 + .../sidebar/components/time_tracking/report.vue | 92 +- .../components/time_tracking/time_tracker.vue | 1 + app/assets/javascripts/sidebar/graphql.js | 8 +- app/assets/javascripts/sidebar/mount_sidebar.js | 7 +- .../queries/escalation_status.fragment.graphql | 4 + .../update_escalation_status.mutation.graphql | 4 +- app/assets/javascripts/sidebar/utils.js | 1 - app/assets/javascripts/single_file_diff.js | 2 +- .../static_site_editor/components/app.vue | 13 - .../static_site_editor/components/edit_area.vue | 190 ---- .../static_site_editor/components/edit_drawer.vue | 27 - .../static_site_editor/components/edit_header.vue | 23 - .../components/edit_meta_controls.vue | 130 --- .../components/edit_meta_modal.vue | 126 --- .../components/front_matter_controls.vue | 57 - .../components/invalid_content_message.vue | 29 - .../components/publish_toolbar.vue | 57 - .../components/skeleton_loader.vue | 19 - .../components/submit_changes_error.vue | 24 - .../components/unsaved_changes_confirm_dialog.vue | 27 - .../javascripts/static_site_editor/constants.js | 35 - .../static_site_editor/graphql/index.js | 47 - .../has_submitted_changes.mutation.graphql | 5 - .../submit_content_changes.mutation.graphql | 7 - .../graphql/queries/app_data.query.graphql | 17 - .../queries/saved_content_meta.query.graphql | 3 - .../graphql/queries/source_content.query.graphql | 10 - .../static_site_editor/graphql/resolvers/file.js | 11 - .../graphql/resolvers/has_submitted_changes.js | 25 - .../graphql/resolvers/submit_content_changes.js | 47 - .../static_site_editor/graphql/typedefs.graphql | 58 - .../static_site_editor/image_repository.js | 25 - app/assets/javascripts/static_site_editor/index.js | 56 - .../javascripts/static_site_editor/pages/home.vue | 169 --- .../static_site_editor/pages/success.vue | 106 -- .../rich_content_editor/constants.js | 57 - .../modals/add_image/add_image_modal.vue | 134 --- .../modals/add_image/upload_image_tab.vue | 56 - .../modals/insert_video_modal.vue | 93 -- .../rich_content_editor/rich_content_editor.vue | 150 --- .../services/build_custom_renderer.js | 42 - .../services/build_html_to_markdown_renderer.js | 109 -- .../rich_content_editor/services/editor_service.js | 116 -- .../services/renderers/build_uneditable_token.js | 63 -- .../renderers/render_attribute_definition.js | 7 - .../renderers/render_embedded_ruby_text.js | 9 - .../renderers/render_font_awesome_html_inline.js | 11 - .../services/renderers/render_heading.js | 6 - .../services/renderers/render_html_block.js | 23 - .../renderers/render_identifier_instance_text.js | 40 - .../renderers/render_identifier_paragraph.js | 40 - .../services/renderers/render_list_item.js | 6 - .../services/renderers/render_softbreak.js | 7 - .../services/renderers/render_utils.js | 38 - .../rich_content_editor/services/sanitize_html.js | 22 - .../rich_content_editor/toolbar_item.vue | 31 - .../static_site_editor/router/constants.js | 2 - .../javascripts/static_site_editor/router/index.js | 15 - .../static_site_editor/router/routes.js | 21 - .../static_site_editor/services/formatter.js | 56 - .../static_site_editor/services/front_matterify.js | 75 -- .../services/generate_branch_name.js | 8 - .../static_site_editor/services/image_service.js | 8 - .../services/load_source_content.js | 15 - .../services/parse_source_file.js | 46 - .../services/renderers/render_image.js | 89 -- .../services/submit_content_changes.js | 145 --- .../static_site_editor/services/templater.js | 89 -- .../tags/components/delete_tag_modal.vue | 192 ++++ app/assets/javascripts/tags/event_hub.js | 3 + .../javascripts/tags/init_delete_tag_modal.js | 14 + .../terraform/components/states_table.vue | 58 +- .../terraform/components/states_table_actions.vue | 10 +- .../terraform/components/terraform_list.vue | 7 +- .../graphql/fragments/state.fragment.graphql | 1 + app/assets/javascripts/terraform/index.js | 4 +- .../token_access/components/token_access.vue | 2 +- .../components/token_projects_table.vue | 6 - app/assets/javascripts/user_popovers.js | 139 ++- .../components/approvals/approvals.vue | 97 +- .../components/approvals/approvals_summary.vue | 4 +- .../components/approvals/humanized_text.js | 23 + .../components/extensions/actions.vue | 1 + .../components/extensions/base.vue | 84 +- .../components/extensions/child_content.vue | 19 +- .../components/extensions/container.js | 10 +- .../components/extensions/index.js | 17 +- .../components/extensions/status_icon.vue | 2 +- .../components/extensions/telemetry.js | 207 ++++ .../components/mr_collapsible_extension.vue | 2 +- .../components/mr_widget_header.vue | 100 -- .../components/mr_widget_icon.vue | 2 +- .../components/mr_widget_pipeline.vue | 2 +- .../components/mr_widget_related_links.vue | 4 +- .../components/mr_widget_suggest_pipeline.vue | 2 +- .../components/states/ready_to_merge.vue | 19 +- .../components/states/work_in_progress.vue | 1 + .../terraform/mr_widget_terraform_container.vue | 6 +- .../vue_merge_request_widget/constants.js | 12 + .../extensions/accessibility/index.js | 1 + .../extensions/code_quality/index.js | 1 - .../vue_merge_request_widget/extensions/issues.js | 3 +- .../extensions/security_reports/index.js | 10 + .../extensions/terraform/index.js | 2 +- .../extensions/test_report/index.js | 22 +- .../extensions/test_report/utils.js | 9 + .../vue_merge_request_widget/mr_widget_options.vue | 36 +- .../stores/get_state_key.js | 4 +- .../stores/mr_widget_store.js | 14 + .../alert_details/components/alert_details.vue | 10 +- .../components/sidebar/sidebar_assignees.vue | 4 +- .../vue_shared/alert_details/constants.js | 9 - .../javascripts/vue_shared/alert_details/index.js | 16 +- .../javascripts/vue_shared/components/ci_icon.vue | 15 +- .../vue_shared/components/clone_dropdown.vue | 2 +- .../color_select_dropdown/color_item.vue | 25 + .../color_select_dropdown/color_select_root.vue | 214 ++++ .../components/color_select_dropdown/constants.js | 30 + .../color_select_dropdown/dropdown_contents.vue | 109 ++ .../dropdown_contents_color_view.vue | 53 + .../color_select_dropdown/dropdown_header.vue | 31 + .../color_select_dropdown/dropdown_value.vue | 43 + .../graphql/epic_color.query.graphql | 9 + .../graphql/epic_update_color.mutation.graphql | 9 + .../components/color_select_dropdown/utils.js | 15 + .../content_viewer/viewers/markdown_viewer.vue | 9 +- .../components/filtered_search_bar/constants.js | 14 +- .../filtered_search_bar/tokens/base_token.vue | 2 +- .../filtered_search_bar/tokens/label_token.vue | 6 +- .../form/input_copy_toggle_visibility.vue | 37 +- .../vue_shared/components/markdown/header.vue | 2 +- .../components/notes/noteable_warning.vue | 6 +- .../vue_shared/components/notes/skeleton_note.vue | 6 +- .../vue_shared/components/notes/system_note.vue | 16 +- .../project_selector/project_selector.vue | 9 +- .../components/registry/registry_search.vue | 10 +- .../components/runner_instructions/constants.js | 2 - .../runner_instructions/runner_instructions.vue | 22 +- .../runner_instructions_modal.vue | 123 ++- .../sidebar/labels_select_vue/dropdown_button.vue | 3 + .../labels_select_vue/dropdown_contents.vue | 3 + .../dropdown_contents_create_view.vue | 11 +- .../dropdown_contents_labels_view.vue | 6 +- .../sidebar/labels_select_vue/dropdown_title.vue | 7 +- .../sidebar/labels_select_vue/dropdown_value.vue | 3 + .../labels_select_vue/dropdown_value_collapsed.vue | 3 + .../sidebar/labels_select_vue/label_item.vue | 35 +- .../labels_select_vue/labels_select_root.vue | 22 +- .../sidebar/labels_select_vue/store/getters.js | 7 +- .../sidebar/labels_select_vue/store/mutations.js | 44 +- .../labels_select_widget/dropdown_contents.vue | 5 +- .../dropdown_contents_create_view.vue | 7 +- .../labels_select_widget/dropdown_header.vue | 3 +- .../labels_select_widget/dropdown_value.vue | 4 +- .../source_viewer/components/chunk_line.vue | 2 +- .../components/source_viewer/constants.js | 4 + .../components/source_viewer/plugins/index.js | 13 + .../source_viewer/plugins/wrap_comments.js | 39 + .../components/source_viewer/source_viewer.vue | 2 + .../components/upload_dropzone/upload_dropzone.vue | 4 +- .../components/usage_quotas/usage_banner.vue | 2 +- .../components/user_popover/constants.js | 1 + .../components/user_popover/user_popover.vue | 125 ++- .../vue_shared/components/web_ide_link.vue | 2 +- app/assets/javascripts/vue_shared/constants.js | 6 +- .../create/components/issuable_create_root.vue | 1 - .../issuable/create/components/issuable_form.vue | 59 +- .../issuable/list/components/issuable_item.vue | 7 +- .../list/components/issuable_list_root.vue | 17 +- .../vue_shared/issuable/list/constants.js | 7 + .../issuable/show/components/issuable_body.vue | 5 - .../issuable/show/components/issuable_header.vue | 12 +- .../show/components/issuable_show_root.vue | 7 - .../issuable/show/components/issuable_title.vue | 28 +- .../new_namespace/new_namespace_page.vue | 6 +- .../javascripts/whats_new/components/app.vue | 2 +- app/assets/javascripts/whats_new/store/actions.js | 3 +- .../javascripts/whats_new/utils/notification.js | 2 +- .../work_items/components/item_state.vue | 18 +- .../work_items/components/item_title.vue | 9 +- .../work_items/components/update_work_item.js | 23 + .../work_items/components/work_item_assignees.vue | 111 ++ .../components/work_item_description.vue | 234 ++++ .../work_items/components/work_item_detail.vue | 53 +- .../components/work_item_detail_modal.vue | 17 +- .../work_items/components/work_item_links/index.js | 37 + .../components/work_item_links/work_item_links.vue | 165 +++ .../work_item_links/work_item_links_form.vue | 28 + .../work_items/components/work_item_state.vue | 46 +- .../work_items/components/work_item_title.vue | 50 +- .../work_items/components/work_item_weight.vue | 26 + app/assets/javascripts/work_items/constants.js | 18 + .../local_update_work_item.mutation.graphql | 9 + .../javascripts/work_items/graphql/provider.js | 84 +- .../work_items/graphql/typedefs.graphql | 36 + .../graphql/update_work_item_task.mutation.graphql | 8 + .../update_work_item_widgets.mutation.graphql | 10 + .../work_items/graphql/work_item.fragment.graphql | 7 + .../work_items/graphql/work_item.query.graphql | 16 + .../graphql/work_item_links.query.graphql | 28 + app/assets/javascripts/work_items/index.js | 4 +- .../work_items/pages/work_item_root.vue | 4 + app/assets/stylesheets/_page_specific_files.scss | 1 - app/assets/stylesheets/components/avatar.scss | 4 - .../stylesheets/components/feature_highlight.scss | 26 - .../stylesheets/components/related_items_list.scss | 6 - .../upload_dropzone/upload_dropzone.scss | 33 +- app/assets/stylesheets/errors.scss | 4 + app/assets/stylesheets/framework.scss | 1 - app/assets/stylesheets/framework/awards.scss | 6 + app/assets/stylesheets/framework/buttons.scss | 64 +- .../stylesheets/framework/contextual_sidebar.scss | 16 +- app/assets/stylesheets/framework/diffs.scss | 41 +- app/assets/stylesheets/framework/dropdowns.scss | 26 +- app/assets/stylesheets/framework/forms.scss | 5 + app/assets/stylesheets/framework/header.scss | 14 +- app/assets/stylesheets/framework/highlight.scss | 1 - app/assets/stylesheets/framework/icons.scss | 106 +- app/assets/stylesheets/framework/issue_box.scss | 40 - app/assets/stylesheets/framework/mixins.scss | 4 +- app/assets/stylesheets/framework/page_title.scss | 2 - .../framework/secondary_navigation_elements.scss | 23 +- app/assets/stylesheets/framework/sidebar.scss | 34 +- app/assets/stylesheets/framework/timeline.scss | 2 +- app/assets/stylesheets/framework/typography.scss | 23 +- app/assets/stylesheets/framework/variables.scss | 14 +- app/assets/stylesheets/highlight/common.scss | 38 +- app/assets/stylesheets/highlight/themes/dark.scss | 4 - .../stylesheets/highlight/themes/monokai.scss | 23 +- app/assets/stylesheets/highlight/themes/none.scss | 12 +- .../highlight/themes/solarized-dark.scss | 23 +- .../highlight/themes/solarized-light.scss | 4 - app/assets/stylesheets/highlight/white_base.scss | 13 - app/assets/stylesheets/notify_enhanced.scss | 4 - .../stylesheets/page_bundles/_pipeline_mixins.scss | 1 - app/assets/stylesheets/page_bundles/build.scss | 13 - app/assets/stylesheets/page_bundles/ide.scss | 19 +- .../stylesheets/page_bundles/issues_show.scss | 28 +- .../stylesheets/page_bundles/jira_connect.scss | 6 - .../stylesheets/page_bundles/merge_requests.scss | 71 +- app/assets/stylesheets/page_bundles/pipelines.scss | 12 +- app/assets/stylesheets/page_bundles/wiki.scss | 1 - app/assets/stylesheets/pages/commits.scss | 6 +- app/assets/stylesheets/pages/detail_page.scss | 19 +- app/assets/stylesheets/pages/groups.scss | 51 +- app/assets/stylesheets/pages/issuable.scss | 119 ++- app/assets/stylesheets/pages/labels.scss | 15 - app/assets/stylesheets/pages/merge_requests.scss | 52 +- app/assets/stylesheets/pages/note_form.scss | 27 +- app/assets/stylesheets/pages/notes.scss | 8 +- app/assets/stylesheets/pages/pages.scss | 55 - app/assets/stylesheets/pages/profile.scss | 4 - .../stylesheets/pages/profiles/preferences.scss | 12 +- app/assets/stylesheets/snippets.scss | 7 + app/assets/stylesheets/startup/startup-dark.scss | 120 ++- .../stylesheets/startup/startup-general.scss | 116 +- app/assets/stylesheets/startup/startup-signin.scss | 6 +- app/assets/stylesheets/themes/_dark.scss | 1 - .../stylesheets/themes/dark_mode_overrides.scss | 12 + app/assets/stylesheets/themes/theme_dark.scss | 14 - app/assets/stylesheets/themes/theme_gray.scss | 14 + app/assets/stylesheets/themes/theme_helper.scss | 3 +- app/assets/stylesheets/themes/theme_light.scss | 95 -- .../stylesheets/themes/theme_light_gray.scss | 103 ++ app/assets/stylesheets/utilities.scss | 47 +- .../diffs/overflow_warning_component.html.haml | 2 +- app/components/diffs/overflow_warning_component.rb | 7 - app/components/diffs/stats_component.rb | 8 - app/components/pajamas/alert_component.html.haml | 9 +- app/components/pajamas/alert_component.rb | 14 +- app/components/pajamas/banner_component.html.haml | 23 + app/components/pajamas/banner_component.rb | 61 ++ app/components/pajamas/button_component.html.haml | 8 + app/components/pajamas/button_component.rb | 118 ++ app/components/pajamas/card_component.html.haml | 9 + app/components/pajamas/card_component.rb | 21 + .../pajamas/checkbox_component.html.haml | 6 + app/components/pajamas/checkbox_component.rb | 56 + app/components/pajamas/component.rb | 12 +- .../checkbox_radio_label_with_help_text.rb | 30 + .../pajamas/concerns/checkbox_radio_options.rb | 11 + app/components/pajamas/radio_component.html.haml | 5 + app/components/pajamas/radio_component.rb | 51 + .../application_settings/appearances_controller.rb | 1 + .../admin/application_settings_controller.rb | 6 + .../admin/broadcast_messages_controller.rb | 1 + app/controllers/admin/dashboard_controller.rb | 2 - app/controllers/admin/groups_controller.rb | 1 + app/controllers/admin/runners_controller.rb | 2 + app/controllers/admin/users_controller.rb | 2 +- app/controllers/application_controller.rb | 2 +- app/controllers/autocomplete_controller.rb | 4 +- app/controllers/clusters/clusters_controller.rb | 106 +- app/controllers/concerns/gitlab_recaptcha.rb | 3 + app/controllers/concerns/integrations/actions.rb | 2 - app/controllers/concerns/issuable_actions.rb | 3 +- app/controllers/concerns/issues_calendar.rb | 2 - app/controllers/concerns/membership_actions.rb | 4 +- app/controllers/concerns/notes_actions.rb | 42 +- .../concerns/product_analytics_tracking.rb | 11 +- .../project_stats_refresh_conflicts_guard.rb | 13 + app/controllers/concerns/snippets_actions.rb | 2 - app/controllers/concerns/sorting_preference.rb | 17 +- .../captcha_check/html_format_actions_support.rb | 2 + app/controllers/concerns/wiki_actions.rb | 2 +- app/controllers/concerns/zuora_csp.rb | 26 + app/controllers/confirmations_controller.rb | 2 +- .../groups/autocomplete_sources_controller.rb | 3 +- .../groups/email_campaigns_controller.rb | 1 + app/controllers/groups/group_members_controller.rb | 4 +- app/controllers/groups/runners_controller.rb | 2 + .../groups/settings/ci_cd_controller.rb | 5 + app/controllers/groups_controller.rb | 8 +- app/controllers/help_controller.rb | 26 +- app/controllers/ide_controller.rb | 5 + app/controllers/import/fogbugz_controller.rb | 14 +- app/controllers/import/gitea_controller.rb | 2 +- app/controllers/import/github_controller.rb | 2 - .../oauth_application_ids_controller.rb | 23 + app/controllers/jwks_controller.rb | 4 - app/controllers/mailgun/webhooks_controller.rb | 55 + .../mailgun/permanent_failures_controller.rb | 65 -- app/controllers/oauth/authorizations_controller.rb | 17 + app/controllers/omniauth_callbacks_controller.rb | 10 + app/controllers/profiles/accounts_controller.rb | 2 +- .../profiles/active_sessions_controller.rb | 2 +- .../profiles/personal_access_tokens_controller.rb | 14 +- app/controllers/profiles_controller.rb | 5 +- .../projects/ci/pipeline_editor_controller.rb | 2 +- app/controllers/projects/commits_controller.rb | 2 +- app/controllers/projects/compare_controller.rb | 19 +- .../environments/prometheus_api_controller.rb | 1 + .../environments/sample_metrics_controller.rb | 1 + .../projects/environments_controller.rb | 6 +- .../projects/error_tracking/base_controller.rb | 1 + .../projects/error_tracking/projects_controller.rb | 1 + .../projects/google_cloud/base_controller.rb | 1 + app/controllers/projects/grafana_api_controller.rb | 1 + app/controllers/projects/incidents_controller.rb | 1 - app/controllers/projects/issues_controller.rb | 26 +- app/controllers/projects/jobs_controller.rb | 4 +- app/controllers/projects/logs_controller.rb | 1 + app/controllers/projects/mattermosts_controller.rb | 2 +- .../projects/merge_requests/drafts_controller.rb | 13 + .../projects/merge_requests_controller.rb | 10 +- .../metrics/dashboards/builder_controller.rb | 1 + .../projects/metrics_dashboard_controller.rb | 1 + .../dashboards_controller.rb | 1 + .../projects/pipeline_schedules_controller.rb | 2 - .../projects/pipelines/tests_controller.rb | 4 +- app/controllers/projects/pipelines_controller.rb | 22 +- .../projects/prometheus/alerts_controller.rb | 10 +- .../projects/prometheus/metrics_controller.rb | 7 +- app/controllers/projects/releases_controller.rb | 18 +- .../projects/service_hook_logs_controller.rb | 23 - app/controllers/projects/services_controller.rb | 122 --- .../projects/settings/branch_rules_controller.rb | 15 + .../projects/settings/ci_cd_controller.rb | 10 +- .../settings/integration_hook_logs_controller.rb | 27 + .../projects/settings/integrations_controller.rb | 130 ++- .../settings/packages_and_registries_controller.rb | 7 +- .../projects/settings/repository_controller.rb | 1 + .../projects/static_site_editor_controller.rb | 51 - app/controllers/projects/tags_controller.rb | 9 +- app/controllers/projects/tracings_controller.rb | 1 + .../projects/usage_quotas_controller.rb | 1 + app/controllers/projects/work_items_controller.rb | 2 + app/controllers/projects_controller.rb | 8 + app/controllers/pwa_controller.rb | 4 + .../registrations/welcome_controller.rb | 2 +- app/controllers/registrations_controller.rb | 1 + app/controllers/search_controller.rb | 3 +- app/controllers/sessions_controller.rb | 6 +- app/controllers/users/callouts_controller.rb | 1 + app/controllers/users/terms_controller.rb | 2 +- app/controllers/users_controller.rb | 7 +- app/controllers/whats_new_controller.rb | 1 + app/events/pages/page_deleted_event.rb | 16 + app/experiments/application_experiment.rb | 12 +- .../readme_advanced.md.tt | 46 +- app/finders/clusters/agents_finder.rb | 2 + app/finders/crm/contacts_finder.rb | 39 +- app/finders/crm/organizations_finder.rb | 76 ++ app/finders/issuable_finder.rb | 4 +- app/finders/issuable_finder/params.rb | 6 +- app/finders/issuables/label_filter.rb | 6 +- app/finders/issues_finder.rb | 14 +- app/finders/packages/pypi/packages_finder.rb | 2 + app/finders/work_items/work_items_finder.rb | 19 + app/graphql/gitlab_schema.rb | 28 +- app/graphql/mutations/base_mutation.rb | 18 +- app/graphql/mutations/ci/pipeline/destroy.rb | 13 + app/graphql/mutations/ci/runner/update.rb | 4 + .../mutations/work_items/update_arguments.rb | 21 + .../incident_management/timeline_event/create.rb | 4 +- .../timeline_event/promote_from_note.rb | 3 +- app/graphql/mutations/issues/set_crm_contacts.rb | 2 +- app/graphql/mutations/merge_requests/set_draft.rb | 4 +- .../mutations/packages/cleanup/policy/update.rb | 48 + app/graphql/mutations/packages/destroy_files.rb | 54 + app/graphql/mutations/releases/create.rb | 4 + .../security/ci_configuration/configure_sast.rb | 2 +- app/graphql/mutations/terraform/state/delete.rb | 4 +- app/graphql/mutations/user_preferences/update.rb | 17 - app/graphql/mutations/work_items/create.rb | 3 +- .../mutations/work_items/create_from_task.rb | 2 +- app/graphql/mutations/work_items/delete.rb | 2 +- app/graphql/mutations/work_items/delete_task.rb | 3 +- app/graphql/mutations/work_items/update.rb | 13 +- app/graphql/mutations/work_items/update_task.rb | 77 ++ app/graphql/mutations/work_items/update_widgets.rb | 59 + app/graphql/resolvers/base_issues_resolver.rb | 7 - .../resolvers/ci/runner_owner_project_resolver.rb | 65 ++ .../resolvers/clusters/agent_tokens_resolver.rb | 2 +- app/graphql/resolvers/clusters/agents_resolver.rb | 2 +- .../resolvers/concerns/issue_resolver_arguments.rb | 5 +- app/graphql/resolvers/concerns/resolves_groups.rb | 2 - .../resolvers/concerns/resolves_merge_requests.rb | 1 + app/graphql/resolvers/crm/contacts_resolver.rb | 36 + .../resolvers/crm/organizations_resolver.rb | 36 + .../design_management/versions_resolver.rb | 2 - .../resolvers/merge_request_pipelines_resolver.rb | 7 +- app/graphql/resolvers/milestones_resolver.rb | 23 +- app/graphql/resolvers/paginated_tree_resolver.rb | 2 +- app/graphql/resolvers/tree_resolver.rb | 2 +- app/graphql/resolvers/user_resolver.rb | 8 + app/graphql/resolvers/users_resolver.rb | 5 +- app/graphql/resolvers/work_items_resolver.rb | 60 ++ app/graphql/types/base_field.rb | 29 +- app/graphql/types/ci/detailed_status_type.rb | 2 +- app/graphql/types/ci/job_type.rb | 2 +- .../ci/pipeline_merge_request_event_type_enum.rb | 19 + app/graphql/types/ci/pipeline_type.rb | 3 + app/graphql/types/ci/runner_type.rb | 29 +- app/graphql/types/ci/runner_web_url_edge.rb | 11 +- app/graphql/types/ci/status_action_type.rb | 3 +- app/graphql/types/concerns/find_closest.rb | 15 - .../types/customer_relations/contact_state_enum.rb | 17 + .../customer_relations/organization_state_enum.rb | 17 + app/graphql/types/global_id_type.rb | 3 +- app/graphql/types/group_member_type.rb | 2 +- app/graphql/types/group_type.rb | 6 +- app/graphql/types/issue_sort_enum.rb | 6 +- app/graphql/types/issue_type.rb | 7 + .../types/limited_countable_connection_type.rb | 26 + .../merge_requests/interacts_with_merge_request.rb | 10 +- app/graphql/types/milestone_type.rb | 4 + app/graphql/types/mutation_type.rb | 14 +- .../cleanup/keep_duplicated_package_files_enum.rb | 25 + app/graphql/types/packages/cleanup/policy_type.rb | 23 + .../types/permission_types/base_permission_type.rb | 14 +- app/graphql/types/project_type.rb | 15 + app/graphql/types/query_complexity_type.rb | 4 +- app/graphql/types/query_type.rb | 10 +- app/graphql/types/release_asset_link_type.rb | 9 +- app/graphql/types/release_type.rb | 3 + app/graphql/types/terraform/state_type.rb | 4 + app/graphql/types/time_type.rb | 3 + app/graphql/types/todo_type.rb | 4 + app/graphql/types/work_item_sort_enum.rb | 11 + app/graphql/types/work_item_type.rb | 2 + .../types/work_items/updated_task_input_type.rb | 11 + app/graphql/types/work_items/widget_interface.rb | 28 + app/graphql/types/work_items/widget_type_enum.rb | 14 + .../work_items/widgets/description_input_type.rb | 15 + .../types/work_items/widgets/description_type.rb | 25 + .../types/work_items/widgets/hierarchy_type.rb | 30 + app/helpers/access_tokens_helper.rb | 4 +- .../admin/application_settings/settings_helper.rb | 16 + app/helpers/application_helper.rb | 1 - app/helpers/application_settings_helper.rb | 28 + app/helpers/breadcrumbs_helper.rb | 2 +- app/helpers/ci/pipeline_editor_helper.rb | 1 + app/helpers/ci/runners_helper.rb | 8 +- app/helpers/custom_metrics_helper.rb | 2 +- app/helpers/diff_helper.rb | 27 +- app/helpers/emails_helper.rb | 2 +- app/helpers/environments_helper.rb | 3 +- app/helpers/form_helper.rb | 58 +- app/helpers/groups/crm_settings_helper.rb | 9 - app/helpers/groups/group_members_helper.rb | 15 +- app/helpers/groups_helper.rb | 34 + app/helpers/integrations_helper.rb | 10 +- app/helpers/invite_members_helper.rb | 2 +- app/helpers/issues_helper.rb | 20 +- app/helpers/jira_connect_helper.rb | 4 +- app/helpers/markup_helper.rb | 33 +- app/helpers/members_helper.rb | 2 + app/helpers/merge_requests_helper.rb | 6 +- app/helpers/nav/new_dropdown_helper.rb | 2 +- app/helpers/nav/top_nav_helper.rb | 76 +- app/helpers/nav_helper.rb | 2 +- app/helpers/notes_helper.rb | 6 +- app/helpers/projects/pipeline_helper.rb | 8 +- app/helpers/projects/project_members_helper.rb | 29 + app/helpers/projects_helper.rb | 61 +- app/helpers/search_helper.rb | 2 + app/helpers/snippets_helper.rb | 12 + app/helpers/sorting_helper.rb | 4 + app/helpers/storage_helper.rb | 30 +- app/helpers/system_note_helper.rb | 8 +- app/helpers/tags_helper.rb | 9 - app/helpers/todos_helper.rb | 23 +- app/helpers/tooling/visual_review_helper.rb | 26 + app/helpers/users_helper.rb | 2 +- app/helpers/work_items_helper.rb | 10 + app/mailers/emails/admin_notification.rb | 13 + app/mailers/emails/auto_devops.rb | 8 +- app/mailers/emails/issues.rb | 14 +- app/mailers/emails/members.rb | 21 +- app/mailers/emails/merge_requests.rb | 7 +- app/mailers/emails/pipelines.rb | 8 +- app/mailers/emails/profile.rb | 17 +- app/mailers/emails/projects.rb | 8 +- app/mailers/notify.rb | 7 + app/mailers/previews/notify_preview.rb | 4 + app/models/application_setting.rb | 7 + app/models/application_setting_implementation.rb | 29 + app/models/award_emoji.rb | 2 +- app/models/bulk_imports/entity.rb | 13 +- app/models/bulk_imports/export_status.rb | 17 +- .../bulk_imports/file_transfer/project_config.rb | 9 +- app/models/bulk_imports/tracker.rb | 2 + app/models/ci/bridge.rb | 22 +- app/models/ci/build.rb | 81 +- app/models/ci/job_artifact.rb | 35 +- app/models/ci/pipeline.rb | 44 +- app/models/ci/runner.rb | 12 + app/models/ci/secure_file.rb | 2 + app/models/ci/sources/pipeline.rb | 4 +- app/models/clusters/agent.rb | 8 +- app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/cluster_enabled_grant.rb | 9 + app/models/clusters/integrations/prometheus.rb | 18 +- app/models/commit.rb | 7 +- app/models/commit_signatures/ssh_signature.rb | 9 + app/models/compare.rb | 5 +- .../analytics/cycle_analytics/stage_event_model.rb | 7 +- app/models/concerns/as_cte.rb | 12 + app/models/concerns/async_devise_email.rb | 5 +- app/models/concerns/awardable.rb | 16 +- app/models/concerns/cache_markdown_field.rb | 7 +- app/models/concerns/ci/artifactable.rb | 2 +- app/models/concerns/enums/ci/pipeline.rb | 2 +- app/models/concerns/file_store_mounter.rb | 14 +- .../concerns/integrations/base_data_fields.rb | 29 +- .../concerns/integrations/has_data_fields.rb | 3 +- app/models/concerns/issuable.rb | 20 +- app/models/concerns/limitable.rb | 26 +- app/models/concerns/pg_full_text_searchable.rb | 11 + .../concerns/project_features_compatibility.rb | 4 + app/models/concerns/sensitive_serializable_hash.rb | 2 +- app/models/concerns/storage/legacy_namespace.rb | 14 - app/models/container_registry/event.rb | 2 +- app/models/customer_relations/contact.rb | 21 + app/models/customer_relations/organization.rb | 21 + app/models/deployment.rb | 77 +- app/models/environment.rb | 30 +- app/models/error_tracking/client_key.rb | 1 + app/models/error_tracking/error_event.rb | 54 +- app/models/group.rb | 19 +- app/models/hooks/project_hook.rb | 5 - app/models/hooks/web_hook.rb | 52 +- app/models/hooks/web_hook_log.rb | 13 + app/models/integration.rb | 31 +- app/models/integrations/bamboo.rb | 20 +- app/models/integrations/base_chat_notification.rb | 2 +- app/models/integrations/buildkite.rb | 12 +- app/models/integrations/drone_ci.rb | 8 +- app/models/integrations/field.rb | 7 +- app/models/integrations/harbor.rb | 2 +- app/models/integrations/irker.rb | 55 +- app/models/integrations/jenkins.rb | 14 +- app/models/integrations/jira.rb | 5 +- app/models/integrations/microsoft_teams.rb | 30 +- app/models/integrations/mock_ci.rb | 2 +- app/models/integrations/prometheus.rb | 2 + app/models/integrations/teamcity.rb | 10 +- app/models/integrations/zentao_tracker_data.rb | 13 +- app/models/issue.rb | 22 +- app/models/key.rb | 24 +- app/models/label.rb | 2 +- app/models/member.rb | 2 +- app/models/members/group_member.rb | 34 +- app/models/members/last_group_owner_assigner.rb | 3 +- app/models/members/project_member.rb | 16 +- app/models/merge_request.rb | 33 +- app/models/merge_request/cleanup_schedule.rb | 12 + app/models/merge_request_diff_file.rb | 6 +- app/models/namespace.rb | 64 +- app/models/namespace/root_storage_statistics.rb | 31 +- app/models/namespace_setting.rb | 9 +- app/models/namespaces/project_namespace.rb | 7 + app/models/namespaces/traversal/linear.rb | 10 +- app/models/namespaces/traversal/linear_scopes.rb | 151 ++- app/models/namespaces/traversal/recursive.rb | 8 +- app/models/note.rb | 1 - app/models/packages/cleanup/policy.rb | 2 +- app/models/packages/package.rb | 17 +- app/models/project.rb | 78 +- app/models/project_feature.rb | 20 +- app/models/project_statistics.rb | 4 +- app/models/project_team.rb | 14 +- .../projects/build_artifacts_size_refresh.rb | 14 +- app/models/protected_tag.rb | 6 +- app/models/release.rb | 7 +- app/models/repository.rb | 5 +- app/models/resource_event.rb | 1 - app/models/route.rb | 10 - app/models/terraform/state.rb | 12 +- app/models/terraform/state_version.rb | 1 + app/models/time_tracking/timelog_category.rb | 35 + app/models/user.rb | 57 +- app/models/user_detail.rb | 3 + app/models/users/callout.rb | 6 +- app/models/wiki.rb | 47 +- app/models/work_item.rb | 19 + app/models/work_items/parent_link.rb | 53 + app/models/work_items/type.rb | 16 + app/models/work_items/widgets/base.rb | 25 + app/models/work_items/widgets/description.rb | 13 + app/models/work_items/widgets/hierarchy.rb | 19 + app/policies/group_policy.rb | 2 +- app/policies/issuable_policy.rb | 4 +- app/policies/issue_policy.rb | 2 +- app/policies/packages/cleanup/policy_policy.rb | 9 + app/policies/project_policy.rb | 28 +- app/policies/work_item_policy.rb | 5 + app/presenters/blob_presenter.rb | 4 +- app/presenters/ci/pipeline_presenter.rb | 3 +- app/presenters/merge_request_presenter.rb | 14 +- app/presenters/packages/pypi/package_presenter.rb | 96 -- .../packages/pypi/simple_index_presenter.rb | 50 + .../pypi/simple_package_versions_presenter.rb | 58 + .../packages/pypi/simple_presenter_base.rb | 53 + app/presenters/project_presenter.rb | 17 +- .../projects/security/configuration_presenter.rb | 3 +- .../projects/settings/deploy_keys_presenter.rb | 2 +- app/presenters/releases/link_presenter.rb | 12 + app/presenters/service_hook_presenter.rb | 4 +- app/presenters/snippet_blob_presenter.rb | 2 + app/serializers/analytics_issue_entity.rb | 4 + app/serializers/deploy_key_entity.rb | 39 - app/serializers/deploy_key_serializer.rb | 5 - .../deploy_keys/basic_deploy_key_entity.rb | 28 + .../deploy_keys/basic_deploy_key_serializer.rb | 7 + app/serializers/deploy_keys/deploy_key_entity.rb | 22 + .../deploy_keys/deploy_key_serializer.rb | 7 + app/serializers/diff_file_entity.rb | 12 +- app/serializers/environment_serializer.rb | 22 +- app/serializers/integrations/event_entity.rb | 46 + app/serializers/integrations/event_serializer.rb | 7 + app/serializers/integrations/field_entity.rb | 49 + app/serializers/integrations/field_serializer.rb | 7 + app/serializers/issue_board_entity.rb | 9 + app/serializers/issue_entity.rb | 9 + app/serializers/linked_issue_entity.rb | 9 + .../merge_request_poll_cached_widget_entity.rb | 3 +- .../merge_request_poll_widget_entity.rb | 14 +- app/serializers/merge_request_widget_entity.rb | 14 - app/serializers/prometheus_alert_entity.rb | 4 - app/serializers/service_event_entity.rb | 44 - app/serializers/service_event_serializer.rb | 5 - app/serializers/service_field_entity.rb | 47 - app/serializers/service_field_serializer.rb | 5 - app/services/auto_merge/base_service.rb | 5 +- app/services/boards/base_items_list_service.rb | 7 +- app/services/boards/issues/list_service.rb | 2 +- app/services/bulk_create_integration_service.rb | 14 +- .../create_pipeline_trackers_service.rb | 68 ++ app/services/bulk_imports/file_export_service.rb | 4 + .../bulk_imports/lfs_objects_export_service.rb | 2 + .../repository_bundle_export_service.rb | 23 + app/services/bulk_update_integration_service.rb | 17 +- .../job_artifacts/destroy_all_expired_service.rb | 2 +- .../ci/job_artifacts/destroy_batch_service.rb | 37 +- .../pipeline_artifacts/coverage_report_service.rb | 38 +- .../destroy_all_expired_service.rb | 2 +- .../ci/runners/reset_registration_token_service.rb | 7 +- .../applications/schedule_update_service.rb | 40 - .../concerns/integrations/bulk_operation_hashes.rb | 31 + app/services/concerns/members/bulk_create_users.rb | 86 -- app/services/environments/stop_service.rb | 6 +- app/services/event_create_service.rb | 18 + app/services/git/branch_push_service.rb | 1 + app/services/import/base_service.rb | 4 + app/services/import/bitbucket_server_service.rb | 4 - app/services/import/fogbugz_service.rb | 107 ++ app/services/import/github_service.rb | 4 - .../timeline_events/base_service.rb | 2 + .../timeline_events/create_service.rb | 5 +- .../timeline_events/destroy_service.rb | 1 + .../timeline_events/update_service.rb | 6 + app/services/issuable/clone/base_service.rb | 7 +- .../issuable/common_system_notes_service.rb | 2 +- app/services/issues/create_service.rb | 8 + app/services/issues/move_service.rb | 1 - .../jira_connect_subscriptions/create_service.rb | 13 +- app/services/markdown_content_rewriter_service.rb | 62 +- .../members/approve_access_request_service.rb | 17 +- app/services/members/base_service.rb | 13 + app/services/members/create_service.rb | 13 + app/services/members/creator_service.rb | 119 ++- app/services/members/destroy_service.rb | 11 +- .../members/groups/bulk_creator_service.rb | 9 - app/services/members/groups/creator_service.rb | 6 + .../members/mailgun/process_webhook_service.rb | 39 - .../members/projects/bulk_creator_service.rb | 9 - app/services/members/projects/creator_service.rb | 24 + app/services/members/update_service.rb | 17 + app/services/merge_requests/base_service.rb | 22 +- app/services/merge_requests/build_service.rb | 36 +- .../merge_requests/create_pipeline_service.rb | 8 +- app/services/merge_requests/merge_service.rb | 8 + .../mergeability/run_checks_service.rb | 12 +- app/services/merge_requests/post_merge_service.rb | 2 +- app/services/merge_requests/refresh_service.rb | 10 +- .../reload_merge_head_diff_service.rb | 2 + app/services/merge_requests/update_service.rb | 12 +- app/services/metrics/dashboard/base_service.rb | 1 - .../metrics/dashboard/panel_preview_service.rb | 1 - .../metrics/dashboard/system_dashboard_service.rb | 3 +- app/services/note_summary.rb | 4 +- app/services/notes/copy_service.rb | 17 +- .../notification_recipients/build_service.rb | 4 - .../notification_recipients/builder/new_release.rb | 25 - app/services/notification_service.rb | 4 +- .../packages/cleanup/update_policy_service.rb | 35 + app/services/packages/go/create_package_service.rb | 3 +- .../maven/metadata/append_package_file_service.rb | 4 +- .../packages/rubygems/create_gemspec_service.rb | 4 +- app/services/pages/delete_service.rb | 13 + .../pages_domains/create_acme_order_service.rb | 10 +- app/services/projects/after_rename_service.rb | 14 - app/services/projects/destroy_rollback_service.rb | 31 - app/services/projects/destroy_service.rb | 19 +- .../projects/import_export/export_service.rb | 7 +- app/services/projects/open_issues_count_service.rb | 6 +- app/services/projects/operations/update_service.rb | 2 +- app/services/projects/transfer_service.rb | 8 - app/services/projects/update_pages_service.rb | 8 + app/services/releases/base_service.rb | 4 + app/services/releases/create_service.rb | 2 +- app/services/repositories/base_service.rb | 12 - app/services/repositories/changelog_service.rb | 32 + .../repositories/destroy_rollback_service.rb | 25 - app/services/repositories/destroy_service.rb | 36 +- app/services/repositories/shell_destroy_service.rb | 15 - .../resource_access_tokens/create_service.rb | 10 +- .../resource_events/base_change_timebox_service.rb | 2 +- .../base_synthetic_notes_builder_service.rb | 9 +- app/services/service_ping/submit_service.rb | 11 +- app/services/service_response.rb | 18 + app/services/snippets/bulk_destroy_service.rb | 14 - app/services/snippets/destroy_service.rb | 5 - app/services/static_site_editor/config_service.rb | 85 -- app/services/system_notes/issuables_service.rb | 15 +- .../system_notes/merge_requests_service.rb | 2 +- app/services/terraform/remote_state_handler.rb | 14 +- app/services/terraform/states/destroy_service.rb | 34 + .../terraform/states/trigger_destroy_service.rb | 43 + app/services/two_factor/destroy_service.rb | 8 +- .../user_project_access_changed_service.rb | 6 + app/services/web_hook_service.rb | 85 +- app/services/web_hooks/destroy_service.rb | 70 +- app/services/web_hooks/log_destroy_service.rb | 19 + app/services/work_items/update_service.rb | 22 +- app/uploaders/gitlab_uploader.rb | 8 + app/uploaders/metric_image_uploader.rb | 4 + .../json_schemas/web_hooks_url_variables.json | 14 + app/views/abuse_reports/new.html.haml | 4 +- app/views/admin/abuse_reports/index.html.haml | 2 +- .../admin/application_settings/_abuse.html.haml | 2 +- .../_account_and_limit.html.haml | 2 +- .../admin/application_settings/_ci_cd.html.haml | 4 +- .../application_settings/_default_branch.html.haml | 2 +- .../application_settings/_diff_limits.html.haml | 2 +- .../admin/application_settings/_eks.html.haml | 4 +- .../admin/application_settings/_email.html.haml | 2 +- .../_external_authorization_service_form.html.haml | 6 +- .../admin/application_settings/_floc.html.haml | 4 +- .../application_settings/_git_lfs_limits.html.haml | 2 +- .../admin/application_settings/_gitaly.html.haml | 2 +- .../admin/application_settings/_gitpod.html.haml | 2 +- .../application_settings/_help_page.html.haml | 2 +- .../_import_export_limits.html.haml | 2 +- .../application_settings/_ip_limits.html.haml | 2 +- .../application_settings/_issue_limits.html.haml | 2 +- .../_jira_connect_application_key.html.haml | 21 + .../admin/application_settings/_kroki.html.haml | 4 +- .../application_settings/_localization.html.haml | 2 +- .../admin/application_settings/_mailgun.html.haml | 2 +- .../_network_rate_limits.html.haml | 2 +- .../application_settings/_note_limits.html.haml | 2 +- .../admin/application_settings/_outbound.html.haml | 2 +- .../_package_registry.html.haml | 4 +- .../admin/application_settings/_pages.html.haml | 4 +- .../application_settings/_performance.html.haml | 2 +- .../_pipeline_limits.html.haml | 2 +- .../admin/application_settings/_plantuml.html.haml | 2 +- .../_protected_paths.html.haml | 2 +- .../admin/application_settings/_realtime.html.haml | 2 +- .../_repository_check.html.haml | 4 + .../_repository_storage.html.haml | 2 +- .../application_settings/_search_limits.html.haml | 2 +- .../admin/application_settings/_sentry.html.haml | 2 +- .../_sidekiq_job_limits.html.haml | 2 +- .../admin/application_settings/_signin.html.haml | 2 +- .../admin/application_settings/_signup.html.haml | 20 +- .../admin/application_settings/_snowplow.html.haml | 2 +- .../application_settings/_sourcegraph.html.haml | 4 +- .../admin/application_settings/_terms.html.haml | 2 +- .../_third_party_offers.html.haml | 2 +- .../admin/application_settings/_usage.html.haml | 2 +- .../_users_api_limits.html.haml | 2 +- .../_visibility_and_access.html.haml | 5 +- .../application_settings/_whats_new.html.haml | 13 +- .../application_settings/ci/_header.html.haml | 2 +- .../admin/application_settings/ci_cd.html.haml | 6 +- .../admin/application_settings/general.html.haml | 19 +- .../metrics_and_profiling.html.haml | 10 +- .../admin/application_settings/network.html.haml | 28 +- .../application_settings/preferences.html.haml | 16 +- .../admin/application_settings/reporting.html.haml | 4 +- .../application_settings/repository.html.haml | 10 +- .../service_usage_data.html.haml | 12 +- app/views/admin/applications/edit.html.haml | 2 +- app/views/admin/applications/index.html.haml | 2 +- app/views/admin/applications/new.html.haml | 2 +- app/views/admin/applications/show.html.haml | 2 +- app/views/admin/background_jobs/show.html.haml | 2 +- app/views/admin/broadcast_messages/index.html.haml | 8 +- .../_security_newsletter_callout.html.haml | 10 +- app/views/admin/dashboard/index.html.haml | 48 +- app/views/admin/deploy_keys/edit.html.haml | 2 +- app/views/admin/deploy_keys/new.html.haml | 2 +- app/views/admin/gitaly_servers/index.html.haml | 2 +- app/views/admin/groups/_form.html.haml | 2 +- app/views/admin/groups/edit.html.haml | 2 +- app/views/admin/groups/new.html.haml | 2 +- app/views/admin/groups/show.html.haml | 4 +- app/views/admin/health_check/show.html.haml | 8 +- app/views/admin/hook_logs/show.html.haml | 7 +- app/views/admin/hooks/_form.html.haml | 2 +- app/views/admin/identities/_form.html.haml | 2 +- app/views/admin/identities/edit.html.haml | 2 +- app/views/admin/identities/index.html.haml | 2 +- app/views/admin/identities/new.html.haml | 2 +- app/views/admin/jobs/index.html.haml | 11 +- app/views/admin/labels/edit.html.haml | 2 +- app/views/admin/labels/index.html.haml | 2 +- app/views/admin/labels/new.html.haml | 2 +- app/views/admin/projects/index.html.haml | 19 +- app/views/admin/projects/show.html.haml | 8 +- app/views/admin/spam_logs/index.html.haml | 2 +- app/views/admin/topics/_form.html.haml | 2 +- app/views/admin/topics/edit.html.haml | 2 +- app/views/admin/topics/new.html.haml | 2 +- app/views/admin/users/_access_levels.html.haml | 19 +- app/views/admin/users/_admin_notes.html.haml | 5 +- app/views/admin/users/_form.html.haml | 58 +- app/views/admin/users/_head.html.haml | 4 +- app/views/admin/users/_users.html.haml | 2 +- app/views/admin/users/edit.html.haml | 3 +- app/views/admin/users/new.html.haml | 3 +- app/views/award_emoji/_awards_block.html.haml | 6 +- app/views/ci/variables/_header.html.haml | 2 +- app/views/ci/variables/_index.html.haml | 6 +- .../clusters/clusters/_advanced_settings.html.haml | 2 +- app/views/clusters/clusters/_banner.html.haml | 4 +- .../clusters/clusters/_deprecation_alert.html.haml | 2 +- .../clusters/_gcp_signup_offer_banner.html.haml | 4 +- app/views/dashboard/_activity_head.html.haml | 2 +- app/views/dashboard/_groups_head.html.haml | 2 +- app/views/dashboard/_projects_head.html.haml | 11 +- app/views/dashboard/_projects_nav.html.haml | 2 +- app/views/dashboard/_snippets_head.html.haml | 2 +- app/views/dashboard/issues.html.haml | 2 +- app/views/dashboard/merge_requests.html.haml | 2 +- app/views/dashboard/milestones/index.html.haml | 2 +- app/views/dashboard/todos/index.html.haml | 2 +- app/views/devise/confirmations/new.html.haml | 2 +- app/views/devise/registrations/new.html.haml | 1 + app/views/devise/shared/_signup_box.html.haml | 1 + .../shared/_signup_omniauth_provider_list.haml | 4 +- app/views/doorkeeper/applications/edit.html.haml | 2 +- app/views/doorkeeper/applications/new.html.haml | 2 +- app/views/doorkeeper/applications/show.html.haml | 2 +- .../doorkeeper/authorizations/error.html.haml | 2 +- .../doorkeeper/authorizations/redirect.html.haml | 2 +- app/views/doorkeeper/authorizations/show.html.haml | 2 +- app/views/errors/access_denied.html.haml | 2 +- app/views/explore/topics/_head.html.haml | 11 +- app/views/groups/_create_chat_team.html.haml | 15 +- app/views/groups/_group_admin_settings.html.haml | 12 +- .../groups/_invite_members_side_nav_link.html.haml | 3 +- app/views/groups/_new_group_fields.html.haml | 2 +- app/views/groups/_personalize.html.haml | 6 +- app/views/groups/_subgroups_and_projects.html.haml | 5 +- app/views/groups/edit.html.haml | 9 +- app/views/groups/group_members/index.html.haml | 4 +- app/views/groups/issues.html.haml | 28 +- app/views/groups/labels/edit.html.haml | 3 +- app/views/groups/labels/index.html.haml | 8 +- app/views/groups/labels/new.html.haml | 3 +- app/views/groups/merge_requests.html.haml | 2 +- app/views/groups/milestones/_form.html.haml | 2 +- app/views/groups/milestones/edit.html.haml | 2 +- app/views/groups/milestones/new.html.haml | 2 +- app/views/groups/new.html.haml | 2 +- app/views/groups/projects.html.haml | 1 + app/views/groups/runners/_settings.html.haml | 24 +- app/views/groups/runners/edit.html.haml | 2 +- app/views/groups/runners/show.html.haml | 5 +- app/views/groups/settings/_advanced.html.haml | 4 +- app/views/groups/settings/_export.html.haml | 4 +- .../settings/_git_access_protocols.html.haml | 7 + app/views/groups/settings/_permissions.html.haml | 14 +- app/views/groups/settings/_remove_button.html.haml | 2 +- app/views/groups/settings/_transfer.html.haml | 2 +- .../groups/settings/applications/edit.html.haml | 2 +- .../groups/settings/applications/show.html.haml | 2 +- app/views/groups/settings/ci_cd/show.html.haml | 9 +- .../settings/repository/_default_branch.html.haml | 2 +- .../groups/settings/repository/show.html.haml | 1 + app/views/groups/show.html.haml | 3 +- app/views/import/bitbucket/status.html.haml | 2 +- app/views/import/bitbucket_server/new.html.haml | 2 +- app/views/import/bitbucket_server/status.html.haml | 2 +- app/views/import/fogbugz/new.html.haml | 2 +- app/views/import/fogbugz/new_user_map.html.haml | 2 +- app/views/import/fogbugz/status.html.haml | 2 +- app/views/import/gitea/new.html.haml | 3 +- app/views/import/gitea/status.html.haml | 4 +- app/views/import/github/new.html.haml | 8 +- app/views/import/github/status.html.haml | 2 +- app/views/import/gitlab/status.html.haml | 2 +- app/views/import/gitlab_projects/new.html.haml | 2 +- app/views/import/manifest/_form.html.haml | 2 +- app/views/import/manifest/new.html.haml | 2 +- app/views/import/manifest/status.html.haml | 2 +- app/views/import/phabricator/new.html.haml | 2 +- app/views/import/shared/_errors.html.haml | 2 +- app/views/invites/show.html.haml | 2 +- .../jira_connect/subscriptions/index.html.haml | 6 +- .../kaminari/gitlab/_keyset_paginator.html.haml | 8 +- app/views/kaminari/gitlab/_next_page.html.haml | 2 +- app/views/kaminari/gitlab/_prev_page.html.haml | 2 +- app/views/kaminari/gitlab/_without_count.html.haml | 4 +- app/views/layouts/_head.html.haml | 1 + app/views/layouts/_page.html.haml | 5 +- app/views/layouts/_visual_review.html.haml | 1 + app/views/layouts/application.html.haml | 1 + app/views/layouts/header/_default.html.haml | 11 +- .../header/_registration_enabled_callout.html.haml | 8 +- .../header/_storage_enforcement_banner.html.haml | 10 +- .../breadcrumbs/_collapsed_inline_list.html.haml | 4 +- app/views/layouts/notify.html.haml | 4 + app/views/layouts/service_desk.html.haml | 4 + app/views/layouts/terms.html.haml | 25 +- .../notify/approved_merge_request_email.html.haml | 2 +- .../merge_when_pipeline_succeeds_email.html.haml | 2 +- .../unapproved_merge_request_email.html.haml | 2 +- app/views/notify/user_auto_banned_email.html.haml | 9 + app/views/notify/user_auto_banned_email.text.erb | 7 + app/views/profiles/_email_settings.html.haml | 6 +- app/views/profiles/accounts/show.html.haml | 8 +- app/views/profiles/chat_names/_chat_name.html.haml | 4 +- app/views/profiles/chat_names/new.html.haml | 2 +- app/views/profiles/emails/index.html.haml | 2 +- app/views/profiles/keys/_form.html.haml | 7 +- app/views/profiles/keys/_key_details.html.haml | 2 +- app/views/profiles/passwords/new.html.haml | 2 +- .../personal_access_tokens/index.html.haml | 12 +- app/views/profiles/preferences/show.html.haml | 15 +- app/views/profiles/show.html.haml | 20 +- app/views/profiles/two_factor_auths/show.html.haml | 5 +- .../projects/_clusters_deprecation_alert.html.haml | 2 + app/views/projects/_commit_button.html.haml | 7 +- app/views/projects/_deletion_failed.html.haml | 2 +- app/views/projects/_errors.html.haml | 2 +- app/views/projects/_import_project_pane.html.haml | 8 +- app/views/projects/_invite_members_modal.html.haml | 2 +- .../_invite_members_side_nav_link.html.haml | 3 +- app/views/projects/_last_push.html.haml | 4 +- .../_merge_request_merge_method_settings.html.haml | 58 +- ...merge_request_squash_options_settings.html.haml | 47 +- ...merge_request_target_project_settings.html.haml | 21 +- app/views/projects/_new_project_fields.html.haml | 2 +- .../projects/_service_desk_settings.html.haml | 2 +- app/views/projects/_visibility_modal.html.haml | 2 +- app/views/projects/activity.html.haml | 1 + app/views/projects/blob/_new_dir.html.haml | 2 +- app/views/projects/blob/_remove.html.haml | 2 +- app/views/projects/blob/_upload.html.haml | 30 - app/views/projects/blob/edit.html.haml | 4 +- app/views/projects/blob/new.html.haml | 2 +- app/views/projects/blob/show.html.haml | 3 - app/views/projects/branch_rules/_show.html.haml | 12 + app/views/projects/branches/new.html.haml | 5 +- app/views/projects/buttons/_remove_tag.html.haml | 9 +- app/views/projects/cleanup/_show.html.haml | 2 +- app/views/projects/commit/show.html.haml | 2 +- app/views/projects/commits/_commits.html.haml | 4 +- app/views/projects/compare/index.html.haml | 4 +- app/views/projects/compare/show.html.haml | 2 +- app/views/projects/confluences/show.html.haml | 2 +- app/views/projects/default_branch/_show.html.haml | 2 +- app/views/projects/deploy_keys/edit.html.haml | 2 +- app/views/projects/edit.html.haml | 14 +- app/views/projects/empty.html.haml | 7 +- app/views/projects/environments/terminal.html.haml | 2 +- app/views/projects/forks/error.html.haml | 2 +- app/views/projects/graphs/show.html.haml | 4 +- app/views/projects/hook_logs/show.html.haml | 7 +- app/views/projects/import/jira/show.html.haml | 2 +- app/views/projects/imports/new.html.haml | 2 +- app/views/projects/issuable/_show.html.haml | 2 +- .../_alert_moved_from_service_desk.html.haml | 8 - .../issues/_by_email_description.html.haml | 6 - app/views/projects/issues/_nav_btns.html.haml | 20 - .../issues/_service_desk_empty_state.html.haml | 37 - .../issues/_service_desk_info_content.html.haml | 24 - .../projects/issues/_work_item_links.html.haml | 2 + app/views/projects/issues/edit.html.haml | 2 +- app/views/projects/issues/index.html.haml | 31 +- app/views/projects/issues/new.html.haml | 4 +- app/views/projects/issues/service_desk.html.haml | 8 +- .../_alert_moved_from_service_desk.html.haml | 8 + .../issues/service_desk/_nav_btns.html.haml | 20 + .../_service_desk_empty_state.html.haml | 37 + .../_service_desk_info_content.html.haml | 24 + app/views/projects/jobs/index.html.haml | 2 - app/views/projects/labels/edit.html.haml | 4 +- app/views/projects/labels/index.html.haml | 13 +- app/views/projects/labels/new.html.haml | 4 +- app/views/projects/mattermosts/_no_teams.html.haml | 2 +- .../projects/mattermosts/_team_selection.html.haml | 4 +- .../_close_reopen_draft_report_toggle.html.haml | 25 +- .../merge_requests/_code_dropdown.html.haml | 2 +- .../projects/merge_requests/_mr_box.html.haml | 10 +- .../projects/merge_requests/_mr_title.html.haml | 31 +- .../merge_requests/conflicts/show.html.haml | 4 +- .../creations/_new_compare.html.haml | 46 +- .../merge_requests/creations/_new_submit.html.haml | 6 +- app/views/projects/merge_requests/edit.html.haml | 2 +- app/views/projects/merge_requests/show.html.haml | 17 +- app/views/projects/milestones/edit.html.haml | 2 +- app/views/projects/milestones/new.html.haml | 2 +- app/views/projects/milestones/show.html.haml | 4 +- app/views/projects/mirrors/_mirror_repos.html.haml | 8 +- .../projects/mirrors/_ssh_host_keys.html.haml | 4 +- app/views/projects/new.html.haml | 6 +- app/views/projects/no_repo.html.haml | 2 +- app/views/projects/notes/_actions.html.haml | 13 +- .../notes/_more_actions_dropdown.html.haml | 4 +- app/views/projects/pages/_list.html.haml | 27 +- app/views/projects/pages/show.html.haml | 2 +- app/views/projects/pages_domains/_dns.html.haml | 4 +- app/views/projects/pages_domains/new.html.haml | 2 +- app/views/projects/pages_domains/show.html.haml | 9 +- .../projects/pipeline_schedules/_form.html.haml | 6 +- .../projects/pipeline_schedules/edit.html.haml | 2 +- .../projects/pipeline_schedules/index.html.haml | 2 - .../projects/pipeline_schedules/new.html.haml | 3 +- app/views/projects/pipelines/_with_tabs.html.haml | 42 +- app/views/projects/pipelines/index.html.haml | 2 - app/views/projects/pipelines/new.html.haml | 2 +- app/views/projects/pipelines/show.html.haml | 1 - app/views/projects/project_members/index.html.haml | 13 +- .../projects/prometheus/metrics/edit.html.haml | 2 +- .../projects/prometheus/metrics/new.html.haml | 2 +- .../protected_branches/shared/_index.html.haml | 4 +- .../protected_tags/shared/_index.html.haml | 4 +- app/views/projects/readme_templates/default.md.tt | 2 +- app/views/projects/releases/edit.html.haml | 2 + app/views/projects/runners/edit.html.haml | 2 +- app/views/projects/services/_form.html.haml | 22 - app/views/projects/services/edit.html.haml | 9 - app/views/projects/settings/_archive.html.haml | 4 +- .../settings/access_tokens/index.html.haml | 2 +- .../projects/settings/branch_rules/index.html.haml | 6 + .../settings/ci_cd/_autodevops_form.html.haml | 24 +- app/views/projects/settings/ci_cd/_form.html.haml | 26 +- app/views/projects/settings/ci_cd/show.html.haml | 16 +- .../projects/settings/integrations/_form.html.haml | 22 + .../projects/settings/integrations/edit.html.haml | 9 + .../projects/settings/integrations/index.html.haml | 9 + .../projects/settings/integrations/show.html.haml | 9 - .../operations/_alert_management.html.haml | 2 +- .../settings/operations/_error_tracking.html.haml | 2 +- .../settings/operations/_tracing.html.haml | 2 +- .../projects/settings/repository/show.html.haml | 2 + app/views/projects/show.html.haml | 3 +- app/views/projects/snippets/edit.html.haml | 2 +- app/views/projects/snippets/new.html.haml | 2 +- .../projects/static_site_editor/show.html.haml | 1 - app/views/projects/tags/_tag.html.haml | 2 +- app/views/projects/tags/index.html.haml | 3 + app/views/projects/tags/new.html.haml | 16 +- app/views/projects/tags/show.html.haml | 3 + app/views/projects/tracings/show.html.haml | 2 +- app/views/projects/usage_quotas/index.html.haml | 10 +- app/views/projects/work_items/index.html.haml | 2 +- app/views/pwa/manifest.json.erb | 27 + app/views/registrations/welcome/show.html.haml | 5 - app/views/search/show.html.haml | 4 +- app/views/sent_notifications/unsubscribe.html.haml | 2 +- app/views/shared/_alert_info.html.haml | 7 +- app/views/shared/_auto_devops_callout.html.haml | 24 +- ...auto_devops_implicitly_enabled_banner.html.haml | 6 +- app/views/shared/_broadcast_message.html.haml | 14 +- app/views/shared/_captcha_check.html.haml | 2 +- app/views/shared/_group_form.html.haml | 78 +- app/views/shared/_import_form.html.haml | 4 +- app/views/shared/_label.html.haml | 27 +- app/views/shared/_no_password.html.haml | 4 +- app/views/shared/_no_ssh.html.haml | 4 +- app/views/shared/_project_limit.html.haml | 2 +- .../shared/_remote_mirror_update_button.html.haml | 5 +- app/views/shared/_service_ping_consent.html.haml | 4 +- app/views/shared/_sidebar_toggle_button.html.haml | 2 +- ...o_factor_auth_recovery_settings_check.html.haml | 10 +- app/views/shared/access_tokens/_form.html.haml | 5 +- app/views/shared/builds/_tabs.html.haml | 2 +- app/views/shared/deploy_keys/_form.html.haml | 2 +- app/views/shared/deploy_keys/_index.html.haml | 4 +- app/views/shared/deploy_tokens/_index.html.haml | 4 +- app/views/shared/empty_states/_wikis.html.haml | 2 +- .../shared/errors/_gitaly_unavailable.html.haml | 2 +- .../shared/form_elements/_description.html.haml | 33 +- .../groups/_group_name_and_path_fields.html.haml | 5 + app/views/shared/hook_logs/_content.html.haml | 7 +- app/views/shared/integrations/overrides.html.haml | 2 +- .../shared/issuable/_bulk_update_sidebar.html.haml | 6 +- app/views/shared/issuable/_form.html.haml | 46 +- .../shared/issuable/_label_page_create.html.haml | 2 +- app/views/shared/issuable/_sidebar.html.haml | 7 +- app/views/shared/issuable/_status_box.html.haml | 3 +- .../shared/issuable/form/_branch_chooser.html.haml | 14 +- .../shared/issuable/form/_merge_params.html.haml | 5 +- app/views/shared/issuable/form/_metadata.html.haml | 37 +- .../form/_metadata_issuable_assignee.html.haml | 6 +- .../form/_metadata_issuable_reviewer.html.haml | 4 +- app/views/shared/issuable/form/_title.html.haml | 7 +- .../shared/issuable/form/_type_selector.html.haml | 53 +- .../shared/issue_type/_details_content.html.haml | 5 +- app/views/shared/labels/_form.html.haml | 17 +- app/views/shared/labels/_nav.html.haml | 9 +- .../shared/members/_manage_access_button.html.haml | 2 +- app/views/shared/milestones/_milestone.html.haml | 9 +- .../milestones/_milestone_complete_alert.html.haml | 2 +- .../_enforcement_checkbox.html.haml | 3 +- .../cascading_settings/_lock_icon.html.haml | 7 +- app/views/shared/notes/_edit_form.html.haml | 4 +- .../_inactive_project_deletion_alert.html.haml | 7 + app/views/shared/projects/_search_bar.html.haml | 3 +- .../promotions/_promote_servicedesk.html.haml | 19 +- app/views/shared/runners/_runner_details.html.haml | 2 +- .../shared/runners/_runner_type_alert.html.haml | 6 +- app/views/shared/snippets/_embed.html.haml | 2 +- app/views/shared/snippets/show.js.haml | 1 + app/views/shared/topics/_topic.html.haml | 5 +- app/views/shared/users/_user.html.haml | 4 +- app/views/shared/wikis/_form.html.haml | 2 +- app/views/shared/wikis/_sidebar.html.haml | 2 +- app/views/shared/wikis/diff.html.haml | 2 +- app/views/shared/wikis/edit.html.haml | 2 +- app/views/shared/wikis/history.html.haml | 2 +- app/views/shared/wikis/pages.html.haml | 2 +- app/views/snippets/edit.html.haml | 2 +- app/views/snippets/new.html.haml | 2 +- app/views/snippets/notes/_actions.html.haml | 14 +- app/views/users/unsubscribes/show.html.haml | 2 +- app/workers/all_queues.yml | 1124 ++++++++++---------- .../background_migration/single_database_worker.rb | 13 + app/workers/build_success_worker.rb | 4 +- app/workers/bulk_import_worker.rb | 2 +- app/workers/bulk_imports/pipeline_worker.rb | 112 +- app/workers/ci/archive_trace_worker.rb | 10 +- .../pipeline_artifacts/coverage_report_worker.rb | 2 +- .../applications/activate_integration_worker.rb | 25 + .../applications/activate_service_worker.rb | 23 +- .../applications/deactivate_integration_worker.rb | 39 + .../applications/deactivate_service_worker.rb | 30 +- .../concerns/limited_capacity/job_tracker.rb | 2 +- app/workers/concerns/worker_attributes.rb | 26 +- .../migration/enqueuer_worker.rb | 57 +- .../container_registry/migration/guard_worker.rb | 31 +- .../ci_database_worker.rb | 6 +- .../single_database_worker.rb | 24 +- .../batched_background_migration_worker.rb | 4 - ...i_namespace_mirrors_consistency_check_worker.rb | 4 +- .../ci_project_mirrors_consistency_check_worker.rb | 4 +- app/workers/delete_container_repository_worker.rb | 37 +- app/workers/expire_job_cache_worker.rb | 22 - app/workers/expire_pipeline_cache_worker.rb | 27 - app/workers/gitlab_service_ping_worker.rb | 20 +- app/workers/integrations/execute_worker.rb | 27 + app/workers/integrations/irker_worker.rb | 193 ++++ app/workers/irker_worker.rb | 192 +--- app/workers/issue_placement_worker.rb | 71 -- app/workers/issue_rebalancing_worker.rb | 56 - app/workers/loose_foreign_keys/cleanup_worker.rb | 2 +- .../merge_requests/create_pipeline_worker.rb | 9 +- .../merge_requests/update_head_pipeline_worker.rb | 2 +- .../namespaceless_project_destroy_worker.rb | 42 - .../namespaces/process_sync_events_worker.rb | 4 +- app/workers/pages_transfer_worker.rb | 10 +- app/workers/pipeline_hooks_worker.rb | 1 + app/workers/pipeline_notification_worker.rb | 1 + app/workers/project_daily_statistics_worker.rb | 20 - app/workers/project_service_worker.rb | 21 +- .../inactive_projects_deletion_cron_worker.rb | 67 +- app/workers/projects/process_sync_events_worker.rb | 4 +- .../prometheus/create_default_alerts_worker.rb | 19 - app/workers/repository_remove_remote_worker.rb | 35 - .../schedule_merge_request_cleanup_refs_worker.rb | 1 + app/workers/terraform/states/destroy_worker.rb | 23 + app/workers/update_merge_requests_worker.rb | 8 +- app/workers/web_hooks/destroy_worker.rb | 9 +- app/workers/web_hooks/log_destroy_worker.rb | 24 + 1730 files changed, 20517 insertions(+), 13627 deletions(-) create mode 100644 app/assets/javascripts/access_tokens/components/access_token_table_app.vue create mode 100644 app/assets/javascripts/access_tokens/components/constants.js create mode 100644 app/assets/javascripts/access_tokens/components/new_access_token_app.vue create mode 100644 app/assets/javascripts/admin/application_settings/inactive_project_deletion/components/form.vue create mode 100644 app/assets/javascripts/admin/application_settings/inactive_project_deletion/index.js create mode 100644 app/assets/javascripts/batch_comments/components/submit_dropdown.vue create mode 100644 app/assets/javascripts/behaviors/components/sandboxed_mermaid.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/legacy_ci_environments_dropdown.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/legacy_ci_variable_modal.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/legacy_ci_variable_settings.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/legacy_ci_variable_table.vue create mode 100644 app/assets/javascripts/content_editor/components/toolbar_more_dropdown.vue create mode 100644 app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue create mode 100644 app/assets/javascripts/emoji/utils.js create mode 100644 app/assets/javascripts/group_settings/stale_runner_cleanup.js create mode 100644 app/assets/javascripts/groups/components/empty_state.vue create mode 100644 app/assets/javascripts/groups/components/group_name_and_path.vue create mode 100644 app/assets/javascripts/groups/create_edit_form.js create mode 100644 app/assets/javascripts/groups/settings/api/access_dropdown_api.js create mode 100644 app/assets/javascripts/groups/settings/components/access_dropdown.vue create mode 100644 app/assets/javascripts/groups/settings/constants.js create mode 100644 app/assets/javascripts/groups/settings/init_access_dropdown.js delete mode 100644 app/assets/javascripts/integrations/edit/components/jira_upgrade_cta.vue create mode 100644 app/assets/javascripts/integrations/edit/components/sections/configuration.vue create mode 100644 app/assets/javascripts/integrations/edit/components/sections/trigger.vue create mode 100644 app/assets/javascripts/integrations/edit/components/trigger_field.vue create mode 100644 app/assets/javascripts/issuable/popover/components/issue_popover.vue create mode 100644 app/assets/javascripts/issuable/popover/components/mr_popover.vue create mode 100644 app/assets/javascripts/issuable/popover/constants.js create mode 100644 app/assets/javascripts/issuable/popover/index.js create mode 100644 app/assets/javascripts/issuable/popover/queries/issue.query.graphql create mode 100644 app/assets/javascripts/issuable/popover/queries/merge_request.query.graphql delete mode 100644 app/assets/javascripts/issues/list/queries/get_issues_counts_without_crm.query.graphql delete mode 100644 app/assets/javascripts/issues/list/queries/get_issues_without_crm.query.graphql create mode 100644 app/assets/javascripts/issues/show/components/incidents/graphql/queries/get_timeline_events.query.graphql create mode 100644 app/assets/javascripts/issues/show/components/incidents/timeline_events_list.vue create mode 100644 app/assets/javascripts/issues/show/components/incidents/timeline_events_list_item.vue create mode 100644 app/assets/javascripts/issues/show/components/incidents/timeline_events_tab.vue create mode 100644 app/assets/javascripts/issues/show/components/incidents/utils.js delete mode 100644 app/assets/javascripts/monitoring/services/alerts_service.js delete mode 100644 app/assets/javascripts/mr_popover/components/mr_popover.vue delete mode 100644 app/assets/javascripts/mr_popover/constants.js delete mode 100644 app/assets/javascripts/mr_popover/index.js delete mode 100644 app/assets/javascripts/mr_popover/queries/merge_request.query.graphql create mode 100644 app/assets/javascripts/packages_and_registries/package_registry/components/details/additional_metadata_loader.vue create mode 100644 app/assets/javascripts/packages_and_registries/package_registry/components/details/package_history_loader.vue create mode 100644 app/assets/javascripts/packages_and_registries/package_registry/graphql/queries/get_package_metadata.query.graphql create mode 100644 app/assets/javascripts/packages_and_registries/package_registry/graphql/queries/get_package_pipelines.query.graphql create mode 100644 app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy.vue create mode 100644 app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue delete mode 100644 app/assets/javascripts/packages_and_registries/settings/project/components/settings_form.vue create mode 100644 app/assets/javascripts/pages/admin/application_settings/repository/index.js delete mode 100644 app/assets/javascripts/pages/projects/services/edit/index.js create mode 100644 app/assets/javascripts/pages/projects/settings/branch_rules/index.js create mode 100644 app/assets/javascripts/pages/projects/settings/integrations/edit/index.js create mode 100644 app/assets/javascripts/pages/projects/settings/integrations/index/index.js delete mode 100644 app/assets/javascripts/pages/projects/settings/integrations/show/index.js delete mode 100644 app/assets/javascripts/pages/projects/static_site_editor/show/index.js delete mode 100644 app/assets/javascripts/pages/projects/tags/remove_tag.js create mode 100644 app/assets/javascripts/pipeline_editor/components/validate/ci_validate.vue delete mode 100644 app/assets/javascripts/pipeline_wizard/components/input.vue create mode 100644 app/assets/javascripts/pipeline_wizard/components/input_wrapper.vue create mode 100644 app/assets/javascripts/pipeline_wizard/templates/.gitkeep delete mode 100644 app/assets/javascripts/pipelines/components/notification/deprecated_type_keyword_notification.vue delete mode 100644 app/assets/javascripts/pipelines/graphql/queries/get_pipeline_warnings.query.graphql delete mode 100644 app/assets/javascripts/pipelines/pipeline_details_notification.js create mode 100644 app/assets/javascripts/projects/clusters_deprecation_alert/components/clusters_deprecation_alert.vue create mode 100644 app/assets/javascripts/projects/clusters_deprecation_alert/index.js create mode 100644 app/assets/javascripts/projects/settings/branch_rules/components/branch_dropdown.vue create mode 100644 app/assets/javascripts/projects/settings/branch_rules/components/rule_edit.vue create mode 100644 app/assets/javascripts/projects/settings/branch_rules/mount_branch_rules.js create mode 100644 app/assets/javascripts/projects/settings/branch_rules/queries/branches.query.graphql create mode 100644 app/assets/javascripts/projects/settings/repository/branch_rules/app.vue create mode 100644 app/assets/javascripts/projects/settings/repository/branch_rules/mount_branch_rules.js create mode 100644 app/assets/javascripts/repository/components/blob_viewers/sketch_viewer.vue create mode 100644 app/assets/javascripts/runner/components/runner_list_empty_state.vue create mode 100644 app/assets/javascripts/runner/graphql/list/list_item_shared.fragment.graphql create mode 100644 app/assets/javascripts/runner/graphql/show/runner_details.fragment.graphql create mode 100644 app/assets/javascripts/runner/graphql/show/runner_details_shared.fragment.graphql create mode 100644 app/assets/javascripts/runner/group_runner_show/group_runner_show_app.vue create mode 100644 app/assets/javascripts/runner/group_runner_show/index.js delete mode 100644 app/assets/javascripts/security_configuration/graphql/current_license.query.graphql create mode 100644 app/assets/javascripts/sidebar/components/time_tracking/graphql/cache_update.js create mode 100644 app/assets/javascripts/sidebar/components/time_tracking/graphql/mutations/delete_timelog.mutation.graphql create mode 100644 app/assets/javascripts/sidebar/queries/escalation_status.fragment.graphql delete mode 100644 app/assets/javascripts/sidebar/utils.js delete mode 100644 app/assets/javascripts/static_site_editor/components/app.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/edit_area.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/edit_drawer.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/edit_header.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/edit_meta_controls.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/edit_meta_modal.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/front_matter_controls.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/invalid_content_message.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/publish_toolbar.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/skeleton_loader.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/submit_changes_error.vue delete mode 100644 app/assets/javascripts/static_site_editor/components/unsaved_changes_confirm_dialog.vue delete mode 100644 app/assets/javascripts/static_site_editor/constants.js delete mode 100644 app/assets/javascripts/static_site_editor/graphql/index.js delete mode 100644 app/assets/javascripts/static_site_editor/graphql/mutations/has_submitted_changes.mutation.graphql delete mode 100644 app/assets/javascripts/static_site_editor/graphql/mutations/submit_content_changes.mutation.graphql delete mode 100644 app/assets/javascripts/static_site_editor/graphql/queries/app_data.query.graphql delete mode 100644 app/assets/javascripts/static_site_editor/graphql/queries/saved_content_meta.query.graphql delete mode 100644 app/assets/javascripts/static_site_editor/graphql/queries/source_content.query.graphql delete mode 100644 app/assets/javascripts/static_site_editor/graphql/resolvers/file.js delete mode 100644 app/assets/javascripts/static_site_editor/graphql/resolvers/has_submitted_changes.js delete mode 100644 app/assets/javascripts/static_site_editor/graphql/resolvers/submit_content_changes.js delete mode 100644 app/assets/javascripts/static_site_editor/graphql/typedefs.graphql delete mode 100644 app/assets/javascripts/static_site_editor/image_repository.js delete mode 100644 app/assets/javascripts/static_site_editor/index.js delete mode 100644 app/assets/javascripts/static_site_editor/pages/home.vue delete mode 100644 app/assets/javascripts/static_site_editor/pages/success.vue delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/constants.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/modals/add_image/add_image_modal.vue delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/modals/add_image/upload_image_tab.vue delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/modals/insert_video_modal.vue delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/rich_content_editor.vue delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/build_html_to_markdown_renderer.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/editor_service.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/build_uneditable_token.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_attribute_definition.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_embedded_ruby_text.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_font_awesome_html_inline.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_heading.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_html_block.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_identifier_instance_text.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_identifier_paragraph.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_list_item.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_softbreak.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/renderers/render_utils.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/services/sanitize_html.js delete mode 100644 app/assets/javascripts/static_site_editor/rich_content_editor/toolbar_item.vue delete mode 100644 app/assets/javascripts/static_site_editor/router/constants.js delete mode 100644 app/assets/javascripts/static_site_editor/router/index.js delete mode 100644 app/assets/javascripts/static_site_editor/router/routes.js delete mode 100644 app/assets/javascripts/static_site_editor/services/formatter.js delete mode 100644 app/assets/javascripts/static_site_editor/services/front_matterify.js delete mode 100644 app/assets/javascripts/static_site_editor/services/generate_branch_name.js delete mode 100644 app/assets/javascripts/static_site_editor/services/image_service.js delete mode 100644 app/assets/javascripts/static_site_editor/services/load_source_content.js delete mode 100644 app/assets/javascripts/static_site_editor/services/parse_source_file.js delete mode 100644 app/assets/javascripts/static_site_editor/services/renderers/render_image.js delete mode 100644 app/assets/javascripts/static_site_editor/services/submit_content_changes.js delete mode 100644 app/assets/javascripts/static_site_editor/services/templater.js create mode 100644 app/assets/javascripts/tags/components/delete_tag_modal.vue create mode 100644 app/assets/javascripts/tags/event_hub.js create mode 100644 app/assets/javascripts/tags/init_delete_tag_modal.js create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/approvals/humanized_text.js create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/extensions/telemetry.js delete mode 100644 app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue create mode 100644 app/assets/javascripts/vue_merge_request_widget/extensions/security_reports/index.js create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/color_item.vue create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/color_select_root.vue create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/constants.js create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/dropdown_contents.vue create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/dropdown_contents_color_view.vue create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/dropdown_header.vue create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/dropdown_value.vue create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/graphql/epic_color.query.graphql create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/graphql/epic_update_color.mutation.graphql create mode 100644 app/assets/javascripts/vue_shared/components/color_select_dropdown/utils.js create mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/plugins/index.js create mode 100644 app/assets/javascripts/vue_shared/components/source_viewer/plugins/wrap_comments.js create mode 100644 app/assets/javascripts/vue_shared/components/user_popover/constants.js create mode 100644 app/assets/javascripts/work_items/components/update_work_item.js create mode 100644 app/assets/javascripts/work_items/components/work_item_assignees.vue create mode 100644 app/assets/javascripts/work_items/components/work_item_description.vue create mode 100644 app/assets/javascripts/work_items/components/work_item_links/index.js create mode 100644 app/assets/javascripts/work_items/components/work_item_links/work_item_links.vue create mode 100644 app/assets/javascripts/work_items/components/work_item_links/work_item_links_form.vue create mode 100644 app/assets/javascripts/work_items/components/work_item_weight.vue create mode 100644 app/assets/javascripts/work_items/graphql/local_update_work_item.mutation.graphql create mode 100644 app/assets/javascripts/work_items/graphql/typedefs.graphql create mode 100644 app/assets/javascripts/work_items/graphql/update_work_item_task.mutation.graphql create mode 100644 app/assets/javascripts/work_items/graphql/update_work_item_widgets.mutation.graphql create mode 100644 app/assets/javascripts/work_items/graphql/work_item_links.query.graphql delete mode 100644 app/assets/stylesheets/framework/issue_box.scss delete mode 100644 app/assets/stylesheets/pages/pages.scss delete mode 100644 app/assets/stylesheets/themes/theme_dark.scss create mode 100644 app/assets/stylesheets/themes/theme_gray.scss delete mode 100644 app/assets/stylesheets/themes/theme_light.scss create mode 100644 app/assets/stylesheets/themes/theme_light_gray.scss create mode 100644 app/components/pajamas/banner_component.html.haml create mode 100644 app/components/pajamas/banner_component.rb create mode 100644 app/components/pajamas/button_component.html.haml create mode 100644 app/components/pajamas/button_component.rb create mode 100644 app/components/pajamas/card_component.html.haml create mode 100644 app/components/pajamas/card_component.rb create mode 100644 app/components/pajamas/checkbox_component.html.haml create mode 100644 app/components/pajamas/checkbox_component.rb create mode 100644 app/components/pajamas/concerns/checkbox_radio_label_with_help_text.rb create mode 100644 app/components/pajamas/concerns/checkbox_radio_options.rb create mode 100644 app/components/pajamas/radio_component.html.haml create mode 100644 app/components/pajamas/radio_component.rb create mode 100644 app/controllers/concerns/project_stats_refresh_conflicts_guard.rb create mode 100644 app/controllers/concerns/zuora_csp.rb create mode 100644 app/controllers/jira_connect/oauth_application_ids_controller.rb create mode 100644 app/controllers/mailgun/webhooks_controller.rb delete mode 100644 app/controllers/members/mailgun/permanent_failures_controller.rb delete mode 100644 app/controllers/projects/service_hook_logs_controller.rb delete mode 100644 app/controllers/projects/services_controller.rb create mode 100644 app/controllers/projects/settings/branch_rules_controller.rb create mode 100644 app/controllers/projects/settings/integration_hook_logs_controller.rb delete mode 100644 app/controllers/projects/static_site_editor_controller.rb create mode 100644 app/events/pages/page_deleted_event.rb create mode 100644 app/finders/crm/organizations_finder.rb create mode 100644 app/finders/work_items/work_items_finder.rb create mode 100644 app/graphql/mutations/concerns/mutations/work_items/update_arguments.rb create mode 100644 app/graphql/mutations/packages/cleanup/policy/update.rb create mode 100644 app/graphql/mutations/packages/destroy_files.rb create mode 100644 app/graphql/mutations/work_items/update_task.rb create mode 100644 app/graphql/mutations/work_items/update_widgets.rb create mode 100644 app/graphql/resolvers/ci/runner_owner_project_resolver.rb create mode 100644 app/graphql/resolvers/crm/contacts_resolver.rb create mode 100644 app/graphql/resolvers/crm/organizations_resolver.rb create mode 100644 app/graphql/resolvers/work_items_resolver.rb create mode 100644 app/graphql/types/ci/pipeline_merge_request_event_type_enum.rb delete mode 100644 app/graphql/types/concerns/find_closest.rb create mode 100644 app/graphql/types/customer_relations/contact_state_enum.rb create mode 100644 app/graphql/types/customer_relations/organization_state_enum.rb create mode 100644 app/graphql/types/limited_countable_connection_type.rb create mode 100644 app/graphql/types/packages/cleanup/keep_duplicated_package_files_enum.rb create mode 100644 app/graphql/types/packages/cleanup/policy_type.rb create mode 100644 app/graphql/types/work_item_sort_enum.rb create mode 100644 app/graphql/types/work_items/updated_task_input_type.rb create mode 100644 app/graphql/types/work_items/widget_interface.rb create mode 100644 app/graphql/types/work_items/widget_type_enum.rb create mode 100644 app/graphql/types/work_items/widgets/description_input_type.rb create mode 100644 app/graphql/types/work_items/widgets/description_type.rb create mode 100644 app/graphql/types/work_items/widgets/hierarchy_type.rb create mode 100644 app/helpers/admin/application_settings/settings_helper.rb delete mode 100644 app/helpers/groups/crm_settings_helper.rb create mode 100644 app/helpers/tooling/visual_review_helper.rb create mode 100644 app/helpers/work_items_helper.rb create mode 100644 app/models/clusters/cluster_enabled_grant.rb create mode 100644 app/models/commit_signatures/ssh_signature.rb create mode 100644 app/models/concerns/as_cte.rb create mode 100644 app/models/time_tracking/timelog_category.rb create mode 100644 app/models/work_items/parent_link.rb create mode 100644 app/models/work_items/widgets/base.rb create mode 100644 app/models/work_items/widgets/description.rb create mode 100644 app/models/work_items/widgets/hierarchy.rb create mode 100644 app/policies/packages/cleanup/policy_policy.rb delete mode 100644 app/presenters/packages/pypi/package_presenter.rb create mode 100644 app/presenters/packages/pypi/simple_index_presenter.rb create mode 100644 app/presenters/packages/pypi/simple_package_versions_presenter.rb create mode 100644 app/presenters/packages/pypi/simple_presenter_base.rb create mode 100644 app/presenters/releases/link_presenter.rb delete mode 100644 app/serializers/deploy_key_entity.rb delete mode 100644 app/serializers/deploy_key_serializer.rb create mode 100644 app/serializers/deploy_keys/basic_deploy_key_entity.rb create mode 100644 app/serializers/deploy_keys/basic_deploy_key_serializer.rb create mode 100644 app/serializers/deploy_keys/deploy_key_entity.rb create mode 100644 app/serializers/deploy_keys/deploy_key_serializer.rb create mode 100644 app/serializers/integrations/event_entity.rb create mode 100644 app/serializers/integrations/event_serializer.rb create mode 100644 app/serializers/integrations/field_entity.rb create mode 100644 app/serializers/integrations/field_serializer.rb delete mode 100644 app/serializers/service_event_entity.rb delete mode 100644 app/serializers/service_event_serializer.rb delete mode 100644 app/serializers/service_field_entity.rb delete mode 100644 app/serializers/service_field_serializer.rb create mode 100644 app/services/bulk_imports/create_pipeline_trackers_service.rb create mode 100644 app/services/bulk_imports/repository_bundle_export_service.rb delete mode 100644 app/services/clusters/applications/schedule_update_service.rb create mode 100644 app/services/concerns/integrations/bulk_operation_hashes.rb delete mode 100644 app/services/concerns/members/bulk_create_users.rb create mode 100644 app/services/import/fogbugz_service.rb delete mode 100644 app/services/members/groups/bulk_creator_service.rb delete mode 100644 app/services/members/mailgun/process_webhook_service.rb delete mode 100644 app/services/members/projects/bulk_creator_service.rb delete mode 100644 app/services/notification_recipients/builder/new_release.rb create mode 100644 app/services/packages/cleanup/update_policy_service.rb delete mode 100644 app/services/projects/destroy_rollback_service.rb delete mode 100644 app/services/repositories/destroy_rollback_service.rb delete mode 100644 app/services/repositories/shell_destroy_service.rb delete mode 100644 app/services/static_site_editor/config_service.rb create mode 100644 app/services/terraform/states/destroy_service.rb create mode 100644 app/services/terraform/states/trigger_destroy_service.rb create mode 100644 app/services/web_hooks/log_destroy_service.rb create mode 100644 app/validators/json_schemas/web_hooks_url_variables.json create mode 100644 app/views/admin/application_settings/_jira_connect_application_key.html.haml create mode 100644 app/views/groups/settings/_git_access_protocols.html.haml create mode 100644 app/views/layouts/_visual_review.html.haml create mode 100644 app/views/notify/user_auto_banned_email.html.haml create mode 100644 app/views/notify/user_auto_banned_email.text.erb create mode 100644 app/views/projects/_clusters_deprecation_alert.html.haml delete mode 100644 app/views/projects/blob/_upload.html.haml create mode 100644 app/views/projects/branch_rules/_show.html.haml delete mode 100644 app/views/projects/issues/_alert_moved_from_service_desk.html.haml delete mode 100644 app/views/projects/issues/_by_email_description.html.haml delete mode 100644 app/views/projects/issues/_nav_btns.html.haml delete mode 100644 app/views/projects/issues/_service_desk_empty_state.html.haml delete mode 100644 app/views/projects/issues/_service_desk_info_content.html.haml create mode 100644 app/views/projects/issues/_work_item_links.html.haml create mode 100644 app/views/projects/issues/service_desk/_alert_moved_from_service_desk.html.haml create mode 100644 app/views/projects/issues/service_desk/_nav_btns.html.haml create mode 100644 app/views/projects/issues/service_desk/_service_desk_empty_state.html.haml create mode 100644 app/views/projects/issues/service_desk/_service_desk_info_content.html.haml delete mode 100644 app/views/projects/services/_form.html.haml delete mode 100644 app/views/projects/services/edit.html.haml create mode 100644 app/views/projects/settings/branch_rules/index.html.haml create mode 100644 app/views/projects/settings/integrations/_form.html.haml create mode 100644 app/views/projects/settings/integrations/edit.html.haml create mode 100644 app/views/projects/settings/integrations/index.html.haml delete mode 100644 app/views/projects/settings/integrations/show.html.haml delete mode 100644 app/views/projects/static_site_editor/show.html.haml create mode 100644 app/views/pwa/manifest.json.erb create mode 100644 app/views/shared/groups/_group_name_and_path_fields.html.haml create mode 100644 app/views/shared/projects/_inactive_project_deletion_alert.html.haml create mode 100644 app/workers/clusters/applications/activate_integration_worker.rb create mode 100644 app/workers/clusters/applications/deactivate_integration_worker.rb delete mode 100644 app/workers/expire_job_cache_worker.rb delete mode 100644 app/workers/expire_pipeline_cache_worker.rb create mode 100644 app/workers/integrations/execute_worker.rb create mode 100644 app/workers/integrations/irker_worker.rb delete mode 100644 app/workers/issue_placement_worker.rb delete mode 100644 app/workers/issue_rebalancing_worker.rb delete mode 100644 app/workers/namespaceless_project_destroy_worker.rb delete mode 100644 app/workers/project_daily_statistics_worker.rb delete mode 100644 app/workers/prometheus/create_default_alerts_worker.rb delete mode 100644 app/workers/repository_remove_remote_worker.rb create mode 100644 app/workers/terraform/states/destroy_worker.rb create mode 100644 app/workers/web_hooks/log_destroy_worker.rb (limited to 'app') diff --git a/app/assets/images/auth_buttons/gitlab_64.png b/app/assets/images/auth_buttons/gitlab_64.png index f675678dc9d..860f9c1be9b 100644 Binary files a/app/assets/images/auth_buttons/gitlab_64.png and b/app/assets/images/auth_buttons/gitlab_64.png differ diff --git a/app/assets/images/ext_snippet_icons/ext_snippet_icons.png b/app/assets/images/ext_snippet_icons/ext_snippet_icons.png index c864e558bfd..e81115d311e 100644 Binary files a/app/assets/images/ext_snippet_icons/ext_snippet_icons.png and b/app/assets/images/ext_snippet_icons/ext_snippet_icons.png differ diff --git a/app/assets/javascripts/access_tokens/components/access_token_table_app.vue b/app/assets/javascripts/access_tokens/components/access_token_table_app.vue new file mode 100644 index 00000000000..944a2ef7f64 --- /dev/null +++ b/app/assets/javascripts/access_tokens/components/access_token_table_app.vue @@ -0,0 +1,168 @@ + + + diff --git a/app/assets/javascripts/access_tokens/components/constants.js b/app/assets/javascripts/access_tokens/components/constants.js new file mode 100644 index 00000000000..84e50bc099f --- /dev/null +++ b/app/assets/javascripts/access_tokens/components/constants.js @@ -0,0 +1,61 @@ +import { __, s__ } from '~/locale'; + +export const EVENT_ERROR = 'ajax:error'; +export const EVENT_SUCCESS = 'ajax:success'; +export const FORM_SELECTOR = '#js-new-access-token-form'; + +export const INITIAL_PAGE = 1; +export const PAGE_SIZE = 100; + +export const FIELDS = [ + { + key: 'name', + label: __('Token name'), + sortable: true, + tdClass: `gl-text-black-normal`, + thClass: `gl-text-black-normal`, + }, + { + formatter(scopes) { + return scopes?.length ? scopes.join(', ') : __('no scopes selected'); + }, + key: 'scopes', + label: __('Scopes'), + sortable: true, + tdClass: `gl-text-black-normal`, + thClass: `gl-text-black-normal`, + }, + { + key: 'createdAt', + label: s__('AccessTokens|Created'), + sortable: true, + tdClass: `gl-text-black-normal`, + thClass: `gl-text-black-normal`, + }, + { + key: 'lastUsedAt', + label: __('Last Used'), + sortable: true, + tdClass: `gl-text-black-normal`, + thClass: `gl-text-black-normal`, + }, + { + key: 'expiresAt', + label: __('Expires'), + sortable: true, + tdClass: `gl-text-black-normal`, + thClass: `gl-text-black-normal`, + }, + { + key: 'role', + label: __('Role'), + tdClass: `gl-text-black-normal`, + thClass: `gl-text-black-normal`, + sortable: true, + }, + { + key: 'action', + label: __('Action'), + thClass: `gl-text-black-normal`, + }, +]; diff --git a/app/assets/javascripts/access_tokens/components/expires_at_field.vue b/app/assets/javascripts/access_tokens/components/expires_at_field.vue index 561b2617c5f..147de529eea 100644 --- a/app/assets/javascripts/access_tokens/components/expires_at_field.vue +++ b/app/assets/javascripts/access_tokens/components/expires_at_field.vue @@ -21,17 +21,17 @@ export default { required: false, default: () => ({}), }, + minDate: { + type: Date, + required: false, + default: () => new Date(), + }, maxDate: { type: Date, required: false, default: () => null, }, }, - data() { - return { - minDate: new Date(), - }; - }, }; diff --git a/app/assets/javascripts/access_tokens/components/new_access_token_app.vue b/app/assets/javascripts/access_tokens/components/new_access_token_app.vue new file mode 100644 index 00000000000..904052688f3 --- /dev/null +++ b/app/assets/javascripts/access_tokens/components/new_access_token_app.vue @@ -0,0 +1,130 @@ + + + diff --git a/app/assets/javascripts/access_tokens/index.js b/app/assets/javascripts/access_tokens/index.js index c59bd445539..a7a03523e7f 100644 --- a/app/assets/javascripts/access_tokens/index.js +++ b/app/assets/javascripts/access_tokens/index.js @@ -3,12 +3,57 @@ import Vue from 'vue'; import createFlash from '~/flash'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { parseRailsFormFields } from '~/lib/utils/forms'; -import { __ } from '~/locale'; +import { __, sprintf } from '~/locale'; +import AccessTokenTableApp from './components/access_token_table_app.vue'; import ExpiresAtField from './components/expires_at_field.vue'; +import NewAccessTokenApp from './components/new_access_token_app.vue'; import TokensApp from './components/tokens_app.vue'; import { FEED_TOKEN, INCOMING_EMAIL_TOKEN, STATIC_OBJECT_TOKEN } from './constants'; +export const initAccessTokenTableApp = () => { + const el = document.querySelector('#js-access-token-table-app'); + + if (!el) { + return null; + } + + const { + accessTokenType, + accessTokenTypePlural, + initialActiveAccessTokens: initialActiveAccessTokensJson, + noActiveTokensMessage: noTokensMessage, + } = el.dataset; + + // Default values + const noActiveTokensMessage = + noTokensMessage || + sprintf(__('This user has no active %{accessTokenTypePlural}.'), { accessTokenTypePlural }); + const showRole = 'showRole' in el.dataset; + + const initialActiveAccessTokens = convertObjectPropsToCamelCase( + JSON.parse(initialActiveAccessTokensJson), + { + deep: true, + }, + ); + + return new Vue({ + el, + name: 'AccessTokenTableRoot', + provide: { + accessTokenType, + accessTokenTypePlural, + initialActiveAccessTokens, + noActiveTokensMessage, + showRole, + }, + render(h) { + return h(AccessTokenTableApp); + }, + }); +}; + export const initExpiresAtField = () => { const el = document.querySelector('.js-access-tokens-expires-at'); @@ -17,7 +62,7 @@ export const initExpiresAtField = () => { } const { expiresAt: inputAttrs } = parseRailsFormFields(el); - const { maxDate } = el.dataset; + const { minDate, maxDate } = el.dataset; return new Vue({ el, @@ -25,6 +70,7 @@ export const initExpiresAtField = () => { return h(ExpiresAtField, { props: { inputAttrs, + minDate: minDate ? new Date(minDate) : undefined, maxDate: maxDate ? new Date(maxDate) : undefined, }, }); @@ -32,6 +78,27 @@ export const initExpiresAtField = () => { }); }; +export const initNewAccessTokenApp = () => { + const el = document.querySelector('#js-new-access-token-app'); + + if (!el) { + return null; + } + + const { accessTokenType } = el.dataset; + + return new Vue({ + el, + name: 'NewAccessTokenRoot', + provide: { + accessTokenType, + }, + render(h) { + return h(NewAccessTokenApp); + }, + }); +}; + export const initProjectsField = () => { const el = document.querySelector('.js-access-tokens-projects'); diff --git a/app/assets/javascripts/activities.js b/app/assets/javascripts/activities.js index 7a78ccdb0cd..6fc37e9331f 100644 --- a/app/assets/javascripts/activities.js +++ b/app/assets/javascripts/activities.js @@ -2,7 +2,7 @@ import $ from 'jquery'; import { setCookie } from '~/lib/utils/common_utils'; -import createFlash from '~/flash'; +import { createAlert } from '~/flash'; import { s__ } from '~/locale'; import { localTimeAgo } from './lib/utils/datetime_utility'; import Pager from './pager'; @@ -31,7 +31,7 @@ export default class Activities { prepareData: (data) => data, successCallback: () => this.updateTooltips(), errorCallback: () => - createFlash({ + createAlert({ message: s__( 'Activity|An error occurred while retrieving activity. Reload the page to try again.', ), diff --git a/app/assets/javascripts/admin/application_settings/inactive_project_deletion/components/form.vue b/app/assets/javascripts/admin/application_settings/inactive_project_deletion/components/form.vue new file mode 100644 index 00000000000..ef4a5319eec --- /dev/null +++ b/app/assets/javascripts/admin/application_settings/inactive_project_deletion/components/form.vue @@ -0,0 +1,249 @@ + + diff --git a/app/assets/javascripts/admin/application_settings/inactive_project_deletion/index.js b/app/assets/javascripts/admin/application_settings/inactive_project_deletion/index.js new file mode 100644 index 00000000000..43e6902885c --- /dev/null +++ b/app/assets/javascripts/admin/application_settings/inactive_project_deletion/index.js @@ -0,0 +1,36 @@ +import Vue from 'vue'; +import { parseBoolean } from '~/lib/utils/common_utils'; +import Form from './components/form.vue'; + +export default () => { + const el = document.querySelector('.js-inactive-project-deletion-form'); + + if (!el) { + return false; + } + + const { + deleteInactiveProjects, + inactiveProjectsDeleteAfterMonths, + inactiveProjectsMinSizeMb, + inactiveProjectsSendWarningEmailAfterMonths, + } = el.dataset; + + return new Vue({ + el, + name: 'InactiveProjectDeletion', + render(createElement) { + return createElement(Form, { + props: { + deleteInactiveProjects: parseBoolean(deleteInactiveProjects), + inactiveProjectsDeleteAfterMonths: parseInt(inactiveProjectsDeleteAfterMonths, 10), + inactiveProjectsMinSizeMb: parseInt(inactiveProjectsMinSizeMb, 10), + inactiveProjectsSendWarningEmailAfterMonths: parseInt( + inactiveProjectsSendWarningEmailAfterMonths, + 10, + ), + }, + }); + }, + }); +}; diff --git a/app/assets/javascripts/admin/users/components/user_actions.vue b/app/assets/javascripts/admin/users/components/user_actions.vue index 829174d7593..40e5f8d9d70 100644 --- a/app/assets/javascripts/admin/users/components/user_actions.vue +++ b/app/assets/javascripts/admin/users/components/user_actions.vue @@ -100,7 +100,7 @@ export default { diff --git a/app/assets/javascripts/admin/users/components/users_table.vue b/app/assets/javascripts/admin/users/components/users_table.vue index ede5c26e487..b4b84594276 100644 --- a/app/assets/javascripts/admin/users/components/users_table.vue +++ b/app/assets/javascripts/admin/users/components/users_table.vue @@ -2,7 +2,7 @@ import { GlSkeletonLoader, GlTable } from '@gitlab/ui'; import createFlash from '~/flash'; import { convertNodeIdsFromGraphQLIds } from '~/graphql_shared/utils'; -import { thWidthClass } from '~/lib/utils/table_utility'; +import { thWidthPercent } from '~/lib/utils/table_utility'; import { s__, __ } from '~/locale'; import UserDate from '~/vue_shared/components/user_date.vue'; import getUsersGroupCountsQuery from '../graphql/queries/get_users_group_counts.query.graphql'; @@ -70,32 +70,32 @@ export default { { key: 'name', label: __('Name'), - thClass: thWidthClass(40), + thClass: thWidthPercent(40), }, { key: 'projectsCount', label: __('Projects'), - thClass: thWidthClass(10), + thClass: thWidthPercent(10), }, { key: 'groupCount', label: __('Groups'), - thClass: thWidthClass(10), + thClass: thWidthPercent(10), }, { key: 'createdAt', label: __('Created on'), - thClass: thWidthClass(15), + thClass: thWidthPercent(15), }, { key: 'lastActivityOn', label: __('Last activity'), - thClass: thWidthClass(15), + thClass: thWidthPercent(15), }, { key: 'settings', label: '', - thClass: thWidthClass(10), + thClass: thWidthPercent(10), }, ], }; diff --git a/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue b/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue index f4cc0678c38..3860831169e 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_integrations_list.vue @@ -42,6 +42,20 @@ const bodyTrClass = export default { i18n, typeSet, + modal: { + actionPrimary: { + text: i18n.deleteIntegration, + attributes: { + variant: 'danger', + }, + }, + actionSecondary: { + text: __('Cancel'), + attributes: { + variant: 'default', + }, + }, + }, components: { GlButtonGroup, GlButton, @@ -204,8 +218,8 @@ export default { -import { GlDeprecatedSkeletonLoading as GlSkeletonLoading } from '@gitlab/ui'; +import { GlSkeletonLoader } from '@gitlab/ui'; import { flatten, isEqual, keyBy } from 'lodash'; import createFlash from '~/flash'; import { sprintf, s__ } from '~/locale'; @@ -48,7 +48,7 @@ const groupRawMetrics = (groups = [], rawData = []) => { export default { name: 'ValueStreamMetrics', components: { - GlSkeletonLoading, + GlSkeletonLoader, MetricTile, }, props: { @@ -119,8 +119,8 @@ export default { };