From 81ade28521815998cbbd606daaa4c9bd1c7cf07f Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Mon, 8 Mar 2021 18:12:59 +0530 Subject: [PATCH 1/5] New upstream version 13.8.5+ds1 --- .eslintrc.yml | 12 + .gitlab-ci.yml | 3 +- .gitlab/CODEOWNERS | 14 +- .gitlab/ci/dev-fixtures.gitlab-ci.yml | 1 - .gitlab/ci/docs.gitlab-ci.yml | 15 +- .gitlab/ci/frontend.gitlab-ci.yml | 3 +- .gitlab/ci/global.gitlab-ci.yml | 2 +- .gitlab/ci/graphql.gitlab-ci.yml | 14 + .gitlab/ci/pages.gitlab-ci.yml | 1 - .gitlab/ci/rails.gitlab-ci.yml | 119 +- .gitlab/ci/reports.gitlab-ci.yml | 104 +- .gitlab/ci/review.gitlab-ci.yml | 8 +- .gitlab/ci/rules.gitlab-ci.yml | 30 +- .gitlab/issue_templates/Acceptance Testing.md | 2 +- .gitlab/issue_templates/Design Sprint.md | 203 + .gitlab/issue_templates/Feature proposal.md | 9 + .../Security developer workflow.md | 1 + .../New End To End Test.md | 1 + .haml-lint_todo.yml | 1 - .prettierrc | 1 + .rubocop.yml | 13 + .rubocop_manual_todo.yml | 316 +- .rubocop_todo.yml | 396 +- CHANGELOG.md | 421 +- GITALY_SERVER_VERSION | 2 +- GITLAB_KAS_VERSION | 2 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 53 +- Gemfile.lock | 339 +- Guardfile | 4 +- VERSION | 2 +- app/assets/images/board-intro.svg | 1 + app/assets/javascripts/access_tokens/index.js | 2 +- app/assets/javascripts/activities.js | 6 +- .../add_context_commits_modal_wrapper.vue | 10 +- .../store/actions.js | 14 +- .../add_context_commits_modal/utils.js | 2 +- .../setup_metrics_and_profiling.js | 2 +- .../components/usage_ping_disabled.vue | 2 +- .../components/usage_ping_disabled.vue | 2 +- .../admin/statistics_panel/index.js | 2 +- .../admin/statistics_panel/store/actions.js | 2 +- .../admin/statistics_panel/store/getters.js | 4 +- .../admin/users/components/user_avatar.vue | 53 + .../admin/users/components/users_table.vue | 10 +- .../javascripts/admin/users/constants.js | 1 + app/assets/javascripts/admin/users/index.js | 4 +- app/assets/javascripts/alert_handler.js | 4 +- .../components/alert_details.vue | 26 +- .../alert_management_empty_state.vue | 52 +- .../components/alert_management_table.vue | 6 +- .../components/alert_metrics.vue | 2 +- .../components/alert_status.vue | 4 +- .../components/sidebar/sidebar_assignees.vue | 4 +- .../components/sidebar/sidebar_todo.vue | 2 +- .../javascripts/alert_management/details.js | 12 +- .../fragments/detail_item.fragment.graphql | 4 +- .../alert_set_assignees.mutation.graphql | 2 +- .../javascripts/alert_management/list.js | 12 +- .../components/alerts_service_form.vue | 16 +- .../alerts_service_settings/index.js | 2 +- .../components/alert_mapping_builder.vue | 22 +- .../components/alerts_integrations_list.vue | 4 +- .../components/alerts_settings_form.vue | 140 +- .../components/alerts_settings_wrapper.vue | 41 +- .../javascripts/alerts_settings/constants.js | 10 +- .../javascripts/alerts_settings/graphql.js | 2 +- .../javascripts/alerts_settings/index.js | 18 +- .../alerts_settings/utils/cache_updates.js | 4 +- .../instance_statistics_count_chart.vue | 8 +- .../components/projects_and_groups_chart.vue | 8 +- .../components/users_chart.vue | 4 +- .../analytics/instance_statistics/utils.js | 2 +- .../activity_charts_bundle.js | 8 +- app/assets/javascripts/api.js | 87 +- app/assets/javascripts/api/api_utils.js | 5 + app/assets/javascripts/api/constants.js | 1 + app/assets/javascripts/api/groups_api.js | 22 + app/assets/javascripts/api/projects_api.js | 27 + app/assets/javascripts/api/user_api.js | 66 + ..._artifact_project_setting.mutation.graphql | 5 + ...est_artifact_project_setting.query.graphql | 7 + .../javascripts/artifacts_settings/index.js | 32 + .../keep_latest_artifact_checkbox.vue | 99 + .../authentication/u2f/authenticate.js | 6 +- .../authentication/u2f/register.js | 4 +- .../authentication/webauthn/authenticate.js | 4 +- .../authentication/webauthn/register.js | 4 +- app/assets/javascripts/awards_handler.js | 45 +- .../badges/components/badge_form.vue | 20 +- .../badges/components/badge_settings.vue | 2 +- .../javascripts/badges/store/actions.js | 20 +- .../javascripts/badges/store/mutations.js | 10 +- .../components/preview_item.vue | 6 +- .../stores/modules/batch_comments/actions.js | 20 +- .../stores/modules/batch_comments/getters.js | 20 +- .../modules/batch_comments/mutations.js | 14 +- .../javascripts/batch_comments/utils.js | 4 +- app/assets/javascripts/behaviors/autosize.js | 2 +- .../javascripts/behaviors/bind_in_out.js | 2 +- .../behaviors/copy_to_clipboard.js | 2 +- app/assets/javascripts/behaviors/gl_emoji.js | 2 +- .../javascripts/behaviors/load_startup_css.js | 2 +- .../behaviors/markdown/copy_as_gfm.js | 12 +- .../markdown/highlight_current_user.js | 2 +- .../behaviors/markdown/marks/inline_diff.js | 2 +- .../behaviors/markdown/marks/inline_html.js | 6 +- .../behaviors/markdown/nodes/code_block.js | 6 +- .../behaviors/markdown/nodes/emoji.js | 4 +- .../behaviors/markdown/nodes/image.js | 4 +- .../behaviors/markdown/nodes/playable.js | 4 +- .../behaviors/markdown/nodes/reference.js | 4 +- .../behaviors/markdown/nodes/table_cell.js | 4 +- .../markdown/nodes/task_list_item.js | 2 +- .../markdown/paste_markdown_table.js | 13 +- .../behaviors/markdown/render_math.js | 4 +- .../behaviors/markdown/render_mermaid.js | 8 +- .../behaviors/markdown/render_metrics.js | 4 +- .../javascripts/behaviors/markdown/schema.js | 4 +- .../behaviors/markdown/serializer.js | 4 +- .../javascripts/behaviors/preview_markdown.js | 40 +- .../javascripts/behaviors/quick_submit.js | 2 +- .../javascripts/behaviors/requires_input.js | 2 +- .../javascripts/behaviors/secret_values.js | 4 +- .../behaviors/shortcuts/keybindings.js | 8 +- .../behaviors/shortcuts/shortcuts.js | 8 +- .../behaviors/shortcuts/shortcuts_blob.js | 2 +- .../behaviors/shortcuts/shortcuts_issuable.js | 4 +- .../javascripts/blob/3d_viewer/index.js | 4 +- .../blob/balsamiq/balsamiq_viewer.js | 4 +- .../javascripts/blob/blob_file_dropzone.js | 14 +- .../blob/blob_line_permalink_updater.js | 6 +- .../blob/components/blob_content_error.vue | 2 +- .../blob_header_default_actions.vue | 5 +- .../blob/file_template_mediator.js | 43 +- .../blob/notebook/notebook_viewer.vue | 6 +- app/assets/javascripts/blob/openapi/index.js | 2 +- .../blob/pipeline_tour_success_modal.vue | 6 +- app/assets/javascripts/blob/sketch/index.js | 6 +- app/assets/javascripts/blob/stl_viewer.js | 4 +- .../blob/suggest_gitlab_ci_yml/index.js | 2 +- .../javascripts/blob/template_selector.js | 8 +- .../ci_syntax_yaml_selector.js | 29 + .../template_selectors/ci_yaml_selector.js | 4 +- .../template_selectors/dockerfile_selector.js | 4 +- .../template_selectors/gitignore_selector.js | 4 +- .../template_selectors/license_selector.js | 4 +- .../metrics_dashboard_selector.js | 4 +- .../blob/template_selectors/type_selector.js | 4 +- app/assets/javascripts/blob/viewer/index.js | 10 +- .../javascripts/blob_edit/blob_bundle.js | 2 +- app/assets/javascripts/blob_edit/edit_blob.js | 8 +- app/assets/javascripts/boards/boards_util.js | 50 +- .../components/board_assignee_dropdown.vue | 2 +- .../boards/components/board_card_layout.vue | 20 +- .../boards/components/board_column.vue | 81 +- .../components/board_column_deprecated.vue | 105 + .../boards/components/board_column_new.vue | 82 - .../board_configuration_options.vue | 37 +- .../boards/components/board_content.vue | 27 +- .../boards/components/board_form.vue | 149 +- .../boards/components/board_list.vue | 480 +- .../components/board_list_deprecated.vue | 443 ++ .../boards/components/board_list_header.vue | 159 +- ...w.vue => board_list_header_deprecated.vue} | 159 +- .../boards/components/board_list_new.vue | 239 - .../boards/components/board_new_issue.vue | 84 +- ...new.vue => board_new_issue_deprecated.vue} | 81 +- .../components/board_settings_sidebar.vue | 2 +- .../boards/components/board_sidebar.js | 6 +- .../boards/components/boards_selector.vue | 6 +- .../boards/components/issue_card_inner.vue | 50 +- .../issue_card_inner_deprecated.vue | 245 + .../boards/components/issue_time_estimate.vue | 28 +- .../issue_time_estimate_deprecated.vue | 48 + .../boards/components/modal/footer.vue | 6 +- .../boards/components/modal/index.vue | 14 +- .../boards/components/new_list_dropdown.js | 2 +- .../boards/components/project_select.vue | 197 +- .../components/project_select_deprecated.vue | 145 + .../sidebar/board_editable_item.vue | 39 +- .../sidebar/board_sidebar_due_date.vue | 6 +- .../sidebar/board_sidebar_issue_title.vue | 171 + .../sidebar/board_sidebar_labels_select.vue | 12 +- .../board_sidebar_milestone_select.vue | 18 +- .../sidebar/board_sidebar_subscription.vue | 2 +- .../components/sidebar/remove_issue.vue | 10 +- .../boards/filtered_search_boards.js | 8 +- .../boards/filters/due_date_filters.js | 2 +- .../boards/graphql/board.mutation.graphql | 11 - .../graphql/board_create.mutation.graphql | 9 + .../graphql/board_destroy.mutation.graphql | 7 + .../graphql/board_update.mutation.graphql | 9 + .../graphql/group_projects.query.graphql | 17 + .../graphql/issue_set_title.mutation.graphql | 8 + app/assets/javascripts/boards/index.js | 46 +- .../boards/mixins/sortable_default_options.js | 2 +- app/assets/javascripts/boards/models/issue.js | 2 +- app/assets/javascripts/boards/models/list.js | 4 +- .../boards/mount_multiple_boards_switcher.js | 9 +- .../javascripts/boards/stores/actions.js | 103 +- .../javascripts/boards/stores/boards_store.js | 145 +- .../javascripts/boards/stores/getters.js | 18 +- .../javascripts/boards/stores/modal_store.js | 10 +- .../boards/stores/mutation_types.js | 4 + .../javascripts/boards/stores/mutations.js | 40 +- app/assets/javascripts/boards/stores/state.js | 8 +- .../javascripts/branches/divergence_graph.js | 2 +- app/assets/javascripts/breadcrumb.js | 12 +- .../javascripts/broadcast_notification.js | 2 +- app/assets/javascripts/build_artifacts.js | 10 +- .../ci_lint/components/ci_lint.vue | 2 +- .../components/triggers_list.vue | 10 +- .../ci_settings_pipeline_triggers/index.js | 2 +- .../ci_variable_list/ci_variable_list.js | 21 +- .../components/ci_environments_dropdown.vue | 2 +- .../components/ci_variable_table.vue | 2 +- .../ci_variable_list/store/actions.js | 8 +- .../ci_variable_list/store/getters.js | 4 +- .../ci_variable_list/store/utils.js | 8 +- app/assets/javascripts/clone_panel.js | 2 +- .../javascripts/clusters/clusters_bundle.js | 28 +- .../clusters/components/applications.vue | 2 +- .../components/fluentd_output_settings.vue | 2 +- .../clusters/forms/stores/index.js | 2 +- .../clusters/stores/clusters_store.js | 6 +- .../clusters/stores/new_cluster/index.js | 2 +- .../components/ancestor_notice.vue | 35 +- .../clusters_list/components/clusters.vue | 12 +- .../clusters_list/load_clusters.js | 2 +- .../clusters_list/store/actions.js | 8 +- .../javascripts/clusters_list/store/index.js | 2 +- .../javascripts/code_navigation/index.js | 2 +- .../code_navigation/store/actions.js | 2 +- .../code_navigation/utils/index.js | 4 +- app/assets/javascripts/commit/image_file.js | 20 +- .../commit/pipelines/pipelines_bundle.js | 2 +- .../javascripts/commit_merge_requests.js | 4 +- app/assets/javascripts/commits.js | 5 +- app/assets/javascripts/commons/bootstrap.js | 8 +- .../commons/nav/user_merge_requests.js | 32 +- .../javascripts/compare_autocomplete.js | 10 +- .../components/project_form_group.vue | 4 +- .../javascripts/confirm_danger_modal.js | 2 +- app/assets/javascripts/confirm_modal.js | 2 +- app/assets/javascripts/contextual_sidebar.js | 5 +- .../contributors/components/contributors.vue | 12 +- .../contributors/stores/actions.js | 4 +- .../contributors/stores/getters.js | 4 +- app/assets/javascripts/contributors/utils.js | 4 +- .../components/cluster_form_dropdown.vue | 8 +- .../create_cluster/eks_cluster/index.js | 2 +- .../services/aws_services_facade.js | 2 +- .../eks_cluster/store/actions.js | 4 +- .../create_cluster/eks_cluster/store/state.js | 2 +- .../components/gke_dropdown_mixin.js | 4 +- .../components/gke_machine_type_dropdown.vue | 4 +- .../components/gke_project_id_dropdown.vue | 10 +- .../components/gke_zone_dropdown.vue | 4 +- .../create_cluster/gke_cluster/gapi_loader.js | 24 + .../create_cluster/gke_cluster/index.js | 18 +- .../gke_cluster/store/actions.js | 89 +- .../gke_cluster/store/getters.js | 6 +- .../gke_cluster_namespace/index.js | 2 +- .../create_cluster/init_create_cluster.js | 14 +- .../store/cluster_dropdown/actions.js | 6 +- .../javascripts/create_item_dropdown.js | 4 +- app/assets/javascripts/create_label.js | 18 +- .../create_merge_request_dropdown.js | 8 +- .../components/custom_metrics_form_fields.vue | 6 +- .../javascripts/custom_metrics/constants.js | 4 +- .../components/total_time_component.vue | 4 +- .../cycle_analytics/cycle_analytics_bundle.js | 6 +- .../cycle_analytics_service.js | 4 +- .../cycle_analytics/cycle_analytics_store.js | 10 +- .../deploy_freeze/store/actions.js | 2 +- .../javascripts/deploy_freeze/store/index.js | 2 +- .../deploy_freeze/store/mutations.js | 4 +- .../deploy_keys/components/app.vue | 4 +- .../deploy_keys/components/key.vue | 2 +- .../javascripts/deploy_keys/service/index.js | 6 +- .../javascripts/deploy_keys/store/index.js | 2 +- .../deprecated_jquery_dropdown/gl_dropdown.js | 43 +- .../gl_dropdown_filter.js | 17 +- .../gl_dropdown_input.js | 16 +- .../gl_dropdown_remote.js | 2 +- .../deprecated_jquery_dropdown/index.js | 2 +- .../components/design_destroyer.vue | 19 +- .../design_notes/design_discussion.vue | 2 +- .../design_notes/design_reply_form.vue | 6 +- .../components/design_presentation.vue | 2 +- .../components/design_sidebar.vue | 20 +- .../components/design_todo_button.vue | 23 +- .../components/toolbar/design_navigation.vue | 2 +- .../components/toolbar/index.vue | 18 +- .../upload/design_version_dropdown.vue | 2 +- .../javascripts/design_management/graphql.js | 4 +- .../design_management/mixins/all_designs.js | 2 +- .../design_management/mixins/all_versions.js | 4 +- .../design_management/pages/design/index.vue | 62 +- .../design_management/pages/index.vue | 27 +- .../design_management/router/routes.js | 8 +- .../design_management/utils/cache_update.js | 28 +- .../utils/design_management_utils.js | 36 +- .../design_management/utils/error_messages.js | 4 +- app/assets/javascripts/diff.js | 8 +- .../javascripts/diffs/components/app.vue | 74 +- .../diffs/components/commit_item.vue | 11 +- .../components/compare_dropdown_layout.vue | 2 +- .../diffs/components/compare_versions.vue | 27 +- .../diffs/components/diff_content.vue | 2 +- .../diffs/components/diff_expansion_cell.vue | 4 +- .../diffs/components/diff_file.vue | 9 +- .../diffs/components/diff_gutter_avatars.vue | 2 +- .../diffs/components/diff_line_note_form.vue | 11 +- .../javascripts/diffs/components/diff_row.vue | 268 +- .../diffs/components/diff_row_utils.js | 26 +- .../diffs/components/diff_view.vue | 39 +- .../components/inline_diff_table_row.vue | 7 +- .../diffs/components/inline_diff_view.vue | 6 +- .../diffs/components/no_changes.vue | 42 +- .../components/parallel_diff_table_row.vue | 30 +- .../diffs/components/parallel_diff_view.vue | 8 +- .../diffs/components/tree_list.vue | 2 +- app/assets/javascripts/diffs/constants.js | 6 + app/assets/javascripts/diffs/index.js | 11 +- app/assets/javascripts/diffs/store/actions.js | 65 +- app/assets/javascripts/diffs/store/getters.js | 68 +- .../diffs/store/getters_versions_dropdowns.js | 28 +- .../diffs/store/modules/diff_state.js | 2 + .../javascripts/diffs/store/mutation_types.js | 2 + .../javascripts/diffs/store/mutations.js | 57 +- app/assets/javascripts/diffs/store/utils.js | 97 +- .../javascripts/diffs/utils/diff_file.js | 15 +- .../javascripts/diffs/utils/file_reviews.js | 61 + .../javascripts/diffs/utils/merge_request.js | 20 + app/assets/javascripts/diffs/utils/uuids.js | 4 +- .../javascripts/diffs/workers/tree_worker.js | 2 +- .../dirty_submit/dirty_submit_collection.js | 2 +- .../dirty_submit/dirty_submit_form.js | 8 +- app/assets/javascripts/droplab/drop_down.js | 4 +- app/assets/javascripts/droplab/drop_lab.js | 10 +- app/assets/javascripts/droplab/hook_button.js | 4 +- app/assets/javascripts/droplab/hook_input.js | 4 +- app/assets/javascripts/droplab/keyboard.js | 2 +- .../javascripts/droplab/plugins/ajax.js | 4 +- .../droplab/plugins/ajax_filter.js | 8 +- .../javascripts/droplab/plugins/filter.js | 10 +- .../droplab/plugins/input_setter.js | 2 +- app/assets/javascripts/droplab/utils.js | 7 +- app/assets/javascripts/dropzone_input.js | 36 +- app/assets/javascripts/due_date_select.js | 20 +- app/assets/javascripts/editor/constants.js | 9 + app/assets/javascripts/editor/editor_lite.js | 28 +- .../editor/extensions/editor_ci_schema_ext.js | 38 + .../editor_file_template_ext.js | 0 .../editor_lite_extension_base.js | 2 +- .../{ => extensions}/editor_markdown_ext.js | 2 +- app/assets/javascripts/editor/utils.js | 2 +- app/assets/javascripts/emoji/index.js | 27 +- .../javascripts/emoji/no_emoji_validator.js | 2 +- .../support/is_emoji_unicode_supported.js | 4 +- .../emoji/support/unicode_support_map.js | 8 +- .../components/canary_ingress.vue | 109 + .../components/canary_update_modal.vue | 133 + .../environments/components/container.vue | 12 - .../environments/components/deploy_board.vue | 216 + .../components/environment_item.vue | 2 +- .../components/environment_rollback.vue | 2 +- .../components/environments_app.vue | 16 +- .../components/environments_table.vue | 40 +- .../javascripts/environments/constants.js | 40 + .../folder/environments_folder_bundle.js | 3 - .../folder/environments_folder_view.vue | 12 - .../update_canary_ingress.mutation.graphql | 5 + app/assets/javascripts/environments/index.js | 3 - .../mixins/canary_callout_mixin.js | 26 - .../environments/mixins/environments_mixin.js | 10 +- .../environments/stores/environments_store.js | 26 +- .../environments/stores/helpers.js | 21 +- .../components/error_details.vue | 4 +- .../components/stacktrace_entry.vue | 4 +- .../error_tracking/store/actions.js | 2 +- .../error_tracking/store/details/actions.js | 2 +- .../error_tracking/store/details/getters.js | 2 +- .../error_tracking/store/list/mutations.js | 4 +- .../javascripts/error_tracking/utils.js | 4 +- .../error_tracking_settings/store/actions.js | 2 +- .../error_tracking_settings/store/getters.js | 8 +- .../store/mutations.js | 2 +- .../error_tracking_settings/utils.js | 2 +- app/assets/javascripts/experimental_flags.js | 2 +- .../configure_feature_flags_modal.vue | 14 +- .../components/edit_feature_flag.vue | 26 +- .../components/environments_dropdown.vue | 17 +- .../components/feature_flags.vue | 2 +- .../components/feature_flags_tab.vue | 2 +- .../components/feature_flags_table.vue | 33 +- .../feature_flags/components/form.vue | 40 +- .../components/new_feature_flag.vue | 2 +- .../feature_flags/components/strategy.vue | 8 +- .../components/strategy_parameters.vue | 2 +- .../feature_flags/store/edit/actions.js | 2 +- .../feature_flags/store/edit/index.js | 2 +- .../store/gitlab_user_list/actions.js | 4 +- .../store/gitlab_user_list/index.js | 2 +- .../feature_flags/store/helpers.js | 34 +- .../feature_flags/store/index/actions.js | 6 +- .../feature_flags/store/index/index.js | 2 +- .../feature_flags/store/index/mutations.js | 11 +- .../feature_flags/store/new/actions.js | 2 +- .../feature_flags/store/new/index.js | 2 +- app/assets/javascripts/feature_flags/utils.js | 2 +- .../feature_highlight/feature_highlight.js | 2 +- .../feature_highlight_helper.js | 2 +- app/assets/javascripts/file_pickers.js | 2 +- .../javascripts/files_comment_button.js | 4 +- app/assets/javascripts/filterable_list.js | 2 +- .../available_dropdown_mappings.js | 11 +- .../recent_searches_dropdown_content.vue | 6 +- .../filtered_search/dropdown_ajax_filter.js | 2 +- .../filtered_search/dropdown_emoji.js | 4 +- .../filtered_search/dropdown_hint.js | 2 +- .../filtered_search/dropdown_non_user.js | 2 +- .../filtered_search/dropdown_utils.js | 12 +- .../filtered_search_dropdown.js | 6 +- .../filtered_search_dropdown_manager.js | 2 +- .../filtered_search_manager.js | 28 +- .../filtered_search_token_keys.js | 21 +- .../filtered_search_visual_tokens.js | 9 +- .../issuable_filtered_search_token_keys.js | 2 +- .../stores/recent_searches_store.js | 2 +- .../filtered_search/visual_token_value.js | 10 +- app/assets/javascripts/flash.js | 10 +- app/assets/javascripts/fly_out_nav.js | 22 +- .../frequent_items/components/app.vue | 2 +- .../javascripts/frequent_items/index.js | 2 +- .../frequent_items/store/actions.js | 10 +- .../frequent_items/store/getters.js | 2 +- .../frequent_items/store/mutations.js | 2 +- .../javascripts/frequent_items/utils.js | 8 +- app/assets/javascripts/gfm_auto_complete.js | 51 +- app/assets/javascripts/gl_field_errors.js | 8 +- app/assets/javascripts/gl_form.js | 11 +- app/assets/javascripts/gpg_badges.js | 2 +- .../grafana_integration/store/actions.js | 2 +- .../grafana_integration/store/index.js | 2 +- .../fragments/alert.fragment.graphql} | 0 .../fragments/alert_note.fragment.graphql | 0 .../update_alert_status.mutation.graphql | 2 +- .../queries/get_alerts.query.graphql | 2 +- .../javascripts/graphql_shared/utils.js | 2 +- app/assets/javascripts/group.js | 14 +- .../components/shared_runners_form.vue | 2 +- .../javascripts/groups/components/app.vue | 20 +- .../groups/components/group_item.vue | 2 +- .../components/visibility_level_dropdown.vue | 2 +- .../groups/groups_filterable_list.js | 5 +- .../groups/init_invite_members_banner.js | 2 +- .../groups/members/components/app.vue | 4 +- .../javascripts/groups/members/index.js | 2 +- .../javascripts/groups/members/utils.js | 2 +- .../javascripts/groups/store/groups_store.js | 12 +- .../javascripts/groups/transfer_dropdown.js | 6 +- app/assets/javascripts/groups_select.js | 6 +- .../javascripts/helpers/event_hub_factory.js | 4 +- .../javascripts/helpers/help_page_helper.js | 21 + .../javascripts/helpers/monitor_helper.js | 4 +- .../javascripts/helpers/startup_css_helper.js | 6 +- app/assets/javascripts/ide/commit_icon.js | 2 +- .../components/commit_sidebar/list_item.vue | 2 +- .../components/commit_sidebar/radio_group.vue | 1 + .../ide/components/file_templates/bar.vue | 2 +- .../components/file_templates/dropdown.vue | 2 +- app/assets/javascripts/ide/components/ide.vue | 2 +- .../ide/components/ide_sidebar_nav.vue | 2 +- .../ide/components/nav_dropdown.vue | 4 +- .../ide/components/new_dropdown/upload.vue | 14 +- .../components/panes/collapsible_sidebar.vue | 6 +- .../ide/components/preview/clientside.vue | 42 +- .../ide/components/preview/navigator.vue | 2 +- .../ide/components/repo_commit_section.vue | 4 +- .../ide/components/repo_editor.vue | 19 +- app/assets/javascripts/ide/constants.js | 3 + app/assets/javascripts/ide/ide_router.js | 10 +- app/assets/javascripts/ide/index.js | 4 + .../javascripts/ide/lib/common/disposable.js | 4 +- .../javascripts/ide/lib/common/model.js | 4 +- app/assets/javascripts/ide/lib/create_diff.js | 16 +- .../javascripts/ide/lib/create_file_diff.js | 10 +- .../ide/lib/decorations/controller.js | 2 +- .../javascripts/ide/lib/diff/controller.js | 6 +- app/assets/javascripts/ide/lib/diff/diff.js | 2 +- .../javascripts/ide/lib/diff/diff_worker.js | 2 +- app/assets/javascripts/ide/lib/editor.js | 12 +- .../javascripts/ide/lib/editor_options.js | 4 +- .../ide/lib/editorconfig/parser.js | 13 +- .../ide/lib/editorconfig/rules_mapper.js | 12 +- app/assets/javascripts/ide/lib/errors.js | 14 +- app/assets/javascripts/ide/lib/files.js | 21 +- .../javascripts/ide/lib/languages/hcl.js | 14 +- .../javascripts/ide/lib/languages/vue.js | 8 +- app/assets/javascripts/ide/lib/mirror.js | 26 +- app/assets/javascripts/ide/services/index.js | 11 +- .../javascripts/ide/services/terminals.js | 2 +- app/assets/javascripts/ide/stores/actions.js | 17 +- .../javascripts/ide/stores/actions/file.js | 47 +- .../ide/stores/actions/merge_request.js | 18 +- .../javascripts/ide/stores/actions/project.js | 15 +- .../javascripts/ide/stores/actions/tree.js | 4 +- app/assets/javascripts/ide/stores/extend.js | 2 +- app/assets/javascripts/ide/stores/getters.js | 66 +- .../ide/stores/modules/branches/actions.js | 2 +- .../ide/stores/modules/branches/mutations.js | 2 +- .../ide/stores/modules/commit/actions.js | 41 +- .../ide/stores/modules/commit/getters.js | 10 +- .../ide/stores/modules/editor/setup.js | 15 +- .../stores/modules/file_templates/actions.js | 2 +- .../stores/modules/file_templates/getters.js | 4 +- .../stores/modules/merge_requests/actions.js | 2 +- .../modules/merge_requests/mutations.js | 2 +- .../ide/stores/modules/pane/getters.js | 2 +- .../ide/stores/modules/pipelines/actions.js | 6 +- .../ide/stores/modules/pipelines/getters.js | 19 +- .../ide/stores/modules/pipelines/mutations.js | 10 +- .../ide/stores/modules/pipelines/utils.js | 2 +- .../stores/modules/terminal/actions/checks.js | 4 +- .../terminal/actions/session_controls.js | 6 +- .../terminal/actions/session_status.js | 2 +- .../ide/stores/modules/terminal/getters.js | 6 +- .../ide/stores/modules/terminal/messages.js | 2 +- .../ide/stores/modules/terminal/utils.js | 6 +- .../stores/modules/terminal_sync/actions.js | 4 +- .../javascripts/ide/stores/mutations.js | 12 +- .../javascripts/ide/stores/mutations/file.js | 46 +- .../javascripts/ide/stores/mutations/tree.js | 2 +- .../ide/stores/plugins/terminal.js | 2 +- .../ide/stores/plugins/terminal_sync.js | 20 +- app/assets/javascripts/ide/stores/utils.js | 34 +- .../javascripts/ide/sync_router_and_store.js | 8 +- app/assets/javascripts/ide/utils.js | 33 +- .../image_diff/helpers/badge_helper.js | 2 +- .../image_diff/init_discussion_tab.js | 2 +- .../image_diff/replaced_image_diff.js | 4 +- .../javascripts/image_diff/view_types.js | 2 +- .../import_groups/components/import_table.vue | 2 +- .../components/import_table_row.vue | 2 +- .../import_groups/graphql/client_factory.js | 8 +- .../graphql/services/source_groups_manager.js | 2 +- .../graphql/services/status_poller.js | 6 +- .../components/import_projects_table.vue | 19 +- .../import_projects/store/actions.js | 14 +- .../import_projects/store/getters.js | 24 +- .../import_projects/store/mutations.js | 22 +- .../import_entities/import_projects/utils.js | 6 + .../incidents/components/incidents_list.vue | 4 +- app/assets/javascripts/incidents/list.js | 6 +- .../javascripts/init_changes_dropdown.js | 2 +- .../edit/components/dynamic_field.vue | 2 +- .../edit/components/integration_form.vue | 5 - .../edit/components/jira_trigger_fields.vue | 4 + .../edit/components/override_dropdown.vue | 2 +- .../integrations/edit/store/getters.js | 4 +- .../integrations/integration_settings_form.js | 7 +- .../invite_member/init_invite_member_modal.js | 2 +- .../init_invite_member_trigger.js | 2 +- .../components/invite_members_modal.vue | 59 +- .../components/invite_members_trigger.vue | 7 +- .../components/members_token_select.vue | 37 +- .../init_invite_members_modal.js | 4 +- .../init_invite_members_trigger.js | 2 +- .../issuable/auto_width_dropdown_select.js | 5 +- .../issuable_bulk_update_actions.js | 4 +- .../issuable_bulk_update_sidebar.js | 8 +- app/assets/javascripts/issuable_context.js | 2 +- app/assets/javascripts/issuable_form.js | 20 +- app/assets/javascripts/issuable_index.js | 6 +- .../components/issuable_list_root.vue | 2 +- .../components/issuable_edit_form.vue | 3 +- .../issuable_suggestions/components/app.vue | 2 +- .../javascripts/issuable_suggestions/index.js | 2 +- app/assets/javascripts/issue.js | 10 +- .../javascripts/issue_show/components/app.vue | 18 +- .../components/fields/description.vue | 10 +- .../fields/description_template.vue | 2 +- .../components/incidents/incident_tabs.vue | 12 +- app/assets/javascripts/issue_show/incident.js | 17 +- app/assets/javascripts/issue_show/issue.js | 2 +- .../issue_show/utils/parse_data.js | 2 +- .../issues_list/components/issuable.vue | 4 +- .../components/issuables_list_app.vue | 8 +- app/assets/javascripts/issues_list/index.js | 2 +- app/assets/javascripts/jira_connect/api.js | 33 + .../jira_connect/components/app.vue | 57 +- .../jira_connect/components/groups_list.vue | 88 + .../components/groups_list_item.vue | 42 + .../javascripts/jira_connect/constants.js | 1 + app/assets/javascripts/jira_connect/index.js | 95 +- .../javascripts/jira_connect/store/index.js | 9 + .../jira_connect/store/mutation_types.js | 1 + .../jira_connect/store/mutations.js | 7 + .../javascripts/jira_connect/store/state.js | 3 + .../components/jira_import_form.vue | 4 +- .../jira_import/utils/cache_update.js | 2 +- .../jira_import/utils/jira_import_utils.js | 14 +- .../javascripts/jobs/components/job_app.vue | 2 +- .../job_retry_forward_deployment_modal.vue | 10 +- .../javascripts/jobs/components/log/line.vue | 4 +- .../jobs/components/manual_variables_form.vue | 5 +- .../jobs/components/stages_dropdown.vue | 5 +- .../jobs/components/trigger_block.vue | 2 +- app/assets/javascripts/jobs/store/actions.js | 8 +- app/assets/javascripts/jobs/store/getters.js | 24 +- app/assets/javascripts/jobs/store/utils.js | 4 +- app/assets/javascripts/label_manager.js | 2 +- app/assets/javascripts/labels_select.js | 35 +- app/assets/javascripts/lazy_loader.js | 10 +- .../javascripts/lib/chrome_84_icon_fix.js | 4 +- app/assets/javascripts/lib/dompurify.js | 8 +- app/assets/javascripts/lib/graphql.js | 4 +- .../javascripts/lib/utils/ajax_cache.js | 2 +- .../lib/utils/apollo_startup_js_link.js | 16 +- app/assets/javascripts/lib/utils/autosave.js | 4 +- .../lib/utils/axios_startup_calls.js | 8 +- .../javascripts/lib/utils/axios_utils.js | 10 +- .../lib/utils/bootstrap_linked_tabs.js | 2 +- .../javascripts/lib/utils/chart_utils.js | 4 +- .../javascripts/lib/utils/color_utils.js | 4 +- .../javascripts/lib/utils/common_utils.js | 168 +- app/assets/javascripts/lib/utils/css_utils.js | 2 +- .../javascripts/lib/utils/datetime_range.js | 18 +- .../javascripts/lib/utils/datetime_utility.js | 129 +- app/assets/javascripts/lib/utils/dom_utils.js | 6 +- app/assets/javascripts/lib/utils/favicon.js | 30 + .../javascripts/lib/utils/favicon_ci.js | 16 + app/assets/javascripts/lib/utils/forms.js | 12 +- app/assets/javascripts/lib/utils/grammar.js | 6 +- app/assets/javascripts/lib/utils/headers.js | 3 + .../javascripts/lib/utils/icon_utils.js | 6 +- app/assets/javascripts/lib/utils/notify.js | 2 +- .../javascripts/lib/utils/number_utils.js | 2 +- app/assets/javascripts/lib/utils/poll.js | 4 +- .../lib/utils/poll_until_complete.js | 2 +- app/assets/javascripts/lib/utils/set.js | 2 +- .../javascripts/lib/utils/simple_poll.js | 2 +- app/assets/javascripts/lib/utils/sticky.js | 2 +- .../javascripts/lib/utils/text_markdown.js | 16 +- .../javascripts/lib/utils/text_utility.js | 28 +- .../javascripts/lib/utils/type_utility.js | 2 +- .../utils/unit_format/formatter_factory.js | 4 +- .../javascripts/lib/utils/url_utility.js | 16 +- .../javascripts/lib/utils/users_cache.js | 8 +- app/assets/javascripts/line_highlighter.js | 42 +- .../javascripts/locale/ensure_single_line.js | 2 +- app/assets/javascripts/locale/index.js | 4 +- app/assets/javascripts/locale/sprintf.js | 2 +- .../logs/components/environment_logs.vue | 8 +- .../logs/components/log_advanced_filters.vue | 2 +- .../javascripts/logs/logs_tracking_helper.js | 2 +- app/assets/javascripts/logs/stores/actions.js | 8 +- app/assets/javascripts/logs/stores/getters.js | 4 +- app/assets/javascripts/logs/utils.js | 2 +- app/assets/javascripts/main.js | 22 +- app/assets/javascripts/manual_ordering.js | 2 +- .../javascripts/member_expiration_date.js | 8 +- app/assets/javascripts/members.js | 10 +- .../access_request_action_buttons.vue | 4 +- .../action_buttons/invite_action_buttons.vue | 2 +- .../action_buttons/user_action_buttons.vue | 4 +- .../components/avatars/user_avatar.vue | 2 +- .../members_filtered_search_bar.vue | 6 +- .../components/filter_sort/sort_dropdown.vue | 24 +- .../members/components/modals/leave_modal.vue | 4 +- .../components/table/member_source.vue | 2 +- .../components/table/members_table.vue | 43 +- app/assets/javascripts/members/constants.js | 2 +- app/assets/javascripts/members/store/index.js | 2 +- app/assets/javascripts/members/store/utils.js | 3 +- app/assets/javascripts/members/utils.js | 12 +- .../components/diff_file_editor.js | 33 +- .../components/inline_conflict_lines.js | 2 +- .../components/parallel_conflict_lines.js | 2 +- .../merge_conflicts/merge_conflict_store.js | 28 +- app/assets/javascripts/merge_request.js | 34 +- .../merge_request/components/status_box.vue | 69 + .../javascripts/merge_request/eventhub.js | 3 + app/assets/javascripts/merge_request_tabs.js | 18 +- app/assets/javascripts/milestone.js | 2 +- app/assets/javascripts/milestone_select.js | 14 +- .../components/milestone_combobox.vue | 2 +- .../javascripts/milestones/stores/actions.js | 16 +- .../milestones/stores/mutations.js | 2 +- .../mini_pipeline_graph_dropdown.js | 8 +- .../javascripts/mirrors/mirror_repos.js | 2 +- app/assets/javascripts/mirrors/ssh_mirror.js | 12 +- .../monitoring/components/alert_widget.vue | 26 +- .../components/alert_widget_form.vue | 4 +- .../components/charts/annotations.js | 4 +- .../monitoring/components/charts/anomaly.vue | 23 +- .../monitoring/components/charts/bar.vue | 4 +- .../monitoring/components/charts/column.vue | 2 +- .../monitoring/components/charts/heatmap.vue | 4 +- .../monitoring/components/charts/options.js | 12 +- .../components/charts/stacked_column.vue | 10 +- .../components/charts/time_series.vue | 8 +- .../components/dashboard_actions_menu.vue | 12 +- .../monitoring/components/dashboard_panel.vue | 10 +- .../components/dashboard_panel_builder.vue | 2 +- .../components/duplicate_dashboard_form.vue | 2 +- .../components/duplicate_dashboard_modal.vue | 4 +- .../components/embeds/embed_group.vue | 2 +- .../components/embeds/metric_embed.vue | 2 +- .../monitoring/components/empty_state.vue | 2 +- .../components/variables/dropdown_field.vue | 2 +- .../javascripts/monitoring/csv_export.js | 14 +- .../javascripts/monitoring/requests/index.js | 14 +- .../monitoring/services/alerts_service.js | 10 +- .../javascripts/monitoring/stores/actions.js | 54 +- .../monitoring/stores/embed_group/getters.js | 2 +- .../javascripts/monitoring/stores/getters.js | 38 +- .../monitoring/stores/mutations.js | 16 +- .../javascripts/monitoring/stores/utils.js | 28 +- .../monitoring/stores/variable_mapping.js | 18 +- app/assets/javascripts/monitoring/utils.js | 24 +- .../javascripts/monitoring/validators.js | 6 +- app/assets/javascripts/mr_notes/init_notes.js | 2 +- .../javascripts/mr_notes/stores/getters.js | 2 +- .../mr_popover/components/mr_popover.vue | 2 +- app/assets/javascripts/mr_popover/index.js | 4 +- app/assets/javascripts/namespace_select.js | 2 +- .../javascripts/network/branch_graph.js | 8 +- app/assets/javascripts/new_branch_form.js | 6 +- .../javascripts/notebook/cells/markdown.vue | 4 +- .../notebook/cells/output/index.vue | 5 + .../notebook/cells/output/latex.vue | 45 + app/assets/javascripts/notes.js | 68 +- .../notes/components/comment_field_layout.vue | 69 + .../notes/components/comment_form.vue | 81 +- .../notes/components/diff_with_note.vue | 2 +- .../notes/components/discussion_actions.vue | 19 +- .../notes/components/discussion_counter.vue | 6 +- .../notes/components/discussion_filter.vue | 2 +- .../discussion_jump_to_next_button.vue | 38 - .../components/email_participants_warning.vue | 70 + .../components/multiline_comment_form.vue | 7 +- .../components/multiline_comment_utils.js | 10 +- .../notes/components/note_actions.vue | 4 +- .../notes/components/note_body.vue | 16 +- .../notes/components/note_form.vue | 96 +- .../notes/components/noteable_discussion.vue | 4 +- .../notes/components/noteable_note.vue | 2 +- .../notes/components/notes_app.vue | 4 +- .../notes/components/timeline_toggle.vue | 1 - .../components/toggle_replies_widget.vue | 4 +- .../javascripts/notes/discussion_filters.js | 4 +- .../notes/mixins/diff_line_note_form.js | 6 +- .../notes/mixins/discussion_navigation.js | 2 +- .../notes/mixins/issuable_state.js | 11 - .../javascripts/notes/mixins/resolvable.js | 2 +- .../javascripts/notes/sort_discussions.js | 2 +- .../javascripts/notes/stores/actions.js | 41 +- .../notes/stores/collapse_utils.js | 4 +- .../javascripts/notes/stores/getters.js | 96 +- .../javascripts/notes/stores/modules/index.js | 2 +- .../javascripts/notes/stores/mutations.js | 24 +- app/assets/javascripts/notes/stores/utils.js | 14 +- app/assets/javascripts/notes/utils.js | 2 +- .../javascripts/notifications_dropdown.js | 10 +- .../javascripts/onboarding_issues/index.js | 4 +- .../operation_settings/store/actions.js | 2 +- .../operation_settings/store/index.js | 2 +- .../details/components/package_files.vue | 8 +- .../list/components/packages_list.vue | 8 +- .../list/components/packages_list_app.vue | 14 +- .../list/components/packages_sort.vue | 8 +- .../packages/list/stores/getters.js | 4 +- app/assets/javascripts/packages/list/utils.js | 3 +- .../shared/components/package_tags.vue | 2 +- .../javascripts/packages/shared/utils.js | 6 +- .../settings/group/bundle.js | 20 + .../group/components/group_settings_app.vue | 9 + .../settings/group/graphql/index.js | 14 + app/assets/javascripts/pages/admin/admin.js | 6 +- .../application_settings/payload_previewer.js | 2 +- .../broadcast_messages/broadcast_message.js | 2 +- .../jobs/index/components/stop_jobs_modal.vue | 4 +- .../javascripts/pages/admin/projects/index.js | 2 +- .../pages/admin/projects/index/index.js | 2 +- .../javascripts/pages/admin/users/index.js | 2 +- .../pages/admin/users/new/index.js | 2 +- .../components/customize_homepage_banner.vue | 2 +- .../index/init_customize_homepage_banner.js | 2 +- .../pages/dashboard/todos/index/todos.js | 2 +- .../pages/groups/group_members/index.js | 6 +- .../javascripts/pages/groups/issues/index.js | 1 + .../pages/groups/new/group_path_validator.js | 6 +- .../settings/packages_and_registries/index.js | 3 + .../pages/groups/shared/group_tabs.js | 4 +- .../components/delete_milestone_modal.vue | 4 +- .../components/promote_milestone_modal.vue | 99 +- .../shared/delete_milestone_modal_init.js | 4 +- .../shared/promote_milestone_modal_init.js | 85 +- .../javascripts/pages/profiles/index.js | 2 +- .../javascripts/pages/profiles/show/index.js | 2 +- .../pages/projects/blob/show/index.js | 2 +- .../pages/projects/commit/show/index.js | 4 + .../javascripts/pages/projects/edit/index.js | 3 + .../projects/edit/mount_search_settings.js | 12 + .../forks/new/components/fork_groups_list.vue | 6 +- .../pages/projects/graphs/charts/index.js | 4 +- .../graphs/components/code_coverage.vue | 6 +- .../javascripts/pages/projects/init_form.js | 2 +- .../issues/service_desk/filtered_search.js | 2 +- .../javascripts/pages/projects/issues/show.js | 4 +- .../pages/projects/jobs/index/index.js | 4 +- .../labels/components/promote_label_modal.vue | 4 +- .../pages/projects/labels/index/index.js | 7 +- .../pages/projects/labels/new/index.js | 3 +- .../merge_requests/creations/new/compare.js | 12 +- .../merge_requests/init_merge_request_show.js | 17 +- .../javascripts/pages/projects/new/index.js | 2 +- .../pages/projects/pages_domains/form.js | 6 +- .../pipeline_schedules/index/index.js | 6 +- .../components/interval_pattern_input.vue | 2 +- .../components/target_branch_dropdown.js | 8 +- .../shared/components/timezone_dropdown.js | 12 +- .../pages/projects/pipelines/charts/index.js | 2 +- .../projects/pipelines/init_pipelines.js | 2 +- .../pages/projects/pipelines/new/index.js | 22 +- .../javascripts/pages/projects/project.js | 30 +- .../pages/projects/project_members/index.js | 6 +- .../projects/settings/ci_cd/show/index.js | 4 +- .../components/project_feature_setting.vue | 6 + .../permissions/components/settings_panel.vue | 97 +- .../projects/shared/permissions/external.js | 2 +- .../projects/shared/permissions/index.js | 2 +- .../pages/projects/tags/index/index.js | 7 +- .../pages/search/show/refresh_counts.js | 2 +- .../javascripts/pages/search/show/search.js | 13 +- .../pages/sessions/new/length_validator.js | 2 +- .../sessions/new/preserve_url_fragment.js | 4 +- .../sessions/new/signin_tabs_memoizer.js | 2 +- .../pages/sessions/new/username_validator.js | 6 +- .../pages/shared/mount_badge_settings.js | 2 +- .../javascripts/pages/shared/wikis/wikis.js | 34 +- .../pages/users/activity_calendar.js | 29 +- app/assets/javascripts/pages/users/index.js | 6 +- .../javascripts/pages/users/user_tabs.js | 20 +- app/assets/javascripts/pdf/index.vue | 4 +- app/assets/javascripts/pdf/page/index.vue | 2 +- app/assets/javascripts/performance/utils.js | 2 +- .../components/detailed_metric.vue | 6 +- .../components/request_selector.vue | 2 +- .../javascripts/performance_bar/index.js | 29 +- .../performance_bar/performance_bar_log.js | 6 +- .../services/performance_bar_service.js | 2 +- .../stores/performance_bar_store.js | 6 +- .../javascripts/persistent_user_callout.js | 6 +- .../javascripts/persistent_user_callouts.js | 2 +- .../components/info/validation_segment.vue | 84 + .../components/lint/ci_lint.vue | 53 + .../components/lint/ci_lint_results.vue | 18 +- .../components/lint/ci_lint_results_value.vue | 40 +- .../components/text_editor.vue | 34 +- .../components/ui/editor_tab.vue | 68 + .../mutations/commit_ci_file.mutation.graphql | 2 +- .../mutations/lint_ci.mutation.graphql | 2 +- .../graphql/queries/ci_config.graphql | 6 +- .../pipeline_editor/graphql/resolvers.js | 4 +- .../javascripts/pipeline_editor/index.js | 25 +- .../pipeline_editor/pipeline_editor_app.vue | 166 +- .../components/pipeline_new_form.vue | 29 +- .../pipeline_new/utils/format_refs.js | 2 +- app/assets/javascripts/pipelines.js | 2 +- .../pipelines/components/dag/dag.vue | 6 +- .../pipelines/components/dag/dag_graph.vue | 18 +- .../pipelines/components/dag/drawing_utils.js | 4 +- .../pipelines/components/dag/interactions.js | 28 +- .../components/graph/action_component.vue | 8 +- .../components/graph/graph_component.vue | 78 +- .../graph/graph_component_legacy.vue | 8 +- .../graph/graph_component_wrapper.vue | 8 +- .../components/graph/job_group_dropdown.vue | 14 +- .../pipelines/components/graph/job_item.vue | 16 +- .../components/graph/linked_pipeline.vue | 11 +- .../graph/linked_pipelines_column.vue | 15 +- .../graph/linked_pipelines_column_legacy.vue | 4 + .../graph/stage_column_component.vue | 41 +- .../graph/stage_column_component_legacy.vue | 4 + .../pipelines/components/graph/utils.js | 12 +- .../drawing_utils.js | 37 +- .../components/graph_shared/links_inner.vue | 140 + .../components/graph_shared/links_layer.vue | 86 + .../graph_shared/main_graph_wrapper.vue | 7 +- .../pipelines/components/header_component.vue | 2 +- .../pipelines/components/parsing_utils.js | 24 +- .../pipeline_graph/pipeline_graph.vue | 114 +- .../components/pipelines_list/empty_state.vue | 54 +- .../pipelines_list/pipeline_url.vue | 68 +- .../components/pipelines_list/pipelines.vue | 4 +- .../pipelines_list/pipelines_artifacts.vue | 52 +- .../pipelines_filtered_search.vue | 2 +- .../pipelines_list/pipelines_table_row.vue | 1 - .../components/pipelines_list/stage.vue | 2 +- .../tokens/pipeline_branch_name_token.vue | 4 +- .../tokens/pipeline_status_token.vue | 2 +- .../tokens/pipeline_tag_name_token.vue | 4 +- .../tokens/pipeline_trigger_author_token.vue | 8 +- .../pipelines/components/unwrapping_utils.js | 33 +- .../linked_pipelines.fragment.graphql | 17 - ...ipeline_stages_connection.fragment.graphql | 14 + .../mixins/graph_pipeline_bundle_mixin.js | 2 +- .../javascripts/pipelines/mixins/pipelines.js | 6 +- .../pipelines/pipeline_details_bundle.js | 19 +- .../pipelines/pipeline_details_graph.js | 4 + .../pipelines/pipeline_details_header.js | 2 +- .../pipelines/pipeline_details_mediator.js | 2 +- .../pipelines/stores/pipeline_store.js | 27 +- .../pipelines/stores/test_reports/getters.js | 10 +- .../pipelines/stores/test_reports/index.js | 2 +- .../pipelines/stores/test_reports/utils.js | 2 +- app/assets/javascripts/pipelines/utils.js | 32 +- .../popovers/components/popovers.vue | 10 +- app/assets/javascripts/popovers/index.js | 6 +- .../account/components/update_username.vue | 4 +- .../profile/add_ssh_key_validation.js | 2 +- app/assets/javascripts/profile/gl_crop.js | 8 +- .../preferences/profile_preferences_bundle.js | 2 +- app/assets/javascripts/profile/profile.js | 10 +- app/assets/javascripts/project_find_file.js | 16 +- app/assets/javascripts/project_select.js | 10 +- .../project_select_combo_button.js | 18 +- app/assets/javascripts/project_visibility.js | 2 +- .../commit/components/branches_dropdown.vue | 94 + .../projects/commit/components/form_modal.vue | 137 + .../commit/components/form_trigger.vue | 32 + .../javascripts/projects/commit/constants.js | 33 + .../javascripts/projects/commit/event_hub.js | 3 + .../commit/init_revert_commit_modal.js | 55 + .../commit/init_revert_commit_trigger.js | 20 + .../projects/commit/store/actions.js | 36 + .../projects/commit/store/getters.js | 5 + .../projects/commit/store/index.js | 19 + .../projects/commit/store/mutation_types.js | 6 + .../projects/commit/store/mutations.js | 25 + .../projects/commit/store/state.js | 13 + .../commit_box/info/init_details_button.js | 4 +- .../projects/commit_box/info/load_branches.js | 2 +- .../commits/components/author_select.vue | 2 +- .../javascripts/projects/commits/index.js | 2 +- .../projects/commits/store/actions.js | 2 +- .../projects/default_project_templates.js | 4 + .../components/app.vue | 8 +- .../components/welcome.vue | 2 +- .../illustrations/blank-project.svg | 36 +- .../illustrations/ci-cd-project.svg | 96 +- .../illustrations/create-from-template.svg | 67 +- .../illustrations/import-project.svg | 133 +- .../experiment_new_project_creation/index.js | 2 +- .../pipelines/charts/components/app.vue | 239 +- ...art.vue => ci_cd_analytics_area_chart.vue} | 15 +- .../{app_legacy.vue => pipeline_charts.vue} | 123 +- .../charts/components/statistics_list.vue | 8 - ...get_pipeline_count_by_status.query.graphql | 1 - .../projects/pipelines/charts/index.js | 102 +- .../javascripts/projects/project_new.js | 17 +- .../projects/settings/access_dropdown.js | 34 +- .../components/shared_runners_toggle.vue | 2 +- .../components/service_desk_root.vue | 6 +- .../components/service_desk_setting.vue | 11 +- .../commit_pipeline_status_component.vue | 7 +- .../components/reset_key.vue | 2 +- .../prometheus_metrics/custom_metrics.js | 12 +- .../prometheus_metrics/prometheus_metrics.js | 8 +- .../protected_branch_create.js | 4 +- .../protected_branch_edit.js | 4 +- app/assets/javascripts/read_more.js | 4 +- .../ref/components/ref_results_section.vue | 2 +- .../ref/components/ref_selector.vue | 6 +- app/assets/javascripts/ref/stores/actions.js | 12 +- .../javascripts/ref/stores/mutations.js | 4 +- app/assets/javascripts/ref_select_dropdown.js | 2 +- .../components/details_page/delete_alert.vue | 2 +- .../details_page/details_header.vue | 60 +- .../details_page/partial_cleanup_alert.vue | 4 +- .../components/details_page/tags_list.vue | 5 +- .../components/details_page/tags_list_row.vue | 4 +- .../components/list_page/cli_commands.vue | 2 +- .../list_page/group_empty_state.vue | 4 +- .../components/list_page/image_list.vue | 6 + .../components/list_page/image_list_row.vue | 23 +- .../list_page/project_empty_state.vue | 8 +- .../components/list_page/registry_header.vue | 12 +- .../components/registry_breadcrumb.vue | 81 +- .../registry/explorer/constants/details.js | 21 + .../container_repository.fragment.graphql | 11 - .../registry/explorer/graphql/index.js | 1 + ...ntainer_repositories_details.query.graphql | 26 + ...container_repository_details.query.graphql | 5 + ...group_container_repositories.query.graphql | 23 - ...oject_container_repositories.query.graphql | 23 - .../javascripts/registry/explorer/index.js | 30 +- .../registry/explorer/pages/details.vue | 15 +- .../registry/explorer/pages/list.vue | 138 +- .../settings/components/expiration_input.vue | 4 +- .../settings/components/expiration_toggle.vue | 2 +- .../components/registry_settings_app.vue | 2 +- .../settings/components/settings_form.vue | 16 +- .../registry/settings/constants.js | 4 +- .../settings/graphql/utils/cache_update.js | 4 +- .../javascripts/registry/settings/utils.js | 10 +- .../components/related_issuable_input.vue | 6 +- .../components/related_issues_block.vue | 6 +- .../components/related_issues_root.vue | 6 +- .../javascripts/related_issues/index.js | 2 +- .../stores/related_issues_store.js | 2 +- .../related_merge_requests/index.js | 2 +- .../related_merge_requests/store/actions.js | 2 +- .../components/release_block_assets.vue | 6 +- .../release_block_milestone_info.vue | 6 +- .../releases/components/releases_sort.vue | 6 +- app/assets/javascripts/releases/constants.js | 2 +- app/assets/javascripts/releases/mount_edit.js | 2 +- .../javascripts/releases/mount_index.js | 2 +- app/assets/javascripts/releases/mount_new.js | 2 +- app/assets/javascripts/releases/mount_show.js | 2 +- .../javascripts/releases/stores/getters.js | 2 +- .../releases/stores/modules/detail/actions.js | 14 +- .../releases/stores/modules/detail/getters.js | 16 +- .../releases/stores/modules/detail/index.js | 2 +- .../stores/modules/detail/mutations.js | 4 +- .../releases/stores/modules/list/actions.js | 2 +- .../releases/stores/modules/list/index.js | 2 +- app/assets/javascripts/releases/util.js | 30 +- .../accessibility_report/store/getters.js | 14 +- .../accessibility_report/store/index.js | 4 +- .../codequality_report/store/actions.js | 4 +- .../codequality_report/store/getters.js | 8 +- .../reports/codequality_report/store/index.js | 4 +- .../store/utils/codequality_comparison.js | 2 +- .../workers/codequality_comparison_worker.js | 2 +- .../components/grouped_issues_list.vue | 2 +- .../components/grouped_test_reports_app.vue | 20 +- .../reports/components/issues_list.vue | 2 +- .../javascripts/reports/components/modal.vue | 74 +- .../reports/components/modal_open_name.vue | 51 - .../reports/components/report_item.vue | 2 +- .../reports/components/report_link.vue | 10 +- .../reports/components/test_issue_body.vue | 8 +- .../javascripts/reports/store/actions.js | 9 +- .../javascripts/reports/store/getters.js | 2 +- .../reports/store/mutation_types.js | 1 + .../javascripts/reports/store/mutations.js | 18 +- app/assets/javascripts/reports/store/state.js | 1 + app/assets/javascripts/reports/store/utils.js | 12 +- .../repository/components/breadcrumbs.vue | 4 +- .../components/directory_download_links.vue | 2 +- .../repository/components/last_commit.vue | 10 +- .../components/table/parent_row.vue | 6 +- .../repository/components/tree_content.vue | 2 +- app/assets/javascripts/repository/graphql.js | 4 +- app/assets/javascripts/repository/log_tree.js | 8 +- .../queries/project_path.query.graphql | 2 +- app/assets/javascripts/repository/router.js | 2 +- .../javascripts/repository/utils/commit.js | 2 +- .../javascripts/repository/utils/dom.js | 4 +- .../javascripts/repository/utils/readme.js | 6 +- app/assets/javascripts/rest_api.js | 15 + app/assets/javascripts/right_sidebar.js | 42 +- .../search/highlight_blob_search_result.js | 4 +- .../javascripts/search/sidebar/index.js | 2 +- .../javascripts/search/store/actions.js | 4 +- app/assets/javascripts/search/store/index.js | 2 +- app/assets/javascripts/search/topbar/index.js | 4 +- app/assets/javascripts/search_autocomplete.js | 8 +- .../components/search_settings.vue | 129 + .../javascripts/search_settings/constants.js | 11 + .../javascripts/search_settings/index.js | 23 + .../javascripts/self_monitor/store/actions.js | 18 +- .../javascripts/self_monitor/store/index.js | 2 +- .../sentry_error_stack_trace/index.js | 2 +- .../serverless/components/area.vue | 8 +- .../javascripts/serverless/store/actions.js | 18 +- .../javascripts/serverless/store/getters.js | 4 +- app/assets/javascripts/serverless/utils.js | 8 +- .../set_status_modal_wrapper.vue | 9 +- .../javascripts/set_status_modal/utils.js | 4 +- app/assets/javascripts/settings_panels.js | 11 +- .../components/assignees/assignees.vue | 4 +- .../assignees/assignees_realtime.vue | 2 +- .../assignees/collapsed_assignee_list.vue | 6 +- .../confidential/edit_form_buttons.vue | 2 +- .../components/copy_email_to_clipboard.vue | 43 + .../components/labels/sidebar_labels.vue | 12 +- .../reviewers/collapsed_reviewer_list.vue | 6 +- .../components/reviewers/reviewer_title.vue | 17 +- .../components/reviewers/reviewers.vue | 4 +- .../reviewers/sidebar_reviewers.vue | 10 +- .../components/severity/sidebar_severity.vue | 6 +- .../time_tracking/estimate_only_pane.vue | 18 - .../time_tracking/no_tracking_pane.vue | 11 - .../time_tracking/sidebar_time_tracking.vue | 2 +- .../components/time_tracking/time_tracker.vue | 21 +- .../sidebar/lib/sidebar_move_issue.js | 4 +- .../sidebar/mount_milestone_sidebar.js | 2 +- .../javascripts/sidebar/mount_sidebar.js | 40 +- .../javascripts/sidebar/sidebar_mediator.js | 6 +- app/assets/javascripts/sidebar/utils.js | 2 +- app/assets/javascripts/single_file_diff.js | 11 +- app/assets/javascripts/smart_interval.js | 6 +- .../javascripts/snippet/collapsible_input.js | 8 +- .../javascripts/snippets/components/edit.vue | 6 +- .../components/snippet_blob_actions_edit.vue | 4 +- .../snippets/components/snippet_blob_edit.vue | 6 +- .../snippets/components/snippet_blob_view.vue | 14 +- .../snippets/components/snippet_header.vue | 11 +- .../javascripts/snippets/mixins/snippets.js | 2 +- app/assets/javascripts/snippets/utils/blob.js | 12 +- app/assets/javascripts/star.js | 5 +- .../static_site_editor/graphql/index.js | 4 +- .../graphql/resolvers/file.js | 2 +- .../resolvers/has_submitted_changes.js | 2 +- .../resolvers/submit_content_changes.js | 4 +- .../static_site_editor/image_repository.js | 6 +- .../javascripts/static_site_editor/index.js | 2 +- .../static_site_editor/pages/home.vue | 2 +- .../static_site_editor/services/formatter.js | 6 +- .../services/front_matterify.js | 2 +- .../services/image_service.js | 4 +- .../services/load_source_content.js | 2 +- .../services/parse_source_file.js | 4 +- .../services/renderers/render_image.js | 10 +- .../services/submit_content_changes.js | 2 +- .../static_site_editor/services/templater.js | 10 +- app/assets/javascripts/task_list.js | 2 +- app/assets/javascripts/terminal/terminal.js | 6 +- .../terraform/components/terraform_list.vue | 2 +- .../javascripts/test_utils/simulate_input.js | 2 +- app/assets/javascripts/toggle_buttons.js | 2 +- .../tooltips/components/tooltips.vue | 20 +- app/assets/javascripts/tooltips/index.js | 32 +- app/assets/javascripts/tracking.js | 6 +- app/assets/javascripts/tree.js | 8 +- app/assets/javascripts/ui_development_kit.js | 8 +- app/assets/javascripts/usage_ping_consent.js | 2 +- app/assets/javascripts/user_callout.js | 2 +- .../user_lists/components/user_list_form.vue | 2 +- .../user_lists/store/edit/actions.js | 4 +- .../user_lists/store/edit/index.js | 2 +- .../user_lists/store/new/actions.js | 2 +- .../javascripts/user_lists/store/new/index.js | 2 +- .../user_lists/store/show/actions.js | 4 +- .../user_lists/store/show/index.js | 2 +- .../user_lists/store/show/mutations.js | 4 +- .../javascripts/user_lists/store/utils.js | 7 +- app/assets/javascripts/user_popovers.js | 8 +- app/assets/javascripts/users_select/index.js | 86 +- app/assets/javascripts/vue_alerts.js | 2 +- .../components/approvals/approvals.vue | 6 +- .../deployment/deployment_actions.vue | 2 +- .../deployment/deployment_view_button.vue | 2 +- .../components/deployment/memory_usage.vue | 8 +- .../components/extensions/base.vue | 8 +- .../components/extensions/container.js | 2 +- .../components/extensions/index.js | 2 +- .../components/mr_widget_alert_message.vue | 4 +- .../components/mr_widget_merge_help.vue | 2 +- .../components/mr_widget_pipeline.vue | 13 +- .../components/mr_widget_related_links.vue | 2 +- .../components/mr_widget_suggest_pipeline.vue | 4 +- .../source_branch_removal_status.vue | 2 +- .../states/commit_message_dropdown.vue | 7 +- .../components/states/commits_header.vue | 1 + .../states/mr_widget_auto_merge_enabled.vue | 174 +- .../states/mr_widget_auto_merge_failed.vue | 19 +- .../components/states/mr_widget_conflicts.vue | 4 +- .../components/states/mr_widget_merged.vue | 4 +- .../states/mr_widget_missing_branch.vue | 2 +- .../components/states/mr_widget_rebase.vue | 110 +- .../components/states/ready_to_merge.vue | 467 +- .../components/states/squash_before_merge.vue | 2 +- .../components/states/work_in_progress.vue | 24 +- .../mr_widget_terraform_container.vue | 2 +- .../extensions/issues.js | 2 +- .../vue_merge_request_widget/index.js | 6 +- .../mixins/approvals.js | 2 +- .../mixins/ready_to_merge.js | 2 +- .../mr_widget_options.vue | 31 +- .../auto_merge_enabled.fragment.graphql | 15 + .../states/auto_merge_enabled.query.graphql | 10 + .../states/auto_merge_failed.query.graphql | 7 + .../states/ready_to_merge.fragment.graphql | 41 + .../states/ready_to_merge.query.graphql | 7 + .../queries/states/rebase.query.graphql | 11 + .../services/mr_widget_service.js | 6 +- .../stores/artifacts_list/getters.js | 2 +- .../stores/artifacts_list/index.js | 15 +- .../stores/mr_widget_store.js | 7 +- .../vue_shared/components/actions_button.vue | 2 +- .../components/alert_details_table.vue | 3 +- .../vue_shared/components/awards_list.vue | 8 +- .../components/changed_file_icon.vue | 2 + .../vue_shared/components/commit.vue | 4 +- .../vue_shared/components/confirm_modal.vue | 4 +- .../content_viewer/content_viewer.vue | 4 +- .../viewers/download_viewer.vue | 13 +- .../content_viewer/viewers/image_viewer.vue | 6 +- .../viewers/markdown_viewer.vue | 2 +- .../date_time_picker/date_time_picker.vue | 2 +- .../date_time_picker_input.vue | 4 +- .../date_time_picker/date_time_picker_lib.js | 4 +- .../components/deployment_instance.vue | 91 + .../components/deprecated_modal_2.vue | 121 - .../components/dismissible_container.vue | 2 +- .../vue_shared/components/editor_lite.vue | 3 + .../components/file_finder/index.vue | 2 +- .../components/file_icon/file_icon_map.js | 11 +- .../vue_shared/components/file_row.vue | 6 +- .../filtered_search_bar_root.vue | 18 +- .../filtered_search_utils.js | 12 +- .../store/modules/filters/actions.js | 10 +- .../tokens/author_token.vue | 4 +- .../tokens/branch_token.vue | 2 +- .../tokens/label_token.vue | 4 +- .../tokens/milestone_token.vue | 2 +- .../gfm_autocomplete/gfm_autocomplete.vue | 15 +- .../components/gfm_autocomplete/utils.js | 69 +- .../components/lib/utils/diff_utils.js | 2 +- .../components/markdown/apply_suggestion.vue | 34 +- .../vue_shared/components/markdown/field.vue | 6 +- .../vue_shared/components/markdown/header.vue | 2 +- .../components/markdown/suggestion_diff.vue | 9 +- .../markdown/suggestion_diff_header.vue | 23 +- .../components/markdown/suggestions.vue | 30 +- .../components/markdown/toolbar.vue | 8 +- .../components/modal_copy_button.vue | 10 +- .../vue_shared/components/navigation_tabs.vue | 37 +- .../components/notes/system_note.vue | 10 +- .../vue_shared/components/ordered_layout.vue | 2 +- .../paginated_table_with_search_and_tabs.vue | 2 +- .../utils.js | 2 +- .../vue_shared/components/pikaday.vue | 57 +- .../project_selector/project_list_item.vue | 2 +- .../project_selector/project_selector.vue | 9 +- .../components/registry/list_item.vue | 2 +- .../components/registry/metadata_item.vue | 15 +- .../components/registry/title_area.vue | 40 +- .../rich_content_editor.vue | 2 +- .../services/build_custom_renderer.js | 6 +- .../build_html_to_markdown_renderer.js | 4 +- .../services/editor_service.js | 16 +- .../renderers/build_uneditable_token.js | 8 +- .../services/renderers/render_html_block.js | 4 +- .../render_identifier_instance_text.js | 6 +- .../renderers/render_identifier_paragraph.js | 2 +- .../services/renderers/render_softbreak.js | 2 +- .../services/renderers/render_utils.js | 4 +- .../services/sanitize_html.js | 4 +- .../vue_shared/components/select2_select.vue | 2 +- .../components/sidebar/labels_select/base.vue | 2 +- .../labels_select/dropdown_create_label.vue | 2 +- .../dropdown_value_collapsed.vue | 2 +- .../dropdown_contents_create_view.vue | 2 +- .../labels_select_vue/labels_select_root.vue | 8 +- .../labels_select_vue/store/getters.js | 10 +- .../labels_select_vue/store/mutations.js | 4 +- .../vue_shared/components/split_button.vue | 2 +- .../vue_shared/components/tabs/tabs.js | 6 +- .../components/timezone_dropdown.vue | 4 +- .../upload_dropzone/upload_dropzone.vue | 4 +- .../user_avatar/user_avatar_image.vue | 2 +- .../vue_shared/components/web_ide_link.vue | 2 +- .../javascripts/vue_shared/constants.js | 5 +- .../vue_shared/directives/autofocusonshow.js | 4 +- .../vue_shared/directives/validation.js | 12 +- .../vue_shared/gl_feature_flags_plugin.js | 2 +- .../mixins/ci_pagination_api_mixin.js | 2 +- .../components/security_summary.vue | 4 +- .../vue_shared/security_reports/constants.js | 9 + .../security_reports/security_reports_app.vue | 4 +- .../security_reports/store/getters.js | 22 +- .../store/modules/sast/actions.js | 2 +- .../store/modules/secret_detection/actions.js | 2 +- .../security_reports/store/utils.js | 4 +- .../vue_shared/security_reports/utils.js | 39 +- .../javascripts/vue_shared/translate.js | 2 +- .../javascripts/vuex_shared/bindings.js | 2 +- .../javascripts/whats_new/components/app.vue | 5 +- app/assets/javascripts/whats_new/index.js | 2 +- .../whats_new/utils/get_drawer_body_height.js | 2 +- .../whats_new/utils/notification.js | 4 +- app/assets/javascripts/zen_mode.js | 26 +- .../stylesheets/_page_specific_files.scss | 2 +- app/assets/stylesheets/components/avatar.scss | 6 +- .../components/deployment_instance.scss | 91 + .../stylesheets/components/whats_new.scss | 2 +- app/assets/stylesheets/framework/blank.scss | 4 + .../framework/contextual_sidebar.scss | 6 +- app/assets/stylesheets/framework/diffs.scss | 6 + .../stylesheets/framework/dropdowns.scss | 13 +- app/assets/stylesheets/framework/header.scss | 4 +- .../stylesheets/framework/highlight.scss | 3 +- app/assets/stylesheets/framework/mixins.scss | 4 + app/assets/stylesheets/framework/sidebar.scss | 13 + .../stylesheets/framework/variables.scss | 6 +- app/assets/stylesheets/highlight/common.scss | 46 +- .../highlight/conflict_colors.scss | 119 + .../stylesheets/highlight/themes/dark.scss | 6 +- .../stylesheets/highlight/themes/monokai.scss | 2 + .../highlight/themes/solarized-dark.scss | 2 + .../highlight/themes/solarized-light.scss | 2 + .../stylesheets/highlight/themes/white.scss | 2 + .../stylesheets/highlight/white_base.scss | 15 +- .../page_bundles/_ide_theme_overrides.scss | 5 +- .../page_bundles/_pipeline_mixins.scss | 7 +- .../page_bundles/environments.scss | 89 + .../page_bundles/error_tracking_index.scss | 4 + app/assets/stylesheets/page_bundles/ide.scss | 4 + .../incident_management_list.scss | 17 +- .../page_bundles/jira_connect.scss | 28 +- .../page_bundles/merge_conflicts.scss | 180 +- .../page_bundles/oncall_schedules.scss | 18 +- app/assets/stylesheets/page_bundles/wiki.scss | 5 - app/assets/stylesheets/pages/editor.scss | 1 + .../stylesheets/pages/merge_requests.scss | 20 +- app/assets/stylesheets/pages/note_form.scss | 8 +- app/assets/stylesheets/pages/registry.scss | 8 + app/assets/stylesheets/pages/settings.scss | 2 +- .../stylesheets/pages/settings_ci_cd.scss | 4 - app/assets/stylesheets/pages/tree.scss | 1 + app/assets/stylesheets/pages/trials.scss | 8 +- .../stylesheets/startup/startup-dark.scss | 4 +- .../stylesheets/startup/startup-general.scss | 4 +- app/assets/stylesheets/themes/_dark.scss | 14 + app/assets/stylesheets/utilities.scss | 13 - .../admin/application_settings_controller.rb | 2 +- .../admin/dev_ops_report_controller.rb | 8 + app/controllers/admin/projects_controller.rb | 4 + app/controllers/application_controller.rb | 30 +- .../concerns/invisible_captcha_on_signup.rb | 4 +- app/controllers/concerns/issuable_actions.rb | 1 + app/controllers/concerns/redis_tracking.rb | 2 +- .../concerns/show_inherited_labels_checker.rb | 11 - app/controllers/concerns/spammable_actions.rb | 25 +- .../dashboard/snippets_controller.rb | 1 + .../explore/projects_controller.rb | 7 +- .../groups/group_members_controller.rb | 4 - app/controllers/groups/labels_controller.rb | 3 +- .../packages_and_registries_controller.rb | 14 + .../import/bulk_imports_controller.rb | 35 +- .../jira_connect/app_descriptor_controller.rb | 41 +- .../jira_connect/subscriptions_controller.rb | 3 + app/controllers/metrics_controller.rb | 10 + app/controllers/projects/blob_controller.rb | 3 + .../projects/ci/pipeline_editor_controller.rb | 2 +- .../projects/cycle_analytics_controller.rb | 5 - .../projects/environments_controller.rb | 3 + .../projects/feature_flags_controller.rb | 10 +- .../pager_duty_incidents_controller.rb | 2 +- app/controllers/projects/labels_controller.rb | 3 +- .../projects/mattermosts_controller.rb | 2 +- .../merge_requests/creations_controller.rb | 2 +- .../merge_requests/diffs_controller.rb | 16 +- .../projects/merge_requests_controller.rb | 14 +- .../projects/pipeline_schedules_controller.rb | 1 - .../projects/pipelines/tests_controller.rb | 2 + .../projects/pipelines_controller.rb | 39 +- .../projects/project_members_controller.rb | 13 +- .../projects/usage_ping_controller.rb | 2 +- app/controllers/projects_controller.rb | 6 +- .../repositories/lfs_api_controller.rb | 11 +- app/controllers/users_controller.rb | 6 +- app/enums/.keep | 0 app/experiments/application_experiment.rb | 6 +- app/finders/alert_management/alerts_finder.rb | 2 + app/finders/autocomplete/group_finder.rb | 3 +- app/finders/autocomplete/project_finder.rb | 3 +- .../ci/pipelines_for_merge_request_finder.rb | 18 +- app/finders/concerns/finder_methods.rb | 2 +- .../concerns/packages/finder_helper.rb | 29 + app/finders/concerns/time_frame_filter.rb | 2 +- app/finders/deployments_finder.rb | 4 +- app/finders/issuable_finder.rb | 8 + app/finders/issuable_finder/params.rb | 33 +- app/finders/merge_requests_finder.rb | 4 +- .../packages/debian/distributions_finder.rb | 52 + app/finders/packages/group_packages_finder.rb | 8 +- app/finders/packages/maven/package_finder.rb | 16 +- app/finders/packages/nuget/package_finder.rb | 35 +- app/finders/packages/packages_finder.rb | 8 +- app/finders/projects_finder.rb | 2 +- app/finders/template_finder.rb | 1 + app/finders/users_finder.rb | 7 + .../admin/sidekiq_queues/delete_jobs.rb | 4 +- .../mutations/alert_management/base.rb | 10 +- .../http_integration/create.rb | 19 +- .../http_integration/destroy.rb | 2 +- .../http_integration/http_integration_base.rb | 2 +- .../http_integration/reset_token.rb | 2 +- .../http_integration/update.rb | 6 +- .../prometheus_integration/create.rb | 6 +- .../prometheus_integration_base.rb | 2 +- .../prometheus_integration/reset_token.rb | 2 +- .../prometheus_integration/update.rb | 6 +- .../alert_management/update_alert_status.rb | 2 +- app/graphql/mutations/award_emojis/base.rb | 4 +- app/graphql/mutations/boards/destroy.rb | 4 +- .../boards/issues/issue_move_list.rb | 14 +- app/graphql/mutations/boards/lists/base.rb | 4 +- app/graphql/mutations/boards/lists/create.rb | 4 +- app/graphql/mutations/boards/lists/update.rb | 6 +- app/graphql/mutations/boards/update.rb | 2 + app/graphql/mutations/branches/create.rb | 8 +- app/graphql/mutations/ci/base.rb | 22 - .../mutations/ci/ci_cd_settings_update.rb | 29 + app/graphql/mutations/ci/pipeline/base.rb | 24 + app/graphql/mutations/ci/pipeline/cancel.rb | 24 + app/graphql/mutations/ci/pipeline/destroy.rb | 24 + app/graphql/mutations/ci/pipeline/retry.rb | 29 + app/graphql/mutations/ci/pipeline_cancel.rb | 22 - app/graphql/mutations/ci/pipeline_destroy.rb | 22 - app/graphql/mutations/ci/pipeline_retry.rb | 27 - app/graphql/mutations/commits/create.rb | 10 +- .../concerns/mutations/authorizes_project.rb | 17 - .../concerns/mutations/finds_project.rb | 11 + .../concerns/mutations/resolves_namespace.rb | 15 + .../mutations/resolves_resource_parent.rb | 4 +- .../mutations/resolves_subscription.rb | 2 +- .../mutations/spammable_mutation_fields.rb | 2 +- .../container_expiration_policies/update.rb | 4 +- .../container_repositories/destroy_tags.rb | 2 +- app/graphql/mutations/custom_emoji/create.rb | 8 +- .../mutations/design_management/base.rb | 4 +- .../mutations/design_management/delete.rb | 4 +- .../mutations/design_management/move.rb | 8 +- .../mutations/design_management/upload.rb | 4 +- .../mutations/discussions/toggle_resolve.rb | 6 +- .../environments/canary_ingress/update.rb | 4 +- app/graphql/mutations/issues/base.rb | 6 +- app/graphql/mutations/issues/create.rb | 18 +- app/graphql/mutations/issues/move.rb | 2 +- app/graphql/mutations/issues/set_due_date.rb | 2 +- app/graphql/mutations/issues/set_locked.rb | 2 +- app/graphql/mutations/issues/update.rb | 8 +- .../mutations/jira_import/import_users.rb | 4 +- app/graphql/mutations/jira_import/start.rb | 10 +- app/graphql/mutations/labels/create.rb | 8 +- app/graphql/mutations/merge_requests/base.rb | 6 +- .../mutations/merge_requests/create.rb | 4 +- .../mutations/merge_requests/update.rb | 2 +- .../metrics/dashboard/annotations/create.rb | 14 +- .../metrics/dashboard/annotations/delete.rb | 2 +- .../namespace/package_settings/update.rb | 54 + app/graphql/mutations/notes/base.rb | 2 +- app/graphql/mutations/notes/create/base.rb | 2 +- app/graphql/mutations/notes/create/note.rb | 2 +- app/graphql/mutations/notes/destroy.rb | 2 +- .../notes/reposition_image_diff_note.rb | 2 +- app/graphql/mutations/notes/update/base.rb | 2 +- app/graphql/mutations/releases/base.rb | 2 +- app/graphql/mutations/releases/create.rb | 12 +- app/graphql/mutations/releases/update.rb | 16 +- app/graphql/mutations/snippets/base.rb | 2 +- app/graphql/mutations/snippets/create.rb | 14 +- app/graphql/mutations/snippets/destroy.rb | 2 +- .../mutations/snippets/mark_as_spam.rb | 2 +- app/graphql/mutations/snippets/update.rb | 10 +- app/graphql/mutations/terraform/state/base.rb | 2 +- app/graphql/mutations/todos/create.rb | 4 +- app/graphql/mutations/todos/mark_all_done.rb | 4 +- app/graphql/mutations/todos/mark_done.rb | 4 +- app/graphql/mutations/todos/restore.rb | 4 +- app/graphql/mutations/todos/restore_many.rb | 6 +- .../get_container_repositories.query.graphql | 60 + .../get_pipeline_details.query.graphql | 38 +- .../queries/snippet/snippet.query.graphql | 5 + .../measurements_resolver.rb | 6 +- .../alert_management/alert_resolver.rb | 10 +- .../alert_status_counts_resolver.rb | 2 +- .../resolvers/board_list_issues_resolver.rb | 2 +- app/graphql/resolvers/board_lists_resolver.rb | 4 +- app/graphql/resolvers/board_resolver.rb | 2 +- app/graphql/resolvers/boards_resolver.rb | 2 +- app/graphql/resolvers/ci/config_resolver.rb | 68 +- app/graphql/resolvers/ci/jobs_resolver.rb | 2 +- .../resolvers/ci/runner_setup_resolver.rb | 8 +- .../concerns/issue_resolver_arguments.rb | 32 +- app/graphql/resolvers/concerns/looks_ahead.rb | 6 +- .../concerns/resolves_merge_requests.rb | 3 + .../resolvers/concerns/resolves_pipelines.rb | 6 +- .../resolvers/concerns/resolves_snippets.rb | 4 +- .../concerns/time_frame_arguments.rb | 2 +- .../container_repositories_resolver.rb | 2 +- .../design_at_version_resolver.rb | 2 +- .../design_management/design_resolver.rb | 4 +- .../design_management/designs_resolver.rb | 4 +- .../version/design_at_version_resolver.rb | 6 +- .../version/designs_at_version_resolver.rb | 4 +- .../version_in_collection_resolver.rb | 4 +- .../design_management/version_resolver.rb | 2 +- .../design_management/versions_resolver.rb | 4 +- app/graphql/resolvers/echo_resolver.rb | 2 +- .../resolvers/environments_resolver.rb | 6 +- .../sentry_detailed_error_resolver.rb | 2 +- .../sentry_error_stack_trace_resolver.rb | 2 +- .../error_tracking/sentry_errors_resolver.rb | 4 +- app/graphql/resolvers/full_path_resolver.rb | 2 +- .../resolvers/group_members_resolver.rb | 2 +- .../resolvers/group_milestones_resolver.rb | 2 +- app/graphql/resolvers/issues_resolver.rb | 14 +- app/graphql/resolvers/members_resolver.rb | 2 +- .../resolvers/merge_request_resolver.rb | 2 +- .../resolvers/merge_requests_resolver.rb | 16 +- .../resolvers/metrics/dashboard_resolver.rb | 2 +- .../metrics/dashboards/annotation_resolver.rb | 4 +- app/graphql/resolvers/milestones_resolver.rb | 10 +- .../resolvers/namespace_projects_resolver.rb | 6 +- .../resolvers/package_details_resolver.rb | 18 + app/graphql/resolvers/packages_resolver.rb | 2 +- .../resolvers/project_members_resolver.rb | 2 +- .../resolvers/project_milestones_resolver.rb | 2 +- .../resolvers/project_pipeline_resolver.rb | 2 +- .../projects/jira_projects_resolver.rb | 7 +- .../resolvers/projects/services_resolver.rb | 4 +- app/graphql/resolvers/projects_resolver.rb | 10 +- .../resolvers/release_milestones_resolver.rb | 13 + app/graphql/resolvers/release_resolver.rb | 2 +- app/graphql/resolvers/releases_resolver.rb | 2 +- .../resolvers/snippets/blobs_resolver.rb | 2 +- app/graphql/resolvers/snippets_resolver.rb | 8 +- app/graphql/resolvers/todo_resolver.rb | 12 +- app/graphql/resolvers/tree_resolver.rb | 6 +- app/graphql/resolvers/user_resolver.rb | 4 +- .../user_starred_projects_resolver.rb | 2 +- .../resolvers/users/snippets_resolver.rb | 2 +- app/graphql/resolvers/users_resolver.rb | 20 +- .../instance_statistics/measurement_type.rb | 4 +- .../alert_management/domain_filter_enum.rb | 2 +- app/graphql/types/base_enum.rb | 19 + app/graphql/types/board_type.rb | 8 + app/graphql/types/ci/build_need_type.rb | 14 + app/graphql/types/ci/ci_cd_setting_type.rb | 4 +- app/graphql/types/ci/config/config_type.rb | 2 +- app/graphql/types/ci/config/group_type.rb | 2 +- .../types/ci/config/job_restriction_type.rb | 15 + app/graphql/types/ci/config/job_type.rb | 33 +- app/graphql/types/ci/config/stage_type.rb | 2 +- app/graphql/types/ci/job_type.rb | 6 +- app/graphql/types/ci/stage_type.rb | 33 + .../data_visualization_palette/color_enum.rb | 14 + .../data_visualization_palette/weight_enum.rb | 14 + app/graphql/types/issue_type.rb | 7 + app/graphql/types/merge_request_type.rb | 18 +- app/graphql/types/mutation_type.rb | 8 +- .../types/namespace/package_settings_type.rb | 14 + app/graphql/types/namespace_type.rb | 5 + app/graphql/types/notes/note_type.rb | 7 + app/graphql/types/package_type.rb | 16 - app/graphql/types/package_type_enum.rb | 15 - .../types/packages/composer/details_type.rb | 16 + .../types/packages/composer/json_type.rb | 18 + .../types/packages/composer/metadatum_type.rb | 17 + .../types/packages/package_tag_type.rb | 16 + app/graphql/types/packages/package_type.rb | 27 + .../types/packages/package_type_enum.rb | 17 + app/graphql/types/project_type.rb | 9 +- app/graphql/types/query_type.rb | 5 + app/graphql/types/release_type.rb | 3 +- app/graphql/types/repository_type.rb | 2 +- app/helpers/application_helper.rb | 12 +- app/helpers/application_settings_helper.rb | 4 +- app/helpers/blob_helper.rb | 23 +- app/helpers/ci/pipelines_helper.rb | 4 + app/helpers/{ => ci}/triggers_helper.rb | 2 +- app/helpers/commits_helper.rb | 12 +- app/helpers/dashboard_helper.rb | 4 + app/helpers/emails_helper.rb | 23 + app/helpers/graph_helper.rb | 6 + app/helpers/groups/group_members_helper.rb | 80 +- app/helpers/groups_helper.rb | 1 + app/helpers/invite_members_helper.rb | 30 + app/helpers/issuables_helper.rb | 3 +- app/helpers/jira_connect_helper.rb | 13 + app/helpers/markup_helper.rb | 3 +- app/helpers/merge_requests_helper.rb | 30 + app/helpers/page_layout_helper.rb | 2 +- app/helpers/preferences_helper.rb | 2 +- .../projects/alert_management_helper.rb | 2 - .../projects/project_members_helper.rb | 29 + app/helpers/projects_helper.rb | 8 +- app/helpers/services_helper.rb | 8 +- app/helpers/startup_css_helper.rb | 7 - app/helpers/tab_helper.rb | 3 +- app/helpers/users_helper.rb | 2 +- app/helpers/visibility_level_helper.rb | 110 +- app/helpers/web_ide_button_helper.rb | 4 +- app/helpers/wiki_page_version_helper.rb | 20 + app/mailers/emails/issues.rb | 2 + app/mailers/emails/members.rb | 19 + app/mailers/emails/merge_requests.rb | 2 + app/mailers/emails/pipelines.rb | 15 +- app/mailers/previews/devise_mailer_preview.rb | 2 +- .../alert_management/http_integration.rb | 4 + app/models/application_record.rb | 5 + app/models/application_setting.rb | 46 +- .../application_setting_implementation.rb | 6 +- app/models/audit_event.rb | 3 + app/models/audit_event_archived.rb | 10 + app/models/audit_event_partitioned.rb | 14 - app/models/authentication_event.rb | 8 +- app/models/blob_viewer/gitlab_ci_yml.rb | 4 +- app/models/ci/bridge.rb | 14 +- app/models/ci/build.rb | 56 +- app/models/ci/build_need.rb | 2 +- app/models/ci/build_runner_session.rb | 4 +- app/models/ci/commit_with_pipeline.rb | 38 + app/models/ci/group.rb | 24 +- app/models/ci/job_artifact.rb | 10 +- app/models/ci/pipeline.rb | 6 +- app/models/ci/ref.rb | 7 + .../clusters/applications/cert_manager.rb | 2 +- app/models/clusters/applications/knative.rb | 2 +- app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/platforms/kubernetes.rb | 2 +- app/models/commit.rb | 8 +- app/models/commit_status.rb | 12 +- app/models/commit_with_pipeline.rb | 2 +- app/models/concerns/boards/listable.rb | 52 + app/models/concerns/bulk_insert_safe.rb | 4 +- app/models/concerns/ci/artifactable.rb | 3 +- app/models/concerns/each_batch.rb | 16 +- app/models/concerns/enums/ci/commit_status.rb | 36 + app/models/concerns/enums/commit_status.rb | 35 - app/models/concerns/enums/vulnerability.rb | 46 + app/models/concerns/issuable.rb | 11 + .../concerns/issue_available_features.rb | 5 +- app/models/concerns/milestoneable.rb | 2 +- app/models/concerns/noteable.rb | 21 + .../concerns/packages/debian/architecture.rb | 25 + .../concerns/packages/debian/distribution.rb | 115 + .../repositories/can_housekeep_repository.rb | 25 + app/models/cycle_analytics/level_base.rb | 74 - app/models/cycle_analytics/project_level.rb | 21 +- .../project_level_stage_adapter.rb | 44 + app/models/deployment.rb | 17 + app/models/diff_note.rb | 4 + app/models/experiment.rb | 4 +- app/models/gpg_key.rb | 2 + app/models/group.rb | 3 + app/models/issue.rb | 4 + app/models/list.rb | 36 +- app/models/member.rb | 2 + app/models/members/group_member.rb | 12 +- app/models/merge_request.rb | 33 +- app/models/milestone.rb | 1 + app/models/namespace.rb | 11 +- app/models/namespace/package_setting.rb | 28 + .../namespace/root_storage_statistics.rb | 2 +- app/models/namespace_onboarding_action.rb | 27 - app/models/onboarding_progress.rb | 65 + app/models/packages/conan/file_metadatum.rb | 4 +- app/models/packages/debian.rb | 9 + app/models/packages/debian/file_metadatum.rb | 56 + .../packages/debian/group_architecture.rb | 9 + .../packages/debian/group_distribution.rb | 9 + .../packages/debian/project_architecture.rb | 9 + .../packages/debian/project_distribution.rb | 9 + app/models/packages/dependency.rb | 2 +- app/models/packages/event.rb | 28 +- app/models/packages/package.rb | 7 + app/models/packages/package_file.rb | 9 + app/models/pages_domain.rb | 4 +- app/models/plan.rb | 2 +- app/models/project.rb | 71 +- app/models/project_feature_usage.rb | 4 +- app/models/project_pages_metadatum.rb | 3 + app/models/project_services/alerts_service.rb | 86 +- .../project_services/alerts_service_data.rb | 14 - .../project_services/datadog_service.rb | 8 +- app/models/project_services/jira_service.rb | 10 +- .../mattermost_slash_commands_service.rb | 2 +- .../slack_slash_commands_service.rb | 2 +- app/models/protectable_dropdown.rb | 2 + app/models/release.rb | 2 +- app/models/remote_mirror.rb | 2 +- app/models/repository.rb | 21 +- app/models/service.rb | 8 - app/models/snippet.rb | 18 +- app/models/snippet_repository.rb | 1 + app/models/snippet_repository_storage_move.rb | 6 +- app/models/terraform/state.rb | 9 + app/models/user.rb | 19 +- app/models/user_preference.rb | 2 - app/models/wiki.rb | 1 + .../instance_statistics/measurement_policy.rb | 9 + app/policies/ci/build_policy.rb | 11 + app/policies/global_policy.rb | 1 + app/policies/group_member_policy.rb | 6 +- app/policies/group_policy.rb | 5 +- .../namespace/package_setting_policy.rb | 5 + app/policies/namespace_policy.rb | 2 + .../packages/composer/metadatum_policy.rb | 8 + app/policies/packages/tag_policy.rb | 6 + app/policies/project_policy.rb | 9 + app/presenters/board_presenter.rb | 5 + app/presenters/ci/build_runner_presenter.rb | 21 +- .../packages/composer/packages_presenter.rb | 30 +- .../packages/nuget/service_index_presenter.rb | 104 +- app/serializers/build_details_entity.rb | 2 +- app/serializers/diffs_metadata_entity.rb | 22 + app/serializers/environment_entity.rb | 5 + .../group_analytics_stage_entity.rb | 16 - .../group_analytics_stage_serializer.rb | 5 - .../issuable_sidebar_basic_entity.rb | 4 + app/serializers/issue_entity.rb | 4 + app/serializers/member_entity.rb | 54 + app/serializers/member_serializer.rb | 5 + app/serializers/member_user_entity.rb | 28 + ...merge_request_poll_cached_widget_entity.rb | 10 + .../merge_request_poll_widget_entity.rb | 6 + .../merge_request_widget_entity.rb | 10 - .../merge_requests/pipeline_entity.rb | 10 + app/serializers/pipeline_details_entity.rb | 4 + .../http_integrations/create_service.rb | 13 +- .../sync_alert_service_data_service.rb | 56 - .../boards/base_items_list_service.rb | 128 + app/services/boards/issues/list_service.rb | 111 +- .../bulk_create_integration_service.rb | 4 - .../ci/create_downstream_pipeline_service.rb | 4 +- app/services/ci/create_pipeline_service.rb | 16 +- .../ci/create_web_ide_terminal_service.rb | 2 +- .../destroy_expired_job_artifacts_service.rb | 57 +- .../coverage_report_service.rb} | 4 +- .../destroy_expired_artifacts_service.rb | 52 + app/services/ci/pipeline_trigger_service.rb | 8 +- app/services/ci/play_build_service.rb | 4 + app/services/ci/process_build_service.rb | 21 + app/services/ci/register_job_service.rb | 4 +- app/services/ci/retry_build_service.rb | 6 +- app/services/ci/retry_pipeline_service.rb | 2 +- .../ci/test_failure_history_service.rb | 1 - app/services/ci/update_build_state_service.rb | 2 +- ...ule_bulk_repository_shard_moves_methods.rb | 53 + .../update_repository_storage_methods.rb | 114 + .../cleanup_service.rb | 23 +- app/services/draft_notes/base_service.rb | 4 + app/services/draft_notes/create_service.rb | 4 + app/services/draft_notes/publish_service.rb | 1 + app/services/feature_flags/base_service.rb | 15 + app/services/git/branch_push_service.rb | 4 +- app/services/groups/create_service.rb | 1 + app/services/groups/destroy_service.rb | 23 +- app/services/ide/base_config_service.rb | 2 +- .../pager_duty/process_webhook_service.rb | 13 +- app/services/issuable/bulk_update_service.rb | 2 + .../issuable/export_csv/base_service.rb | 38 + app/services/issuable_base_service.rb | 4 +- app/services/issues/clone_service.rb | 2 + app/services/issues/close_service.rb | 7 +- app/services/issues/export_csv_service.rb | 26 +- app/services/jira_connect/sync_service.rb | 2 +- .../create_service.rb | 2 - app/services/labels/create_service.rb | 2 + app/services/members/create_service.rb | 3 +- .../merge_requests/after_create_service.rb | 3 +- app/services/merge_requests/base_service.rb | 4 + .../merge_requests/cleanup_refs_service.rb | 2 + app/services/merge_requests/close_service.rb | 3 +- .../create_from_issue_service.rb | 3 +- .../merge_requests/export_csv_service.rb | 20 +- app/services/merge_requests/merge_service.rb | 4 +- .../mergeability_check_service.rb | 16 - .../merge_requests/post_merge_service.rb | 3 +- app/services/merge_requests/reopen_service.rb | 3 +- app/services/merge_requests/update_service.rb | 34 +- .../package_settings/update_service.rb | 40 + app/services/notes/create_service.rb | 5 + app/services/notes/destroy_service.rb | 5 + app/services/notes/update_service.rb | 5 + app/services/notification_service.rb | 10 +- app/services/onboarding_progress_service.rb | 6 +- app/services/packages/create_event_service.rb | 16 +- .../debian/create_package_file_service.rb | 36 + .../debian/extract_metadata_service.rb | 85 + .../debian/get_or_create_incoming_service.rb | 11 + .../maven/find_or_create_package_service.rb | 23 +- app/services/packages/nuget/search_service.rb | 110 +- ...te_legacy_storage_to_deployment_service.rb | 58 + app/services/pages/zip_directory_service.rb | 49 +- app/services/post_receive_service.rb | 2 +- app/services/projects/after_import_service.rb | 4 +- .../cleanup_tags_service.rb | 57 +- .../gitlab/delete_tags_service.rb | 4 +- app/services/projects/fork_service.rb | 6 +- app/services/projects/housekeeping_service.rb | 107 +- ...ule_bulk_repository_shard_moves_service.rb | 42 +- app/services/projects/transfer_service.rb | 9 +- app/services/projects/unlink_fork_service.rb | 13 + app/services/projects/update_pages_service.rb | 41 +- .../update_repository_storage_service.rb | 120 +- app/services/projects/update_service.rb | 5 - .../repositories/housekeeping_service.rb | 106 + .../resource_events/change_state_service.rb | 2 +- .../serverless/associate_domain_service.rb | 2 +- .../service_desk_settings/update_service.rb | 4 - ...ule_bulk_repository_shard_moves_service.rb | 31 + .../update_repository_storage_service.rb | 21 + app/services/todo_service.rb | 4 +- app/services/web_hook_service.rb | 4 +- .../distribution_release_file_uploader.rb | 27 + .../packages/package_file_uploader.rb | 4 +- .../feature_flag_strategies_validator.rb | 6 +- .../json_schemas/debian_fields.json | 9 + ...integration_payload_attribute_mapping.json | 3 +- .../abuse_reports/_abuse_report.html.haml | 4 +- .../application_settings/_gitpod.html.haml | 1 - .../application_settings/_ip_limits.html.haml | 7 + .../application_settings/_signup.html.haml | 2 +- .../application_settings/_spam.html.haml | 8 + .../application_settings/_usage.html.haml | 2 +- .../application_settings/reporting.html.haml | 2 +- .../admin/background_jobs/show.html.haml | 2 +- .../admin/dev_ops_report/_report.html.haml | 2 +- app/views/admin/dev_ops_report/show.html.haml | 2 +- app/views/admin/groups/show.html.haml | 10 +- app/views/admin/hooks/_form.html.haml | 65 +- app/views/admin/jobs/index.html.haml | 2 + app/views/admin/runners/index.html.haml | 26 +- app/views/admin/runners/show.html.haml | 32 +- app/views/admin/system_info/show.html.haml | 28 +- app/views/admin/users/_admin_notes.html.haml | 2 +- app/views/admin/users/index.html.haml | 3 +- .../ci/runner/_how_to_setup_runner.html.haml | 24 +- ...ow_to_setup_runner_automatically.html.haml | 15 +- app/views/ci/variables/_index.html.haml | 2 +- .../clusters/clusters/gcp/_form.html.haml | 1 - app/views/clusters/clusters/new.html.haml | 1 - app/views/dashboard/todos/index.html.haml | 2 +- app/views/devise/shared/_footer.html.haml | 8 + app/views/devise/shared/_signup_box.html.haml | 2 +- .../doorkeeper/authorizations/new.html.haml | 4 + app/views/events/event/_push.html.haml | 2 +- .../explore/projects/_projects.html.haml | 2 +- .../groups/_invite_members_modal.html.haml | 2 +- app/views/groups/edit.html.haml | 4 +- .../groups/group_members/index.html.haml | 192 +- .../registry/repositories/index.html.haml | 33 +- .../groups/runners/_group_runners.html.haml | 13 +- app/views/groups/runners/_index.html.haml | 4 +- .../settings/_two_factor_auth.html.haml | 2 +- .../ci_cd/_auto_devops_form.html.haml | 4 +- .../groups/settings/ci_cd/show.html.haml | 6 +- .../packages_and_registries/index.html.haml | 5 + .../subscriptions/index.html.haml | 25 +- app/views/layouts/_head.html.haml | 2 - app/views/layouts/_startup_css.haml | 2 - .../layouts/_startup_css_activation.haml | 2 - app/views/layouts/devise.html.haml | 10 +- app/views/layouts/devise_empty.html.haml | 11 +- app/views/layouts/header/_default.html.haml | 33 +- ...invite_members_new_dropdown_item.html.haml | 3 + app/views/layouts/header/_new_dropdown.haml | 4 +- ...invite_members_new_dropdown_item.html.haml | 3 + app/views/layouts/jira_connect.html.haml | 5 +- app/views/layouts/nav/_breadcrumbs.html.haml | 2 +- .../layouts/nav/sidebar/_group.html.haml | 10 +- .../layouts/nav/sidebar/_project.html.haml | 4 +- .../notify/_issuable_csv_export.html.haml | 2 +- app/views/notify/issue_due_email.html.haml | 2 +- app/views/notify/issue_due_email.text.erb | 2 +- app/views/notify/issues_csv_email.text.erb | 2 +- ...er_expiration_date_updated_email.html.haml | 6 + ...ber_expiration_date_updated_email.text.erb | 5 + .../notify/merge_requests_csv_email.text.erb | 2 +- .../notify/pipeline_failed_email.html.haml | 2 +- .../notify/pipeline_failed_email.text.erb | 2 +- .../notify/pipeline_fixed_email.html.haml | 2 +- .../notify/pipeline_fixed_email.text.erb | 2 +- .../notify/pipeline_success_email.html.haml | 2 +- .../notify/pipeline_success_email.text.erb | 2 +- ...rovisioned_member_access_granted_email.erb | 14 + ...ovisioned_member_access_granted_email.haml | 24 + app/views/profiles/chat_names/index.html.haml | 2 +- app/views/profiles/show.html.haml | 2 +- .../two_factor_auths/_codes.html.haml | 17 +- .../two_factor_auths/create.html.haml | 4 - app/views/projects/_export.html.haml | 2 +- app/views/projects/_home_panel.html.haml | 2 +- .../projects/_invite_members_modal.html.haml | 2 +- .../projects/_service_desk_settings.html.haml | 6 +- .../projects/_visibility_modal.html.haml | 4 +- .../projects/alert_management/index.html.haml | 1 + .../blob/_template_selectors.html.haml | 3 + .../blob/viewers/_gitlab_ci_yml.html.haml | 6 +- .../viewers/_gitlab_ci_yml_loading.html.haml | 4 +- app/views/projects/branches/_branch.html.haml | 2 +- app/views/projects/branches/new.html.haml | 9 +- app/views/projects/ci/builds/_build.html.haml | 12 +- app/views/projects/ci/lints/show.html.haml | 2 +- .../ci/pipeline_editor/show.html.haml | 8 +- app/views/projects/commit/_change.html.haml | 40 +- .../projects/commit/_commit_box.html.haml | 2 +- .../projects/commit/_commit_modal.html.haml | 26 + app/views/projects/commit/show.html.haml | 4 +- app/views/projects/edit.html.haml | 17 +- .../environments/_metrics_button.html.haml | 2 +- app/views/projects/incidents/index.html.haml | 1 + .../issues/_design_management.html.haml | 2 +- .../issues/import_csv/_button.html.haml | 2 +- app/views/projects/jobs/index.html.haml | 5 +- .../merge_requests/_mr_title.html.haml | 6 +- .../projects/merge_requests/show.html.haml | 5 +- .../projects/mirrors/_instructions.html.haml | 4 +- .../projects/mirrors/_mirror_repos.html.haml | 10 +- .../mirrors/_mirror_repos_push.html.haml | 4 +- app/views/projects/pages/_destroy.haml | 6 +- app/views/projects/pages/_use.html.haml | 2 +- .../pipeline_schedules/index.html.haml | 2 +- app/views/projects/pipelines/_info.html.haml | 14 +- app/views/projects/pipelines/charts.html.haml | 10 +- app/views/projects/pipelines/index.html.haml | 2 +- app/views/projects/pipelines/show.html.haml | 3 + .../project_members/_groups.html.haml | 17 +- .../projects/project_members/_team.html.haml | 22 +- .../projects/project_members/index.html.haml | 121 +- .../shared/_create_protected_branch.html.haml | 13 +- .../shared/_index.html.haml | 13 +- .../shared/_create_protected_tag.html.haml | 17 +- .../protected_tags/shared/_index.html.haml | 12 +- .../shared/_tags_list.html.haml | 6 +- .../registry/repositories/index.html.haml | 37 +- .../projects/runners/_group_runners.html.haml | 29 +- app/views/projects/runners/_index.html.haml | 3 - app/views/projects/runners/_runner.html.haml | 2 +- .../runners/_shared_runners.html.haml | 7 +- .../runners/_specific_runners.html.haml | 12 +- app/views/projects/runners/edit.html.haml | 2 +- app/views/projects/services/_form.html.haml | 6 +- .../projects/services/alerts/_help.html.haml | 1 - .../projects/services/alerts/_top.html.haml | 8 - .../settings/ci_cd/_autodevops_form.html.haml | 8 +- .../projects/settings/ci_cd/show.html.haml | 19 +- .../operations/_alert_management.html.haml | 1 + app/views/projects/show.html.haml | 2 + app/views/projects/snippets/verify.html.haml | 2 - .../tracings/_tracing_button.html.haml | 2 +- app/views/shared/_recaptcha_form.html.haml | 5 +- app/views/shared/_search_settings.html.haml | 2 + app/views/shared/_zen.html.haml | 4 +- .../shared/deploy_tokens/_index.html.haml | 2 +- .../deploy_tokens/_revoke_modal.html.haml | 6 +- .../shared/empty_states/_snippets.html.haml | 4 +- .../shared/empty_states/_wikis.html.haml | 6 +- .../shared/integrations/_index.html.haml | 3 +- app/views/shared/issuable/_sidebar.html.haml | 12 +- .../issuable/form/_branch_chooser.html.haml | 19 + app/views/shared/members/_badge.html.haml | 2 +- .../shared/members/_invite_member.html.haml | 4 +- app/views/shared/members/_member.html.haml | 3 - .../members}/tab_pane/_form_item.html.haml | 0 .../members}/tab_pane/_header.html.haml | 0 .../members}/tab_pane/_title.html.haml | 0 app/views/shared/milestones/_header.html.haml | 7 +- .../shared/milestones/_milestone.html.haml | 5 +- .../promotions/_promote_servicedesk.html.haml | 6 +- app/views/shared/runners/_form.html.haml | 6 +- .../runners/_runner_description.html.haml | 14 +- .../_shared_runners_description.html.haml | 4 +- app/views/shared/web_hooks/_hook.html.haml | 4 +- app/views/shared/wikis/_form.html.haml | 10 +- app/views/shared/wikis/_sidebar.html.haml | 18 +- app/views/shared/wikis/diff.html.haml | 11 +- app/views/shared/wikis/edit.html.haml | 19 +- app/views/shared/wikis/history.html.haml | 11 +- app/views/shared/wikis/pages.html.haml | 6 +- app/views/shared/wikis/show.html.haml | 2 +- .../sherlock/transactions/show.html.haml | 4 +- app/views/snippets/verify.html.haml | 2 - app/workers/all_queues.yml | 88 +- app/workers/bulk_import_worker.rb | 53 +- app/workers/bulk_imports/entity_worker.rb | 23 + ...daily_build_group_report_results_worker.rb | 2 + .../coverage_report_worker.rb} | 8 +- .../expire_artifacts_worker.rb | 23 + .../update_repository_storage_worker.rb | 42 + .../cleanup_container_repository_worker.rb | 27 +- .../record_conversion_event_worker.rb | 18 + app/workers/expire_build_artifacts_worker.rb | 4 +- .../import_pull_requests_reviews_worker.rb | 15 +- .../gitlab_performance_bar_stats_worker.rb | 3 +- app/workers/gitlab_usage_ping_worker.rb | 2 +- app/workers/issuable_export_csv_worker.rb | 60 +- .../jira_connect/sync_branch_worker.rb | 3 +- .../jira_connect/sync_deployments_worker.rb | 29 + .../jira_connect/sync_feature_flags_worker.rb | 24 + .../jira_connect/sync_merge_request_worker.rb | 3 +- .../onboarding_pipeline_created_worker.rb | 20 + app/workers/object_pool/join_worker.rb | 2 +- ...roject_update_repository_storage_worker.rb | 32 +- ...dule_bulk_repository_shard_moves_worker.rb | 13 + ...nippet_update_repository_storage_worker.rb | 23 + bin/web_puma | 2 +- config/application.rb | 15 +- config/feature_categories.yml | 4 +- .../ci_allow_failure_with_exit_codes.yml | 2 +- .../ci_config_visualization_tab.yml | 2 +- ...ci_include_multiple_files_from_project.yml | 8 - .../development/ci_pipeline_editor_page.yml | 2 +- .../ci_pipeline_open_merge_requests.yml | 3 +- .../development/ci_rules_variables.yml | 2 +- ...i_seed_block_run_before_workflow_rules.yml | 8 - .../collect_package_events_redis.yml | 2 +- .../development/devops_adoption_feature.yml | 4 +- ...y_codes.yml => drag_comment_selection.yml} | 8 +- config/feature_flags/development/gitpod.yml | 8 - .../feature_flags/development/gl_tooltips.yml | 8 + .../development/graphql_logging.yml | 4 +- .../group_members_filtered_search.yml | 8 - .../development/invisible_captcha.yml | 8 - ...grations.yml => jira_sync_deployments.yml} | 6 +- .../development/jira_sync_feature_flags.yml | 8 + .../development/lfs_chunked_encoding.yml | 8 - .../development/merge_ref_auto_sync.yml | 8 - .../development/merge_ref_auto_sync_lock.yml | 8 - ...nherited_labels.yml => multiple_todos.yml} | 10 +- ...re_history.yml => new_jira_connect_ui.yml} | 10 +- .../new_project_level_vsa_backend.yml | 8 - ...for_admin.yml => non_public_artifacts.yml} | 9 +- .../optional_code_owners_sections.yml | 8 + ...packages_and_registries_group_settings.yml | 8 + ... pages_migration_mark_as_not_deployed.yml} | 9 +- .../development/reviewer_approval_rules.yml | 2 +- ..._mode.yml => s3_multithreaded_uploads.yml} | 8 +- ...lytics.yml => search_settings_in_page.yml} | 8 +- ...curity_on_demand_scans_site_validation.yml | 2 +- .../service_desk_custom_address.yml | 8 - .../set_user_availability_status.yml | 2 +- ...l => skip_dag_manual_and_delayed_jobs.yml} | 9 +- .../{startup_css.yml => sourcegraph.yml} | 8 +- .../development/suggestions_custom_commit.yml | 8 + .../track_unique_wiki_page_views.yml | 2 +- .../development/unified_diff_components.yml | 2 +- .../upload_middleware_jwt_params_handler.yml | 8 - ... => usage_data_i_code_review_mr_diffs.yml} | 6 +- ...ata_i_code_review_mr_single_file_diffs.yml | 8 + ...sage_data_i_code_review_user_close_mr.yml} | 6 +- ...age_data_i_code_review_user_create_mr.yml} | 6 +- ...a_i_code_review_user_create_mr_comment.yml | 8 + ...eview_user_create_multiline_mr_comment.yml | 8 + ..._i_code_review_user_create_review_note.yml | 8 + ...ata_i_code_review_user_edit_mr_comment.yml | 8 + ..._review_user_edit_multiline_mr_comment.yml | 8 + ...sage_data_i_code_review_user_merge_mr.yml} | 6 +- ...data_i_code_review_user_publish_review.yml | 8 + ...a_i_code_review_user_remove_mr_comment.yml | 8 + ...eview_user_remove_multiline_mr_comment.yml | 8 + ...age_data_i_code_review_user_reopen_mr.yml} | 8 +- ...a_i_code_review_user_single_file_diffs.yml | 8 + ...testing_full_code_quality_report_total.yml | 8 + ...esting_group_code_coverage_visit_total.yml | 8 + ..._i_testing_metrics_report_widget_total.yml | 8 + ...i_testing_web_performance_widget_total.yml | 8 + ..._management_alerts_total_unique_counts.yml | 8 - ...nagement_incidents_total_unique_counts.yml | 8 - ...ata_p_terraform_state_api_unique_users.yml | 8 + ...ta_track_ci_templates_unique_projects.yml} | 10 +- ... value_stream_analytics_extended_form.yml} | 8 +- .../development/variable_inside_variable.yml | 8 + .../variables_in_include_section_ci.yml | 8 + .../development/vue_group_members_list.yml | 8 - config/feature_flags/development/wiki.yml | 2 +- .../development/wiki_front_matter.yml | 6 +- ...syntax_templates_experiment_percentage.yml | 8 + ...stomize_homepage_experiment_percentage.yml | 8 + ...to_issues_board_experiment_percentage.yml} | 12 +- ..._group_version_a_experiment_percentage.yml | 8 + ...oject_version_a_experiment_percentage.yml} | 12 +- ...ers_new_dropdown_experiment_percentage.yml | 8 + ...embers_version_a_experiment_percentage.yml | 8 + ...embers_version_b_experiment_percentage.yml | 8 + ...jobs_empty_state_experiment_percentage.yml | 8 + .../experiment/null_hypothesis.yml | 1 + ...boarding_issues_experiment_percentage.yml} | 12 +- ...ines_empty_state_experiment_percentage.yml | 8 + .../explore_pipeline_status.yml} | 9 +- .../ops/scalability_ci_fetch_sha.yml | 8 + config/gitlab.yml.example | 14 +- config/helpers/is_eslint.js | 2 +- config/helpers/vendor_dll_hash.js | 10 +- config/initializers/0_inject_feature_flags.rb | 39 - config/initializers/1_settings.rb | 18 +- config/initializers/8_devise.rb | 2 +- config/initializers/carrierwave_patch.rb | 19 +- config/initializers/grape_patch.rb | 31 - config/initializers/postgres_partitioning.rb | 2 +- config/initializers/trusted_proxies.rb | 2 +- config/karma.config.js | 12 +- config/known_invalid_graphql_queries.yml | 5 + config/locales/en.yml | 1 + config/metrics/counts_28d/deployments.yml | 15 + ..._management_issue_title_changed_weekly.yml | 16 + config/metrics/counts_all/deployments.yml | 15 + config/metrics/license/recorded_at.yml | 16 + config/metrics/license/uuid.yml | 17 + config/metrics/schema.json | 66 + config/metrics/settings/database_adapter.yml | 14 + config/plugins/monaco_webpack.js | 2 +- config/puma.example.development.rb | 10 + config/puma.rb.example | 12 +- .../puma_actioncable.example.development.rb | 10 + config/routes.rb | 15 +- config/routes/group.rb | 2 + config/routes/import.rb | 1 + config/sidekiq_queues.yml | 10 + config/webpack.config.js | 18 +- danger/frozen_string/Dangerfile | 29 +- .../Dangerfile | 20 +- danger/roulette/Dangerfile | 7 +- danger/specs/Dangerfile | 17 +- data/whats_new/202009300001_13_04.yml | 2 +- data/whats_new/202012160001_13_07.yml | 51 + data/whats_new/202101140001_13_08.yml | 83 + db/fixtures/development/03_project.rb | 1 + ...ial_index_from_ci_builds_artifacts_file.rb | 2 +- ...190402150158_backport_enterprise_schema.rb | 8 +- ...3_add_index_to_issues_relative_position.rb | 2 +- ...nalytics_cycle_analytics_project_stages.rb | 13 +- ..._analytics_cycle_analytics_group_stages.rb | 13 +- ...ics_language_trend_repository_languages.rb | 7 +- ...ts_on_project_id_state_environment_type.rb | 4 +- ...package_type_index_to_packages_packages.rb | 2 +- ...29144631_add_index_to_resource_group_id.rb | 2 +- ...es_to_deployments_on_project_id_and_ref.rb | 2 +- ...d_group_index_and_fk_to_import_failures.rb | 2 +- ...update_project_index_to_import_failures.rb | 4 +- ...ate_prometheus_services_background_jobs.rb | 4 +- ...0200528054112_add_index_to_package_name.rb | 2 +- ...ics_cycle_analytics_group_value_streams.rb | 4 +- ...ex_on_import_type_creator_id_created_at.rb | 2 +- ...emove_compliance_frameworks_group_id_fk.rb | 2 +- ...kfill_jira_tracker_deployment_type_jobs.rb | 4 +- ...112215132_swap_partitioned_audit_events.rb | 15 + ...00_create_packages_debian_file_metadata.rb | 29 + ...e_packages_debian_project_distributions.rb | 62 + ...ate_packages_debian_group_distributions.rb | 62 + ...e_packages_debian_project_architectures.rb | 38 + ...ate_packages_debian_group_architectures.rb | 38 + ...3952_keep_latest_artifact_project_level.rb | 19 + ...reate_incident_management_oncall_shifts.rb | 35 + ...d_code_challenge_to_oauth_access_grants.rb | 26 + ..._version_sha_cache_to_composer_metadata.rb | 19 + ...nge_mr_allow_maintainer_to_push_default.rb | 17 + ...214032220_add_has_external_wiki_trigger.rb | 52 + ...e_max_list_size_to_application_settings.rb | 11 + ...p_tags_service_max_list_size_constraint.rb | 19 + .../20201214184020_add_epic_board_list.rb | 33 + ...05404_create_namespace_package_settings.rb | 25 + ...01216151616_add_squash_commit_sha_index.rb | 22 + ..._add_devops_adoption_snapshot_range_end.rb | 11 + ...d_group_merge_request_approval_settings.rb | 24 + ...2603_create_elastic_reindexing_subtasks.rb | 56 + ...0201221124036_add_devops_snapshot_index.rb | 19 + ...lusters_helm_major_version_default_to_3.rb | 9 + ...r_defined_variables_to_project_settings.rb | 19 + ...24144948_migrate_coverage_report_worker.rb | 15 + ...eason_into_vulnerability_feedback_table.rb | 13 + ...d_invisible_captcha_enabled_to_settings.rb | 9 + ...g_response_text_to_application_settings.rb | 12 + ...201230180202_create_onboarding_progress.rb | 36 + ...t_limit_for_rate_limiting_response_text.rb | 16 + ...64121_drop_temporary_index_on_ci_builds.rb | 19 + ...104163218_add_epic_board_position_index.rb | 18 + ...20210106153021_drop_tmp_index_on_emails.rb | 20 + ...08161039_update_max_import_size_default.rb | 9 + ...12084512_drop_tmp_index_on_emails_again.rb | 18 + ...10114033715_remove_group_id_title_index.rb | 20 + ...uest_assignees_migration_progress_check.rb | 2 +- ...edule_sync_issuables_state_id_where_nil.rb | 4 +- ...s_and_audit_events_created_at_author_id.rb | 6 +- ..._backfill_version_author_and_created_at.rb | 2 +- .../20191104142124_nullify_users_role.rb | 2 +- ...149_schedule_fix_orphan_promoted_issues.rb | 2 +- ...7225719_schedule_migrate_security_scans.rb | 2 +- ...4259_remove_duplicate_labels_from_group.rb | 135 + ...iqueness_index_to_label_title_and_group.rb | 21 + ...0201207165956_remove_duplicate_services.rb | 14 + ...e_backfilling_artifact_expiry_migration.rb | 44 + ...finding_uuid_for_vulnerability_feedback.rb | 25 + ...6_add_devops_adoption_snapshot_not_null.rb | 31 + ...ndex_ci_pipelines_on_schedule_id_and_id.rb | 21 + ...column_group_id_on_compliance_framework.rb | 9 + ...107194543_remove_alerts_service_records.rb | 19 + ...210112143418_remove_duplicate_services2.rb | 29 + ...5215854_cancel_artifact_expiry_backfill.rb | 22 + db/schema_migrations/20200716234259 | 1 + db/schema_migrations/20200716234518 | 1 + db/schema_migrations/20201112215132 | 1 + db/schema_migrations/20201204105300 | 1 + db/schema_migrations/20201204110700 | 1 + db/schema_migrations/20201204110800 | 1 + db/schema_migrations/20201204111000 | 1 + db/schema_migrations/20201204111100 | 1 + db/schema_migrations/20201204193952 | 1 + db/schema_migrations/20201207165956 | 1 + db/schema_migrations/20201208175117 | 1 + db/schema_migrations/20201208210209 | 1 + db/schema_migrations/20201209163958 | 1 + db/schema_migrations/20201209193551 | 1 + db/schema_migrations/20201211090634 | 1 + db/schema_migrations/20201214000000 | 1 + db/schema_migrations/20201214032220 | 1 + db/schema_migrations/20201214111858 | 1 + db/schema_migrations/20201214112752 | 1 + db/schema_migrations/20201214184020 | 1 + db/schema_migrations/20201215205404 | 1 + db/schema_migrations/20201216151616 | 1 + db/schema_migrations/20201216154457 | 1 + db/schema_migrations/20201216185336 | 1 + db/schema_migrations/20201217070530 | 1 + db/schema_migrations/20201217132603 | 1 + db/schema_migrations/20201221124036 | 1 + db/schema_migrations/20201221213415 | 1 + db/schema_migrations/20201223012231 | 1 + db/schema_migrations/20201223114050 | 1 + db/schema_migrations/20201224144948 | 1 + db/schema_migrations/20201228184500 | 1 + db/schema_migrations/20201229105948 | 1 + db/schema_migrations/20201230161206 | 1 + db/schema_migrations/20201230180202 | 1 + db/schema_migrations/20210101110640 | 1 + db/schema_migrations/20210102164121 | 1 + db/schema_migrations/20210104163218 | 1 + db/schema_migrations/20210105103649 | 1 + db/schema_migrations/20210106153021 | 1 + db/schema_migrations/20210107194543 | 1 + db/schema_migrations/20210108161039 | 1 + db/schema_migrations/20210112084512 | 1 + db/schema_migrations/20210112143418 | 1 + db/schema_migrations/20210114033715 | 1 + db/schema_migrations/20210115215854 | 1 + db/structure.sql | 474 +- doc/.vale/gitlab/Acronyms.yml | 2 + doc/.vale/gitlab/Admin.yml | 2 +- doc/.vale/gitlab/AlertBoxStyle.yml | 7 +- doc/.vale/gitlab/British.yml | 2 +- doc/.vale/gitlab/CurlStringsQuoted.yml | 4 +- doc/.vale/gitlab/FutureTense.yml | 3 +- doc/.vale/gitlab/OxfordComma.yml | 3 +- doc/.vale/gitlab/ReferenceLinks.yml | 2 +- doc/.vale/gitlab/SentenceSpacing.yml | 5 +- doc/.vale/gitlab/Spelling.yml | 3 +- doc/.vale/gitlab/SubstitutionSuggestions.yml | 6 +- doc/.vale/gitlab/SubstitutionWarning.yml | 4 +- doc/.vale/gitlab/Substitutions.yml | 4 +- doc/.vale/gitlab/spelling-exceptions.txt | 2 + doc/administration/audit_events.md | 2 + doc/administration/auth/jwt.md | 2 +- .../auth/ldap/google_secure_ldap.md | 2 +- doc/administration/auth/ldap/index.md | 6 +- doc/administration/compliance.md | 28 +- .../geo/disaster_recovery/index.md | 75 +- doc/administration/geo/index.md | 6 - .../geo/replication/configuration.md | 5 + doc/administration/geo/setup/database.md | 171 +- .../gitlab_gitaly_version_mismatch_v12_4.png | Bin 21779 -> 0 bytes doc/administration/gitaly/index.md | 20 +- doc/administration/gitaly/praefect.md | 13 +- doc/administration/housekeeping.md | 17 + doc/administration/incoming_email.md | 2 +- doc/administration/index.md | 41 +- doc/administration/integration/plantuml.md | 12 +- doc/administration/job_logs.md | 4 +- .../monitoring/performance/index.md | 11 + .../monitoring/prometheus/gitlab_exporter.md | 24 + .../monitoring/prometheus/gitlab_metrics.md | 1 + doc/administration/nfs.md | 7 +- doc/administration/object_storage.md | 10 +- .../operations/extra_sidekiq_processes.md | 2 +- .../operations/moving_repositories.md | 6 +- .../packages/container_registry.md | 55 +- doc/administration/pages/index.md | 89 +- doc/administration/pages/source.md | 38 +- doc/administration/postgresql/pgbouncer.md | 11 +- .../postgresql/replication_and_failover.md | 1192 ++-- doc/administration/raketasks/check.md | 58 +- doc/administration/raketasks/github_import.md | 2 +- doc/administration/raketasks/storage.md | 4 +- .../reference_architectures/10k_users.md | 198 +- .../reference_architectures/1k_users.md | 3 +- .../reference_architectures/25k_users.md | 198 +- .../reference_architectures/2k_users.md | 13 +- .../reference_architectures/3k_users.md | 243 +- .../reference_architectures/50k_users.md | 198 +- .../reference_architectures/5k_users.md | 230 +- .../reference_architectures/index.md | 8 +- .../troubleshooting.md | 44 +- .../repository_storage_paths.md | 6 + doc/administration/terraform_state.md | 7 +- .../troubleshooting/elasticsearch.md | 38 + .../gitlab_rails_cheat_sheet.md | 8 +- .../troubleshooting/postgresql.md | 14 +- .../troubleshooting/tracing_correlation_id.md | 2 +- doc/administration/uploads.md | 60 +- doc/api/README.md | 73 +- doc/api/api_resources.md | 1 + doc/api/appearance.md | 4 +- doc/api/audit_events.md | 4 +- doc/api/avatar.md | 2 +- doc/api/boards.md | 2 +- doc/api/container_registry.md | 9 +- doc/api/deploy_keys.md | 6 +- doc/api/deployments.md | 2 +- doc/api/discussions.md | 3 +- doc/api/epic_links.md | 2 +- doc/api/epics.md | 41 +- doc/api/features.md | 4 +- .../graphql/img/users_query_example_v13_8.png | Bin 0 -> 200017 bytes doc/api/graphql/index.md | 4 + .../graphql/reference/gitlab_schema.graphql | 3361 ++++++--- doc/api/graphql/reference/gitlab_schema.json | 6328 ++++++++++++++--- doc/api/graphql/reference/index.md | 529 +- doc/api/graphql/users_example.md | 109 + doc/api/group_boards.md | 22 +- doc/api/group_import_export.md | 2 +- doc/api/groups.md | 26 +- doc/api/import.md | 2 +- doc/api/invitations.md | 24 + doc/api/issues.md | 61 +- doc/api/job_artifacts.md | 8 +- doc/api/members.md | 6 +- doc/api/merge_requests.md | 482 +- doc/api/notes.md | 4 +- doc/api/oauth2.md | 124 +- doc/api/openapi/openapi.yaml | 54 +- doc/api/openapi/v4/access_requests.yaml | 381 + doc/api/packages.md | 10 +- doc/api/personal_access_tokens.md | 5 +- doc/api/project_import_export.md | 2 +- doc/api/project_level_variables.md | 6 +- doc/api/project_repository_storage_moves.md | 3 +- doc/api/projects.md | 82 +- doc/api/releases/index.md | 26 +- doc/api/releases/links.md | 10 +- doc/api/scim.md | 10 +- doc/api/search.md | 16 +- doc/api/services.md | 6 +- doc/api/settings.md | 10 +- doc/api/snippet_repository_storage_moves.md | 293 + doc/api/users.md | 35 +- .../cloud_native_gitlab_pages/index.md | 4 +- .../feature_flags_development/index.md | 24 +- doc/ci/README.md | 14 +- doc/ci/caching/index.md | 31 + doc/ci/cloud_deployment/index.md | 19 +- doc/ci/docker/using_docker_build.md | 97 +- doc/ci/docker/using_docker_images.md | 251 +- doc/ci/docker/using_kaniko.md | 35 +- doc/ci/environments/deployment_safety.md | 72 +- doc/ci/environments/incremental_rollouts.md | 14 +- doc/ci/environments/index.md | 107 +- doc/ci/environments/protected_environments.md | 14 +- doc/ci/examples/README.md | 42 +- .../examples/artifactory_and_gitlab/index.md | 5 + .../index.md | 17 +- .../index.md | 58 +- doc/ci/examples/deployment/README.md | 6 +- .../deployment/composer-npm-deploy.md | 36 +- .../index.md | 5 + .../end_to_end_testing_webdriverio/index.md | 6 + .../laravel_with_gitlab_and_envoy/index.md | 6 + doc/ci/examples/semantic-release.md | 2 +- ...t-and-deploy-ruby-application-to-heroku.md | 10 +- .../img/mix-phoenix-new.png | Bin 6602 -> 0 bytes .../img/mix-phoenix-server.png | Bin 25235 -> 0 bytes .../img/pipelines.png | Bin 15794 -> 0 bytes .../img/select_template_v12_6.png | Bin 32253 -> 0 bytes .../img/set_up_ci_v12_6.png | Bin 57203 -> 0 bytes .../index.md | 397 +- doc/ci/img/environments_available.png | Bin 8582 -> 0 bytes doc/ci/img/environments_available_13_7.png | Bin 0 -> 29124 bytes doc/ci/introduction/index.md | 4 +- .../img/pipeline-fork_v13_7.png | Bin 0 -> 15697 bytes doc/ci/merge_request_pipelines/index.md | 4 + .../pipelines_for_merged_results/index.md | 4 +- .../merge_trains/index.md | 10 +- doc/ci/multi_project_pipelines.md | 3 + .../ci_config_visualization_hover_v13_7.png | Bin .../img/ci_config_visualization_v13_7.png | Bin .../img/pipeline_editor_commit_v13_8.png | Bin 0 -> 18744 bytes .../img/pipeline_editor_lint_v13_8.png | Bin 0 -> 20402 bytes .../img/pipeline_editor_validate_v13_8.png | Bin 0 -> 10399 bytes doc/ci/pipeline_editor/index.md | 133 + .../img/job_artifacts_merge_request.png | Bin 0 -> 40817 bytes doc/ci/pipelines/index.md | 23 +- doc/ci/pipelines/job_artifacts.md | 25 +- doc/ci/pipelines/schedules.md | 2 +- doc/ci/quick_start/README.md | 2 +- doc/ci/review_apps/index.md | 22 +- doc/ci/runners/README.md | 18 +- doc/ci/unit_test_reports.md | 27 +- doc/ci/variables/README.md | 61 +- doc/ci/variables/deprecated_variables.md | 36 +- doc/ci/variables/predefined_variables.md | 240 +- .../variables/where_variables_can_be_used.md | 1 + doc/ci/yaml/README.md | 217 +- doc/ci/yaml/gitlab_ci_yaml.md | 2 +- doc/ci/yaml/visualization.md | 52 +- doc/development/README.md | 9 +- doc/development/adding_database_indexes.md | 31 + doc/development/agent/identity.md | 4 +- doc/development/agent/local.md | 44 +- doc/development/api_graphql_styleguide.md | 7 +- doc/development/changelog.md | 4 +- doc/development/cicd/templates.md | 20 +- doc/development/code_review.md | 17 +- doc/development/contributing/style_guides.md | 6 +- .../strings_and_the_text_data_type.md | 35 +- doc/development/database_review.md | 4 +- .../documentation/feature_flags.md | 8 +- doc/development/documentation/index.md | 18 +- .../documentation/styleguide/index.md | 77 +- doc/development/documentation/testing.md | 12 +- doc/development/elasticsearch.md | 48 + doc/development/event_tracking/backend.md | 6 +- doc/development/event_tracking/frontend.md | 6 +- doc/development/event_tracking/index.md | 6 +- doc/development/experiment_guide/index.md | 33 +- doc/development/fe_guide/dependencies.md | 7 +- doc/development/fe_guide/editor_lite.md | 9 +- doc/development/fe_guide/event_tracking.md | 6 +- doc/development/fe_guide/graphql.md | 5 +- doc/development/fe_guide/icons.md | 7 - doc/development/fe_guide/performance.md | 4 +- doc/development/fe_guide/style/javascript.md | 2 +- doc/development/fe_guide/style/vue.md | 84 +- doc/development/fe_guide/vue.md | 107 +- .../feature_categorization/index.md | 2 +- doc/development/feature_flags/controls.md | 1 + doc/development/feature_flags/development.md | 12 + doc/development/feature_flags/index.md | 58 +- doc/development/feature_flags/process.md | 27 + doc/development/foreign_keys.md | 2 + doc/development/geo/framework.md | 261 +- doc/development/gitaly.md | 44 +- doc/development/go_guide/index.md | 9 +- doc/development/gotchas.md | 2 +- doc/development/img/snowplow_flow.png | Bin 16589 -> 6029 bytes .../img/stage_group_dashboards_annotation.png | Bin 0 -> 13544 bytes .../img/stage_group_dashboards_debug_1.png | Bin 0 -> 41296 bytes .../img/stage_group_dashboards_debug_2.png | Bin 0 -> 37361 bytes .../img/stage_group_dashboards_debug_3.png | Bin 0 -> 51282 bytes .../img/stage_group_dashboards_filters.png | Bin 0 -> 10648 bytes .../img/stage_group_dashboards_metrics.png | Bin 0 -> 38776 bytes ...ge_group_dashboards_time_customization.png | Bin 0 -> 20025 bytes .../stage_group_dashboards_time_filter.png | Bin 0 -> 22641 bytes doc/development/instrumentation.md | 2 +- doc/development/integrations/codesandbox.md | 10 +- doc/development/integrations/jenkins.md | 2 +- doc/development/integrations/jira_connect.md | 21 +- doc/development/internal_api.md | 19 + .../iterating_tables_in_batches.md | 25 +- doc/development/migration_style_guide.md | 6 +- .../new_fe_guide/development/accessibility.md | 2 +- doc/development/packages.md | 18 + doc/development/pipelines.md | 113 +- .../product_analytics/event_dictionary.md | 6 +- doc/development/product_analytics/index.md | 11 +- doc/development/product_analytics/snowplow.md | 616 +- .../product_analytics/usage_ping.md | 1059 +-- doc/development/profiling.md | 89 + doc/development/query_performance.md | 2 +- doc/development/secure_coding_guidelines.md | 2 +- doc/development/sidekiq_style_guide.md | 2 +- doc/development/snowplow.md | 623 ++ doc/development/stage_group_dashboards.md | 148 + doc/development/telemetry/event_dictionary.md | 4 +- doc/development/telemetry/index.md | 4 +- doc/development/telemetry/snowplow.md | 4 +- doc/development/telemetry/usage_ping.md | 4 +- .../testing_guide/best_practices.md | 35 + ...unning_tests_that_require_special_setup.md | 82 + .../testing_guide/frontend_testing.md | 47 +- .../testing_guide/testing_levels.md | 6 +- doc/development/usage_ping.md | 1151 +++ .../usage_ping/metrics_dictionary.md | 73 + doc/gitlab-basics/create-branch.md | 2 +- doc/gitlab-basics/create-project.md | 2 + doc/gitlab-basics/start-using-git.md | 11 +- doc/install/README.md | 24 +- doc/install/aws/index.md | 31 +- doc/install/google_cloud_platform/index.md | 2 +- doc/install/installation.md | 49 +- doc/install/requirements.md | 15 +- doc/integration/bitbucket.md | 7 +- doc/integration/elasticsearch.md | 41 +- doc/integration/github.md | 2 +- doc/integration/gitlab.md | 19 +- doc/integration/gitpod.md | 35 +- doc/integration/jira_development_panel.md | 11 +- doc/integration/vault.md | 16 +- doc/operations/feature_flags.md | 8 +- .../incident_management/alert_integrations.md | 13 +- .../img/incident_metrics_tab_v13_8.png | Bin 0 -> 19907 bytes .../img/metric_image_url_dialog_v13_8.png | Bin 0 -> 15876 bytes .../incident_management/incidents.md | 18 +- .../project_visibility_confirmation_v12_6.png | Bin 33696 -> 0 bytes doc/public_access/public_access.md | 10 - doc/push_rules/push_rules.md | 34 +- doc/raketasks/README.md | 2 +- doc/raketasks/backup_restore.md | 34 +- doc/raketasks/migrate_snippets.md | 2 +- doc/security/rack_attack.md | 6 +- doc/security/webhooks.md | 2 +- doc/subscriptions/gitlab_com/index.md | 53 +- doc/subscriptions/index.md | 4 +- doc/subscriptions/self_managed/index.md | 67 +- doc/system_hooks/system_hooks.md | 4 +- doc/telemetry/index.md | 4 +- doc/telemetry/snowplow.md | 4 +- doc/topics/autodevops/index.md | 16 +- doc/topics/autodevops/quick_start_guide.md | 49 +- .../upgrading_auto_deploy_dependencies.md | 4 +- doc/topics/git/lfs/index.md | 2 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 4 +- doc/topics/git/lfs/migrate_to_git_lfs.md | 5 +- .../index.md | 2 + doc/topics/git/partial_clone.md | 2 +- doc/topics/gitlab_flow.md | 2 +- doc/topics/web_application_firewall/index.md | 97 +- .../quick_start_guide.md | 258 +- .../training/topics/getting_started.md | 2 +- doc/university/training/topics/unstage.md | 2 +- doc/update/README.md | 2 +- doc/update/mysql_to_postgresql.md | 4 +- doc/update/patch_versions.md | 4 +- doc/update/restore_after_failure.md | 4 +- doc/update/upgrading_from_ce_to_ee.md | 4 +- doc/update/upgrading_from_source.md | 4 +- .../upgrading_postgresql_using_slony.md | 4 +- .../admin_area/analytics/dev_ops_report.md | 22 +- doc/user/admin_area/analytics/user_cohorts.md | 29 +- .../admin_area/img/license_admin_area.png | Bin 27826 -> 0 bytes doc/user/admin_area/img/license_upload.png | Bin 10043 -> 0 bytes .../admin_area/img/license_upload_v13_8.png | Bin 0 -> 32860 bytes doc/user/admin_area/license.md | 30 +- .../settings/account_and_limit_settings.md | 14 +- .../settings/continuous_integration.md | 8 +- doc/user/admin_area/settings/index.md | 2 +- .../project_integration_management.md | 16 + .../admin_area/settings/protected_paths.md | 6 +- .../admin_area/settings/usage_statistics.md | 7 +- .../settings/user_and_ip_rate_limits.md | 65 +- doc/user/analytics/ci_cd_analytics.md | 33 + .../img/deployment_frequency_chart_v13_8.png | Bin 0 -> 40919 bytes .../img/pipelines_duration_chart.png | Bin .../img/pipelines_success_chart.png | Bin doc/user/analytics/index.md | 2 +- .../application_security/api_fuzzing/index.md | 1 + .../coverage_fuzzing/index.md | 4 +- doc/user/application_security/dast/index.md | 221 +- .../dependency_scanning/index.md | 15 +- .../application_security/sast/analyzers.md | 24 +- doc/user/application_security/sast/index.md | 27 +- .../secret_detection/index.md | 1 + ...lnerability_details_create_issue_v13_7.png | Bin 86032 -> 31816 bytes .../security_dashboard/index.md | 3 +- .../vulnerabilities/severities.md | 70 + doc/user/clusters/agent/index.md | 16 +- doc/user/clusters/agent/runner.md | 452 ++ doc/user/clusters/applications.md | 17 +- .../compliance/license_compliance/index.md | 2 +- doc/user/discussions/img/threads_resolved.png | Bin 3976 -> 0 bytes doc/user/discussions/index.md | 21 - doc/user/gitlab_com/index.md | 34 +- .../group/import/img/bulk_imports_v13_8.png | Bin 0 -> 61983 bytes .../group/import/img/import_panel_v13_8.png | Bin 0 -> 107428 bytes .../import/img/new_group_navigation_v13_8.png | Bin 0 -> 39500 bytes doc/user/group/import/index.md | 91 + doc/user/group/index.md | 37 +- doc/user/group/iterations/index.md | 16 + .../roadmap/img/roadmap_filters_v13_7.png | Bin 21615 -> 0 bytes .../roadmap/img/roadmap_filters_v13_8.png | Bin 0 -> 20766 bytes doc/user/group/roadmap/index.md | 3 +- .../group/saml_sso/group_managed_accounts.md | 4 +- doc/user/group/saml_sso/index.md | 14 +- doc/user/group/saml_sso/scim_setup.md | 6 +- doc/user/group/settings/import_export.md | 2 +- .../img/group_members_filter_v12_6.png | Bin 6381 -> 0 bytes doc/user/group/subgroups/index.md | 2 +- .../group/value_stream_analytics/index.md | 9 - .../img/terraform_list_view_actions_v13_8.png | Bin 0 -> 36949 bytes .../img/terraform_list_view_v13_5.png | Bin 13849 -> 0 bytes .../img/terraform_list_view_v13_8.png | Bin 0 -> 74877 bytes doc/user/infrastructure/index.md | 85 +- doc/user/infrastructure/mr_integration.md | 8 +- doc/user/infrastructure/terraform_state.md | 79 +- .../packages/composer_repository/index.md | 18 +- doc/user/packages/conan_repository/index.md | 18 +- doc/user/packages/container_registry/index.md | 19 +- doc/user/packages/dependency_proxy/index.md | 3 +- doc/user/packages/generic_packages/index.md | 27 +- doc/user/packages/npm_registry/index.md | 36 +- doc/user/packages/nuget_repository/index.md | 109 +- doc/user/packages/pypi_repository/index.md | 17 +- .../packages/workflows/project_registry.md | 2 +- doc/user/permissions.md | 5 +- .../account/two_factor_authentication.md | 41 +- doc/user/profile/index.md | 27 +- doc/user/profile/notifications.md | 5 +- doc/user/profile/personal_access_tokens.md | 2 +- doc/user/project/canary_deployments.md | 7 +- doc/user/project/clusters/add_eks_clusters.md | 1 + .../project/clusters/add_remove_clusters.md | 2 +- doc/user/project/clusters/index.md | 20 +- .../protect/container_host_security/index.md | 59 + .../quick_start_guide.md | 81 + .../container_network_security/index.md | 70 + .../quick_start_guide.md | 153 + doc/user/project/clusters/protect/index.md | 29 + ...e_waf_ingress_disabled_settings_v12_10.png | Bin .../guide_waf_ingress_installation_v12_10.png | Bin .../guide_waf_ingress_save_changes_v12_10.png | Bin .../protect/web_application_firewall/index.md | 103 + .../quick_start_guide.md | 265 + doc/user/project/clusters/runbooks/index.md | 2 +- doc/user/project/clusters/securing.md | 155 +- doc/user/project/clusters/serverless/index.md | 1 - doc/user/project/code_owners.md | 46 + doc/user/project/deploy_boards.md | 21 +- doc/user/project/deploy_keys/index.md | 10 +- .../deploy_tokens/img/deploy_tokens_ui.png | Bin 101571 -> 35336 bytes doc/user/project/deploy_tokens/index.md | 14 +- doc/user/project/description_templates.md | 2 +- doc/user/project/img/canary_weight.png | Bin 52101 -> 14559 bytes .../description_templates_issue_settings.png | Bin 11103 -> 9315 bytes .../optional_code_owners_sections_v13_8.png | Bin 0 -> 104264 bytes .../protected_branches_deploy_keys_v13_5.png | Bin 46325 -> 16142 bytes ...ervice_desk_custom_email_address_v13_0.png | Bin 50234 -> 0 bytes doc/user/project/img/service_desk_enabled.png | Bin 19003 -> 0 bytes doc/user/project/import/github.md | 2 +- .../integrations/gitlab_slack_application.md | 2 +- .../project/integrations/img/webhooks_ssl.png | Bin 58529 -> 0 bytes .../project/integrations/jira_integrations.md | 2 +- doc/user/project/integrations/prometheus.md | 1 - doc/user/project/integrations/webhooks.md | 153 +- doc/user/project/issue_board.md | 27 +- .../project/issues/confidential_issues.md | 47 +- .../project/issues/crosslinking_issues.md | 11 +- doc/user/project/issues/csv_export.md | 2 +- doc/user/project/issues/due_dates.md | 23 +- .../img/due_dates_issues_index_page.png | Bin 19302 -> 0 bytes doc/user/project/issues/index.md | 51 +- .../project/issues/issue_data_and_actions.md | 8 + doc/user/project/issues/managing_issues.md | 75 +- doc/user/project/labels.md | 6 +- .../img/access_requests_management.png | Bin 10436 -> 0 bytes .../img/access_requests_management_13_8.png | Bin 0 -> 21685 bytes .../members/img/add_user_email_accept.png | Bin 16878 -> 0 bytes .../img/add_user_email_accept_13_8.png | Bin 0 -> 18139 bytes .../members/img/add_user_email_ready.png | Bin 28171 -> 0 bytes .../members/img/add_user_email_ready_13_8.png | Bin 0 -> 28850 bytes .../members/img/add_user_email_search.png | Bin 29628 -> 0 bytes .../img/add_user_email_search_13_8.png | Bin 0 -> 29293 bytes .../members/img/add_user_give_permissions.png | Bin 36619 -> 0 bytes .../img/add_user_give_permissions_13_8.png | Bin 0 -> 69132 bytes ...er_import_members_from_another_project.png | Bin 25333 -> 0 bytes ...port_members_from_another_project_13_8.png | Bin 0 -> 35191 bytes .../members/img/add_user_imported_members.png | Bin 25398 -> 0 bytes .../img/add_user_imported_members_13_8.png | Bin 0 -> 47167 bytes .../members/img/add_user_list_members.png | Bin 16916 -> 0 bytes .../img/add_user_list_members_13_8.png | Bin 0 -> 39827 bytes .../members/img/add_user_search_people.png | Bin 25368 -> 0 bytes .../img/add_user_search_people_13_8.png | Bin 0 -> 28335 bytes .../other_group_sees_shared_project_v13_6.png | Bin 291848 -> 0 bytes .../other_group_sees_shared_project_v13_8.png | Bin 0 -> 52192 bytes .../members/img/project_groups_tab_13_8.png | Bin 0 -> 65200 bytes .../project/members/img/project_members.png | Bin 36955 -> 0 bytes .../members/img/project_members_13_8.png | Bin 0 -> 34744 bytes .../share_project_with_groups_tab_v13_6.png | Bin 378257 -> 0 bytes .../share_project_with_groups_tab_v13_8.png | Bin 0 -> 62368 bytes .../img/share_project_with_groups_v13_6.png | Bin 395958 -> 0 bytes doc/user/project/members/index.md | 20 +- .../members/share_project_with_groups.md | 11 +- .../merge_requests/allow_collaboration.md | 8 +- .../browser_performance_testing.md | 2 +- .../project/merge_requests/code_quality.md | 99 +- .../project/merge_requests/getting_started.md | 60 +- .../code_quality_host_bound_sequential.png | Bin 0 -> 12345 bytes .../reviewer_approval_rules_form_v13_8.png | Bin 0 -> 42245 bytes .../reviewer_approval_rules_sidebar_v13_8.png | Bin 0 -> 38840 bytes .../load_performance_testing.md | 2 +- .../merge_requests/merge_request_approvals.md | 16 +- .../merge_requests/squash_and_merge.md | 2 +- .../test_coverage_visualization.md | 2 +- .../project/new_ci_build_permissions_model.md | 24 +- .../dns_concepts.md | 4 +- .../index.md | 18 +- .../lets_encrypt_integration.md | 8 +- .../ssl_tls_concepts.md | 11 +- .../getting_started/pages_ci_cd_template.md | 2 +- .../pages_forked_sample_project.md | 4 +- .../getting_started/pages_from_scratch.md | 6 +- .../project/pages/getting_started_part_one.md | 32 +- doc/user/project/pages/index.md | 12 +- doc/user/project/pages/introduction.md | 44 +- .../pages/lets_encrypt_for_gitlab_pages.md | 14 +- .../project/pages/pages_access_control.md | 16 +- doc/user/project/quick_actions.md | 14 +- doc/user/project/releases/index.md | 11 +- .../project/repository/forking_workflow.md | 4 - doc/user/project/repository/index.md | 18 +- .../repository/repository_mirroring.md | 146 +- doc/user/project/repository/web_editor.md | 2 +- doc/user/project/requirements/index.md | 54 +- doc/user/project/service_desk.md | 222 +- doc/user/project/settings/import_export.md | 2 +- doc/user/project/settings/index.md | 4 - .../project/settings/project_access_tokens.md | 18 +- doc/user/project/web_ide/index.md | 39 +- doc/user/project/wiki/index.md | 8 +- doc/user/search/advanced_search_syntax.md | 7 +- .../project_search_general_settings_v13_8.png | Bin 0 -> 47120 bytes doc/user/search/index.md | 98 +- doc/user/snippets.md | 34 +- doc/user/todos.md | 2 +- doc/user/usage_quotas.md | 1 - .../graphql/queries/author.fragment.graphql | 4 + .../graphql/queries/bad.fragment.graphql | 4 + .../graphql/queries/bad_argument.graphql | 5 + .../graphql/queries/client.query.graphql | 3 + .../queries/client_unused_fragment.graphql | 7 + .../graphql/queries/connection.query.graphql | 9 + .../queries/deeply/nested/bad_import.graphql | 7 + .../queries/deeply/nested/query.graphql | 7 + .../graphql/queries/duplicate_imports.graphql | 10 + .../queries/ee/author.fragment.graphql | 5 + .../graphql/queries/ee_else_ce.import.graphql | 9 + .../graphql/queries/missing_argument.graphql | 8 + .../queries/mixed_client.query.graphql | 7 + .../mixed_client_invalid.query.graphql | 7 + .../mixed_client_skipped_argument.graphql | 11 + .../mixed_client_unused_fragment.graphql | 11 + .../graphql/queries/post.fragment.graphql | 8 + .../graphql/queries/post_by_slug.graphql | 7 + .../queries/post_by_slug.with_import.graphql | 9 + ...ost_by_slug.with_import.misspelled.graphql | 9 + .../graphql/queries/syntax-error.graphql | 5 + .../graphql/queries/thingy.fragment.graphql | 3 + .../transitive_bad_import.fragment.graphql | 6 + .../queries/transitive_bad_import.graphql | 9 + .../gitlab/graphql/queries/typedefs.graphql | 3 + .../graphql/queries/unused_import.graphql | 8 + .../graphql/queries/wrong_field.graphql | 7 + .../queries/wrong_field.import.graphql | 7 + jest.config.base.js | 10 +- jest.config.js | 2 +- lib/api/api.rb | 3 + lib/api/api_guard.rb | 13 +- lib/api/boards.rb | 4 +- lib/api/boards_responses.rb | 14 +- lib/api/ci/runner.rb | 1 + lib/api/concerns/packages/nuget_endpoints.rb | 63 +- lib/api/debian_project_packages.rb | 5 +- .../entities/basic_repository_storage_move.rb | 13 + lib/api/entities/basic_snippet.rb | 18 + lib/api/entities/board.rb | 2 + lib/api/entities/note.rb | 1 + lib/api/entities/project.rb | 1 + .../project_repository_storage_move.rb | 7 +- lib/api/entities/release.rb | 7 +- lib/api/entities/snippet.rb | 12 +- .../snippet_repository_storage_move.rb | 9 + lib/api/generic_packages.rb | 8 +- lib/api/group_boards.rb | 36 +- lib/api/group_packages.rb | 4 +- lib/api/helpers.rb | 16 +- lib/api/helpers/authentication.rb | 73 + lib/api/helpers/merge_requests_helpers.rb | 12 + .../helpers/packages/basic_auth_helpers.rb | 13 + lib/api/helpers/pagination.rb | 4 +- lib/api/helpers/projects_helpers.rb | 4 +- lib/api/helpers/services_helpers.rb | 2 - lib/api/internal/base.rb | 1 + lib/api/invitations.rb | 18 + lib/api/job_artifacts.rb | 7 +- lib/api/jobs.rb | 21 +- lib/api/lint.rb | 5 +- lib/api/maven_packages.rb | 6 +- lib/api/nuget_group_packages.rb | 58 + lib/api/nuget_project_packages.rb | 68 +- lib/api/project_packages.rb | 4 +- lib/api/project_templates.rb | 4 +- lib/api/projects.rb | 4 +- lib/api/settings.rb | 1 + lib/api/snippet_repository_storage_moves.rb | 110 + lib/api/templates.rb | 3 + lib/api/terraform/state.rb | 2 + lib/api/usage_data.rb | 2 +- lib/api/user_counts.rb | 4 +- lib/api/users.rb | 3 +- lib/atlassian/jira_connect/client.rb | 73 +- .../jira_connect/serializers/build_entity.rb | 6 +- .../serializers/deployment_entity.rb | 90 + .../serializers/environment_entity.rb | 39 + .../serializers/feature_flag_entity.rb | 83 + .../serializers/pipeline_entity.rb | 31 + lib/backup/repositories.rb | 53 +- .../filter/ascii_doc_sanitization_filter.rb | 38 +- lib/banzai/filter/asset_proxy_filter.rb | 10 +- lib/banzai/filter/base_sanitization_filter.rb | 34 +- .../broadcast_message_sanitization_filter.rb | 10 +- lib/banzai/filter/sanitization_filter.rb | 22 +- lib/banzai/filter/truncate_source_filter.rb | 13 + lib/banzai/pipeline/description_pipeline.rb | 4 +- lib/banzai/pipeline/pre_process_pipeline.rb | 1 + .../common/extractors/graphql_extractor.rb | 12 +- lib/bulk_imports/importers/group_importer.rb | 14 +- lib/bulk_imports/importers/groups_importer.rb | 36 - lib/bulk_imports/pipeline.rb | 20 +- lib/bulk_imports/pipeline/runner.rb | 30 +- lib/container_registry/client.rb | 43 +- lib/declarative_enum.rb | 105 + lib/expand_variables.rb | 6 + lib/feature/shared.rb | 4 +- .../cycle_analytics/default_stages.rb | 4 + .../analytics/cycle_analytics/stage_events.rb | 9 +- ...end.rb => issue_deployed_to_production.rb} | 4 +- lib/gitlab/analytics/unique_visits.rb | 2 +- lib/gitlab/api_authentication/builder.rb | 18 + .../sent_through_builder.rb | 19 + .../api_authentication/token_locator.rb | 37 + .../api_authentication/token_resolver.rb | 87 + .../api_authentication/token_type_builder.rb | 18 + lib/gitlab/application_context.rb | 2 + lib/gitlab/auth/auth_finders.rb | 18 +- lib/gitlab/auth/ldap/config.rb | 13 +- lib/gitlab/auth/request_authenticator.rb | 2 +- .../backfill_artifact_expiry_date.rb | 57 + ...y_column_using_background_migration_job.rb | 64 + ...finding_uuid_for_vulnerability_feedback.rb | 128 + .../remove_duplicate_services.rb | 58 + lib/gitlab/checks/diff_check.rb | 58 +- lib/gitlab/ci/config.rb | 7 +- lib/gitlab/ci/config/entry/artifacts.rb | 3 +- lib/gitlab/ci/config/external/context.rb | 5 +- lib/gitlab/ci/config/external/file/local.rb | 3 +- lib/gitlab/ci/config/external/file/project.rb | 3 +- lib/gitlab/ci/config/external/mapper.rb | 32 +- lib/gitlab/ci/features.rb | 12 +- lib/gitlab/ci/lint.rb | 8 +- lib/gitlab/ci/parsers.rb | 4 +- lib/gitlab/ci/parsers/coverage/cobertura.rb | 2 +- lib/gitlab/ci/pipeline/chain/build.rb | 29 +- lib/gitlab/ci/pipeline/chain/command.rb | 4 + lib/gitlab/ci/pipeline/chain/seed.rb | 7 - lib/gitlab/ci/pipeline/chain/seed_block.rb | 4 - .../ci/pipeline/chain/template_usage.rb | 32 + .../ci/pipeline/chain/validate/abilities.rb | 2 +- lib/gitlab/ci/pipeline/seed/build.rb | 2 +- lib/gitlab/ci/reports/test_failure_history.rb | 2 - lib/gitlab/ci/status/group/factory.rb | 4 + .../Artifacts example.gitlab-ci.yml | 52 + ...ipt and after_script example.gitlab-ci.yml | 36 + .../Manual jobs example.gitlab-ci.yml | 53 + ...Multi-stage pipeline example.gitlab-ci.yml | 33 + .../Variables example.gitlab-ci.yml | 47 + .../5-Minute-Production-App.gitlab-ci.yml | 84 + lib/gitlab/ci/templates/Flutter.gitlab-ci.yml | 29 + .../templates/Jobs/Code-Quality.gitlab-ci.yml | 2 +- ...Managed-Cluster-Applications.gitlab-ci.yml | 2 +- .../Security/DAST.latest.gitlab-ci.yml | 43 + .../ci/templates/Security/SAST.gitlab-ci.yml | 29 + .../Security/Secret-Detection.gitlab-ci.yml | 1 + .../ci/templates/Terraform.gitlab-ci.yml | 1 + .../Terraform/Base.latest.gitlab-ci.yml | 1 + lib/gitlab/ci/variables/collection/sorted.rb | 77 + lib/gitlab/ci/yaml_processor.rb | 6 - lib/gitlab/ci/yaml_processor/result.rb | 4 + lib/gitlab/composer/version_index.rb | 47 + lib/gitlab/conflict/file.rb | 29 +- .../cycle_analytics/base_event_fetcher.rb | 79 - lib/gitlab/cycle_analytics/base_query.rb | 54 - lib/gitlab/cycle_analytics/base_stage.rb | 83 - .../cycle_analytics/builds_event_helper.rb | 36 - .../cycle_analytics/code_event_fetcher.rb | 31 - lib/gitlab/cycle_analytics/code_helper.rb | 11 - lib/gitlab/cycle_analytics/code_stage.rb | 33 - lib/gitlab/cycle_analytics/event_fetcher.rb | 11 - .../cycle_analytics/issue_event_fetcher.rb | 29 - lib/gitlab/cycle_analytics/issue_helper.rb | 25 - lib/gitlab/cycle_analytics/issue_stage.rb | 34 - lib/gitlab/cycle_analytics/permissions.rb | 2 +- .../cycle_analytics/plan_event_fetcher.rb | 29 - lib/gitlab/cycle_analytics/plan_helper.rb | 26 - lib/gitlab/cycle_analytics/plan_stage.rb | 34 - .../production_event_fetcher.rb | 30 - .../cycle_analytics/production_helper.rb | 13 - .../cycle_analytics/review_event_fetcher.rb | 30 - lib/gitlab/cycle_analytics/review_helper.rb | 11 - lib/gitlab/cycle_analytics/review_stage.rb | 33 - lib/gitlab/cycle_analytics/stage.rb | 11 - .../cycle_analytics/staging_event_fetcher.rb | 10 - lib/gitlab/cycle_analytics/staging_stage.rb | 33 - .../cycle_analytics/test_event_fetcher.rb | 10 - lib/gitlab/cycle_analytics/test_helper.rb | 21 - lib/gitlab/cycle_analytics/test_stage.rb | 33 - lib/gitlab/danger/base_linter.rb | 5 +- lib/gitlab/danger/changelog.rb | 4 +- lib/gitlab/danger/commit_linter.rb | 12 +- lib/gitlab/danger/helper.rb | 10 +- lib/gitlab/danger/merge_request_linter.rb | 8 +- lib/gitlab/danger/roulette.rb | 16 +- lib/gitlab/danger/teammate.rb | 4 +- lib/gitlab/danger/title_linting.rb | 23 + lib/gitlab/danger/weightage.rb | 10 + lib/gitlab/danger/weightage/maintainers.rb | 33 + lib/gitlab/danger/weightage/reviewers.rb | 65 + lib/gitlab/database/median.rb | 149 - lib/gitlab/database/migration_helpers.rb | 175 +- .../background_migration_helpers.rb | 10 + .../index_helpers.rb | 2 +- .../postgres_hll/batch_distinct_counter.rb | 62 +- lib/gitlab/database/postgres_hll/buckets.rb | 77 + lib/gitlab/database/reindexing.rb | 6 +- lib/gitlab/database/reindexing/coordinator.rb | 38 +- .../database/reindexing/grafana_notifier.rb | 72 + .../database/reindexing/reindex_action.rb | 20 +- .../self_monitoring/project/create_service.rb | 12 +- lib/gitlab/diff/line.rb | 4 +- lib/gitlab/diff/position.rb | 7 + lib/gitlab/email/handler.rb | 1 + .../create_note_on_issuable_handler.rb | 81 + .../email/handler/service_desk_handler.rb | 2 +- lib/gitlab/error_tracking.rb | 39 +- lib/gitlab/experimentation.rb | 18 + .../experimentation/controller_concern.rb | 7 +- lib/gitlab/experimentation/experiment.rb | 20 +- lib/gitlab/faraday.rb | 7 + lib/gitlab/faraday/error_callback.rb | 44 + lib/gitlab/git/changed_path.rb | 18 + lib/gitlab/git/diff_collection.rb | 2 +- lib/gitlab/git/repository.rb | 4 +- lib/gitlab/git/wiki_page_version.rb | 10 +- lib/gitlab/git_access_snippet.rb | 19 +- lib/gitlab/gitaly_client.rb | 4 + lib/gitlab/gitaly_client/commit_service.rb | 2 +- .../gitaly_client/repository_service.rb | 5 +- .../importer/repository_importer.rb | 2 +- lib/gitlab/gitpod.rb | 26 - lib/gitlab/gon_helper.rb | 5 +- lib/gitlab/graphql/batch_key.rb | 39 + lib/gitlab/graphql/lazy.rb | 8 + .../graphql/pagination/keyset/connection.rb | 17 +- .../pagination/keyset/query_builder.rb | 5 +- lib/gitlab/graphql/queries.rb | 286 + lib/gitlab/hashed_storage/rake_helper.rb | 32 + lib/gitlab/jira/http_client.rb | 6 +- .../kubernetes/cilium_network_policy.rb | 8 +- lib/gitlab/kubernetes/kubectl_cmd.rb | 2 +- lib/gitlab/kubernetes/pod_cmd.rb | 15 + .../metrics/samplers/action_cable_sampler.rb | 4 +- lib/gitlab/metrics/samplers/base_sampler.rb | 12 +- .../metrics/samplers/database_sampler.rb | 2 +- lib/gitlab/metrics/samplers/puma_sampler.rb | 2 +- lib/gitlab/metrics/samplers/ruby_sampler.rb | 2 +- .../metrics/samplers/threads_sampler.rb | 2 +- .../metrics/samplers/unicorn_sampler.rb | 2 + lib/gitlab/metrics/system.rb | 14 + lib/gitlab/middleware/multipart.rb | 178 +- .../redis_adapter_when_peek_enabled.rb | 22 +- lib/gitlab/project_template.rb | 3 +- lib/gitlab/prometheus/internal.rb | 28 +- lib/gitlab/quick_actions/issue_actions.rb | 3 +- .../issue_and_merge_request_actions.rb | 2 +- .../quick_actions/merge_request_actions.rb | 183 +- lib/gitlab/rack_attack.rb | 60 +- lib/gitlab/sourcegraph.rb | 3 +- lib/gitlab/template/base_template.rb | 7 +- lib/gitlab/template/dockerfile_template.rb | 5 +- .../template/gitlab_ci_syntax_yml_template.rb | 29 + lib/gitlab/template/gitlab_ci_yml_template.rb | 5 +- .../template/metrics_dashboard_template.rb | 5 +- lib/gitlab/throttle.rb | 6 + lib/gitlab/tracking.rb | 4 +- lib/gitlab/tracking/standard_context.rb | 41 + lib/gitlab/url_builder.rb | 10 + lib/gitlab/usage/metric.rb | 43 + lib/gitlab/usage/metric_definition.rb | 86 + lib/gitlab/usage_data_counters.rb | 2 +- .../aggregated_metrics/common.yml | 5 +- .../ci_template_unique_counter.rb | 37 + .../counter_events/guest_package_events.yml | 34 - .../counter_events/package_events.yml | 46 + .../editor_unique_counter.rb | 2 +- .../guest_package_event_counter.rb | 11 - .../usage_data_counters/hll_redis_counter.rb | 27 +- .../issue_activity_unique_counter.rb | 2 +- .../known_events/common.yml | 143 + .../known_events/package_events.yml | 308 +- .../merge_request_activity_unique_counter.rb | 95 + .../package_event_counter.rb | 11 + .../track_unique_events.rb | 4 +- lib/gitlab/utils.rb | 12 + lib/gitlab/utils/usage_data.rb | 10 +- lib/gitlab/uuid.rb | 5 + lib/gitlab/visibility_level.rb | 8 - lib/gitlab/webpack/manifest.rb | 4 +- lib/gitlab_danger.rb | 2 +- lib/object_storage/direct_upload.rb | 2 +- lib/release_highlights/validator.rb | 54 + lib/release_highlights/validator/entry.rb | 74 + lib/support/init.d/gitlab | 4 +- lib/tasks/gitlab/git.rake | 34 + lib/tasks/gitlab/graphql.rake | 42 +- lib/tasks/gitlab/packages/events.rake | 34 +- lib/tasks/gitlab/pages.rake | 35 + lib/tasks/gitlab/storage.rake | 15 + lib/uploaded_file.rb | 32 +- locale/am_ET/gitlab.po | 1789 +++-- locale/ar_SA/gitlab.po | 1809 +++-- locale/as_IN/gitlab.po | 1789 +++-- locale/az_AZ/gitlab.po | 1789 +++-- locale/ba_RU/gitlab.po | 1784 +++-- locale/bg/gitlab.po | 1789 +++-- locale/bn_BD/gitlab.po | 1789 +++-- locale/bn_IN/gitlab.po | 1789 +++-- locale/bs_BA/gitlab.po | 1794 +++-- locale/ca_ES/gitlab.po | 1789 +++-- locale/cs_CZ/gitlab.po | 1799 +++-- locale/cy_GB/gitlab.po | 1809 +++-- locale/da_DK/gitlab.po | 1789 +++-- locale/de/gitlab.po | 1831 +++-- locale/el_GR/gitlab.po | 1789 +++-- locale/eo/gitlab.po | 1789 +++-- locale/es/gitlab.po | 1877 +++-- locale/et_EE/gitlab.po | 1789 +++-- locale/fa_IR/gitlab.po | 1789 +++-- locale/fi_FI/gitlab.po | 1789 +++-- locale/fil_PH/gitlab.po | 1789 +++-- locale/fr/gitlab.po | 1823 +++-- locale/gitlab.pot | 1462 ++-- locale/gl_ES/gitlab.po | 1789 +++-- locale/he_IL/gitlab.po | 1799 +++-- locale/hi_IN/gitlab.po | 1789 +++-- locale/hr_HR/gitlab.po | 1794 +++-- locale/hu_HU/gitlab.po | 1789 +++-- locale/id_ID/gitlab.po | 1784 +++-- locale/ig_NG/gitlab.po | 1784 +++-- locale/is_IS/gitlab.po | 1789 +++-- locale/it/gitlab.po | 1789 +++-- locale/ja/gitlab.po | 2820 +++++--- locale/ka_GE/gitlab.po | 1789 +++-- locale/kab/gitlab.po | 1789 +++-- locale/ko/gitlab.po | 1978 ++++-- locale/ku_TR/gitlab.po | 1789 +++-- locale/ky_KG/gitlab.po | 1789 +++-- locale/lt_LT/gitlab.po | 1799 +++-- locale/mk_MK/gitlab.po | 1789 +++-- locale/mn_MN/gitlab.po | 1789 +++-- locale/nb_NO/gitlab.po | 1837 +++-- locale/nl_NL/gitlab.po | 1789 +++-- locale/pa_IN/gitlab.po | 1789 +++-- locale/pl_PL/gitlab.po | 1805 +++-- locale/pt_BR/gitlab.po | 1853 +++-- locale/pt_PT/gitlab.po | 1809 +++-- locale/ro_RO/gitlab.po | 1794 +++-- locale/ru/gitlab.po | 2507 +++++-- locale/si_LK/gitlab.po | 1789 +++-- locale/sk_SK/gitlab.po | 1799 +++-- locale/sl_SI/gitlab.po | 1799 +++-- locale/sq_AL/gitlab.po | 1789 +++-- locale/sr_CS/gitlab.po | 1794 +++-- locale/sr_SP/gitlab.po | 1794 +++-- locale/sv_SE/gitlab.po | 1789 +++-- locale/sw_KE/gitlab.po | 1789 +++-- locale/tr_TR/gitlab.po | 1943 +++-- locale/uk/gitlab.po | 1895 +++-- locale/ur_PK/gitlab.po | 1789 +++-- locale/uz_UZ/gitlab.po | 1789 +++-- locale/vi_VN/gitlab.po | 1784 +++-- locale/zh_CN/gitlab.po | 5410 ++++++++------ locale/zh_HK/gitlab.po | 1788 +++-- locale/zh_TW/gitlab.po | 1804 +++-- package.json | 24 +- qa/Dockerfile | 14 +- qa/Gemfile | 2 +- qa/Gemfile.lock | 16 +- qa/qa.rb | 5 + .../kubernetes_agent/agentk-config.yaml.erb | 3 + .../kubernetes_agent/agentk-manifest.yaml.erb | 95 + .../galatic-empire-manifest.yaml | 15 + qa/qa/fixtures/web_ide/README.md | 0 qa/qa/fixtures/web_ide/dk.png | Bin 0 -> 1062 bytes qa/qa/fixtures/web_ide/logo_sample.svg | 27 + qa/qa/fixtures/web_ide/text_file.txt | 1 + qa/qa/flow/sign_up.rb | 57 +- .../component/sign_up_restrictions.rb | 6 + qa/qa/page/base.rb | 46 +- qa/qa/page/component/snippet.rb | 42 +- qa/qa/page/project/job/show.rb | 2 +- qa/qa/page/project/members.rb | 2 + qa/qa/page/project/pipeline/show.rb | 2 +- qa/qa/page/project/settings/advanced.rb | 1 + qa/qa/page/project/web_ide/edit.rb | 49 +- qa/qa/resource/clusters/agent.rb | 54 + qa/qa/resource/clusters/agent_token.rb | 49 + qa/qa/resource/protected_branch.rb | 2 +- qa/qa/runtime/env.rb | 4 + qa/qa/runtime/feature.rb | 2 +- qa/qa/scenario/test/integration/ssh_tunnel.rb | 13 + qa/qa/service/kubernetes_cluster.rb | 8 + .../api/3_create/gitaly/gitaly_mtls_spec.rb | 43 + .../project_archive_compare_spec.rb | 7 - .../1_manage/group/transfer_project_spec.rb | 4 +- .../1_manage/login/register_spec.rb | 34 +- .../1_manage/project/create_project_spec.rb | 3 +- .../copy_snippet_file_contents_spec.rb | 75 + .../3_create/snippet/share_snippet_spec.rb | 2 +- .../upload_new_file_in_web_ide_spec.rb | 89 + .../5_package/maven_repository_spec.rb | 94 +- .../6_release/pages/pages_pipeline_spec.rb | 45 + qa/qa/support/page/logging.rb | 6 +- qa/spec/spec_helper.rb | 5 + rubocop/cop/lint/last_keyword_argument.rb | 26 +- rubocop/cop/rspec/expect_gitlab_tracking.rb | 2 - rubocop/cop/rspec/web_mock_enable.rb | 39 + rubocop/rubocop.rb | 2 +- .../{cancel_pipeline => cancel_pipeline.rb} | 0 ..._job_artifact => download_job_artifact.rb} | 0 scripts/api/{get_job_id => get_job_id.rb} | 0 scripts/api/{play_job => play_job.rb} | 9 +- scripts/frontend/block_dependencies.js | 4 +- ..._page_bundle_mixins_css_for_sideeffects.js | 2 +- scripts/frontend/extract_gettext_all.js | 2 +- scripts/frontend/file_test_coverage.js | 16 +- scripts/frontend/frontend_script_utils.js | 9 +- scripts/frontend/merge_coverage_frontend.js | 8 +- scripts/frontend/prettier.js | 16 +- .../stylelint-duplicate-selectors.js | 4 +- .../stylelint/stylelint-utility-classes.js | 4 +- .../stylelint/stylelint-utility-map.js | 4 +- scripts/frontend/stylelint/stylelint-utils.js | 4 +- scripts/frontend/webpack_dev_server.js | 6 +- scripts/gitaly-test-build | 2 +- scripts/gitaly-test-spawn | 1 + scripts/gitaly_test.rb | 10 +- scripts/perf/gc/collect_gc_stats.rb | 97 + scripts/perf/gc/print_gc_stats.rb | 69 + scripts/review_apps/automated_cleanup.rb | 10 +- scripts/rspec_helpers.sh | 20 +- scripts/utils.sh | 4 +- scripts/validate_migration_schema | 119 + scripts/verify-tff-mapping | 4 +- .../admin/dev_ops_report_controller_spec.rb | 6 + .../admin/projects_controller_spec.rb | 30 + .../application_controller_spec.rb | 43 + .../concerns/redis_tracking_spec.rb | 2 +- .../concerns/spammable_actions_spec.rb | 198 + .../dashboard/projects_controller_spec.rb | 9 +- .../dashboard/snippets_controller_spec.rb | 19 + .../explore/projects_controller_spec.rb | 2 +- .../groups/labels_controller_spec.rb | 41 +- .../import/bulk_imports_controller_spec.rb | 36 +- spec/controllers/metrics_controller_spec.rb | 77 +- .../projects/blob_controller_spec.rb | 76 + .../projects/environments_controller_spec.rb | 6 + .../projects/feature_flags_controller_spec.rb | 420 +- .../projects/issues_controller_spec.rb | 24 +- .../projects/jobs_controller_spec.rb | 34 - .../projects/labels_controller_spec.rb | 44 +- .../merge_requests/diffs_controller_spec.rb | 74 + .../projects/pipelines_controller_spec.rb | 66 + .../project_members_controller_spec.rb | 133 +- spec/controllers/projects_controller_spec.rb | 25 +- .../registrations_controller_spec.rb | 8 +- .../repositories/git_http_controller_spec.rb | 2 +- spec/db/schema_spec.rb | 2 +- spec/factories/alerts_service_data.rb | 8 - spec/factories/boards.rb | 4 + spec/factories/ci/builds.rb | 8 + spec/factories/ci_platform_metrics.rb | 2 +- .../factories/namespace_onboarding_actions.rb | 8 - spec/factories/namespace_package_settings.rb | 14 + spec/factories/onboarding_progresses.rb | 7 + spec/factories/packages.rb | 22 + .../factories/packages/debian/distribution.rb | 25 + .../packages/debian/file_metadatum.rb | 60 + .../packages/debian/group_architecture.rb | 9 + .../packages/debian/project_architecture.rb | 9 + spec/factories/packages/package_file.rb | 91 + spec/factories/project_group_links.rb | 2 +- spec/factories/projects.rb | 4 + spec/factories/services.rb | 18 - spec/factories/usage_data.rb | 4 +- spec/factories_spec.rb | 2 +- spec/features/admin/admin_groups_spec.rb | 1 + spec/features/admin/admin_runners_spec.rb | 6 +- spec/features/admin/admin_settings_spec.rb | 31 +- .../user_filters_alerts_by_status_spec.rb | 1 - .../user_searches_alerts_spec.rb | 1 - .../user_updates_alert_status_spec.rb | 1 - .../features/dashboard/merge_requests_spec.rb | 6 + spec/features/dashboard/projects_spec.rb | 2 +- spec/features/groups/board_spec.rb | 15 +- .../import_export/connect_instance_spec.rb | 2 +- .../groups/members/manage_groups_spec.rb | 1 + .../groups/members/manage_members_spec.rb | 28 + ...r_adds_member_with_expiration_date_spec.rb | 1 + .../master_manages_access_requests_spec.rb | 1 - .../groups/members/sort_members_spec.rb | 210 +- spec/features/groups/settings/ci_cd_spec.rb | 2 +- .../settings/packages_and_registries_spec.rb | 59 + .../incidents/incident_details_spec.rb | 2 +- spec/features/issues/gfm_autocomplete_spec.rb | 165 +- spec/features/issues/issue_sidebar_spec.rb | 394 +- spec/features/issues/issue_state_spec.rb | 10 +- .../issues/user_comments_on_issue_spec.rb | 1 + .../issues/user_creates_issue_spec.rb | 4 +- ...closes_reopens_merge_request_state_spec.rb | 2 +- ...er_interacts_with_batched_mr_diffs_spec.rb | 3 +- ...diff_notes_and_discussions_resolve_spec.rb | 1 + .../user_scrolls_to_note_on_load_spec.rb | 9 +- .../user_sees_merge_request_pipelines_spec.rb | 22 +- .../user_sees_merge_widget_spec.rb | 46 +- .../merge_request/user_sees_pipelines_spec.rb | 10 +- .../merge_request/user_sees_versions_spec.rb | 4 +- .../user_suggests_changes_on_diff_spec.rb | 3 + .../user_uses_quick_actions_spec.rb | 1 + spec/features/projects/ci/lint_spec.rb | 4 +- .../commit/user_reverts_commit_spec.rb | 38 +- .../projects/environments_pod_logs_spec.rb | 2 + .../user_sees_feature_flag_list_spec.rb | 36 - .../user_updates_feature_flag_spec.rb | 117 +- .../files/dockerfile_dropdown_spec.rb | 2 +- .../gitlab_ci_syntax_yml_dropdown_spec.rb | 56 + .../user_uploads_designs_spec.rb | 2 +- .../issues/email_participants_spec.rb | 34 + .../projects/jobs/permissions_spec.rb | 57 - .../projects/jobs/user_browses_jobs_spec.rb | 2 +- .../projects/members/group_members_spec.rb | 65 +- .../members/groups_with_access_list_spec.rb | 17 +- .../projects/members/invite_group_spec.rb | 10 +- spec/features/projects/members/list_spec.rb | 5 +- .../master_manages_access_requests_spec.rb | 1 - spec/features/projects/members/tabs_spec.rb | 73 + .../releases/user_creates_release_spec.rb | 2 +- .../services/user_activates_alerts_spec.rb | 74 - .../settings/pipelines_settings_spec.rb | 2 +- .../user_manages_project_members_spec.rb | 6 +- .../snippets/user_deletes_snippet_spec.rb | 4 +- spec/features/promotion_spec.rb | 2 +- spec/features/protected_tags_spec.rb | 2 +- spec/features/runners_spec.rb | 34 +- .../security/dashboard_access_spec.rb | 2 +- spec/features/security/profile_access_spec.rb | 12 +- spec/features/users/login_spec.rb | 67 +- spec/features/users/signup_spec.rb | 6 +- .../alert_management/alerts_finder_spec.rb | 6 + ..._build_group_report_results_finder_spec.rb | 6 +- ...pipelines_for_merge_request_finder_spec.rb | 18 - spec/finders/cluster_ancestors_finder_spec.rb | 12 +- .../concerns/packages/finder_helper_spec.rb | 161 + spec/finders/group_projects_finder_spec.rb | 38 +- spec/finders/groups_finder_spec.rb | 23 +- spec/finders/issues_finder_spec.rb | 176 +- spec/finders/merge_requests_finder_spec.rb | 55 +- .../debian/distributions_finder_spec.rb | 28 + .../packages/group_packages_finder_spec.rb | 8 +- .../packages/maven/package_finder_spec.rb | 82 +- .../packages/nuget/package_finder_spec.rb | 153 +- spec/finders/packages/packages_finder_spec.rb | 6 +- spec/finders/projects_finder_spec.rb | 4 +- spec/finders/snippets_finder_spec.rb | 36 +- spec/finders/template_finder_spec.rb | 2 + spec/finders/users_finder_spec.rb | 27 +- .../api/schemas/entities/discussion.json | 1 + .../member.json} | 49 +- .../api/schemas/entities/member_user.json | 22 + spec/fixtures/api/schemas/environment.json | 6 + .../graphql/namespace/package_settings.json | 12 + .../packages/package_composer_details.json | 12 + .../graphql/packages/package_details.json | 36 + .../{group_members.json => members.json} | 2 +- .../api/schemas/public_api/v4/notes.json | 1 + .../v4/snippet_repository_storage_move.json | 20 + .../v4/snippet_repository_storage_moves.json | 6 + spec/fixtures/api/schemas/rollout_status.json | 52 + .../emails/valid_note_on_issuable.eml | 24 + spec/fixtures/whats_new/blank.yml | 9 + spec/fixtures/whats_new/invalid.yml | 20 + spec/fixtures/whats_new/valid.yml | 20 + spec/frontend/__helpers__/README.md | 5 + .../backoff_helper.js | 4 +- .../class_spec_helper.js | 0 .../class_spec_helper_spec.js | 0 spec/frontend/__helpers__/datetime_helpers.js | 6 + .../dom_events_helper.js | 2 +- .../dom_shims/README.md | 0 .../dom_shims/create_object_url.js | 0 .../dom_shims/element_scroll_by.js | 0 .../dom_shims/element_scroll_into_view.js | 0 .../dom_shims/element_scroll_to.js | 0 .../dom_shims/form_element.js | 0 .../dom_shims/get_client_rects.js | 0 .../dom_shims/get_client_rects_spec.js | 0 .../dom_shims/image_element_properties.js | 0 .../dom_shims/index.js | 0 .../dom_shims/inner_text.js | 0 .../dom_shims/range.js | 0 .../dom_shims/scroll_by.js | 0 .../dom_shims/size_properties.js | 2 +- .../dom_shims/window_scroll_to.js | 0 .../{helpers => __helpers__}/emoji.js | 10 +- .../experimentation_helper.js | 0 .../{helpers => __helpers__}/fake_date.js | 6 +- .../fake_date_spec.js | 0 .../fake_request_animation_frame.js | 2 +- .../filtered_search_spec_helper.js | 0 .../{helpers => __helpers__}/fixtures.js | 2 +- .../init_vue_mr_page_helper.js | 0 .../{helpers => __helpers__}/jest_helpers.js | 2 +- .../{helpers => __helpers__}/jquery.js | 0 .../keep_alive_component_helper.js | 0 .../keep_alive_component_helper_spec.js | 0 .../local_storage_helper.js | 6 +- .../local_storage_helper_spec.js | 0 .../{helpers => __helpers__}/locale_helper.js | 2 +- .../mock_apollo_helper.js | 0 .../mock_dom_observer.js | 0 .../mock_window_location_helper.js | 2 +- .../set_timeout_promise_helper.js | 2 +- .../set_window_location_helper.js | 0 .../set_window_location_helper_spec.js | 2 +- .../{helpers => __helpers__}/stub_children.js | 2 +- .../stub_component.js | 0 spec/frontend/__helpers__/stub_transition.js | 8 + .../test_constants.js | 0 .../{helpers => __helpers__}/text_helper.js | 6 +- .../{helpers => __helpers__}/timeout.js | 6 +- .../tracking_helper.js | 2 +- .../user_mock_data_helper.js | 7 +- .../vue_mock_directive.js | 2 +- .../vue_mount_component_helper.js | 0 .../vue_test_utils_helper.js | 10 +- .../vue_test_utils_helper_spec.js | 0 .../vuex_action_helper.js | 6 +- .../vuex_action_helper_spec.js | 24 +- .../frontend/__helpers__/wait_for_promises.js | 1 + .../{helpers => __helpers__}/wait_for_text.js | 0 .../wait_using_real_timer.js | 4 +- .../web_worker_mock.js | 0 spec/frontend/__mocks__/@gitlab/ui.js | 6 +- spec/frontend/__mocks__/lodash/debounce.js | 2 +- spec/frontend/__mocks__/lodash/defer.js | 5 + spec/frontend/__mocks__/lodash/throttle.js | 2 +- spec/frontend/activities_spec.js | 10 +- .../add_context_commits_modal_spec.js.snap | 1 + .../store/actions_spec.js | 26 +- .../statistics_panel/components/app_spec.js | 2 +- .../statistics_panel/store/actions_spec.js | 10 +- .../users/components/user_avatar_spec.js | 63 + .../users/components/users_table_spec.js | 9 +- spec/frontend/admin/users/mock_data.js | 5 +- spec/frontend/alert_handler_spec.js | 2 +- .../components/alert_details_spec.js | 13 +- .../alert_management_empty_state_spec.js | 12 - .../components/alert_management_table_spec.js | 94 +- .../components/alert_status_spec.js | 2 +- .../alert_managment_sidebar_assignees_spec.js | 18 +- .../sidebar/alert_sidebar_status_spec.js | 2 +- .../mocks/alerts_provide_config.json | 4 +- .../components/alerts_service_form_spec.js | 49 +- .../alerts_settings_form_spec.js.snap | 127 +- .../alert_mapping_builder_spec.js | 10 +- .../alerts_integrations_list_spec.js | 6 +- .../alerts_settings_form_spec.js | 43 +- .../alerts_settings_wrapper_spec.js | 17 +- spec/frontend/alerts_settings/util.js | 6 - .../components/app_spec.js | 4 +- .../instance_statistics_count_chart_spec.js | 2 +- .../projects_and_groups_chart_spec.js | 2 +- .../components/users_chart_spec.js | 2 +- spec/frontend/api/api_utils_spec.js | 35 + spec/frontend/api_spec.js | 194 +- ...keep_latest_artifact_checkbox_spec.js.snap | 29 + .../keep_latest_artifact_checkbox_spec.js | 88 + .../components/recovery_codes_spec.js | 6 +- .../authentication/u2f/authenticate_spec.js | 9 +- .../authentication/u2f/register_spec.js | 7 +- spec/frontend/awards_handler_spec.js | 14 +- .../badges/components/badge_form_spec.js | 6 +- .../badges/components/badge_list_row_spec.js | 8 +- .../badges/components/badge_list_spec.js | 12 +- spec/frontend/badges/components/badge_spec.js | 12 +- spec/frontend/badges/store/actions_spec.js | 77 +- .../components/diff_file_drafts_spec.js | 14 +- .../components/draft_note_spec.js | 6 +- .../components/drafts_count_spec.js | 2 +- .../components/preview_item_spec.js | 2 +- .../components/publish_button_spec.js | 2 +- .../modules/batch_comments/actions_spec.js | 26 +- spec/frontend/behaviors/autosize_spec.js | 2 +- spec/frontend/behaviors/bind_in_out_spec.js | 2 +- spec/frontend/behaviors/copy_as_gfm_spec.js | 10 +- spec/frontend/behaviors/gl_emoji_spec.js | 2 +- .../behaviors/load_startup_css_spec.js | 2 +- .../markdown/paste_markdown_table_spec.js | 10 +- spec/frontend/behaviors/quick_submit_spec.js | 2 +- .../frontend/behaviors/requires_input_spec.js | 24 +- spec/frontend/behaviors/secret_values_spec.js | 22 +- .../behaviors/shortcuts/keybindings_spec.js | 2 +- .../shortcuts/shortcuts_issuable_spec.js | 36 +- .../blob/balsamiq/balsamiq_viewer_spec.js | 14 +- .../components/blob_content_error_spec.js | 4 +- .../blob/components/blob_edit_content_spec.js | 2 +- .../blob/components/blob_edit_header_spec.js | 2 +- .../components/blob_header_filepath_spec.js | 14 +- .../blob/components/blob_header_spec.js | 2 +- .../blob/pipeline_tour_success_modal_spec.js | 15 +- spec/frontend/blob/sketch/index_spec.js | 6 +- spec/frontend/blob/utils_spec.js | 2 +- spec/frontend/blob/viewer/index_spec.js | 10 +- spec/frontend/blob_edit/edit_blob_spec.js | 10 +- .../boards/board_list_deprecated_spec.js | 275 + spec/frontend/boards/board_list_helper.js | 2 +- spec/frontend/boards/board_list_new_spec.js | 268 - spec/frontend/boards/board_list_spec.js | 340 +- ....js => board_new_issue_deprecated_spec.js} | 2 +- spec/frontend/boards/boards_store_spec.js | 32 +- .../board_assignee_dropdown_spec.js | 15 +- .../components/board_card_layout_spec.js | 70 +- .../boards/components/board_card_spec.js | 7 +- ...pec.js => board_column_deprecated_spec.js} | 53 +- .../boards/components/board_column_spec.js | 49 +- .../board_configuration_options_spec.js | 49 +- .../boards/components/board_content_spec.js | 18 +- .../boards/components/board_form_spec.js | 222 +- ...s => board_list_header_deprecated_spec.js} | 144 +- .../components/board_list_header_spec.js | 142 +- ...ue_new_spec.js => board_new_issue_spec.js} | 6 +- .../boards/components/boards_selector_spec.js | 8 +- .../boards/components/issue_count_spec.js | 2 +- .../boards/components/issue_due_date_spec.js | 2 +- .../issue_time_estimate_deprecated_spec.js | 64 + .../components/issue_time_estimate_spec.js | 54 +- .../sidebar/board_editable_item_spec.js | 25 +- .../sidebar/board_sidebar_issue_title_spec.js | 182 + .../board_sidebar_labels_select_spec.js | 18 +- .../board_sidebar_subscription_spec.js | 2 +- .../components/sidebar/remove_issue_spec.js | 2 +- ..._spec.js => issue_card_deprecated_spec.js} | 38 +- spec/frontend/boards/issue_card_inner_spec.js | 372 + spec/frontend/boards/list_spec.js | 4 +- spec/frontend/boards/mock_data.js | 36 +- .../boards/project_select_deprecated_spec.js | 261 + spec/frontend/boards/project_select_spec.js | 154 + spec/frontend/boards/stores/actions_spec.js | 307 +- spec/frontend/boards/stores/getters_spec.js | 6 +- spec/frontend/boards/stores/mutations_spec.js | 100 +- .../branches/branches_delete_modal_spec.js | 2 +- .../components/triggers_list_spec.js | 23 +- .../ci_variable_list/ci_variable_list_spec.js | 21 +- .../ci_environments_dropdown_spec.js | 8 +- .../components/ci_variable_modal_spec.js | 6 +- .../components/ci_variable_settings_spec.js | 2 +- .../components/ci_variable_table_spec.js | 2 +- .../ci_variable_list/store/actions_spec.js | 20 +- .../frontend/clusters/clusters_bundle_spec.js | 2 +- .../remove_cluster_confirmation_spec.js.snap | 186 +- .../components/application_row_spec.js | 2 +- .../clusters/components/applications_spec.js | 10 +- .../fluentd_output_settings_spec.js | 12 +- .../uninstall_application_button_spec.js | 2 +- .../application_state_machine_spec.js | 18 +- .../clusters/stores/clusters_store_spec.js | 23 +- .../components/ancestor_notice_spec.js | 4 +- .../components/node_error_help_text_spec.js | 2 +- .../clusters_list/store/actions_spec.js | 10 +- .../code_navigation/store/actions_spec.js | 14 +- spec/frontend/collapsed_sidebar_todo_spec.js | 14 +- .../commit_pipeline_status_component_spec.js | 4 +- .../commit/pipelines/pipelines_spec.js | 30 +- spec/frontend/commits_spec.js | 4 +- .../commons/nav/user_merge_requests_spec.js | 25 +- spec/frontend/confirm_modal_spec.js | 14 +- .../contributors/store/actions_spec.js | 4 +- .../components/cluster_form_dropdown_spec.js | 39 +- .../eks_cluster_configuration_form_spec.js | 2 +- .../services/aws_services_facade_spec.js | 5 +- .../eks_cluster/store/actions_spec.js | 2 +- .../eks_cluster/store/getters_spec.js | 2 +- .../eks_cluster/store/mutations_spec.js | 2 +- .../gke_cluster/gapi_loader_spec.js | 47 + .../create_cluster/gke_cluster/helpers.js | 8 +- .../gke_cluster/stores/actions_spec.js | 12 +- .../gke_cluster_namespace_spec.js | 4 +- .../store/cluster_dropdown/mutations_spec.js | 2 +- spec/frontend/create_item_dropdown_spec.js | 17 +- .../create_merge_request_dropdown_spec.js | 4 +- .../custom_metrics_form_fields_spec.js | 170 +- .../limit_warning_component_spec.js | 2 +- .../components/deploy_freeze_modal_spec.js | 7 +- .../components/deploy_freeze_table_spec.js | 2 +- .../components/timezone_dropdown_spec.js | 2 +- .../deploy_keys/components/app_spec.js | 20 +- .../deploy_keys/components/key_spec.js | 13 +- .../deploy_keys/components/keys_panel_spec.js | 11 +- .../deprecated_jquery_dropdown_spec.js | 9 +- .../design_notes/design_discussion_spec.js | 24 +- .../design_notes/design_reply_form_spec.js | 2 +- .../components/design_overlay_spec.js | 6 +- .../components/design_presentation_spec.js | 42 +- .../components/design_scaler_spec.js | 2 +- .../list/__snapshots__/item_spec.js.snap | 6 + .../components/toolbar/index_spec.js | 2 + .../design_version_dropdown_spec.js.snap | 2 + .../upload/design_version_dropdown_spec.js | 4 +- .../design_management/pages/index_spec.js | 278 +- .../frontend/design_management/router_spec.js | 4 +- .../utils/error_messages_spec.js | 4 +- spec/frontend/diffs/components/app_spec.js | 398 +- .../diffs/components/commit_item_spec.js | 14 +- .../compare_dropdown_layout_spec.js | 2 +- .../diffs/components/compare_versions_spec.js | 98 +- .../diffs/components/diff_content_spec.js | 2 +- .../diffs/components/diff_discussions_spec.js | 9 +- .../components/diff_expansion_cell_spec.js | 53 +- .../diffs/components/diff_file_header_spec.js | 35 +- .../diffs/components/diff_file_spec.js | 28 +- .../components/diff_gutter_avatars_spec.js | 4 +- .../components/diff_line_note_form_spec.js | 41 +- .../diffs/components/diff_row_spec.js | 101 +- .../diffs/components/diff_row_utils_spec.js | 16 +- .../diffs/components/diff_stats_spec.js | 6 +- .../diffs/components/diff_view_spec.js | 83 +- .../diffs/components/file_row_stats_spec.js | 24 +- .../components/hidden_files_warning_spec.js | 6 +- .../components/image_diff_overlay_spec.js | 24 +- .../diffs/components/no_changes_spec.js | 81 +- .../parallel_diff_table_row_spec.js | 14 +- .../components/settings_dropdown_spec.js | 16 +- .../diffs/components/tree_list_spec.js | 16 +- spec/frontend/diffs/store/actions_spec.js | 123 +- spec/frontend/diffs/store/getters_spec.js | 33 +- .../store/getters_versions_dropdowns_spec.js | 10 +- spec/frontend/diffs/store/mutations_spec.js | 17 +- spec/frontend/diffs/store/utils_spec.js | 79 +- spec/frontend/diffs/utils/diff_file_spec.js | 30 +- .../frontend/diffs/utils/file_reviews_spec.js | 146 + .../diffs/utils/merge_request_spec.js | 31 + spec/frontend/diffs/utils/uuids_spec.js | 2 +- .../dirty_submit_collection_spec.js | 6 +- .../dirty_submit/dirty_submit_form_spec.js | 8 +- spec/frontend/droplab/drop_down_spec.js | 8 +- .../droplab/plugins/ajax_filter_spec.js | 12 +- .../editor/editor_ci_schema_ext_spec.js | 107 + .../editor/editor_lite_extension_base_spec.js | 4 +- spec/frontend/editor/editor_lite_spec.js | 14 +- .../editor/editor_markdown_ext_spec.js | 4 +- spec/frontend/emoji/emoji_spec.js | 14 +- spec/frontend/environment.js | 4 +- .../environments/canary_ingress_spec.js | 102 + .../environments/canary_update_modal_spec.js | 126 + .../deploy_board_component_spec.js | 139 + .../environments/environment_actions_spec.js | 4 +- .../environment_monitoring_spec.js | 3 +- .../environments/environment_table_spec.js | 128 +- .../environment_terminal_button_spec.js | 2 +- .../environments/environments_app_spec.js | 32 +- .../environments_folder_view_spec.js | 59 + .../environments/environments_store_spec.js | 56 +- .../folder/environments_folder_view_spec.js | 4 +- spec/frontend/environments/mock_data.js | 41 +- .../components/error_details_spec.js | 6 +- .../components/error_tracking_actions_spec.js | 24 +- .../components/error_tracking_list_spec.js | 20 +- .../error_tracking/store/actions_spec.js | 4 +- .../store/details/actions_spec.js | 6 +- .../error_tracking/store/list/actions_spec.js | 19 +- .../components/error_tracking_form_spec.js | 16 +- .../store/actions_spec.js | 22 +- .../configure_feature_flags_modal_spec.js | 2 +- .../components/edit_feature_flag_spec.js | 2 +- .../components/environments_dropdown_spec.js | 15 +- .../components/feature_flags_spec.js | 20 +- .../components/feature_flags_table_spec.js | 23 +- .../feature_flags/components/form_spec.js | 11 +- .../new_environments_dropdown_spec.js | 2 +- .../strategies/gitlab_user_list_spec.js | 2 +- .../components/strategy_parameters_spec.js | 2 +- .../components/user_lists_table_spec.js | 2 +- .../feature_flags/store/edit/actions_spec.js | 24 +- .../feature_flags/store/index/actions_spec.js | 58 +- .../store/index/mutations_spec.js | 8 +- .../feature_flags/store/new/actions_spec.js | 12 +- .../feature_highlight_helper_spec.js | 4 +- spec/frontend/filterable_list_spec.js | 2 +- .../recent_searches_dropdown_content_spec.js | 13 +- .../filtered_search/dropdown_utils_spec.js | 2 +- .../filtered_search_manager_spec.js | 28 +- .../filtered_search_token_keys_spec.js | 2 +- .../filtered_search_visual_tokens_spec.js | 4 +- .../issues_filtered_search_token_keys_spec.js | 25 +- .../recent_searches_root_spec.js | 2 +- .../services/recent_searches_service_spec.js | 20 +- .../visual_token_value_spec.js | 38 +- .../fixtures/static/create_item_dropdown.html | 29 +- .../static/deprecated_jquery_dropdown.html | 12 +- .../fixtures/static/line_highlighter.html | 100 +- .../static/project_select_combo_button.html | 6 +- spec/frontend/flash_spec.js | 2 +- .../frequent_items/components/app_spec.js | 14 +- .../frequent_items_list_item_spec.js | 2 +- .../frequent_items_search_input_spec.js | 4 +- .../frequent_items/store/actions_spec.js | 28 +- spec/frontend/gfm_auto_complete_spec.js | 41 +- spec/frontend/gl_field_errors_spec.js | 32 +- spec/frontend/gl_form_spec.js | 24 +- spec/frontend/gpg_badges_spec.js | 10 +- .../components/shared_runners_form_spec.js | 2 +- spec/frontend/groups/components/app_spec.js | 13 +- .../groups/components/group_item_spec.js | 8 +- .../components/invite_members_banner_spec.js | 10 +- .../groups/components/item_stats_spec.js | 2 +- .../visibility_level_dropdown_spec.js | 9 +- .../groups/members/components/app_spec.js | 20 +- spec/frontend/helpers/README.md | 3 + .../helpers/event_hub_factory_spec.js | 10 +- .../frontend/helpers/help_page_helper_spec.js | 29 + spec/frontend/helpers/monitor_helper_spec.js | 6 +- .../helpers/startup_css_helper_spec.js | 19 +- spec/frontend/helpers/wait_for_promises.js | 1 - .../ide/components/activity_bar_spec.js | 4 +- .../components/branches/search_list_spec.js | 2 +- .../components/commit_sidebar/actions_spec.js | 6 +- .../commit_sidebar/empty_state_spec.js | 2 +- .../commit_sidebar/list_item_spec.js | 10 +- .../components/commit_sidebar/list_spec.js | 2 +- .../commit_sidebar/message_field_spec.js | 16 +- .../new_merge_request_option_spec.js | 14 +- .../commit_sidebar/radio_group_spec.js | 14 +- .../commit_sidebar/success_message_spec.js | 4 +- .../ide/components/error_message_spec.js | 4 +- .../ide/components/file_row_extra_spec.js | 33 +- .../ide/components/file_templates/bar_spec.js | 11 +- .../file_templates/dropdown_spec.js | 8 +- .../ide/components/ide_review_spec.js | 4 +- .../ide/components/ide_sidebar_nav_spec.js | 7 +- spec/frontend/ide/components/ide_spec.js | 2 +- .../ide/components/ide_status_bar_spec.js | 4 +- .../ide/components/ide_status_mr_spec.js | 2 +- .../ide/components/ide_tree_list_spec.js | 4 +- spec/frontend/ide/components/ide_tree_spec.js | 2 +- .../jobs/detail/description_spec.js | 2 +- .../jobs/detail/scroll_button_spec.js | 2 +- .../ide/components/jobs/detail_spec.js | 6 +- .../frontend/ide/components/jobs/item_spec.js | 4 +- .../frontend/ide/components/jobs/list_spec.js | 4 +- .../ide/components/jobs/stage_spec.js | 7 +- .../components/merge_requests/list_spec.js | 12 +- .../components/nav_dropdown_button_spec.js | 8 +- .../ide/components/nav_dropdown_spec.js | 6 +- .../components/new_dropdown/button_spec.js | 4 +- .../ide/components/new_dropdown/index_spec.js | 2 +- .../ide/components/new_dropdown/modal_spec.js | 2 +- .../components/new_dropdown/upload_spec.js | 10 +- .../panes/collapsible_sidebar_spec.js | 4 +- .../ide/components/panes/right_spec.js | 2 +- .../ide/components/pipelines/list_spec.js | 22 +- .../ide/components/preview/clientside_spec.js | 54 +- .../components/repo_commit_section_spec.js | 28 +- .../ide/components/repo_editor_spec.js | 68 +- .../frontend/ide/components/repo_tabs_spec.js | 2 +- .../ide/components/resizable_panel_spec.js | 2 +- .../components/shared/tokened_input_spec.js | 6 +- .../ide/components/terminal/session_spec.js | 4 +- .../terminal/terminal_controls_spec.js | 2 +- .../ide/components/terminal/terminal_spec.js | 57 +- .../terminal_sync_status_spec.js | 2 +- spec/frontend/ide/file_helpers.js | 2 +- spec/frontend/ide/helpers.js | 11 +- .../frontend/ide/ide_router_extension_spec.js | 4 +- spec/frontend/ide/ide_router_spec.js | 2 +- spec/frontend/ide/lib/common/model_spec.js | 2 +- spec/frontend/ide/lib/create_diff_spec.js | 8 +- .../frontend/ide/lib/create_file_diff_spec.js | 14 +- spec/frontend/ide/lib/diff/controller_spec.js | 4 +- spec/frontend/ide/lib/editor_spec.js | 2 +- .../ide/lib/editorconfig/parser_spec.js | 6 +- spec/frontend/ide/lib/errors_spec.js | 2 +- spec/frontend/ide/lib/files_spec.js | 11 +- spec/frontend/ide/lib/languages/hcl_spec.js | 36 + spec/frontend/ide/lib/mirror_spec.js | 4 +- spec/frontend/ide/services/index_spec.js | 33 +- spec/frontend/ide/stores/actions/file_spec.js | 38 +- .../ide/stores/actions/merge_request_spec.js | 38 +- .../ide/stores/actions/project_spec.js | 30 +- spec/frontend/ide/stores/actions/tree_spec.js | 29 +- spec/frontend/ide/stores/actions_spec.js | 90 +- spec/frontend/ide/stores/extend_spec.js | 4 +- spec/frontend/ide/stores/getters_spec.js | 2 +- spec/frontend/ide/stores/integration_spec.js | 2 +- .../stores/modules/branches/actions_spec.js | 12 +- .../stores/modules/branches/mutations_spec.js | 2 +- .../stores/modules/clientside/actions_spec.js | 2 +- .../ide/stores/modules/commit/actions_spec.js | 95 +- .../ide/stores/modules/commit/getters_spec.js | 2 +- .../ide/stores/modules/editor/setup_spec.js | 11 +- .../modules/file_templates/actions_spec.js | 22 +- .../modules/merge_requests/actions_spec.js | 16 +- .../ide/stores/modules/pane/actions_spec.js | 12 +- .../stores/modules/pipelines/actions_spec.js | 48 +- .../modules/pipelines/mutations_spec.js | 2 +- .../modules/terminal/actions/checks_spec.js | 2 +- .../terminal/actions/session_controls_spec.js | 2 +- .../terminal/actions/session_status_spec.js | 2 +- .../modules/terminal_sync/actions_spec.js | 8 +- .../ide/stores/mutations/file_spec.js | 4 +- .../ide/stores/plugins/terminal_sync_spec.js | 9 + .../ide/sync_router_and_store_spec.js | 4 +- spec/frontend/ide/utils_spec.js | 2 +- .../helpers/comment_indicator_helper_spec.js | 2 +- .../image_diff/helpers/utils_helper_spec.js | 2 +- spec/frontend/image_diff/image_diff_spec.js | 2 +- .../image_diff/init_discussion_tab_spec.js | 4 +- .../image_diff/replaced_image_diff_spec.js | 18 +- .../components/import_table_row_spec.js | 6 +- .../components/import_table_spec.js | 2 +- .../graphql/client_factory_spec.js | 8 +- .../graphql/services/status_poller_spec.js | 18 +- .../components/import_projects_table_spec.js | 29 +- .../provider_repo_table_row_spec.js | 2 +- .../import_projects/store/actions_spec.js | 2 +- .../components/incidents_list_spec.js | 14 +- .../__snapshots__/alerts_form_spec.js.snap | 1 + .../__snapshots__/pagerduty_form_spec.js.snap | 1 + .../incidents_settings_tabs_spec.js | 13 +- .../edit/components/dynamic_field_spec.js | 267 +- .../components/jira_issues_fields_spec.js | 2 +- .../components/jira_trigger_fields_spec.js | 8 +- .../edit/components/trigger_fields_spec.js | 2 +- .../components/invite_member_modal_spec.js | 10 +- .../components/invite_members_modal_spec.js | 227 +- .../components/members_token_select_spec.js | 39 +- .../components/add_issuable_form_spec.js | 17 +- .../components/related_issues_block_spec.js | 7 +- .../components/related_issues_list_spec.js | 7 +- .../components/related_issues_root_spec.js | 4 +- .../components/issuable_item_spec.js | 9 +- .../components/issuable_body_spec.js | 7 +- .../components/issuable_edit_form_spec.js | 2 +- .../components/issuable_header_spec.js | 2 +- .../components/issuable_show_root_spec.js | 2 +- spec/frontend/issuable_spec.js | 2 +- .../components/app_spec.js | 14 +- .../components/item_spec.js | 2 +- .../issuable_suggestions/mock_data.js | 2 +- .../issue_show/components/app_spec.js | 12 +- .../issue_show/components/description_spec.js | 2 +- .../components/edit_actions_spec.js | 12 +- .../components/fields/description_spec.js | 4 +- .../issue_show/components/form_spec.js | 2 +- .../components/header_actions_spec.js | 9 +- .../incidents/highlight_bar_spec.js | 2 +- .../incidents/incident_tabs_spec.js | 75 +- .../components/pinned_links_spec.js | 14 +- spec/frontend/issue_show/issue_spec.js | 2 +- spec/frontend/issue_spec.js | 2 +- .../issues_list/components/issuable_spec.js | 16 +- .../components/issuables_list_app_spec.js | 16 +- spec/frontend/jira_connect/api_spec.js | 107 + .../jira_connect/components/app_spec.js | 80 + .../components/groups_list_item_spec.js | 46 + .../components/groups_list_spec.js | 71 + spec/frontend/jira_connect/mock_data.js | 15 + .../jira_connect/store/mutations_spec.js | 18 + .../jira_import_form_spec.js.snap | 164 +- .../components/jira_import_form_spec.js | 2 +- .../components/jira_import_progress_spec.js | 2 +- .../components/jira_import_setup_spec.js | 2 +- .../jobs/components/artifacts_block_spec.js | 4 +- .../jobs/components/commit_block_spec.js | 2 +- .../jobs/components/empty_state_spec.js | 14 +- .../jobs/components/erased_block_spec.js | 2 +- spec/frontend/jobs/components/job_app_spec.js | 22 +- .../components/job_container_item_spec.js | 2 +- .../components/job_log_controllers_spec.js | 2 +- .../job_sidebar_details_container_spec.js | 9 +- .../jobs/components/jobs_container_spec.js | 2 +- .../frontend/jobs/components/log/line_spec.js | 5 +- spec/frontend/jobs/components/log/log_spec.js | 6 +- .../components/manual_variables_form_spec.js | 8 +- spec/frontend/jobs/components/sidebar_spec.js | 2 +- .../jobs/components/stages_dropdown_spec.js | 2 +- .../jobs/components/stuck_block_spec.js | 2 +- .../jobs/components/trigger_block_spec.js | 4 +- spec/frontend/jobs/store/actions_spec.js | 56 +- spec/frontend/jobs/store/helpers.js | 2 +- spec/frontend/lazy_loader_spec.js | 6 +- spec/frontend/lib/dompurify_spec.js | 10 +- spec/frontend/lib/utils/ajax_cache_spec.js | 8 +- .../lib/utils/apollo_startup_js_link_spec.js | 72 +- spec/frontend/lib/utils/chart_utils_spec.js | 6 +- spec/frontend/lib/utils/common_utils_spec.js | 140 +- .../frontend/lib/utils/datetime_range_spec.js | 2 +- .../lib/utils/datetime_utility_spec.js | 168 +- spec/frontend/lib/utils/dom_utils_spec.js | 4 +- spec/frontend/lib/utils/favicon_ci_spec.js | 50 + spec/frontend/lib/utils/favicon_spec.js | 39 + spec/frontend/lib/utils/forms_spec.js | 8 +- spec/frontend/lib/utils/highlight_spec.js | 4 +- spec/frontend/lib/utils/icon_utils_spec.js | 12 +- spec/frontend/lib/utils/mock_data.js | 3 - spec/frontend/lib/utils/poll_spec.js | 20 +- .../lib/utils/poll_until_complete_spec.js | 2 +- spec/frontend/lib/utils/text_utility_spec.js | 4 +- spec/frontend/lib/utils/url_utility_spec.js | 18 +- spec/frontend/lib/utils/users_cache_spec.js | 60 +- spec/frontend/line_highlighter_spec.js | 9 +- .../logs/components/environment_logs_spec.js | 12 +- .../components/log_advanced_filters_spec.js | 6 +- .../components/log_control_buttons_spec.js | 2 +- .../components/log_simple_filters_spec.js | 2 +- spec/frontend/logs/stores/actions_spec.js | 2 +- spec/frontend/logs/stores/mutations_spec.js | 2 +- spec/frontend/matchers.js | 9 +- spec/frontend/matchers_spec.js | 4 +- .../access_request_action_buttons_spec.js | 4 +- .../invite_action_buttons_spec.js | 2 +- .../resend_invite_button_spec.js | 8 +- .../user_action_buttons_spec.js | 4 +- .../components/avatars/user_avatar_spec.js | 2 +- .../filter_sort/filter_sort_container_spec.js | 2 +- .../members_filtered_search_bar_spec.js | 7 +- .../filter_sort/sort_dropdown_spec.js | 8 +- .../components/modals/leave_modal_spec.js | 4 +- .../modals/remove_group_link_modal_spec.js | 2 +- .../components/table/created_at_spec.js | 2 +- .../table/expiration_datepicker_spec.js | 10 +- .../components/table/expires_at_spec.js | 4 +- .../components/table/member_avatar_spec.js | 2 +- .../components/table/member_source_spec.js | 6 +- .../components/table/members_table_spec.js | 51 +- .../components/table/role_dropdown_spec.js | 8 +- spec/frontend/members/mock_data.js | 2 +- spec/frontend/members/utils_spec.js | 2 +- .../components/status_box_spec.js | 81 + spec/frontend/merge_request_spec.js | 18 +- spec/frontend/merge_request_tabs_spec.js | 5 +- .../milestones/milestone_combobox_spec.js | 126 +- .../mini_pipeline_graph_dropdown_spec.js | 6 +- .../mocks/ce/lib/utils/axios_utils.js | 14 +- spec/frontend/mocks/mocks_helper.js | 6 +- spec/frontend/mocks/mocks_helper_spec.js | 10 +- spec/frontend/monitoring/alert_widget_spec.js | 29 +- .../dashboard_template_spec.js.snap | 1 + .../components/alert_widget_form_spec.js | 4 + .../components/charts/annotations_spec.js | 6 +- .../components/charts/anomaly_spec.js | 4 +- .../monitoring/components/charts/bar_spec.js | 2 +- .../components/charts/column_spec.js | 4 +- .../components/charts/gauge_spec.js | 4 +- .../components/charts/options_spec.js | 12 +- .../components/charts/stacked_column_spec.js | 6 +- .../components/charts/time_series_spec.js | 22 +- .../components/dashboard_actions_menu_spec.js | 8 +- .../components/dashboard_header_spec.js | 12 +- .../components/dashboard_panel_spec.js | 12 +- .../monitoring/components/dashboard_spec.js | 38 +- .../components/dashboards_dropdown_spec.js | 22 +- .../duplicate_dashboard_form_spec.js | 52 +- .../duplicate_dashboard_modal_spec.js | 75 +- .../components/embeds/embed_group_spec.js | 4 +- .../monitoring/components/graph_group_spec.js | 2 +- .../components/group_empty_state_spec.js | 2 +- .../components/links_section_spec.js | 2 +- .../components/refresh_button_spec.js | 4 +- .../variables/dropdown_field_spec.js | 11 +- spec/frontend/monitoring/fixture_data.js | 4 +- spec/frontend/monitoring/graph_data.js | 4 +- spec/frontend/monitoring/mock_data.js | 3 +- .../monitoring/requests/index_spec.js | 20 +- spec/frontend/monitoring/router_spec.js | 14 +- .../frontend/monitoring/store/actions_spec.js | 44 +- .../frontend/monitoring/store/getters_spec.js | 2 +- .../monitoring/store/mutations_spec.js | 7 +- spec/frontend/monitoring/store/utils_spec.js | 26 +- spec/frontend/monitoring/store_utils.js | 8 +- spec/frontend/monitoring/utils_spec.js | 6 +- spec/frontend/mr_popover/index_spec.js | 2 +- spec/frontend/new_branch_spec.js | 6 +- spec/frontend/notebook/cells/code_spec.js | 6 +- .../notebook/cells/output/index_spec.js | 54 +- .../notebook/cells/output/latex_spec.js | 40 + spec/frontend/notebook/cells/prompt_spec.js | 4 +- spec/frontend/notebook/index_spec.js | 6 +- ...iscussion_jump_to_next_button_spec.js.snap | 21 - .../components/comment_field_layout_spec.js | 137 + .../notes/components/comment_form_spec.js | 15 +- .../components/diff_discussion_header_spec.js | 10 +- .../components/discussion_actions_spec.js | 33 +- .../components/discussion_counter_spec.js | 2 +- .../components/discussion_filter_note_spec.js | 10 +- .../components/discussion_filter_spec.js | 26 +- .../discussion_jump_to_next_button_spec.js | 43 - .../notes/components/discussion_notes_spec.js | 5 +- .../discussion_resolve_button_spec.js | 2 +- .../email_participants_warning_spec.js | 70 + .../components/multiline_comment_form_spec.js | 89 + .../multiline_comment_utils_spec.js | 4 +- .../notes/components/note_actions_spec.js | 28 +- .../notes/components/note_attachment_spec.js | 2 +- .../notes/components/note_awards_list_spec.js | 8 +- .../notes/components/note_body_spec.js | 2 +- .../notes/components/note_form_spec.js | 86 +- .../notes/components/note_header_spec.js | 4 +- .../components/noteable_discussion_spec.js | 80 +- .../notes/components/noteable_note_spec.js | 4 +- .../notes/components/notes_app_spec.js | 44 +- .../components/toggle_replies_widget_spec.js | 2 +- spec/frontend/notes/helpers.js | 2 +- .../mixins/discussion_navigation_spec.js | 2 +- spec/frontend/notes/old_notes_spec.js | 70 +- spec/frontend/notes/stores/actions_spec.js | 130 +- spec/frontend/notes/stores/getters_spec.js | 23 +- spec/frontend/notes/stores/mutation_spec.js | 8 +- spec/frontend/oauth_remember_me_spec.js | 6 +- .../components/metrics_settings_spec.js | 1 + .../__snapshots__/package_title_spec.js.snap | 8 +- .../components/additional_metadata_spec.js | 4 +- .../components/conan_installation_spec.js | 12 +- .../components/maven_installation_spec.js | 18 +- .../components/npm_installation_spec.js | 24 +- .../components/nuget_installation_spec.js | 12 +- .../details/components/package_files_spec.js | 1 - .../components/package_history_spec.js | 10 +- .../packages/details/store/actions_spec.js | 20 +- .../packages_list_app_spec.js.snap | 16 +- .../list/components/packages_sort_spec.js | 2 +- .../packages/list/stores/actions_spec.js | 34 +- .../shared/components/package_path_spec.js | 8 +- .../shared/components/package_tags_spec.js | 12 +- spec/frontend/packages/shared/utils_spec.js | 2 +- spec/frontend/pager_spec.js | 12 +- .../admin/abuse_reports/abuse_reports_spec.js | 4 +- .../account_and_limits_spec.js | 2 +- .../index/components/stop_jobs_modal_spec.js | 12 +- .../components/delete_user_modal_spec.js | 6 +- .../pages/admin/users/new/index_spec.js | 4 +- .../pages/dashboard/todos/index/todos_spec.js | 8 +- .../bitbucket_server_status_table_spec.js | 2 +- .../components/promote_label_modal_spec.js | 12 +- .../components/delete_milestone_modal_spec.js | 12 +- .../promote_milestone_modal_spec.js | 120 +- .../pages/profiles/show/emoji_menu_spec.js | 4 +- .../edit/mount_search_settings_spec.js | 25 + .../components/fork_groups_list_item_spec.js | 4 +- .../new/components/fork_groups_list_spec.js | 19 +- .../__snapshots__/code_coverage_spec.js.snap | 1 + .../components/interval_pattern_input_spec.js | 4 +- .../components/timezone_dropdown_spec.js | 14 +- .../project_feature_settings_spec.js | 29 +- .../components/settings_panel_spec.js | 49 +- .../pages/search/show/refresh_counts_spec.js | 7 +- .../new/preserve_url_fragment_spec.js | 6 +- .../sessions/new/signin_tabs_memoizer_spec.js | 2 +- spec/frontend/pdf/index_spec.js | 6 +- spec/frontend/pdf/page_spec.js | 2 +- .../components/detailed_metric_spec.js | 8 +- spec/frontend/performance_bar/index_spec.js | 11 +- .../stores/performance_bar_store_spec.js | 2 +- .../components/commit/commit_form_spec.js | 4 +- .../info/validation_segment_spec.js | 113 + .../components/lint/ci_lint_results_spec.js | 33 +- .../components/lint/ci_lint_spec.js | 81 + .../components/text_editor_spec.js | 69 +- .../components/ui/editor_tab_spec.js | 91 + .../__snapshots__/resolvers_spec.js.snap | 4 +- .../pipeline_editor/graphql/resolvers_spec.js | 6 +- spec/frontend/pipeline_editor/mock_data.js | 129 +- .../pipeline_editor_app_spec.js | 241 +- .../components/pipeline_new_form_spec.js | 31 +- spec/frontend/pipelines/blank_state_spec.js | 2 +- .../components/dag/dag_annotations_spec.js | 6 +- .../components/dag/dag_graph_spec.js | 26 +- .../pipelines/components/dag/dag_spec.js | 2 +- .../components/dag/parsing_utils_spec.js | 5 +- .../pipelines_filtered_search_spec.js | 6 +- spec/frontend/pipelines/empty_state_spec.js | 105 +- .../pipelines/graph/action_component_spec.js | 6 +- .../graph/graph_component_legacy_spec.js | 80 +- .../pipelines/graph/graph_component_spec.js | 45 +- .../graph/graph_component_wrapper_spec.js | 4 +- .../frontend/pipelines/graph/job_item_spec.js | 4 +- .../graph/linked_pipelines_column_spec.js | 4 +- spec/frontend/pipelines/graph/mock_data.js | 76 +- .../stage_column_component_legacy_spec.js | 7 +- .../graph/stage_column_component_spec.js | 66 +- spec/frontend/pipelines/nav_controls_spec.js | 2 +- .../pipelines/pipeline_graph/mock_data.js | 10 +- .../pipeline_graph/pipeline_graph_spec.js | 18 +- .../pipelines/pipeline_graph/utils_spec.js | 44 +- spec/frontend/pipelines/pipeline_url_spec.js | 2 +- .../pipelines/pipelines_actions_spec.js | 28 +- .../pipelines/pipelines_artifacts_spec.js | 16 +- spec/frontend/pipelines/pipelines_spec.js | 98 +- .../pipelines/pipelines_store_spec.js | 5 +- .../pipelines/pipelines_table_row_spec.js | 21 +- .../pipelines/pipelines_table_spec.js | 2 +- .../pipelines/shared/links_layer_spec.js | 99 + spec/frontend/pipelines/stage_spec.js | 77 +- .../pipelines/stores/pipeline_store_spec.js | 4 +- .../test_reports/stores/actions_spec.js | 22 +- .../test_reports/stores/getters_spec.js | 4 +- .../test_reports/test_case_details_spec.js | 2 +- .../test_reports/test_suite_table_spec.js | 6 +- .../test_reports/test_summary_spec.js | 2 +- .../pipeline_trigger_author_token_spec.js | 2 +- .../pipelines/unwrapping_utils_spec.js | 26 +- .../components/delete_account_modal_spec.js | 20 +- .../components/update_username_spec.js | 2 +- spec/frontend/project_find_file_spec.js | 11 +- .../components/branches_dropdown_spec.js | 166 + .../commit/components/form_modal_spec.js | 155 + .../commit/components/form_trigger_spec.js | 44 + spec/frontend/projects/commit/mock_data.js | 27 + .../projects/commit/store/actions_spec.js | 111 + .../projects/commit/store/getters_spec.js | 21 + .../projects/commit/store/mutations_spec.js | 57 + .../commits/components/author_select_spec.js | 26 +- .../project_delete_button_spec.js.snap | 1 + .../__snapshots__/delete_button_spec.js.snap | 67 +- .../components/shared/delete_button_spec.js | 16 +- .../components/app_spec.js | 2 +- .../components/legacy_container_spec.js | 2 +- .../components/welcome_spec.js | 2 +- ...> ci_cd_analytics_area_chart_spec.js.snap} | 2 +- .../statistics_list_spec.js.snap | 9 - .../pipelines/charts/components/app_spec.js | 134 +- ....js => ci_cd_analytics_area_chart_spec.js} | 15 +- ...legacy_spec.js => pipeline_charts_spec.js} | 36 +- .../projects/pipelines/charts/mock_data.js | 16 +- .../project_import_gitlab_project_spec.js | 2 +- spec/frontend/projects/project_new_spec.js | 7 +- .../projects/projects_filterable_list_spec.js | 2 +- .../projects/settings/access_dropdown_spec.js | 10 +- .../components/service_desk_root_spec.js | 4 +- .../components/service_desk_setting_spec.js | 4 +- .../services/service_desk_service_spec.js | 8 +- .../prometheus_metrics_spec.js | 13 +- .../ref/components/ref_selector_spec.js | 24 +- .../registry_breadcrumb_spec.js.snap | 89 +- .../explorer/components/delete_button_spec.js | 2 +- .../details_page/delete_alert_spec.js | 2 +- .../details_page/delete_modal_spec.js | 2 +- .../details_page/details_header_spec.js | 121 +- .../details_page/tags_list_row_spec.js | 6 +- .../components/details_page/tags_list_spec.js | 24 +- .../details_page/tags_loader_spec.js | 6 +- .../project_empty_state_spec.js.snap | 2 +- .../list_page/image_list_row_spec.js | 21 +- .../components/list_page/image_list_spec.js | 20 +- .../list_page/registry_header_spec.js | 7 +- .../components/registry_breadcrumb_spec.js | 93 +- spec/frontend/registry/explorer/mock_data.js | 32 +- .../registry/explorer/pages/details_spec.js | 27 +- .../registry/explorer/pages/list_spec.js | 100 +- .../__snapshots__/settings_form_spec.js.snap | 4 +- .../components/expiration_dropdown_spec.js | 7 +- .../components/expiration_input_spec.js | 2 +- .../components/expiration_run_text_spec.js | 2 +- .../components/expiration_toggle_spec.js | 2 +- .../components/registry_settings_app_spec.js | 4 +- .../settings/components/settings_form_spec.js | 4 +- spec/frontend/registry/settings/mock_data.js | 2 +- spec/frontend/registry/settings/utils_spec.js | 5 +- .../components/related_merge_requests_spec.js | 7 +- .../store/actions_spec.js | 12 +- .../releases/__snapshots__/util_spec.js.snap | 48 +- .../releases/components/app_edit_new_spec.js | 6 +- .../releases/components/app_index_spec.js | 34 +- .../releases/components/app_show_spec.js | 2 +- .../components/asset_links_form_spec.js | 6 +- .../components/issuable_stats_spec.js | 2 +- .../components/release_block_assets_spec.js | 14 +- .../release_block_milestone_info_spec.js | 32 +- .../releases_pagination_graphql_spec.js | 4 +- .../releases_pagination_rest_spec.js | 2 +- .../components/releases_pagination_spec.js | 2 +- .../releases/components/tag_field_new_spec.js | 2 +- .../stores/modules/detail/actions_spec.js | 4 +- .../releases/stores/modules/list/helpers.js | 2 +- .../store/actions_spec.js | 12 +- .../grouped_codequality_reports_app_spec.js | 12 +- .../codequality_report/store/actions_spec.js | 12 +- .../utils/codequality_comparison_spec.js | 6 +- .../components/grouped_issues_list_spec.js | 6 +- .../grouped_test_reports_app_spec.js | 70 +- .../components/issue_status_icon_spec.js | 2 +- .../components/modal_open_name_spec.js | 47 - .../frontend/reports/components/modal_spec.js | 57 +- .../reports/components/report_link_spec.js | 2 +- .../reports/components/report_section_spec.js | 18 +- .../components/test_issue_body_spec.js | 4 +- spec/frontend/reports/store/actions_spec.js | 44 +- spec/frontend/reports/store/mutations_spec.js | 27 + .../repository/components/breadcrumbs_spec.js | 16 +- .../directory_download_links_spec.js | 5 +- .../repository/components/last_commit_spec.js | 10 + spec/frontend/repository/utils/dom_spec.js | 2 +- spec/frontend/right_sidebar_spec.js | 6 +- spec/frontend/search/index_spec.js | 2 +- .../search/sidebar/components/app_spec.js | 2 +- .../components/confidentiality_filter_spec.js | 2 +- .../sidebar/components/radio_filter_spec.js | 6 +- .../sidebar/components/status_filter_spec.js | 2 +- .../components/searchable_dropdown_spec.js | 4 +- spec/frontend/search_autocomplete_spec.js | 10 +- .../components/search_settings_spec.js | 106 + spec/frontend/search_settings/index_spec.js | 36 + .../self_monitor_form_spec.js.snap | 1 + .../components/self_monitor_form_spec.js | 5 +- .../self_monitor/store/actions_spec.js | 20 +- spec/frontend/sentry/sentry_config_spec.js | 4 +- .../sentry_error_stack_trace_spec.js | 5 - .../__snapshots__/empty_state_spec.js.snap | 2 +- .../serverless/components/area_spec.js | 4 +- .../components/function_row_spec.js | 2 +- .../components/missing_prometheus_spec.js | 2 +- .../serverless/components/pod_box_spec.js | 2 +- .../serverless/components/url_spec.js | 2 +- spec/frontend/serverless/mock_data.js | 5 +- .../frontend/serverless/store/actions_spec.js | 12 +- spec/frontend/serverless/utils.js | 6 +- .../set_status_modal_wrapper_spec.js | 24 +- spec/frontend/shared/popover_spec.js | 20 +- spec/frontend/shortcuts_spec.js | 6 +- spec/frontend/sidebar/assignee_title_spec.js | 2 +- spec/frontend/sidebar/assignees_spec.js | 2 +- .../assignees/collapsed_assignee_list_spec.js | 2 +- .../assignees/collapsed_assignee_spec.js | 7 +- .../uncollapsed_assignee_list_spec.js | 2 +- .../copy_email_to_clipboard_spec.js | 22 + .../components/severity/severity_spec.js | 2 +- .../severity/sidebar_severity_spec.js | 22 +- .../time_tracking/time_tracker_spec.js | 12 +- .../sidebar/confidential/edit_form_spec.js | 2 +- .../sidebar/lock/edit_form_buttons_spec.js | 2 +- spec/frontend/sidebar/lock/edit_form_spec.js | 2 +- .../sidebar/lock/issuable_lock_form_spec.js | 4 +- spec/frontend/sidebar/participants_spec.js | 2 +- spec/frontend/sidebar/reviewer_title_spec.js | 23 +- spec/frontend/sidebar/reviewers_spec.js | 2 +- .../sidebar/sidebar_assignees_spec.js | 2 +- .../frontend/sidebar/sidebar_mediator_spec.js | 2 +- .../sidebar/sidebar_move_issue_spec.js | 18 +- spec/frontend/sidebar/sidebar_store_spec.js | 2 +- spec/frontend/sidebar/subscriptions_spec.js | 2 +- spec/frontend/sidebar/todo_spec.js | 7 +- .../snippet/collapsible_input_spec.js | 12 +- .../frontend/snippets/components/edit_spec.js | 14 +- .../components/embed_dropdown_spec.js | 2 +- .../snippet_blob_actions_edit_spec.js | 22 +- .../components/snippet_header_spec.js | 39 +- .../snippet_visibility_edit_spec.js | 2 +- spec/frontend/snippets/utils/blob_spec.js | 2 +- .../components/edit_area_spec.js | 67 +- .../components/edit_meta_controls_spec.js | 2 +- .../graphql/resolvers/file_spec.js | 2 +- .../services/load_source_content_spec.js | 2 +- .../services/submit_content_changes_spec.js | 2 +- spec/frontend/syntax_highlight_spec.js | 2 +- spec/frontend/task_list_spec.js | 4 +- .../components/states_table_actions_spec.js | 2 +- .../components/terraform_list_spec.js | 2 +- spec/frontend/test_setup.js | 27 +- spec/frontend/toggle_buttons_spec.js | 2 +- .../tooltips/components/tooltips_spec.js | 12 +- spec/frontend/tooltips/index_spec.js | 8 +- spec/frontend/tracking_spec.js | 2 +- spec/frontend/transfer_edit_spec.js | 34 +- .../components/add_user_modal_spec.js | 2 +- .../components/edit_user_list_spec.js | 4 +- .../components/new_user_list_spec.js | 4 +- .../user_lists/components/user_list_spec.js | 16 +- .../user_lists/store/show/mutations_spec.js | 6 +- spec/frontend/user_popovers_spec.js | 4 +- spec/frontend/version_check_image_spec.js | 4 +- spec/frontend/vue_alerts_spec.js | 8 +- .../components/approvals/approvals_spec.js | 39 +- .../approvals/approvals_summary_spec.js | 2 +- .../components/artifacts_list_app_spec.js | 54 +- .../components/artifacts_list_spec.js | 20 +- .../vue_mr_widget/components/mock_data.js | 14 - .../mr_collapsible_extension_spec.js | 16 +- .../mr_widget_alert_message_spec.js | 10 +- .../components/mr_widget_header_spec.js | 4 +- .../components/mr_widget_icon_spec.js | 2 +- .../components/mr_widget_memory_usage_spec.js | 12 +- .../mr_widget_pipeline_container_spec.js | 10 +- .../components/mr_widget_pipeline_spec.js | 20 +- .../components/mr_widget_rebase_spec.js | 282 +- .../mr_widget_related_links_spec.js | 2 +- .../components/review_app_link_spec.js | 2 +- .../mr_widget_auto_merge_enabled_spec.js.snap | 183 + .../mr_widget_auto_merge_enabled_spec.js | 451 +- .../mr_widget_auto_merge_failed_spec.js | 64 +- .../states/mr_widget_closed_spec.js | 10 +- .../mr_widget_commit_message_dropdown_spec.js | 3 +- .../states/mr_widget_commits_header_spec.js | 10 +- .../states/mr_widget_conflicts_spec.js | 11 +- .../states/mr_widget_failed_to_merge_spec.js | 8 +- .../states/mr_widget_merged_spec.js | 10 +- .../states/mr_widget_missing_branch_spec.js | 2 +- .../states/mr_widget_ready_to_merge_spec.js | 47 +- .../mr_widget_squash_before_merge_spec.js | 2 +- .../components/states/mr_widget_wip_spec.js | 6 +- .../mr_widget_terraform_container_spec.js | 2 +- .../terraform/terraform_plan_spec.js | 2 +- .../deployment/deployment_spec.js | 4 +- .../deployment/deployment_view_button_spec.js | 2 +- spec/frontend/vue_mr_widget/mock_data.js | 24 +- .../mr_widget_how_to_merge_modal_spec.js | 12 +- .../vue_mr_widget/mr_widget_options_spec.js | 444 +- .../stores/artifacts_list/actions_spec.js | 14 +- .../stores/artifacts_list/getters_spec.js | 4 +- .../stores/mr_widget_store_spec.js | 2 +- .../__snapshots__/clone_dropdown_spec.js.snap | 1 + .../__snapshots__/split_button_spec.js.snap | 1 + .../components/actions_button_spec.js | 8 +- .../components/alert_details_table_spec.js | 6 +- .../vue_shared/components/awards_list_spec.js | 14 +- .../components/ci_badge_link_spec.js | 2 +- .../components/clipboard_button_spec.js | 22 + .../color_picker/color_picker_spec.js | 4 +- .../vue_shared/components/commit_spec.js | 13 +- .../components/confirm_modal_spec.js | 2 +- .../viewers/markdown_viewer_spec.js | 2 +- .../date_time_picker_lib_spec.js | 2 +- .../date_time_picker/date_time_picker_spec.js | 4 +- .../deployment_instance_spec.js | 103 + .../deployment_instance/mock_data.js | 144 + .../components/deprecated_modal_2_spec.js | 258 - .../diff_viewer/diff_viewer_spec.js | 4 +- .../viewers/image_diff_viewer_spec.js | 18 +- .../components/dismissible_container_spec.js | 2 +- .../vue_shared/components/editor_lite_spec.js | 42 +- .../components/expand_button_spec.js | 57 +- .../components/file_finder/index_spec.js | 30 +- .../components/file_finder/item_spec.js | 14 +- .../vue_shared/components/file_tree_spec.js | 4 +- .../filtered_search_bar_root_spec.js | 6 +- .../filtered_search_utils_spec.js | 51 +- .../filtered_search_bar/mock_data.js | 13 +- .../store/modules/filters/test_helper.js | 4 +- .../tokens/author_token_spec.js | 4 +- .../tokens/branch_token_spec.js | 4 +- .../tokens/label_token_spec.js | 13 +- .../tokens/milestone_token_spec.js | 9 +- .../__snapshots__/utils_spec.js.snap | 13 + .../components/gfm_autocomplete/utils_spec.js | 83 + .../components/gl_countdown_spec.js | 14 +- .../components/gl_modal_vuex_spec.js | 6 +- .../issuable/issuable_header_warnings_spec.js | 6 +- .../components/issue/issue_assignees_spec.js | 6 +- .../components/issue/issue_milestone_spec.js | 2 +- .../issue/related_issuable_item_spec.js | 6 +- .../issue/related_issuable_mock_data.js | 2 +- .../components/local_storage_sync_spec.js | 2 +- .../suggestion_diff_spec.js.snap | 1 + .../markdown/apply_suggestion_spec.js | 11 +- .../components/markdown/header_spec.js | 4 +- .../markdown/suggestion_diff_header_spec.js | 3 +- .../markdown/suggestion_diff_row_spec.js | 6 +- .../markdown/suggestion_diff_spec.js | 1 + .../components/markdown/suggestions_spec.js | 5 +- .../markdown/toolbar_button_spec.js | 2 +- .../components/navigation_tabs_spec.js | 84 +- .../components/notes/noteable_warning_spec.js | 2 +- .../components/ordered_layout_spec.js | 2 +- ...ginated_table_with_search_and_tabs_spec.js | 19 +- .../components/pagination_links_spec.js | 2 +- .../vue_shared/components/pikaday_spec.js | 47 +- .../components/project_avatar/default_spec.js | 4 +- .../project_selector/project_selector_spec.js | 22 +- .../components/registry/details_row_spec.js | 2 +- .../components/registry/list_item_spec.js | 6 +- .../components/registry/metadata_item_spec.js | 23 +- .../components/registry/title_area_spec.js | 42 +- .../editor_service_spec.js | 2 +- .../modals/add_image/upload_image_tab_spec.js | 2 +- .../modals/insert_video_modal_spec.js | 2 +- .../rich_content_editor_spec.js | 14 +- .../build_html_to_markdown_renderer_spec.js | 6 +- .../services/renderers/mock_data.js | 8 +- .../render_identifier_instance_text_spec.js | 2 +- .../render_identifier_paragraph_spec.js | 2 +- .../rich_content_editor/toolbar_item_spec.js | 2 +- .../security_reports/help_icon_spec.js | 2 +- .../security_reports/security_summary_spec.js | 4 +- .../collapsed_grouped_date_picker_spec.js | 8 +- .../components/sidebar/date_picker_spec.js | 35 +- .../sidebar/issuable_move_dropdown_spec.js | 32 +- .../sidebar/labels_select/base_spec.js | 2 +- .../dropdown_create_label_spec.js | 2 +- .../dropdown_value_collapsed_spec.js | 6 +- .../labels_select/dropdown_value_spec.js | 7 +- .../dropdown_contents_create_view_spec.js | 22 +- .../dropdown_contents_labels_view_spec.js | 4 +- .../labels_select_vue/store/actions_spec.js | 30 +- .../labels_select_vue/store/getters_spec.js | 5 +- .../labels_select_vue/store/mutations_spec.js | 6 +- .../vue_shared/components/slot_switch_spec.js | 4 +- .../components/split_button_spec.js | 11 +- .../components/stacked_progress_bar_spec.js | 11 +- .../components/table_pagination_spec.js | 2 +- .../vue_shared/components/tabs/tab_spec.js | 4 +- .../components/tooltip_on_truncate_spec.js | 6 +- .../user_avatar/user_avatar_image_spec.js | 4 +- .../user_avatar/user_avatar_link_spec.js | 4 +- .../user_avatar/user_avatar_list_spec.js | 8 +- .../user_popover/user_popover_spec.js | 11 +- .../vue_shared/directives/tooltip_spec.js | 8 +- .../vue_shared/directives/validation_spec.js | 6 +- .../security_report_download_dropdown_spec.js | 2 +- .../vue_shared/security_reports/mock_data.js | 75 + .../security_reports_app_spec.js | 22 +- .../security_reports/store/getters_spec.js | 2 +- .../store/modules/sast/actions_spec.js | 16 +- .../modules/secret_detection/actions_spec.js | 16 +- .../vue_shared/security_reports/utils_spec.js | 7 + .../vuex_shared/modules/modal/actions_spec.js | 8 +- .../frontend/whats_new/components/app_spec.js | 4 +- spec/frontend/wikis_spec.js | 240 +- spec/frontend/zen_mode_spec.js | 5 +- .../ide/helpers/ide_helper.js | 68 +- .../frontend_integration/ide/helpers/start.js | 14 +- .../ide/ide_integration_spec.js | 25 +- .../ide/user_opens_file_spec.js | 4 +- .../test_helpers/factories/commit_id.js | 4 +- .../test_helpers/fixtures.js | 6 +- .../test_helpers/mock_server/index.js | 2 +- .../test_helpers/mock_server/routes/404.js | 4 +- .../test_helpers/mock_server/routes/ci.js | 2 +- .../mock_server/routes/graphql.js | 2 +- .../test_helpers/mock_server/routes/index.js | 2 +- .../mock_server/routes/projects.js | 2 +- .../mock_server/routes/repository.js | 20 +- .../test_helpers/setup/index.js | 1 + .../setup/setup_testing_library.js | 3 + .../test_helpers/snapshot_serializer.js | 2 +- .../test_helpers/utils/obj_spec.js | 6 +- .../namespace/package_settings/update_spec.rb | 98 + .../graphql/mutations/releases/create_spec.rb | 7 +- .../graphql/mutations/releases/update_spec.rb | 7 +- .../resolvers/ci/config_resolver_spec.rb | 29 +- .../resolvers/ci/jobs_resolver_spec.rb | 3 +- .../graphql/resolvers/issues_resolver_spec.rb | 6 +- .../resolvers/merge_requests_resolver_spec.rb | 10 + .../package_details_resolver_spec.rb | 21 + .../resolvers/projects_resolver_spec.rb | 2 +- .../release_milestones_resolver_spec.rb | 23 + .../user_notes_count_resolver_spec.rb | 4 +- spec/graphql/resolvers/users_resolver_spec.rb | 26 +- .../measurement_type_spec.rb | 44 + spec/graphql/types/base_enum_spec.rb | 70 +- spec/graphql/types/board_type_spec.rb | 2 +- .../ci/config/job_restriction_type_spec.rb | 13 + spec/graphql/types/ci/config/job_type_spec.rb | 9 + spec/graphql/types/ci/job_type_spec.rb | 1 + spec/graphql/types/issue_type_spec.rb | 3 +- spec/graphql/types/merge_request_type_spec.rb | 14 +- .../namespace/package_settings_type_spec.rb | 17 + spec/graphql/types/notes/note_type_spec.rb | 1 + .../packages/composer/details_type_spec.rb | 23 + .../types/packages/composer/json_type_spec.rb | 15 + .../packages/composer/metadatum_type_spec.rb | 15 + .../{ => packages}/package_type_enum_spec.rb | 0 .../types/{ => packages}/package_type_spec.rb | 2 +- spec/graphql/types/packages/tag_type_spec.rb | 15 + spec/graphql/types/project_type_spec.rb | 2 +- .../types/projects/service_type_spec.rb | 2 +- spec/graphql/types/query_type_spec.rb | 6 + spec/graphql/types/repository_type_spec.rb | 2 + spec/helpers/blob_helper_spec.rb | 11 +- spec/helpers/ci/pipelines_helper_spec.rb | 19 + spec/helpers/ci/triggers_helper_spec.rb | 31 + spec/helpers/commits_helper_spec.rb | 33 + spec/helpers/dashboard_helper_spec.rb | 6 + spec/helpers/graph_helper_spec.rb | 12 + .../groups/group_members_helper_spec.rb | 12 +- spec/helpers/invite_members_helper_spec.rb | 65 + spec/helpers/jira_connect_helper_spec.rb | 15 + spec/helpers/markup_helper_spec.rb | 15 + spec/helpers/merge_requests_helper_spec.rb | 33 + .../projects/project_members_helper_spec.rb | 145 + spec/helpers/projects_helper_spec.rb | 29 +- spec/helpers/services_helper_spec.rb | 50 +- spec/helpers/tree_helper_spec.rb | 3 +- spec/helpers/users_helper_spec.rb | 6 +- spec/helpers/visibility_level_helper_spec.rb | 38 +- spec/helpers/wiki_page_version_helper_spec.rb | 80 + spec/initializers/carrierwave_patch_spec.rb | 99 +- spec/javascripts/fly_out_nav_browser_spec.js | 9 +- spec/javascripts/lib/utils/browser_spec.js | 106 - spec/javascripts/matchers.js | 7 +- spec/javascripts/test_bundle.js | 20 +- spec/javascripts/test_constants.js | 2 +- .../snippet_repository_storage_move_spec.rb | 25 + spec/lib/api/helpers/authentication_spec.rb | 207 + spec/lib/api/helpers_spec.rb | 47 +- .../lib/atlassian/jira_connect/client_spec.rb | 300 +- .../serializers/build_entity_spec.rb | 4 +- .../serializers/deployment_entity_spec.rb | 95 + .../serializers/feature_flag_entity_spec.rb | 85 + .../banzai/filter/asset_proxy_filter_spec.rb | 10 +- ...adcast_message_sanitization_filter_spec.rb | 12 +- .../filter/reference_redactor_filter_spec.rb | 31 +- .../banzai/filter/sanitization_filter_spec.rb | 24 +- .../filter/truncate_source_filter_spec.rb | 31 + .../pipeline/description_pipeline_spec.rb | 2 +- spec/lib/banzai/pipeline/gfm_pipeline_spec.rb | 4 +- .../pipeline/pre_process_pipeline_spec.rb | 8 + .../extractors/graphql_extractor_spec.rb | 7 +- .../groups/pipelines/group_pipeline_spec.rb | 16 +- .../subgroup_entities_pipeline_spec.rb | 10 +- .../importers/group_importer_spec.rb | 5 +- .../importers/groups_importer_spec.rb | 36 - spec/lib/bulk_imports/pipeline_spec.rb | 14 +- .../lib/constraints/admin_constrainer_spec.rb | 2 +- spec/lib/container_registry/client_spec.rb | 100 +- spec/lib/declarative_enum_spec.rb | 147 + spec/lib/expand_variables_spec.rb | 37 + .../issue_deployed_to_production_spec.rb | 7 + .../gitlab/api_authentication/builder_spec.rb | 76 + .../sent_through_builder_spec.rb | 17 + .../api_authentication/token_locator_spec.rb | 55 + .../api_authentication/token_resolver_spec.rb | 117 + .../token_type_builder_spec.rb | 16 + spec/lib/gitlab/asset_proxy_spec.rb | 4 +- spec/lib/gitlab/auth/auth_finders_spec.rb | 58 +- .../lib/gitlab/auth/current_user_mode_spec.rb | 2 +- spec/lib/gitlab/auth/ldap/config_spec.rb | 22 +- .../gitlab/auth/request_authenticator_spec.rb | 5 +- spec/lib/gitlab/auth_spec.rb | 5 + .../backfill_artifact_expiry_date_spec.rb | 82 + ...umn_using_background_migration_job_spec.rb | 91 + ...ng_uuid_for_vulnerability_feedback_spec.rb | 113 + .../remove_duplicate_services_spec.rb | 121 + spec/lib/gitlab/checks/diff_check_spec.rb | 119 +- .../gitlab/ci/config/entry/artifacts_spec.rb | 17 + .../gitlab/ci/config/entry/variables_spec.rb | 2 +- .../ci/config/external/file/local_spec.rb | 6 +- .../ci/config/external/file/project_spec.rb | 6 +- .../gitlab/ci/config/external/mapper_spec.rb | 126 +- .../ci/config/external/processor_spec.rb | 13 - spec/lib/gitlab/ci/config_spec.rb | 24 + spec/lib/gitlab/ci/lint_spec.rb | 2 +- .../ci/parsers/coverage/cobertura_spec.rb | 6 + .../gitlab/ci/pipeline/chain/build_spec.rb | 116 +- .../gitlab/ci/pipeline/chain/command_spec.rb | 26 + .../ci/pipeline/chain/seed_block_spec.rb | 12 - .../lib/gitlab/ci/pipeline/chain/seed_spec.rb | 39 +- .../ci/pipeline/chain/template_usage_spec.rb | 37 + .../lib/gitlab/ci/pipeline/seed/build_spec.rb | 2 +- .../gitlab/ci/pipeline/seed/pipeline_spec.rb | 3 +- .../ci/reports/test_failure_history_spec.rb | 13 - .../gitlab/ci/status/group/factory_spec.rb | 5 + spec/lib/gitlab/ci/syntax_templates_spec.rb | 25 + .../5_minute_production_app_ci_yaml_spec.rb | 49 + .../AWS/deploy_ecs_gitlab_ci_yaml_spec.rb | 2 +- .../Jobs/build_gitlab_ci_yaml_spec.rb | 2 +- .../Jobs/code_quality_gitlab_ci_yaml_spec.rb | 2 +- .../Jobs/deploy_gitlab_ci_yaml_spec.rb | 2 +- .../Jobs/test_gitlab_ci_yaml_spec.rb | 2 +- .../Terraform/base_gitlab_ci_yaml_spec.rb | 2 +- ...performance_testing_gitlab_ci_yaml_spec.rb | 2 +- .../auto_devops_gitlab_ci_yaml_spec.rb | 4 +- .../templates/flutter_gitlab_ci_yaml_spec.rb | 25 + spec/lib/gitlab/ci/templates/npm_spec.rb | 3 +- .../terraform_latest_gitlab_ci_yaml_spec.rb | 3 +- .../ci/variables/collection/sorted_spec.rb | 251 + spec/lib/gitlab/ci/yaml_processor_spec.rb | 34 - .../lib/gitlab/composer/version_index_spec.rb | 49 + .../config/entry/composable_hash_spec.rb | 2 +- spec/lib/gitlab/conflict/file_spec.rb | 32 +- .../base_event_fetcher_spec.rb | 49 - .../code_event_fetcher_spec.rb | 13 - .../gitlab/cycle_analytics/code_stage_spec.rb | 129 - .../lib/gitlab/cycle_analytics/events_spec.rb | 182 - .../issue_event_fetcher_spec.rb | 9 - .../cycle_analytics/issue_stage_spec.rb | 136 - .../plan_event_fetcher_spec.rb | 17 - .../gitlab/cycle_analytics/plan_stage_spec.rb | 116 - .../production_event_fetcher_spec.rb | 9 - .../review_event_fetcher_spec.rb | 9 - .../cycle_analytics/review_stage_spec.rb | 90 - .../staging_event_fetcher_spec.rb | 13 - .../cycle_analytics/staging_stage_spec.rb | 99 - .../test_event_fetcher_spec.rb | 13 - .../gitlab/cycle_analytics/test_stage_spec.rb | 57 - spec/lib/gitlab/danger/base_linter_spec.rb | 53 +- spec/lib/gitlab/danger/changelog_spec.rb | 71 +- spec/lib/gitlab/danger/helper_spec.rb | 56 +- spec/lib/gitlab/danger/roulette_spec.rb | 63 - spec/lib/gitlab/danger/teammate_spec.rb | 8 + spec/lib/gitlab/danger/title_linting_spec.rb | 56 + .../danger/weightage/maintainers_spec.rb | 34 + .../gitlab/danger/weightage/reviewers_spec.rb | 63 + spec/lib/gitlab/data_builder/build_spec.rb | 1 + spec/lib/gitlab/data_builder/pipeline_spec.rb | 1 + .../gitlab/database/migration_helpers_spec.rb | 190 + .../partitioning/partition_creator_spec.rb | 2 +- .../partitioning/replace_table_spec.rb | 2 +- .../foreign_key_helpers_spec.rb | 2 +- .../index_helpers_spec.rb | 2 +- .../table_management_helpers_spec.rb | 139 +- .../batch_distinct_counter_spec.rb | 83 +- .../database/postgres_hll/buckets_spec.rb | 33 + .../database/reindexing/coordinator_spec.rb | 96 +- .../reindexing/grafana_notifier_spec.rb | 139 + .../reindexing/index_selection_spec.rb | 2 +- .../reindexing/reindex_action_spec.rb | 140 +- spec/lib/gitlab/database/reindexing_spec.rb | 9 +- .../project/create_service_spec.rb | 30 +- spec/lib/gitlab/diff/position_spec.rb | 58 + .../email/handler/create_note_handler_spec.rb | 236 +- .../create_note_on_issuable_handler_spec.rb | 61 + .../handler/service_desk_handler_spec.rb | 10 - spec/lib/gitlab/email/handler_spec.rb | 5 +- spec/lib/gitlab/error_tracking_spec.rb | 23 +- .../controller_concern_spec.rb | 10 + .../gitlab/experimentation/experiment_spec.rb | 6 +- spec/lib/gitlab/experimentation_spec.rb | 2 + .../lib/gitlab/faraday/error_callback_spec.rb | 59 + spec/lib/gitlab/git/changed_path_spec.rb | 29 + spec/lib/gitlab/git/diff_spec.rb | 2 +- spec/lib/gitlab/git/repository_spec.rb | 31 +- spec/lib/gitlab/git/wiki_page_version_spec.rb | 28 + spec/lib/gitlab/git_access_snippet_spec.rb | 89 +- spec/lib/gitlab/git_access_spec.rb | 60 +- .../gitaly_client/commit_service_spec.rb | 6 +- .../gitaly_client/repository_service_spec.rb | 5 +- .../importer/repository_importer_spec.rb | 2 +- spec/lib/gitlab/gitpod_spec.rb | 73 - spec/lib/gitlab/graphql/batch_key_spec.rb | 78 + .../pagination/keyset/connection_spec.rb | 41 + spec/lib/gitlab/graphql/queries_spec.rb | 343 + spec/lib/gitlab/import_export/all_models.yml | 4 +- .../kubernetes/cilium_network_policy_spec.rb | 24 +- .../lib/gitlab/kubernetes/kubectl_cmd_spec.rb | 5 +- spec/lib/gitlab/kubernetes/pod_cmd_spec.rb | 14 + .../samplers/action_cable_sampler_spec.rb | 10 +- .../metrics/samplers/database_sampler_spec.rb | 10 +- .../metrics/samplers/puma_sampler_spec.rb | 10 +- .../metrics/samplers/ruby_sampler_spec.rb | 12 +- .../metrics/samplers/threads_sampler_spec.rb | 10 +- .../metrics/samplers/unicorn_sampler_spec.rb | 2 + spec/lib/gitlab/metrics/system_spec.rb | 34 + .../multipart/handler_for_jwt_params_spec.rb | 53 - ...r_jwt_params_spec.rb => multipart_spec.rb} | 20 +- .../middleware/multipart_with_handler_spec.rb | 196 - spec/lib/gitlab/path_regex_spec.rb | 6 + .../redis_adapter_when_peek_enabled_spec.rb | 1 + spec/lib/gitlab/project_template_spec.rb | 1 + spec/lib/gitlab/prometheus/internal_spec.rb | 48 +- spec/lib/gitlab/rack_attack_spec.rb | 212 +- spec/lib/gitlab/search_results_spec.rb | 39 +- .../admin_mode/client_spec.rb | 2 +- .../admin_mode/server_spec.rb | 2 +- spec/lib/gitlab/sidekiq_middleware_spec.rb | 2 +- .../presenters/issue_move_spec.rb | 9 +- .../gitlab_ci_syntax_yml_template_spec.rb | 17 + spec/lib/gitlab/throttle_spec.rb | 28 + .../gitlab/tracking/standard_context_spec.rb | 55 + spec/lib/gitlab/tracking_spec.rb | 45 +- spec/lib/gitlab/url_builder_spec.rb | 2 + .../gitlab/usage/metric_definition_spec.rb | 123 + spec/lib/gitlab/usage/metric_spec.rb | 29 + .../ci_template_unique_counter_spec.rb | 31 + .../hll_redis_counter_spec.rb | 156 +- ...ge_request_activity_unique_counter_spec.rb | 151 + ..._spec.rb => package_event_counter_spec.rb} | 8 +- spec/lib/gitlab/usage_data_spec.rb | 6 +- spec/lib/gitlab/user_access_spec.rb | 32 +- spec/lib/gitlab/utils/usage_data_spec.rb | 112 +- spec/lib/gitlab/utils_spec.rb | 17 + spec/lib/gitlab/uuid_spec.rb | 19 + spec/lib/gitlab/visibility_level_spec.rb | 48 +- spec/lib/object_storage/direct_upload_spec.rb | 4 - .../validator/entry_spec.rb | 87 + spec/lib/release_highlights/validator_spec.rb | 85 + spec/lib/uploaded_file_spec.rb | 194 +- spec/mailers/emails/merge_requests_spec.rb | 2 +- spec/mailers/emails/pipelines_spec.rb | 32 +- spec/mailers/notify_spec.rb | 86 + ...2143418_remove_duplicate_services2_spec.rb | 52 + .../add_has_external_wiki_trigger_spec.rb | 128 + .../remove_alerts_service_records_spec.rb | 30 + ...emove_duplicate_labels_from_groups_spec.rb | 227 + ...ng_uuid_for_vulnerability_feedback_spec.rb | 37 + .../alert_management/http_integration_spec.rb | 2 +- spec/models/application_setting_spec.rb | 39 +- ...d_spec.rb => audit_event_archived_spec.rb} | 20 +- spec/models/ci/bridge_spec.rb | 12 - spec/models/ci/build_need_spec.rb | 2 +- spec/models/ci/build_spec.rb | 249 +- .../{ => ci}/commit_with_pipeline_spec.rb | 2 +- spec/models/ci/group_spec.rb | 12 + spec/models/ci/job_artifact_spec.rb | 33 + spec/models/ci/ref_spec.rb | 60 +- .../clusters/applications/knative_spec.rb | 6 +- spec/models/commit_spec.rb | 13 + spec/models/commit_status_spec.rb | 19 + spec/models/concerns/ci/artifactable_spec.rb | 19 + spec/models/concerns/each_batch_spec.rb | 16 + spec/models/concerns/milestoneable_spec.rb | 4 +- spec/models/concerns/noteable_spec.rb | 104 +- spec/models/cycle_analytics/code_spec.rb | 73 - spec/models/cycle_analytics/issue_spec.rb | 46 - spec/models/cycle_analytics/plan_spec.rb | 52 - .../cycle_analytics/project_level_spec.rb | 34 - .../project_level_stage_adapter_spec.rb | 38 + spec/models/cycle_analytics/review_spec.rb | 34 - spec/models/cycle_analytics/staging_spec.rb | 56 - spec/models/cycle_analytics/test_spec.rb | 73 - spec/models/deployment_spec.rb | 50 + spec/models/experiment_spec.rb | 58 +- spec/models/group_spec.rb | 20 + spec/models/list_spec.rb | 67 +- spec/models/members/group_member_spec.rb | 12 + spec/models/merge_request_spec.rb | 148 +- spec/models/namespace/package_setting_spec.rb | 81 + .../namespace_onboarding_action_spec.rb | 53 - spec/models/namespace_spec.rb | 23 +- spec/models/onboarding_progress_spec.rb | 107 + .../packages/debian/file_metadatum_spec.rb | 91 + .../debian/group_architecture_spec.rb | 7 + .../debian/group_distribution_spec.rb | 7 + .../debian/project_architecture_spec.rb | 7 + .../debian/project_distribution_spec.rb | 7 + spec/models/packages/package_file_spec.rb | 1 + spec/models/packages/package_spec.rb | 24 + spec/models/project_import_state_spec.rb | 2 +- spec/models/project_pages_metadatum_spec.rb | 21 + .../project_services/alerts_service_spec.rb | 116 +- .../project_services/jira_service_spec.rb | 53 +- .../prometheus_service_spec.rb | 4 +- spec/models/project_spec.rb | 322 +- spec/models/project_wiki_spec.rb | 6 + spec/models/protectable_dropdown_spec.rb | 34 +- spec/models/release_highlight_spec.rb | 2 +- spec/models/release_spec.rb | 12 +- spec/models/repository_spec.rb | 18 +- .../snippet_repository_storage_move_spec.rb | 2 +- spec/models/snippet_spec.rb | 86 + spec/models/terraform/state_spec.rb | 16 + spec/models/user_spec.rb | 20 +- spec/policies/group_member_policy_spec.rb | 65 +- spec/policies/namespace_policy_spec.rb | 2 +- spec/policies/project_policy_spec.rb | 42 + .../ci/build_runner_presenter_spec.rb | 28 +- .../nuget/service_index_presenter_spec.rb | 55 +- spec/rack_servers/puma_spec.rb | 2 +- spec/rack_servers/unicorn_spec.rb | 2 +- spec/requests/api/api_spec.rb | 2 + spec/requests/api/boards_spec.rb | 11 - spec/requests/api/ci/runner/jobs_put_spec.rb | 27 + .../api/ci/runner/jobs_request_post_spec.rb | 6 +- .../api/debian_project_packages_spec.rb | 7 + spec/requests/api/generic_packages_spec.rb | 189 +- .../api/graphql/ci/ci_cd_setting_spec.rb | 10 +- spec/requests/api/graphql/ci/config_spec.rb | 310 +- spec/requests/api/graphql/ci/jobs_spec.rb | 155 +- .../requests/api/graphql/ci/pipelines_spec.rb | 112 +- .../api/graphql/group/group_members_spec.rb | 16 +- .../alerts/todo/create_spec.rb | 2 + .../http_integration/create_spec.rb | 16 +- .../ci/ci_cd_settings_update_spec.rb | 58 + .../namespace/package_settings/update_spec.rb | 142 + .../graphql/mutations/releases/create_spec.rb | 22 +- .../graphql/mutations/releases/update_spec.rb | 10 +- .../namespace/package_settings_spec.rb | 33 + .../packages/package_composer_details_spec.rb | 39 + .../alert_management/alert/assignees_spec.rb | 34 +- .../alert_management/alert/notes_spec.rb | 26 +- .../api/graphql/project/merge_request_spec.rb | 72 +- .../graphql/project/merge_requests_spec.rb | 151 +- .../graphql/project/project_members_spec.rb | 9 +- .../api/graphql/project/release_spec.rb | 33 +- .../api/graphql/project_query_spec.rb | 66 +- .../user/starred_projects_query_spec.rb | 24 +- spec/requests/api/graphql/users_spec.rb | 46 + spec/requests/api/group_packages_spec.rb | 4 +- spec/requests/api/invitations_spec.rb | 84 +- spec/requests/api/jobs_spec.rb | 141 +- spec/requests/api/labels_spec.rb | 27 +- spec/requests/api/maven_packages_spec.rb | 50 +- spec/requests/api/merge_requests_spec.rb | 139 + .../requests/api/nuget_group_packages_spec.rb | 122 + .../api/nuget_project_packages_spec.rb | 406 +- spec/requests/api/project_packages_spec.rb | 4 +- .../project_repository_storage_moves_spec.rb | 220 +- spec/requests/api/project_templates_spec.rb | 17 + spec/requests/api/projects_spec.rb | 38 +- spec/requests/api/releases_spec.rb | 35 +- .../snippet_repository_storage_moves_spec.rb | 12 + spec/requests/api/terraform/state_spec.rb | 37 + spec/requests/api/todos_spec.rb | 2 + spec/requests/api/users_spec.rb | 202 +- .../jwks_controller_spec.rb | 6 +- spec/requests/lfs_http_spec.rb | 16 - .../profiles/notifications_controller_spec.rb | 2 +- .../projects/cycle_analytics_events_spec.rb | 174 +- .../pagerduty_incidents_spec.rb | 2 +- spec/requests/rack_attack_global_spec.rb | 82 +- .../runner_setup_controller_spec.rb | 4 +- .../users_controller_spec.rb | 508 +- spec/routing/notifications_routing_spec.rb | 8 +- spec/routing/project_routing_spec.rb | 24 +- spec/routing/routing_spec.rb | 92 +- .../active_record_association_reload_spec.rb | 2 +- spec/rubocop/cop/api/base_spec.rb | 2 +- spec/rubocop/cop/avoid_becomes_spec.rb | 2 +- .../avoid_break_from_strong_memoize_spec.rb | 2 +- ...yword_arguments_in_sidekiq_workers_spec.rb | 2 +- .../cop/avoid_return_from_blocks_spec.rb | 2 +- ...avoid_route_redirect_leading_slash_spec.rb | 2 +- spec/rubocop/cop/ban_catch_throw_spec.rb | 2 +- spec/rubocop/cop/code_reuse/finder_spec.rb | 2 +- spec/rubocop/cop/code_reuse/presenter_spec.rb | 2 +- .../rubocop/cop/code_reuse/serializer_spec.rb | 2 +- .../cop/code_reuse/service_class_spec.rb | 2 +- spec/rubocop/cop/code_reuse/worker_spec.rb | 2 +- spec/rubocop/cop/default_scope_spec.rb | 2 +- spec/rubocop/cop/destroy_all_spec.rb | 2 +- spec/rubocop/cop/filename_length_spec.rb | 2 +- .../avoid_uploaded_file_from_params_spec.rb | 2 +- spec/rubocop/cop/gitlab/bulk_insert_spec.rb | 2 +- .../cop/gitlab/change_timezone_spec.rb | 2 +- .../gitlab/const_get_inherit_false_spec.rb | 2 +- .../gitlab/duplicate_spec_location_spec.rb | 2 +- spec/rubocop/cop/gitlab/except_spec.rb | 2 +- .../cop/gitlab/finder_with_find_by_spec.rb | 2 +- spec/rubocop/cop/gitlab/httparty_spec.rb | 2 +- spec/rubocop/cop/gitlab/intersect_spec.rb | 2 +- spec/rubocop/cop/gitlab/json_spec.rb | 2 +- .../module_with_instance_variables_spec.rb | 2 +- .../cop/gitlab/policy_rule_boolean_spec.rb | 2 +- .../cop/gitlab/predicate_memoization_spec.rb | 2 +- spec/rubocop/cop/gitlab/rails_logger_spec.rb | 2 +- spec/rubocop/cop/gitlab/union_spec.rb | 2 +- .../cop/graphql/authorize_types_spec.rb | 2 +- spec/rubocop/cop/graphql/descriptions_spec.rb | 2 +- .../cop/graphql/gid_expected_type_spec.rb | 2 +- spec/rubocop/cop/graphql/id_type_spec.rb | 2 +- spec/rubocop/cop/graphql/json_type_spec.rb | 2 +- .../rubocop/cop/graphql/resolver_type_spec.rb | 2 +- .../group_public_or_visible_to_user_spec.rb | 2 +- spec/rubocop/cop/ignored_columns_spec.rb | 2 +- .../cop/include_sidekiq_worker_spec.rb | 2 +- .../inject_enterprise_edition_module_spec.rb | 2 +- .../cop/lint/last_keyword_argument_spec.rb | 29 +- .../migration/add_column_with_default_spec.rb | 2 +- .../add_columns_to_wide_tables_spec.rb | 2 +- .../add_concurrent_foreign_key_spec.rb | 2 +- .../migration/add_concurrent_index_spec.rb | 2 +- spec/rubocop/cop/migration/add_index_spec.rb | 2 +- .../add_limit_to_text_columns_spec.rb | 2 +- .../cop/migration/add_reference_spec.rb | 2 +- .../cop/migration/add_timestamps_spec.rb | 2 +- .../complex_indexes_require_name_spec.rb | 2 +- .../create_table_with_foreign_keys_spec.rb | 2 +- spec/rubocop/cop/migration/datetime_spec.rb | 2 +- spec/rubocop/cop/migration/drop_table_spec.rb | 2 +- spec/rubocop/cop/migration/hash_index_spec.rb | 2 +- .../cop/migration/prevent_strings_spec.rb | 2 +- .../migration/refer_to_index_by_name_spec.rb | 2 +- .../cop/migration/remove_column_spec.rb | 2 +- .../migration/remove_concurrent_index_spec.rb | 2 +- .../cop/migration/remove_index_spec.rb | 2 +- .../migration/safer_boolean_column_spec.rb | 2 +- spec/rubocop/cop/migration/timestamps_spec.rb | 2 +- .../update_column_in_batches_spec.rb | 2 +- ...ith_lock_retries_disallowed_method_spec.rb | 2 +- .../with_lock_retries_with_change_spec.rb | 2 +- .../cop/performance/ar_count_each_spec.rb | 2 +- .../ar_exists_and_present_blank_spec.rb | 2 +- .../cop/performance/readlines_each_spec.rb | 2 +- .../prefer_class_methods_over_module_spec.rb | 2 +- spec/rubocop/cop/project_path_helper_spec.rb | 2 +- .../cop/put_group_routes_under_scope_spec.rb | 2 +- .../put_project_routes_under_scope_spec.rb | 2 +- .../cop/qa/ambiguous_page_object_name_spec.rb | 2 +- .../cop/qa/element_with_pattern_spec.rb | 2 +- .../rubocop/cop/rspec/any_instance_of_spec.rb | 2 +- .../cop/rspec/be_success_matcher_spec.rb | 2 +- spec/rubocop/cop/rspec/env_assignment_spec.rb | 2 +- .../factories_in_migration_specs_spec.rb | 2 +- .../factory_bot/inline_association_spec.rb | 2 +- .../cop/rspec/htt_party_basic_auth_spec.rb | 2 +- .../rspec/modify_sidekiq_middleware_spec.rb | 2 +- spec/rubocop/cop/rspec/timecop_freeze_spec.rb | 2 +- spec/rubocop/cop/rspec/timecop_travel_spec.rb | 2 +- .../cop/rspec/top_level_describe_path_spec.rb | 2 +- .../rubocop/cop/rspec/web_mock_enable_spec.rb | 22 + .../ruby_interpolation_in_translation_spec.rb | 2 +- spec/rubocop/cop/safe_params_spec.rb | 2 +- .../bulk_perform_with_context_spec.rb | 2 +- .../scalability/cron_worker_context_spec.rb | 2 +- .../cop/scalability/file_uploads_spec.rb | 2 +- .../cop/scalability/idempotent_worker_spec.rb | 2 +- .../rubocop/cop/sidekiq_options_queue_spec.rb | 2 +- .../cop/static_translation_definition_spec.rb | 2 +- ...istinct_count_by_large_foreign_key_spec.rb | 2 +- .../cop/usage_data/large_table_spec.rb | 2 +- spec/rubocop/qa_helpers_spec.rb | 2 +- .../analytics_stage_serializer_spec.rb | 56 - spec/serializers/build_details_entity_spec.rb | 39 +- spec/serializers/deploy_key_entity_spec.rb | 8 +- .../serializers/diffs_metadata_entity_spec.rb | 1 + spec/serializers/environment_entity_spec.rb | 22 +- spec/serializers/member_entity_spec.rb | 71 + spec/serializers/member_serializer_spec.rb | 32 + spec/serializers/member_user_entity_spec.rb | 38 + ..._request_poll_cached_widget_entity_spec.rb | 12 + .../merge_request_widget_entity_spec.rb | 11 - .../merge_requests/pipeline_entity_spec.rb | 4 +- .../pipeline_details_entity_spec.rb | 2 + spec/serializers/runner_entity_spec.rb | 2 +- .../alerts/todo/create_service_spec.rb | 4 + .../sync_alert_service_data_service_spec.rb | 55 - .../ci/build_report_result_service_spec.rb | 6 - ...create_downstream_pipeline_service_spec.rb | 47 + .../create_pipeline_service/dry_run_spec.rb | 2 +- .../ci/create_pipeline_service_spec.rb | 73 +- ...troy_expired_job_artifacts_service_spec.rb | 76 +- .../coverage_report_service_spec.rb} | 2 +- .../destroy_expired_artifacts_service_spec.rb | 81 + ...fails_deploy_is_delayed_and_needs_test.yml | 41 + ..._fails_deploy_is_manual_and_needs_test.yml | 40 + .../ci/pipeline_trigger_service_spec.rb | 14 +- spec/services/ci/play_build_service_spec.rb | 25 + .../services/ci/process_build_service_spec.rb | 40 +- spec/services/ci/retry_build_service_spec.rb | 16 + .../ci/retry_pipeline_service_spec.rb | 22 + .../ci/test_failure_history_service_spec.rb | 21 - .../ci/update_build_state_service_spec.rb | 21 +- .../cleanup_service_spec.rb | 45 +- .../draft_notes/create_service_spec.rb | 17 + .../draft_notes/publish_service_spec.rb | 22 + .../feature_flags/create_service_spec.rb | 24 + .../feature_flags/update_service_spec.rb | 24 + spec/services/git/branch_push_service_spec.rb | 4 +- spec/services/groups/create_service_spec.rb | 8 + spec/services/groups/destroy_service_spec.rb | 131 +- .../process_webhook_service_spec.rb | 2 +- .../issuable/bulk_update_service_spec.rb | 51 +- spec/services/issues/close_service_spec.rb | 27 +- .../issues/export_csv_service_spec.rb | 4 +- .../jira_connect/sync_service_spec.rb | 4 +- .../create_service_spec.rb | 12 - spec/services/members/create_service_spec.rb | 51 +- .../after_create_service_spec.rb | 22 +- .../cleanup_refs_service_spec.rb | 20 + .../merge_requests/close_service_spec.rb | 9 + .../create_from_issue_service_spec.rb | 3 +- .../merge_requests/create_service_spec.rb | 6 + .../merge_requests/export_csv_service_spec.rb | 4 +- .../merge_requests/merge_service_spec.rb | 30 + .../mergeability_check_service_spec.rb | 49 - .../merge_requests/post_merge_service_spec.rb | 9 + .../merge_requests/reopen_service_spec.rb | 9 + .../merge_requests/update_service_spec.rb | 29 +- .../package_settings/update_service_spec.rb | 102 + spec/services/notes/create_service_spec.rb | 30 +- spec/services/notes/destroy_service_spec.rb | 8 + .../notes/quick_actions_service_spec.rb | 8 +- spec/services/notes/update_service_spec.rb | 14 +- spec/services/notification_service_spec.rb | 12 + .../onboarding_progress_service_spec.rb | 36 +- .../packages/create_event_service_spec.rb | 25 +- .../create_package_file_service_spec.rb | 106 + .../debian/extract_metadata_service_spec.rb | 59 + .../get_or_create_incoming_service_spec.rb | 36 + .../find_or_create_package_service_spec.rb | 54 +- .../packages/nuget/search_service_spec.rb | 190 +- ...gacy_storage_to_deployment_service_spec.rb | 118 + .../pages/zip_directory_service_spec.rb | 28 +- spec/services/post_receive_service_spec.rb | 11 +- .../projects/after_import_service_spec.rb | 6 +- .../cleanup_tags_service_spec.rb | 116 +- .../delete_tags_service_spec.rb | 4 +- .../gitlab/delete_tags_service_spec.rb | 17 +- spec/services/projects/fork_service_spec.rb | 18 + .../projects/housekeeping_service_spec.rb | 134 +- ...ulk_repository_shard_moves_service_spec.rb | 43 +- .../projects/update_pages_service_spec.rb | 13 + spec/services/projects/update_service_spec.rb | 43 - .../quick_actions/interpret_service_spec.rb | 212 +- .../repositories/housekeeping_service_spec.rb | 14 + .../change_state_service_spec.rb | 9 + .../update_service_spec.rb | 13 - ...ulk_repository_shard_moves_service_spec.rb | 12 + .../update_repository_storage_service_spec.rb | 137 + spec/services/todo_service_spec.rb | 258 +- spec/services/users/update_service_spec.rb | 2 +- spec/services/web_hook_service_spec.rb | 9 + spec/spec_helper.rb | 42 +- .../atlassian/jira_connect/schemata.rb | 339 +- spec/support/capybara.rb | 2 +- .../gitlab_stubs/gitlab_ci_for_sast.yml | 3 +- .../gitlab_ci_for_sast_default_analyzers.yml | 15 + .../gitlab_ci_for_sast_excluded_analyzers.yml | 14 + .../gitlab_stubs/gitlab_ci_includes.yml | 26 + .../helpers/database/database_helpers.rb | 15 + .../helpers/database/partitioning_helpers.rb | 96 + .../helpers/database/table_schema_helpers.rb | 149 + .../helpers/database/trigger_helpers.rb | 68 + spec/support/helpers/database_helpers.rb | 13 - spec/support/helpers/graphql_helpers.rb | 42 +- spec/support/helpers/multipart_helpers.rb | 20 +- spec/support/helpers/partitioning_helpers.rb | 94 - .../helpers/rack_attack_spec_helpers.rb | 21 + spec/support/helpers/stub_experiments.rb | 8 + spec/support/helpers/stub_feature_flags.rb | 4 + spec/support/helpers/table_schema_helpers.rb | 112 - spec/support/helpers/test_env.rb | 9 +- spec/support/helpers/trigger_helpers.rb | 66 - spec/support/matchers/be_sorted.rb | 73 +- spec/support/matchers/be_valid_json.rb | 16 +- spec/support/matchers/schema_matcher.rb | 10 +- spec/support/rspec.rb | 4 + .../shared_contexts/email_shared_context.rb | 245 +- .../finders/issues_finder_shared_contexts.rb | 48 +- .../finders/users_finder_shared_contexts.rb | 1 + .../navbar_structure_context.rb | 1 + .../policies/group_policy_shared_context.rb | 25 +- .../read_ci_configuration_shared_context.rb | 8 + .../api/nuget_packages_shared_context.rb | 10 + .../git_http_controller_shared_examples.rb | 24 - ...ionless_auth_controller_shared_examples.rb | 4 + .../controllers/unique_hll_events_examples.rb | 2 +- .../features/file_uploads_shared_examples.rb | 24 +- ..._manages_access_requests_shared_example.rb | 10 +- .../user_creates_wiki_page_shared_examples.rb | 32 +- .../user_updates_wiki_page_shared_examples.rb | 35 +- ...ser_uses_wiki_shortcuts_shared_examples.rb | 2 +- .../user_views_wiki_empty_shared_examples.rb | 2 +- .../user_views_wiki_page_shared_examples.rb | 4 +- ...user_views_wiki_sidebar_shared_examples.rb | 58 +- .../distributions_finder_shared_examples.rb | 79 + .../finders/packages_shared_examples.rb | 19 + .../http_integrations_shared_examples.rb | 19 + ...merge_request_n_plus_one_query_examples.rb | 6 +- .../sanitization_filter_shared_examples.rb | 4 +- .../base_stage_shared_examples.rb | 74 - .../default_query_config_shared_examples.rb | 16 - .../middleware/multipart_shared_examples.rb | 24 +- .../project_search_results_shared_examples.rb | 19 +- ...ent_management_activity_shared_examples.rb | 2 +- .../metrics/sampler_shared_examples.rb | 27 + .../models/boards/listable_shared_examples.rb | 97 + ...an_housekeep_repository_shared_examples.rb | 45 + ...an_housekeep_repository_shared_examples.rb | 45 + ...ository_storage_movable_shared_examples.rb | 4 +- .../debian/architecture_shared_examples.rb | 48 + .../debian/distribution_shared_examples.rb | 225 + .../rebase_quick_action_shared_examples.rb | 92 + .../requests/api/boards_shared_examples.rb | 33 +- .../api/debian_packages_shared_examples.rb | 69 +- .../api/nuget_endpoints_shared_examples.rb | 148 +- .../api/nuget_packages_shared_examples.rb | 58 +- ...epository_storage_moves_shared_examples.rb | 219 + .../resolvable_discussions_shared_examples.rb | 2 + .../requests/rack_attack_shared_examples.rb | 5 +- .../requests/releases_shared_examples.rb | 61 + ...essionless_auth_request_shared_examples.rb | 84 + .../legacy_path_redirect_shared_examples.rb | 2 +- .../pipeline_artifacts_shared_example.rb | 21 + .../issues_list_service_shared_examples.rb | 80 +- .../items_list_service_shared_examples.rb | 65 + .../services/merge_request_shared_examples.rb | 15 + ...espace_package_settings_shared_examples.rb | 32 + .../onboarding_progress_shared_examples.rb | 20 + .../services/packages_shared_examples.rb | 42 + .../housekeeping_shared_examples.rb | 118 + ..._repository_shard_moves_shared_examples.rb | 44 + ..._repository_shard_moves_shared_examples.rb | 30 + .../update_repository_move_shared_examples.rb | 39 + spec/support_specs/matchers/be_sorted_spec.rb | 33 + spec/tasks/gitlab/git_rake_spec.rb | 34 + .../tasks/gitlab/packages/events_rake_spec.rb | 4 +- spec/tasks/gitlab/pages_rake_spec.rb | 67 + .../lib/tooling/kubernetes_client_spec.rb | 184 +- .../lib/tooling/test_file_finder_spec.rb | 175 - ...distribution_release_file_uploader_spec.rb | 52 + .../packages/package_file_uploader_spec.rb | 63 +- spec/views/layouts/_head.html.haml_spec.rb | 2 +- .../layouts/header/_new_dropdown.haml_spec.rb | 111 +- .../pipeline_failed_email.html.haml_spec.rb | 2 +- .../pipeline_failed_email.text.erb_spec.rb | 2 +- .../pipeline_fixed_email.html.haml_spec.rb | 2 +- .../pipeline_fixed_email.text.erb_spec.rb | 2 +- .../pipeline_success_email.html.haml_spec.rb | 2 +- .../pipeline_success_email.text.erb_spec.rb | 2 +- .../ci_cd/_autodevops_form.html.haml_spec.rb | 4 +- .../operations/show.html.haml_spec.rb | 51 +- .../shared/wikis/_sidebar.html.haml_spec.rb | 24 + spec/workers/bulk_import_worker_spec.rb | 71 +- .../bulk_imports/entity_worker_spec.rb | 39 + .../coverage_report_worker_spec.rb} | 6 +- .../expire_artifacts_worker_spec.rb | 36 + ...leanup_container_repository_worker_spec.rb | 82 +- .../record_conversion_event_worker_spec.rb | 35 + .../expire_build_artifacts_worker_spec.rb | 4 +- ...mport_pull_requests_reviews_worker_spec.rb | 16 - ...itlab_performance_bar_stats_worker_spec.rb | 2 +- spec/workers/group_destroy_worker_spec.rb | 6 +- .../jira_connect/sync_branch_worker_spec.rb | 93 +- .../sync_deployments_worker_spec.rb | 60 + .../sync_feature_flags_worker_spec.rb | 60 + .../sync_merge_request_worker_spec.rb | 47 +- ...onboarding_pipeline_created_worker_spec.rb | 32 + .../onboarding_user_added_worker_spec.rb | 10 +- ...bulk_repository_shard_moves_worker_spec.rb | 29 +- ...t_update_repository_storage_worker_spec.rb | 42 +- ...bulk_repository_shard_moves_worker_spec.rb | 12 + ...t_update_repository_storage_worker_spec.rb | 15 + tmp/.gitignore | 7 +- tooling/lib/tooling/helm3_client.rb | 6 +- tooling/lib/tooling/kubernetes_client.rb | 45 +- tooling/lib/tooling/test_file_finder.rb | 94 - tooling/overcommit/Gemfile | 2 +- tooling/overcommit/Gemfile.lock | 4 +- vendor/assets/javascripts/jquery.scrollTo.js | 210 - vendor/project_templates/dotnetcore.tar.gz | Bin 7027 -> 4924 bytes vendor/project_templates/express.tar.gz | Bin 16098 -> 17921 bytes .../kotlin_native_linux.tar.gz | Bin 0 -> 60265 bytes .../learn_gitlab_gold_trial.tar.gz | Bin 0 -> 115096 bytes vendor/project_templates/rails.tar.gz | Bin 25668 -> 27308 bytes workhorse/.gitlab-ci.yml | 4 + workhorse/CHANGELOG | 16 +- workhorse/Makefile | 18 +- workhorse/PROCESS.md | 1 + workhorse/VERSION | 2 +- workhorse/_support/fmt.sh | 25 + workhorse/_support/validate-formatting.sh | 9 - workhorse/cmd/gitlab-resize-image/main.go | 9 +- .../cmd/gitlab-resize-image/png/reader.go | 86 + .../gitlab-resize-image/png/reader_test.go | 97 + workhorse/internal/api/api.go | 4 +- workhorse/internal/badgateway/roundtripper.go | 10 +- workhorse/internal/git/archive.go | 5 +- workhorse/internal/git/diff.go | 6 +- workhorse/internal/git/format-patch.go | 6 +- workhorse/internal/git/git-http.go | 4 +- workhorse/internal/git/snapshot.go | 3 +- workhorse/internal/helper/helpers.go | 20 +- workhorse/internal/helper/helpers_test.go | 116 - workhorse/internal/helper/raven.go | 2 +- .../internal/imageresizer/image_resizer.go | 22 +- workhorse/internal/log/logging.go | 88 + workhorse/internal/log/logging_test.go | 157 + workhorse/internal/redis/keywatcher.go | 11 +- .../internal/rejectmethods/middleware_test.go | 2 +- workhorse/internal/sendurl/sendurl.go | 4 +- workhorse/internal/staticpages/servefile.go | 4 +- workhorse/testdata/image_bad_iccp.png | Bin 0 -> 10696 bytes workhorse/testdata/image_stripped_iccp.png | Bin 0 -> 2029 bytes yarn.lock | 224 +- 5072 files changed, 176320 insertions(+), 73527 deletions(-) create mode 100644 .gitlab/ci/graphql.gitlab-ci.yml create mode 100644 .gitlab/issue_templates/Design Sprint.md create mode 100644 app/assets/images/board-intro.svg create mode 100644 app/assets/javascripts/admin/users/components/user_avatar.vue create mode 100644 app/assets/javascripts/admin/users/constants.js create mode 100644 app/assets/javascripts/api/api_utils.js create mode 100644 app/assets/javascripts/api/constants.js create mode 100644 app/assets/javascripts/api/groups_api.js create mode 100644 app/assets/javascripts/api/projects_api.js create mode 100644 app/assets/javascripts/api/user_api.js create mode 100644 app/assets/javascripts/artifacts_settings/graphql/mutations/update_keep_latest_artifact_project_setting.mutation.graphql create mode 100644 app/assets/javascripts/artifacts_settings/graphql/queries/get_keep_latest_artifact_project_setting.query.graphql create mode 100644 app/assets/javascripts/artifacts_settings/index.js create mode 100644 app/assets/javascripts/artifacts_settings/keep_latest_artifact_checkbox.vue create mode 100644 app/assets/javascripts/blob/template_selectors/ci_syntax_yaml_selector.js create mode 100644 app/assets/javascripts/boards/components/board_column_deprecated.vue delete mode 100644 app/assets/javascripts/boards/components/board_column_new.vue create mode 100644 app/assets/javascripts/boards/components/board_list_deprecated.vue rename app/assets/javascripts/boards/components/{board_list_header_new.vue => board_list_header_deprecated.vue} (67%) delete mode 100644 app/assets/javascripts/boards/components/board_list_new.vue rename app/assets/javascripts/boards/components/{board_new_issue_new.vue => board_new_issue_deprecated.vue} (58%) create mode 100644 app/assets/javascripts/boards/components/issue_card_inner_deprecated.vue create mode 100644 app/assets/javascripts/boards/components/issue_time_estimate_deprecated.vue create mode 100644 app/assets/javascripts/boards/components/project_select_deprecated.vue create mode 100644 app/assets/javascripts/boards/components/sidebar/board_sidebar_issue_title.vue delete mode 100644 app/assets/javascripts/boards/graphql/board.mutation.graphql create mode 100644 app/assets/javascripts/boards/graphql/board_create.mutation.graphql create mode 100644 app/assets/javascripts/boards/graphql/board_destroy.mutation.graphql create mode 100644 app/assets/javascripts/boards/graphql/board_update.mutation.graphql create mode 100644 app/assets/javascripts/boards/graphql/group_projects.query.graphql create mode 100644 app/assets/javascripts/boards/graphql/issue_set_title.mutation.graphql create mode 100644 app/assets/javascripts/create_cluster/gke_cluster/gapi_loader.js create mode 100644 app/assets/javascripts/diffs/utils/file_reviews.js create mode 100644 app/assets/javascripts/diffs/utils/merge_request.js create mode 100644 app/assets/javascripts/editor/extensions/editor_ci_schema_ext.js rename app/assets/javascripts/editor/{ => extensions}/editor_file_template_ext.js (100%) rename app/assets/javascripts/editor/{ => extensions}/editor_lite_extension_base.js (79%) rename app/assets/javascripts/editor/{ => extensions}/editor_markdown_ext.js (97%) create mode 100644 app/assets/javascripts/environments/components/canary_ingress.vue create mode 100644 app/assets/javascripts/environments/components/canary_update_modal.vue create mode 100644 app/assets/javascripts/environments/components/deploy_board.vue create mode 100644 app/assets/javascripts/environments/constants.js create mode 100644 app/assets/javascripts/environments/graphql/mutations/update_canary_ingress.mutation.graphql delete mode 100644 app/assets/javascripts/environments/mixins/canary_callout_mixin.js rename app/assets/javascripts/{alert_management/graphql/fragments/list_item.fragment.graphql => graphql_shared/fragments/alert.fragment.graphql} (100%) rename app/assets/javascripts/{alert_management/graphql => graphql_shared}/fragments/alert_note.fragment.graphql (100%) rename app/assets/javascripts/{alert_management/graphql => graphql_shared}/mutations/update_alert_status.mutation.graphql (83%) rename app/assets/javascripts/{alert_management/graphql => graphql_shared}/queries/get_alerts.query.graphql (92%) create mode 100644 app/assets/javascripts/helpers/help_page_helper.js create mode 100644 app/assets/javascripts/jira_connect/api.js create mode 100644 app/assets/javascripts/jira_connect/components/groups_list.vue create mode 100644 app/assets/javascripts/jira_connect/components/groups_list_item.vue create mode 100644 app/assets/javascripts/jira_connect/constants.js create mode 100644 app/assets/javascripts/jira_connect/store/index.js create mode 100644 app/assets/javascripts/jira_connect/store/mutation_types.js create mode 100644 app/assets/javascripts/jira_connect/store/mutations.js create mode 100644 app/assets/javascripts/jira_connect/store/state.js create mode 100644 app/assets/javascripts/lib/utils/favicon.js create mode 100644 app/assets/javascripts/lib/utils/favicon_ci.js create mode 100644 app/assets/javascripts/lib/utils/headers.js create mode 100644 app/assets/javascripts/merge_request/components/status_box.vue create mode 100644 app/assets/javascripts/merge_request/eventhub.js create mode 100644 app/assets/javascripts/notebook/cells/output/latex.vue create mode 100644 app/assets/javascripts/notes/components/comment_field_layout.vue delete mode 100644 app/assets/javascripts/notes/components/discussion_jump_to_next_button.vue create mode 100644 app/assets/javascripts/notes/components/email_participants_warning.vue create mode 100644 app/assets/javascripts/packages_and_registries/settings/group/bundle.js create mode 100644 app/assets/javascripts/packages_and_registries/settings/group/components/group_settings_app.vue create mode 100644 app/assets/javascripts/packages_and_registries/settings/group/graphql/index.js create mode 100644 app/assets/javascripts/pages/groups/settings/packages_and_registries/index.js create mode 100644 app/assets/javascripts/pages/projects/edit/mount_search_settings.js create mode 100644 app/assets/javascripts/pipeline_editor/components/info/validation_segment.vue create mode 100644 app/assets/javascripts/pipeline_editor/components/lint/ci_lint.vue create mode 100644 app/assets/javascripts/pipeline_editor/components/ui/editor_tab.vue rename app/assets/javascripts/pipelines/components/{pipeline_graph => graph_shared}/drawing_utils.js (73%) create mode 100644 app/assets/javascripts/pipelines/components/graph_shared/links_inner.vue create mode 100644 app/assets/javascripts/pipelines/components/graph_shared/links_layer.vue delete mode 100644 app/assets/javascripts/pipelines/graphql/fragments/linked_pipelines.fragment.graphql rename app/assets/javascripts/pipelines/graphql/{queries => fragments}/pipeline_stages_connection.fragment.graphql (53%) create mode 100644 app/assets/javascripts/projects/commit/components/branches_dropdown.vue create mode 100644 app/assets/javascripts/projects/commit/components/form_modal.vue create mode 100644 app/assets/javascripts/projects/commit/components/form_trigger.vue create mode 100644 app/assets/javascripts/projects/commit/constants.js create mode 100644 app/assets/javascripts/projects/commit/event_hub.js create mode 100644 app/assets/javascripts/projects/commit/init_revert_commit_modal.js create mode 100644 app/assets/javascripts/projects/commit/init_revert_commit_trigger.js create mode 100644 app/assets/javascripts/projects/commit/store/actions.js create mode 100644 app/assets/javascripts/projects/commit/store/getters.js create mode 100644 app/assets/javascripts/projects/commit/store/index.js create mode 100644 app/assets/javascripts/projects/commit/store/mutation_types.js create mode 100644 app/assets/javascripts/projects/commit/store/mutations.js create mode 100644 app/assets/javascripts/projects/commit/store/state.js rename app/assets/javascripts/projects/pipelines/charts/components/{pipelines_area_chart.vue => ci_cd_analytics_area_chart.vue} (77%) rename app/assets/javascripts/projects/pipelines/charts/components/{app_legacy.vue => pipeline_charts.vue} (59%) delete mode 100644 app/assets/javascripts/registry/explorer/graphql/fragments/container_repository.fragment.graphql create mode 100644 app/assets/javascripts/registry/explorer/graphql/queries/get_container_repositories_details.query.graphql delete mode 100644 app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.query.graphql delete mode 100644 app/assets/javascripts/registry/explorer/graphql/queries/get_project_container_repositories.query.graphql delete mode 100644 app/assets/javascripts/reports/components/modal_open_name.vue create mode 100644 app/assets/javascripts/rest_api.js create mode 100644 app/assets/javascripts/search_settings/components/search_settings.vue create mode 100644 app/assets/javascripts/search_settings/constants.js create mode 100644 app/assets/javascripts/search_settings/index.js create mode 100644 app/assets/javascripts/sidebar/components/copy_email_to_clipboard.vue delete mode 100644 app/assets/javascripts/sidebar/components/time_tracking/estimate_only_pane.vue delete mode 100644 app/assets/javascripts/sidebar/components/time_tracking/no_tracking_pane.vue create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/auto_merge_enabled.fragment.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/auto_merge_enabled.query.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/auto_merge_failed.query.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/ready_to_merge.fragment.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/ready_to_merge.query.graphql create mode 100644 app/assets/javascripts/vue_merge_request_widget/queries/states/rebase.query.graphql create mode 100644 app/assets/javascripts/vue_shared/components/deployment_instance.vue delete mode 100644 app/assets/javascripts/vue_shared/components/deprecated_modal_2.vue create mode 100644 app/assets/stylesheets/components/deployment_instance.scss create mode 100644 app/assets/stylesheets/highlight/conflict_colors.scss rename app/assets/stylesheets/{pages => page_bundles}/incident_management_list.scss (88%) create mode 100644 app/assets/stylesheets/pages/registry.scss delete mode 100644 app/controllers/concerns/show_inherited_labels_checker.rb create mode 100644 app/controllers/groups/settings/packages_and_registries_controller.rb create mode 100644 app/enums/.keep create mode 100644 app/finders/concerns/packages/finder_helper.rb create mode 100644 app/finders/packages/debian/distributions_finder.rb delete mode 100644 app/graphql/mutations/ci/base.rb create mode 100644 app/graphql/mutations/ci/ci_cd_settings_update.rb create mode 100644 app/graphql/mutations/ci/pipeline/base.rb create mode 100644 app/graphql/mutations/ci/pipeline/cancel.rb create mode 100644 app/graphql/mutations/ci/pipeline/destroy.rb create mode 100644 app/graphql/mutations/ci/pipeline/retry.rb delete mode 100644 app/graphql/mutations/ci/pipeline_cancel.rb delete mode 100644 app/graphql/mutations/ci/pipeline_destroy.rb delete mode 100644 app/graphql/mutations/ci/pipeline_retry.rb delete mode 100644 app/graphql/mutations/concerns/mutations/authorizes_project.rb create mode 100644 app/graphql/mutations/concerns/mutations/finds_project.rb create mode 100644 app/graphql/mutations/concerns/mutations/resolves_namespace.rb create mode 100644 app/graphql/mutations/namespace/package_settings/update.rb create mode 100644 app/graphql/queries/container_registry/get_container_repositories.query.graphql rename app/{assets/javascripts/pipelines/graphql/queries => graphql/queries/pipelines}/get_pipeline_details.query.graphql (67%) create mode 100644 app/graphql/resolvers/package_details_resolver.rb create mode 100644 app/graphql/resolvers/release_milestones_resolver.rb create mode 100644 app/graphql/types/ci/build_need_type.rb create mode 100644 app/graphql/types/ci/config/job_restriction_type.rb create mode 100644 app/graphql/types/data_visualization_palette/color_enum.rb create mode 100644 app/graphql/types/data_visualization_palette/weight_enum.rb create mode 100644 app/graphql/types/namespace/package_settings_type.rb delete mode 100644 app/graphql/types/package_type.rb delete mode 100644 app/graphql/types/package_type_enum.rb create mode 100644 app/graphql/types/packages/composer/details_type.rb create mode 100644 app/graphql/types/packages/composer/json_type.rb create mode 100644 app/graphql/types/packages/composer/metadatum_type.rb create mode 100644 app/graphql/types/packages/package_tag_type.rb create mode 100644 app/graphql/types/packages/package_type.rb create mode 100644 app/graphql/types/packages/package_type_enum.rb rename app/helpers/{ => ci}/triggers_helper.rb (94%) create mode 100644 app/helpers/jira_connect_helper.rb create mode 100644 app/helpers/projects/project_members_helper.rb delete mode 100644 app/helpers/startup_css_helper.rb create mode 100644 app/helpers/wiki_page_version_helper.rb create mode 100644 app/models/audit_event_archived.rb delete mode 100644 app/models/audit_event_partitioned.rb create mode 100644 app/models/ci/commit_with_pipeline.rb create mode 100644 app/models/concerns/boards/listable.rb create mode 100644 app/models/concerns/enums/ci/commit_status.rb delete mode 100644 app/models/concerns/enums/commit_status.rb create mode 100644 app/models/concerns/enums/vulnerability.rb create mode 100644 app/models/concerns/packages/debian/architecture.rb create mode 100644 app/models/concerns/packages/debian/distribution.rb create mode 100644 app/models/concerns/repositories/can_housekeep_repository.rb delete mode 100644 app/models/cycle_analytics/level_base.rb create mode 100644 app/models/cycle_analytics/project_level_stage_adapter.rb create mode 100644 app/models/namespace/package_setting.rb delete mode 100644 app/models/namespace_onboarding_action.rb create mode 100644 app/models/onboarding_progress.rb create mode 100644 app/models/packages/debian.rb create mode 100644 app/models/packages/debian/file_metadatum.rb create mode 100644 app/models/packages/debian/group_architecture.rb create mode 100644 app/models/packages/debian/group_distribution.rb create mode 100644 app/models/packages/debian/project_architecture.rb create mode 100644 app/models/packages/debian/project_distribution.rb delete mode 100644 app/models/project_services/alerts_service_data.rb create mode 100644 app/policies/analytics/instance_statistics/measurement_policy.rb create mode 100644 app/policies/namespace/package_setting_policy.rb create mode 100644 app/policies/packages/composer/metadatum_policy.rb create mode 100644 app/policies/packages/tag_policy.rb create mode 100644 app/presenters/board_presenter.rb delete mode 100644 app/serializers/group_analytics_stage_entity.rb delete mode 100644 app/serializers/group_analytics_stage_serializer.rb create mode 100644 app/serializers/member_entity.rb create mode 100644 app/serializers/member_serializer.rb create mode 100644 app/serializers/member_user_entity.rb delete mode 100644 app/services/alert_management/sync_alert_service_data_service.rb create mode 100644 app/services/boards/base_items_list_service.rb rename app/services/ci/{pipelines/create_artifact_service.rb => pipeline_artifacts/coverage_report_service.rb} (93%) create mode 100644 app/services/ci/pipeline_artifacts/destroy_expired_artifacts_service.rb create mode 100644 app/services/concerns/schedule_bulk_repository_shard_moves_methods.rb create mode 100644 app/services/concerns/update_repository_storage_methods.rb create mode 100644 app/services/issuable/export_csv/base_service.rb create mode 100644 app/services/namespaces/package_settings/update_service.rb create mode 100644 app/services/packages/debian/create_package_file_service.rb create mode 100644 app/services/packages/debian/extract_metadata_service.rb create mode 100644 app/services/packages/debian/get_or_create_incoming_service.rb create mode 100644 app/services/pages/migrate_legacy_storage_to_deployment_service.rb create mode 100644 app/services/repositories/housekeeping_service.rb create mode 100644 app/services/snippets/schedule_bulk_repository_shard_moves_service.rb create mode 100644 app/services/snippets/update_repository_storage_service.rb create mode 100644 app/uploaders/packages/debian/distribution_release_file_uploader.rb create mode 100644 app/validators/json_schemas/debian_fields.json create mode 100644 app/views/devise/shared/_footer.html.haml create mode 100644 app/views/groups/settings/packages_and_registries/index.html.haml create mode 100644 app/views/layouts/header/_group_invite_members_new_dropdown_item.html.haml create mode 100644 app/views/layouts/header/_project_invite_members_new_dropdown_item.html.haml create mode 100644 app/views/notify/member_expiration_date_updated_email.html.haml create mode 100644 app/views/notify/member_expiration_date_updated_email.text.erb create mode 100644 app/views/notify/provisioned_member_access_granted_email.erb create mode 100644 app/views/notify/provisioned_member_access_granted_email.haml create mode 100644 app/views/projects/commit/_commit_modal.html.haml delete mode 100644 app/views/projects/services/alerts/_help.html.haml delete mode 100644 app/views/projects/services/alerts/_top.html.haml delete mode 100644 app/views/projects/snippets/verify.html.haml create mode 100644 app/views/shared/_search_settings.html.haml rename app/views/{groups/group_members => shared/members}/tab_pane/_form_item.html.haml (100%) rename app/views/{groups/group_members => shared/members}/tab_pane/_header.html.haml (100%) rename app/views/{groups/group_members => shared/members}/tab_pane/_title.html.haml (100%) delete mode 100644 app/views/snippets/verify.html.haml create mode 100644 app/workers/bulk_imports/entity_worker.rb rename app/workers/ci/{pipelines/create_artifact_worker.rb => pipeline_artifacts/coverage_report_worker.rb} (60%) create mode 100644 app/workers/ci/pipeline_artifacts/expire_artifacts_worker.rb create mode 100644 app/workers/concerns/update_repository_storage_worker.rb create mode 100644 app/workers/experiments/record_conversion_event_worker.rb create mode 100644 app/workers/jira_connect/sync_deployments_worker.rb create mode 100644 app/workers/jira_connect/sync_feature_flags_worker.rb create mode 100644 app/workers/namespaces/onboarding_pipeline_created_worker.rb create mode 100644 app/workers/snippet_schedule_bulk_repository_shard_moves_worker.rb create mode 100644 app/workers/snippet_update_repository_storage_worker.rb delete mode 100644 config/feature_flags/development/ci_include_multiple_files_from_project.yml delete mode 100644 config/feature_flags/development/ci_seed_block_run_before_workflow_rules.yml rename config/feature_flags/development/{vue_2fa_recovery_codes.yml => drag_comment_selection.yml} (70%) delete mode 100644 config/feature_flags/development/gitpod.yml create mode 100644 config/feature_flags/development/gl_tooltips.yml delete mode 100644 config/feature_flags/development/group_members_filtered_search.yml delete mode 100644 config/feature_flags/development/invisible_captcha.yml rename config/feature_flags/development/{reset_integrations.yml => jira_sync_deployments.yml} (80%) create mode 100644 config/feature_flags/development/jira_sync_feature_flags.yml delete mode 100644 config/feature_flags/development/lfs_chunked_encoding.yml delete mode 100644 config/feature_flags/development/merge_ref_auto_sync.yml delete mode 100644 config/feature_flags/development/merge_ref_auto_sync_lock.yml rename config/feature_flags/development/{show_inherited_labels.yml => multiple_todos.yml} (66%) rename config/feature_flags/development/{test_failure_history.yml => new_jira_connect_ui.yml} (65%) delete mode 100644 config/feature_flags/development/new_project_level_vsa_backend.yml rename config/feature_flags/development/{pat_creation_api_for_admin.yml => non_public_artifacts.yml} (65%) create mode 100644 config/feature_flags/development/optional_code_owners_sections.yml create mode 100644 config/feature_flags/development/packages_and_registries_group_settings.yml rename config/feature_flags/development/{cd_skipped_deployment_status.yml => pages_migration_mark_as_not_deployed.yml} (68%) rename config/feature_flags/development/{restrict_access_to_build_debug_mode.yml => s3_multithreaded_uploads.yml} (71%) rename config/feature_flags/development/{graphql_pipeline_analytics.yml => search_settings_in_page.yml} (67%) delete mode 100644 config/feature_flags/development/service_desk_custom_address.yml rename config/feature_flags/development/{ci_bridge_dependency_variables.yml => skip_dag_manual_and_delayed_jobs.yml} (63%) rename config/feature_flags/development/{startup_css.yml => sourcegraph.yml} (76%) create mode 100644 config/feature_flags/development/suggestions_custom_commit.yml delete mode 100644 config/feature_flags/development/upload_middleware_jwt_params_handler.yml rename config/feature_flags/development/{diff_check_with_paths_changed_rpc.yml => usage_data_i_code_review_mr_diffs.yml} (54%) create mode 100644 config/feature_flags/development/usage_data_i_code_review_mr_single_file_diffs.yml rename config/feature_flags/development/{mr_commit_neighbor_nav.yml => usage_data_i_code_review_user_close_mr.yml} (66%) rename config/feature_flags/development/{hide_jump_to_next_unresolved_in_threads.yml => usage_data_i_code_review_user_create_mr.yml} (66%) create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_create_mr_comment.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_create_multiline_mr_comment.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_create_review_note.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_edit_mr_comment.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_edit_multiline_mr_comment.yml rename config/feature_flags/development/{widget_visibility_polling.yml => usage_data_i_code_review_user_merge_mr.yml} (66%) create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_publish_review.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_remove_mr_comment.yml create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_remove_multiline_mr_comment.yml rename config/feature_flags/development/{merge_orchestration_service.yml => usage_data_i_code_review_user_reopen_mr.yml} (54%) create mode 100644 config/feature_flags/development/usage_data_i_code_review_user_single_file_diffs.yml create mode 100644 config/feature_flags/development/usage_data_i_testing_full_code_quality_report_total.yml create mode 100644 config/feature_flags/development/usage_data_i_testing_group_code_coverage_visit_total.yml create mode 100644 config/feature_flags/development/usage_data_i_testing_metrics_report_widget_total.yml create mode 100644 config/feature_flags/development/usage_data_i_testing_web_performance_widget_total.yml delete mode 100644 config/feature_flags/development/usage_data_incident_management_alerts_total_unique_counts.yml delete mode 100644 config/feature_flags/development/usage_data_incident_management_incidents_total_unique_counts.yml create mode 100644 config/feature_flags/development/usage_data_p_terraform_state_api_unique_users.yml rename config/feature_flags/development/{coverage_fuzzing_mr_widget.yml => usage_data_track_ci_templates_unique_projects.yml} (59%) rename config/feature_flags/development/{ci_pipelines_for_merge_request_finder_new_cte.yml => value_stream_analytics_extended_form.yml} (63%) create mode 100644 config/feature_flags/development/variable_inside_variable.yml create mode 100644 config/feature_flags/development/variables_in_include_section_ci.yml delete mode 100644 config/feature_flags/development/vue_group_members_list.yml create mode 100644 config/feature_flags/experiment/ci_syntax_templates_experiment_percentage.yml create mode 100644 config/feature_flags/experiment/customize_homepage_experiment_percentage.yml rename config/feature_flags/{development/feature_flags_legacy_read_only.yml => experiment/default_to_issues_board_experiment_percentage.yml} (53%) create mode 100644 config/feature_flags/experiment/invite_members_empty_group_version_a_experiment_percentage.yml rename config/feature_flags/{development/feature_flags_legacy_read_only_override.yml => experiment/invite_members_empty_project_version_a_experiment_percentage.yml} (50%) create mode 100644 config/feature_flags/experiment/invite_members_new_dropdown_experiment_percentage.yml create mode 100644 config/feature_flags/experiment/invite_members_version_a_experiment_percentage.yml create mode 100644 config/feature_flags/experiment/invite_members_version_b_experiment_percentage.yml create mode 100644 config/feature_flags/experiment/jobs_empty_state_experiment_percentage.yml rename config/feature_flags/{development/github_import_pull_request_reviews.yml => experiment/onboarding_issues_experiment_percentage.yml} (54%) create mode 100644 config/feature_flags/experiment/pipelines_empty_state_experiment_percentage.yml rename config/feature_flags/{development/jira_connect_full_namespace_sync.yml => ops/explore_pipeline_status.yml} (52%) create mode 100644 config/feature_flags/ops/scalability_ci_fetch_sha.yml delete mode 100644 config/initializers/grape_patch.rb create mode 100644 config/known_invalid_graphql_queries.yml create mode 100644 config/metrics/counts_28d/deployments.yml create mode 100644 config/metrics/counts_7d/g_project_management_issue_title_changed_weekly.yml create mode 100644 config/metrics/counts_all/deployments.yml create mode 100644 config/metrics/license/recorded_at.yml create mode 100644 config/metrics/license/uuid.yml create mode 100644 config/metrics/schema.json create mode 100644 config/metrics/settings/database_adapter.yml rename danger/{product_analytics => product_intelligence}/Dangerfile (50%) create mode 100644 data/whats_new/202012160001_13_07.yml create mode 100644 data/whats_new/202101140001_13_08.yml create mode 100644 db/migrate/20201112215132_swap_partitioned_audit_events.rb create mode 100644 db/migrate/20201204105300_create_packages_debian_file_metadata.rb create mode 100644 db/migrate/20201204110700_create_packages_debian_project_distributions.rb create mode 100644 db/migrate/20201204110800_create_packages_debian_group_distributions.rb create mode 100644 db/migrate/20201204111000_create_packages_debian_project_architectures.rb create mode 100644 db/migrate/20201204111100_create_packages_debian_group_architectures.rb create mode 100644 db/migrate/20201204193952_keep_latest_artifact_project_level.rb create mode 100644 db/migrate/20201208210209_create_incident_management_oncall_shifts.rb create mode 100644 db/migrate/20201209163958_add_code_challenge_to_oauth_access_grants.rb create mode 100644 db/migrate/20201209193551_add_version_sha_cache_to_composer_metadata.rb create mode 100644 db/migrate/20201214000000_change_mr_allow_maintainer_to_push_default.rb create mode 100644 db/migrate/20201214032220_add_has_external_wiki_trigger.rb create mode 100644 db/migrate/20201214111858_add_container_registry_cleanup_tags_service_max_list_size_to_application_settings.rb create mode 100644 db/migrate/20201214112752_add_app_settings_container_reg_cleanup_tags_service_max_list_size_constraint.rb create mode 100644 db/migrate/20201214184020_add_epic_board_list.rb create mode 100644 db/migrate/20201215205404_create_namespace_package_settings.rb create mode 100644 db/migrate/20201216151616_add_squash_commit_sha_index.rb create mode 100644 db/migrate/20201216154457_add_devops_adoption_snapshot_range_end.rb create mode 100644 db/migrate/20201217070530_add_group_merge_request_approval_settings.rb create mode 100644 db/migrate/20201217132603_create_elastic_reindexing_subtasks.rb create mode 100644 db/migrate/20201221124036_add_devops_snapshot_index.rb create mode 100644 db/migrate/20201221213415_change_clusters_helm_major_version_default_to_3.rb create mode 100644 db/migrate/20201223114050_add_restrict_user_defined_variables_to_project_settings.rb create mode 100644 db/migrate/20201224144948_migrate_coverage_report_worker.rb create mode 100644 db/migrate/20201228184500_add_dismissal_reason_into_vulnerability_feedback_table.rb create mode 100644 db/migrate/20201229105948_add_invisible_captcha_enabled_to_settings.rb create mode 100644 db/migrate/20201230161206_add_rate_limiting_response_text_to_application_settings.rb create mode 100644 db/migrate/20201230180202_create_onboarding_progress.rb create mode 100644 db/migrate/20210101110640_set_limit_for_rate_limiting_response_text.rb create mode 100644 db/migrate/20210102164121_drop_temporary_index_on_ci_builds.rb create mode 100644 db/migrate/20210104163218_add_epic_board_position_index.rb create mode 100644 db/migrate/20210106153021_drop_tmp_index_on_emails.rb create mode 100644 db/migrate/20210108161039_update_max_import_size_default.rb create mode 100644 db/migrate/20210112084512_drop_tmp_index_on_emails_again.rb create mode 100644 db/migrate/20210114033715_remove_group_id_title_index.rb create mode 100644 db/post_migrate/20200716234259_remove_duplicate_labels_from_group.rb create mode 100644 db/post_migrate/20200716234518_add_uniqueness_index_to_label_title_and_group.rb create mode 100644 db/post_migrate/20201207165956_remove_duplicate_services.rb create mode 100644 db/post_migrate/20201208175117_schedule_backfilling_artifact_expiry_migration.rb create mode 100644 db/post_migrate/20201211090634_schedule_populate_finding_uuid_for_vulnerability_feedback.rb create mode 100644 db/post_migrate/20201216185336_add_devops_adoption_snapshot_not_null.rb create mode 100644 db/post_migrate/20201223012231_reindex_ci_pipelines_on_schedule_id_and_id.rb create mode 100644 db/post_migrate/20210105103649_delete_column_group_id_on_compliance_framework.rb create mode 100644 db/post_migrate/20210107194543_remove_alerts_service_records.rb create mode 100644 db/post_migrate/20210112143418_remove_duplicate_services2.rb create mode 100644 db/post_migrate/20210115215854_cancel_artifact_expiry_backfill.rb create mode 100644 db/schema_migrations/20200716234259 create mode 100644 db/schema_migrations/20200716234518 create mode 100644 db/schema_migrations/20201112215132 create mode 100644 db/schema_migrations/20201204105300 create mode 100644 db/schema_migrations/20201204110700 create mode 100644 db/schema_migrations/20201204110800 create mode 100644 db/schema_migrations/20201204111000 create mode 100644 db/schema_migrations/20201204111100 create mode 100644 db/schema_migrations/20201204193952 create mode 100644 db/schema_migrations/20201207165956 create mode 100644 db/schema_migrations/20201208175117 create mode 100644 db/schema_migrations/20201208210209 create mode 100644 db/schema_migrations/20201209163958 create mode 100644 db/schema_migrations/20201209193551 create mode 100644 db/schema_migrations/20201211090634 create mode 100644 db/schema_migrations/20201214000000 create mode 100644 db/schema_migrations/20201214032220 create mode 100644 db/schema_migrations/20201214111858 create mode 100644 db/schema_migrations/20201214112752 create mode 100644 db/schema_migrations/20201214184020 create mode 100644 db/schema_migrations/20201215205404 create mode 100644 db/schema_migrations/20201216151616 create mode 100644 db/schema_migrations/20201216154457 create mode 100644 db/schema_migrations/20201216185336 create mode 100644 db/schema_migrations/20201217070530 create mode 100644 db/schema_migrations/20201217132603 create mode 100644 db/schema_migrations/20201221124036 create mode 100644 db/schema_migrations/20201221213415 create mode 100644 db/schema_migrations/20201223012231 create mode 100644 db/schema_migrations/20201223114050 create mode 100644 db/schema_migrations/20201224144948 create mode 100644 db/schema_migrations/20201228184500 create mode 100644 db/schema_migrations/20201229105948 create mode 100644 db/schema_migrations/20201230161206 create mode 100644 db/schema_migrations/20201230180202 create mode 100644 db/schema_migrations/20210101110640 create mode 100644 db/schema_migrations/20210102164121 create mode 100644 db/schema_migrations/20210104163218 create mode 100644 db/schema_migrations/20210105103649 create mode 100644 db/schema_migrations/20210106153021 create mode 100644 db/schema_migrations/20210107194543 create mode 100644 db/schema_migrations/20210108161039 create mode 100644 db/schema_migrations/20210112084512 create mode 100644 db/schema_migrations/20210112143418 create mode 100644 db/schema_migrations/20210114033715 create mode 100644 db/schema_migrations/20210115215854 delete mode 100644 doc/administration/gitaly/img/gitlab_gitaly_version_mismatch_v12_4.png create mode 100644 doc/api/graphql/img/users_query_example_v13_8.png create mode 100644 doc/api/graphql/users_example.md create mode 100644 doc/api/openapi/v4/access_requests.yaml create mode 100644 doc/api/snippet_repository_storage_moves.md delete mode 100644 doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/img/mix-phoenix-new.png delete mode 100644 doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/img/mix-phoenix-server.png delete mode 100644 doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/img/pipelines.png delete mode 100644 doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/img/select_template_v12_6.png delete mode 100644 doc/ci/examples/test_phoenix_app_with_gitlab_ci_cd/img/set_up_ci_v12_6.png delete mode 100644 doc/ci/img/environments_available.png create mode 100644 doc/ci/img/environments_available_13_7.png create mode 100644 doc/ci/merge_request_pipelines/img/pipeline-fork_v13_7.png rename doc/ci/{yaml => pipeline_editor}/img/ci_config_visualization_hover_v13_7.png (100%) rename doc/ci/{yaml => pipeline_editor}/img/ci_config_visualization_v13_7.png (100%) create mode 100644 doc/ci/pipeline_editor/img/pipeline_editor_commit_v13_8.png create mode 100644 doc/ci/pipeline_editor/img/pipeline_editor_lint_v13_8.png create mode 100644 doc/ci/pipeline_editor/img/pipeline_editor_validate_v13_8.png create mode 100644 doc/ci/pipeline_editor/index.md create mode 100644 doc/ci/pipelines/img/job_artifacts_merge_request.png create mode 100644 doc/development/img/stage_group_dashboards_annotation.png create mode 100644 doc/development/img/stage_group_dashboards_debug_1.png create mode 100644 doc/development/img/stage_group_dashboards_debug_2.png create mode 100644 doc/development/img/stage_group_dashboards_debug_3.png create mode 100644 doc/development/img/stage_group_dashboards_filters.png create mode 100644 doc/development/img/stage_group_dashboards_metrics.png create mode 100644 doc/development/img/stage_group_dashboards_time_customization.png create mode 100644 doc/development/img/stage_group_dashboards_time_filter.png create mode 100644 doc/development/snowplow.md create mode 100644 doc/development/stage_group_dashboards.md create mode 100644 doc/development/usage_ping.md create mode 100644 doc/development/usage_ping/metrics_dictionary.md create mode 100644 doc/operations/incident_management/img/incident_metrics_tab_v13_8.png create mode 100644 doc/operations/incident_management/img/metric_image_url_dialog_v13_8.png delete mode 100644 doc/public_access/img/project_visibility_confirmation_v12_6.png delete mode 100644 doc/user/admin_area/img/license_admin_area.png delete mode 100644 doc/user/admin_area/img/license_upload.png create mode 100644 doc/user/admin_area/img/license_upload_v13_8.png create mode 100644 doc/user/analytics/ci_cd_analytics.md create mode 100644 doc/user/analytics/img/deployment_frequency_chart_v13_8.png rename doc/{ci/pipelines => user/analytics}/img/pipelines_duration_chart.png (100%) rename doc/{ci/pipelines => user/analytics}/img/pipelines_success_chart.png (100%) create mode 100644 doc/user/application_security/vulnerabilities/severities.md create mode 100644 doc/user/clusters/agent/runner.md delete mode 100644 doc/user/discussions/img/threads_resolved.png create mode 100644 doc/user/group/import/img/bulk_imports_v13_8.png create mode 100644 doc/user/group/import/img/import_panel_v13_8.png create mode 100644 doc/user/group/import/img/new_group_navigation_v13_8.png create mode 100644 doc/user/group/import/index.md delete mode 100644 doc/user/group/roadmap/img/roadmap_filters_v13_7.png create mode 100644 doc/user/group/roadmap/img/roadmap_filters_v13_8.png delete mode 100644 doc/user/group/subgroups/img/group_members_filter_v12_6.png create mode 100644 doc/user/infrastructure/img/terraform_list_view_actions_v13_8.png delete mode 100644 doc/user/infrastructure/img/terraform_list_view_v13_5.png create mode 100644 doc/user/infrastructure/img/terraform_list_view_v13_8.png create mode 100644 doc/user/project/clusters/protect/container_host_security/index.md create mode 100644 doc/user/project/clusters/protect/container_host_security/quick_start_guide.md create mode 100644 doc/user/project/clusters/protect/container_network_security/index.md create mode 100644 doc/user/project/clusters/protect/container_network_security/quick_start_guide.md create mode 100644 doc/user/project/clusters/protect/index.md rename doc/{topics => user/project/clusters/protect}/web_application_firewall/img/guide_waf_ingress_disabled_settings_v12_10.png (100%) rename doc/{topics => user/project/clusters/protect}/web_application_firewall/img/guide_waf_ingress_installation_v12_10.png (100%) rename doc/{topics => user/project/clusters/protect}/web_application_firewall/img/guide_waf_ingress_save_changes_v12_10.png (100%) create mode 100644 doc/user/project/clusters/protect/web_application_firewall/index.md create mode 100644 doc/user/project/clusters/protect/web_application_firewall/quick_start_guide.md create mode 100644 doc/user/project/img/optional_code_owners_sections_v13_8.png delete mode 100644 doc/user/project/img/service_desk_custom_email_address_v13_0.png delete mode 100644 doc/user/project/img/service_desk_enabled.png delete mode 100644 doc/user/project/integrations/img/webhooks_ssl.png delete mode 100644 doc/user/project/issues/img/due_dates_issues_index_page.png delete mode 100644 doc/user/project/members/img/access_requests_management.png create mode 100644 doc/user/project/members/img/access_requests_management_13_8.png delete mode 100644 doc/user/project/members/img/add_user_email_accept.png create mode 100644 doc/user/project/members/img/add_user_email_accept_13_8.png delete mode 100644 doc/user/project/members/img/add_user_email_ready.png create mode 100644 doc/user/project/members/img/add_user_email_ready_13_8.png delete mode 100644 doc/user/project/members/img/add_user_email_search.png create mode 100644 doc/user/project/members/img/add_user_email_search_13_8.png delete mode 100644 doc/user/project/members/img/add_user_give_permissions.png create mode 100644 doc/user/project/members/img/add_user_give_permissions_13_8.png delete mode 100644 doc/user/project/members/img/add_user_import_members_from_another_project.png create mode 100644 doc/user/project/members/img/add_user_import_members_from_another_project_13_8.png delete mode 100644 doc/user/project/members/img/add_user_imported_members.png create mode 100644 doc/user/project/members/img/add_user_imported_members_13_8.png delete mode 100644 doc/user/project/members/img/add_user_list_members.png create mode 100644 doc/user/project/members/img/add_user_list_members_13_8.png delete mode 100644 doc/user/project/members/img/add_user_search_people.png create mode 100644 doc/user/project/members/img/add_user_search_people_13_8.png delete mode 100644 doc/user/project/members/img/other_group_sees_shared_project_v13_6.png create mode 100644 doc/user/project/members/img/other_group_sees_shared_project_v13_8.png create mode 100644 doc/user/project/members/img/project_groups_tab_13_8.png delete mode 100644 doc/user/project/members/img/project_members.png create mode 100644 doc/user/project/members/img/project_members_13_8.png delete mode 100644 doc/user/project/members/img/share_project_with_groups_tab_v13_6.png create mode 100644 doc/user/project/members/img/share_project_with_groups_tab_v13_8.png delete mode 100644 doc/user/project/members/img/share_project_with_groups_v13_6.png create mode 100644 doc/user/project/merge_requests/img/code_quality_host_bound_sequential.png create mode 100644 doc/user/project/merge_requests/img/reviewer_approval_rules_form_v13_8.png create mode 100644 doc/user/project/merge_requests/img/reviewer_approval_rules_sidebar_v13_8.png create mode 100644 doc/user/search/img/project_search_general_settings_v13_8.png create mode 100644 fixtures/lib/gitlab/graphql/queries/author.fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/bad.fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/bad_argument.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/client.query.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/client_unused_fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/connection.query.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/deeply/nested/bad_import.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/deeply/nested/query.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/duplicate_imports.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/ee/author.fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/ee_else_ce.import.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/missing_argument.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/mixed_client.query.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/mixed_client_invalid.query.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/mixed_client_skipped_argument.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/mixed_client_unused_fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/post.fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/post_by_slug.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/post_by_slug.with_import.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/post_by_slug.with_import.misspelled.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/syntax-error.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/thingy.fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/transitive_bad_import.fragment.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/transitive_bad_import.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/typedefs.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/unused_import.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/wrong_field.graphql create mode 100644 fixtures/lib/gitlab/graphql/queries/wrong_field.import.graphql create mode 100644 lib/api/entities/basic_repository_storage_move.rb create mode 100644 lib/api/entities/basic_snippet.rb create mode 100644 lib/api/entities/snippet_repository_storage_move.rb create mode 100644 lib/api/helpers/authentication.rb create mode 100644 lib/api/nuget_group_packages.rb create mode 100644 lib/api/snippet_repository_storage_moves.rb create mode 100644 lib/atlassian/jira_connect/serializers/deployment_entity.rb create mode 100644 lib/atlassian/jira_connect/serializers/environment_entity.rb create mode 100644 lib/atlassian/jira_connect/serializers/feature_flag_entity.rb create mode 100644 lib/atlassian/jira_connect/serializers/pipeline_entity.rb create mode 100644 lib/banzai/filter/truncate_source_filter.rb delete mode 100644 lib/bulk_imports/importers/groups_importer.rb create mode 100644 lib/declarative_enum.rb rename lib/gitlab/analytics/cycle_analytics/stage_events/{production_stage_end.rb => issue_deployed_to_production.rb} (90%) create mode 100644 lib/gitlab/api_authentication/builder.rb create mode 100644 lib/gitlab/api_authentication/sent_through_builder.rb create mode 100644 lib/gitlab/api_authentication/token_locator.rb create mode 100644 lib/gitlab/api_authentication/token_resolver.rb create mode 100644 lib/gitlab/api_authentication/token_type_builder.rb create mode 100644 lib/gitlab/background_migration/backfill_artifact_expiry_date.rb create mode 100644 lib/gitlab/background_migration/copy_column_using_background_migration_job.rb create mode 100644 lib/gitlab/background_migration/populate_finding_uuid_for_vulnerability_feedback.rb create mode 100644 lib/gitlab/background_migration/remove_duplicate_services.rb create mode 100644 lib/gitlab/ci/pipeline/chain/template_usage.rb create mode 100644 lib/gitlab/ci/syntax_templates/Artifacts example.gitlab-ci.yml create mode 100644 lib/gitlab/ci/syntax_templates/Before_script and after_script example.gitlab-ci.yml create mode 100644 lib/gitlab/ci/syntax_templates/Manual jobs example.gitlab-ci.yml create mode 100644 lib/gitlab/ci/syntax_templates/Multi-stage pipeline example.gitlab-ci.yml create mode 100644 lib/gitlab/ci/syntax_templates/Variables example.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/5-Minute-Production-App.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/Flutter.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/Security/DAST.latest.gitlab-ci.yml create mode 100644 lib/gitlab/ci/variables/collection/sorted.rb create mode 100644 lib/gitlab/composer/version_index.rb delete mode 100644 lib/gitlab/cycle_analytics/base_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/base_query.rb delete mode 100644 lib/gitlab/cycle_analytics/base_stage.rb delete mode 100644 lib/gitlab/cycle_analytics/builds_event_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/code_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/code_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/code_stage.rb delete mode 100644 lib/gitlab/cycle_analytics/event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/issue_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/issue_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/issue_stage.rb delete mode 100644 lib/gitlab/cycle_analytics/plan_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/plan_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/plan_stage.rb delete mode 100644 lib/gitlab/cycle_analytics/production_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/production_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/review_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/review_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/review_stage.rb delete mode 100644 lib/gitlab/cycle_analytics/stage.rb delete mode 100644 lib/gitlab/cycle_analytics/staging_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/staging_stage.rb delete mode 100644 lib/gitlab/cycle_analytics/test_event_fetcher.rb delete mode 100644 lib/gitlab/cycle_analytics/test_helper.rb delete mode 100644 lib/gitlab/cycle_analytics/test_stage.rb create mode 100644 lib/gitlab/danger/title_linting.rb create mode 100644 lib/gitlab/danger/weightage.rb create mode 100644 lib/gitlab/danger/weightage/maintainers.rb create mode 100644 lib/gitlab/danger/weightage/reviewers.rb delete mode 100644 lib/gitlab/database/median.rb create mode 100644 lib/gitlab/database/postgres_hll/buckets.rb create mode 100644 lib/gitlab/database/reindexing/grafana_notifier.rb create mode 100644 lib/gitlab/email/handler/create_note_on_issuable_handler.rb create mode 100644 lib/gitlab/faraday.rb create mode 100644 lib/gitlab/faraday/error_callback.rb create mode 100644 lib/gitlab/git/changed_path.rb delete mode 100644 lib/gitlab/gitpod.rb create mode 100644 lib/gitlab/graphql/batch_key.rb create mode 100644 lib/gitlab/graphql/queries.rb create mode 100644 lib/gitlab/kubernetes/pod_cmd.rb create mode 100644 lib/gitlab/template/gitlab_ci_syntax_yml_template.rb create mode 100644 lib/gitlab/tracking/standard_context.rb create mode 100644 lib/gitlab/usage/metric.rb create mode 100644 lib/gitlab/usage/metric_definition.rb create mode 100644 lib/gitlab/usage_data_counters/ci_template_unique_counter.rb delete mode 100644 lib/gitlab/usage_data_counters/counter_events/guest_package_events.yml create mode 100644 lib/gitlab/usage_data_counters/counter_events/package_events.yml delete mode 100644 lib/gitlab/usage_data_counters/guest_package_event_counter.rb create mode 100644 lib/gitlab/usage_data_counters/merge_request_activity_unique_counter.rb create mode 100644 lib/gitlab/usage_data_counters/package_event_counter.rb create mode 100644 lib/release_highlights/validator.rb create mode 100644 lib/release_highlights/validator/entry.rb create mode 100644 lib/tasks/gitlab/pages.rake create mode 100644 qa/qa/fixtures/kubernetes_agent/agentk-config.yaml.erb create mode 100644 qa/qa/fixtures/kubernetes_agent/agentk-manifest.yaml.erb create mode 100644 qa/qa/fixtures/kubernetes_agent/galatic-empire-manifest.yaml create mode 100644 qa/qa/fixtures/web_ide/README.md create mode 100644 qa/qa/fixtures/web_ide/dk.png create mode 100644 qa/qa/fixtures/web_ide/logo_sample.svg create mode 100644 qa/qa/fixtures/web_ide/text_file.txt create mode 100644 qa/qa/resource/clusters/agent.rb create mode 100644 qa/qa/resource/clusters/agent_token.rb create mode 100644 qa/qa/scenario/test/integration/ssh_tunnel.rb create mode 100644 qa/qa/specs/features/api/3_create/gitaly/gitaly_mtls_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/snippet/copy_snippet_file_contents_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/6_release/pages/pages_pipeline_spec.rb create mode 100644 rubocop/cop/rspec/web_mock_enable.rb rename scripts/api/{cancel_pipeline => cancel_pipeline.rb} (100%) rename scripts/api/{download_job_artifact => download_job_artifact.rb} (100%) rename scripts/api/{get_job_id => get_job_id.rb} (100%) rename scripts/api/{play_job => play_job.rb} (87%) create mode 100755 scripts/perf/gc/collect_gc_stats.rb create mode 100755 scripts/perf/gc/print_gc_stats.rb create mode 100755 scripts/validate_migration_schema create mode 100644 spec/controllers/concerns/spammable_actions_spec.rb delete mode 100644 spec/factories/alerts_service_data.rb delete mode 100644 spec/factories/namespace_onboarding_actions.rb create mode 100644 spec/factories/namespace_package_settings.rb create mode 100644 spec/factories/onboarding_progresses.rb create mode 100644 spec/factories/packages/debian/distribution.rb create mode 100644 spec/factories/packages/debian/file_metadatum.rb create mode 100644 spec/factories/packages/debian/group_architecture.rb create mode 100644 spec/factories/packages/debian/project_architecture.rb create mode 100644 spec/features/groups/settings/packages_and_registries_spec.rb create mode 100644 spec/features/projects/files/gitlab_ci_syntax_yml_dropdown_spec.rb create mode 100644 spec/features/projects/issues/email_participants_spec.rb create mode 100644 spec/features/projects/members/tabs_spec.rb delete mode 100644 spec/features/projects/services/user_activates_alerts_spec.rb create mode 100644 spec/finders/concerns/packages/finder_helper_spec.rb create mode 100644 spec/finders/packages/debian/distributions_finder_spec.rb rename spec/fixtures/api/schemas/{group_member.json => entities/member.json} (59%) create mode 100644 spec/fixtures/api/schemas/entities/member_user.json create mode 100644 spec/fixtures/api/schemas/graphql/namespace/package_settings.json create mode 100644 spec/fixtures/api/schemas/graphql/packages/package_composer_details.json create mode 100644 spec/fixtures/api/schemas/graphql/packages/package_details.json rename spec/fixtures/api/schemas/{group_members.json => members.json} (53%) create mode 100644 spec/fixtures/api/schemas/public_api/v4/snippet_repository_storage_move.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/snippet_repository_storage_moves.json create mode 100644 spec/fixtures/api/schemas/rollout_status.json create mode 100644 spec/fixtures/emails/valid_note_on_issuable.eml create mode 100644 spec/fixtures/whats_new/blank.yml create mode 100644 spec/fixtures/whats_new/invalid.yml create mode 100644 spec/fixtures/whats_new/valid.yml create mode 100644 spec/frontend/__helpers__/README.md rename spec/frontend/{helpers => __helpers__}/backoff_helper.js (84%) rename spec/frontend/{helpers => __helpers__}/class_spec_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/class_spec_helper_spec.js (100%) create mode 100644 spec/frontend/__helpers__/datetime_helpers.js rename spec/frontend/{helpers => __helpers__}/dom_events_helper.js (72%) rename spec/frontend/{helpers => __helpers__}/dom_shims/README.md (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/create_object_url.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/element_scroll_by.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/element_scroll_into_view.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/element_scroll_to.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/form_element.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/get_client_rects.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/get_client_rects_spec.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/image_element_properties.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/index.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/inner_text.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/range.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/scroll_by.js (100%) rename spec/frontend/{helpers => __helpers__}/dom_shims/size_properties.js (91%) rename spec/frontend/{helpers => __helpers__}/dom_shims/window_scroll_to.js (100%) rename spec/frontend/{helpers => __helpers__}/emoji.js (89%) rename spec/frontend/{helpers => __helpers__}/experimentation_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/fake_date.js (90%) rename spec/frontend/{helpers => __helpers__}/fake_date_spec.js (100%) rename spec/frontend/{helpers => __helpers__}/fake_request_animation_frame.js (80%) rename spec/frontend/{helpers => __helpers__}/filtered_search_spec_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/fixtures.js (91%) rename spec/frontend/{helpers => __helpers__}/init_vue_mr_page_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/jest_helpers.js (96%) rename spec/frontend/{helpers => __helpers__}/jquery.js (100%) rename spec/frontend/{helpers => __helpers__}/keep_alive_component_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/keep_alive_component_helper_spec.js (100%) rename spec/frontend/{helpers => __helpers__}/local_storage_helper.js (87%) rename spec/frontend/{helpers => __helpers__}/local_storage_helper_spec.js (100%) rename spec/frontend/{helpers => __helpers__}/locale_helper.js (80%) rename spec/frontend/{helpers => __helpers__}/mock_apollo_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/mock_dom_observer.js (100%) rename spec/frontend/{helpers => __helpers__}/mock_window_location_helper.js (96%) rename spec/frontend/{helpers => __helpers__}/set_timeout_promise_helper.js (69%) rename spec/frontend/{helpers => __helpers__}/set_window_location_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/set_window_location_helper_spec.js (98%) rename spec/frontend/{helpers => __helpers__}/stub_children.js (84%) rename spec/frontend/{helpers => __helpers__}/stub_component.js (100%) create mode 100644 spec/frontend/__helpers__/stub_transition.js rename spec/frontend/{helpers => __helpers__}/test_constants.js (100%) rename spec/frontend/{helpers => __helpers__}/text_helper.js (59%) rename spec/frontend/{helpers => __helpers__}/timeout.js (90%) rename spec/frontend/{helpers => __helpers__}/tracking_helper.js (89%) rename spec/frontend/{helpers => __helpers__}/user_mock_data_helper.js (84%) rename spec/frontend/{helpers => __helpers__}/vue_mock_directive.js (89%) rename spec/frontend/{helpers => __helpers__}/vue_mount_component_helper.js (100%) rename spec/frontend/{helpers => __helpers__}/vue_test_utils_helper.js (82%) rename spec/frontend/{helpers => __helpers__}/vue_test_utils_helper_spec.js (100%) rename spec/frontend/{helpers => __helpers__}/vuex_action_helper.js (96%) rename spec/frontend/{helpers => __helpers__}/vuex_action_helper_spec.js (90%) create mode 100644 spec/frontend/__helpers__/wait_for_promises.js rename spec/frontend/{helpers => __helpers__}/wait_for_text.js (100%) rename spec/frontend/{helpers => __helpers__}/wait_using_real_timer.js (74%) rename spec/frontend/{helpers => __helpers__}/web_worker_mock.js (100%) create mode 100644 spec/frontend/__mocks__/lodash/defer.js create mode 100644 spec/frontend/admin/users/components/user_avatar_spec.js create mode 100644 spec/frontend/api/api_utils_spec.js create mode 100644 spec/frontend/artifacts_settings/components/__snapshots__/keep_latest_artifact_checkbox_spec.js.snap create mode 100644 spec/frontend/artifacts_settings/components/keep_latest_artifact_checkbox_spec.js create mode 100644 spec/frontend/boards/board_list_deprecated_spec.js delete mode 100644 spec/frontend/boards/board_list_new_spec.js rename spec/frontend/boards/{board_new_issue_spec.js => board_new_issue_deprecated_spec.js} (98%) rename spec/frontend/boards/components/{board_column_new_spec.js => board_column_deprecated_spec.js} (53%) rename spec/frontend/boards/components/{board_list_header_new_spec.js => board_list_header_deprecated_spec.js} (51%) rename spec/frontend/boards/components/{board_new_issue_new_spec.js => board_new_issue_spec.js} (93%) create mode 100644 spec/frontend/boards/components/issue_time_estimate_deprecated_spec.js create mode 100644 spec/frontend/boards/components/sidebar/board_sidebar_issue_title_spec.js rename spec/frontend/boards/{issue_card_spec.js => issue_card_deprecated_spec.js} (91%) create mode 100644 spec/frontend/boards/issue_card_inner_spec.js create mode 100644 spec/frontend/boards/project_select_deprecated_spec.js create mode 100644 spec/frontend/boards/project_select_spec.js create mode 100644 spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js create mode 100644 spec/frontend/diffs/utils/file_reviews_spec.js create mode 100644 spec/frontend/diffs/utils/merge_request_spec.js create mode 100644 spec/frontend/editor/editor_ci_schema_ext_spec.js create mode 100644 spec/frontend/environments/canary_ingress_spec.js create mode 100644 spec/frontend/environments/canary_update_modal_spec.js create mode 100644 spec/frontend/environments/deploy_board_component_spec.js create mode 100644 spec/frontend/environments/environments_folder_view_spec.js create mode 100644 spec/frontend/helpers/README.md create mode 100644 spec/frontend/helpers/help_page_helper_spec.js delete mode 100644 spec/frontend/helpers/wait_for_promises.js create mode 100644 spec/frontend/jira_connect/api_spec.js create mode 100644 spec/frontend/jira_connect/components/app_spec.js create mode 100644 spec/frontend/jira_connect/components/groups_list_item_spec.js create mode 100644 spec/frontend/jira_connect/components/groups_list_spec.js create mode 100644 spec/frontend/jira_connect/mock_data.js create mode 100644 spec/frontend/jira_connect/store/mutations_spec.js create mode 100644 spec/frontend/lib/utils/favicon_ci_spec.js create mode 100644 spec/frontend/lib/utils/favicon_spec.js create mode 100644 spec/frontend/merge_request/components/status_box_spec.js create mode 100644 spec/frontend/notebook/cells/output/latex_spec.js delete mode 100644 spec/frontend/notes/components/__snapshots__/discussion_jump_to_next_button_spec.js.snap create mode 100644 spec/frontend/notes/components/comment_field_layout_spec.js delete mode 100644 spec/frontend/notes/components/discussion_jump_to_next_button_spec.js create mode 100644 spec/frontend/notes/components/email_participants_warning_spec.js create mode 100644 spec/frontend/notes/components/multiline_comment_form_spec.js create mode 100644 spec/frontend/pages/projects/edit/mount_search_settings_spec.js create mode 100644 spec/frontend/pipeline_editor/components/info/validation_segment_spec.js create mode 100644 spec/frontend/pipeline_editor/components/lint/ci_lint_spec.js create mode 100644 spec/frontend/pipeline_editor/components/ui/editor_tab_spec.js create mode 100644 spec/frontend/pipelines/shared/links_layer_spec.js create mode 100644 spec/frontend/projects/commit/components/branches_dropdown_spec.js create mode 100644 spec/frontend/projects/commit/components/form_modal_spec.js create mode 100644 spec/frontend/projects/commit/components/form_trigger_spec.js create mode 100644 spec/frontend/projects/commit/mock_data.js create mode 100644 spec/frontend/projects/commit/store/actions_spec.js create mode 100644 spec/frontend/projects/commit/store/getters_spec.js create mode 100644 spec/frontend/projects/commit/store/mutations_spec.js rename spec/frontend/projects/pipelines/charts/components/__snapshots__/{pipelines_area_chart_spec.js.snap => ci_cd_analytics_area_chart_spec.js.snap} (88%) rename spec/frontend/projects/pipelines/charts/components/{pipelines_area_chart_spec.js => ci_cd_analytics_area_chart_spec.js} (55%) rename spec/frontend/projects/pipelines/charts/components/{app_legacy_spec.js => pipeline_charts_spec.js} (66%) delete mode 100644 spec/frontend/reports/components/modal_open_name_spec.js create mode 100644 spec/frontend/search_settings/components/search_settings_spec.js create mode 100644 spec/frontend/search_settings/index_spec.js create mode 100644 spec/frontend/sidebar/components/copy_email_to_clipboard_spec.js delete mode 100644 spec/frontend/vue_mr_widget/components/mock_data.js create mode 100644 spec/frontend/vue_mr_widget/components/states/__snapshots__/mr_widget_auto_merge_enabled_spec.js.snap create mode 100644 spec/frontend/vue_shared/components/deployment_instance/deployment_instance_spec.js create mode 100644 spec/frontend/vue_shared/components/deployment_instance/mock_data.js delete mode 100644 spec/frontend/vue_shared/components/deprecated_modal_2_spec.js create mode 100644 spec/frontend_integration/test_helpers/setup/setup_testing_library.js create mode 100644 spec/graphql/mutations/namespace/package_settings/update_spec.rb create mode 100644 spec/graphql/resolvers/package_details_resolver_spec.rb create mode 100644 spec/graphql/resolvers/release_milestones_resolver_spec.rb create mode 100644 spec/graphql/types/ci/config/job_restriction_type_spec.rb create mode 100644 spec/graphql/types/namespace/package_settings_type_spec.rb create mode 100644 spec/graphql/types/packages/composer/details_type_spec.rb create mode 100644 spec/graphql/types/packages/composer/json_type_spec.rb create mode 100644 spec/graphql/types/packages/composer/metadatum_type_spec.rb rename spec/graphql/types/{ => packages}/package_type_enum_spec.rb (100%) rename spec/graphql/types/{ => packages}/package_type_spec.rb (78%) create mode 100644 spec/graphql/types/packages/tag_type_spec.rb create mode 100644 spec/helpers/ci/triggers_helper_spec.rb create mode 100644 spec/helpers/jira_connect_helper_spec.rb create mode 100644 spec/helpers/projects/project_members_helper_spec.rb create mode 100644 spec/helpers/wiki_page_version_helper_spec.rb create mode 100644 spec/lib/api/entities/snippet_repository_storage_move_spec.rb create mode 100644 spec/lib/api/helpers/authentication_spec.rb create mode 100644 spec/lib/atlassian/jira_connect/serializers/deployment_entity_spec.rb create mode 100644 spec/lib/atlassian/jira_connect/serializers/feature_flag_entity_spec.rb create mode 100644 spec/lib/banzai/filter/truncate_source_filter_spec.rb delete mode 100644 spec/lib/bulk_imports/importers/groups_importer_spec.rb create mode 100644 spec/lib/declarative_enum_spec.rb create mode 100644 spec/lib/gitlab/analytics/cycle_analytics/stage_events/issue_deployed_to_production_spec.rb create mode 100644 spec/lib/gitlab/api_authentication/builder_spec.rb create mode 100644 spec/lib/gitlab/api_authentication/sent_through_builder_spec.rb create mode 100644 spec/lib/gitlab/api_authentication/token_locator_spec.rb create mode 100644 spec/lib/gitlab/api_authentication/token_resolver_spec.rb create mode 100644 spec/lib/gitlab/api_authentication/token_type_builder_spec.rb create mode 100644 spec/lib/gitlab/background_migration/backfill_artifact_expiry_date_spec.rb create mode 100644 spec/lib/gitlab/background_migration/copy_column_using_background_migration_job_spec.rb create mode 100644 spec/lib/gitlab/background_migration/populate_finding_uuid_for_vulnerability_feedback_spec.rb create mode 100644 spec/lib/gitlab/background_migration/remove_duplicate_services_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/chain/template_usage_spec.rb create mode 100644 spec/lib/gitlab/ci/syntax_templates_spec.rb create mode 100644 spec/lib/gitlab/ci/templates/5_minute_production_app_ci_yaml_spec.rb create mode 100644 spec/lib/gitlab/ci/templates/flutter_gitlab_ci_yaml_spec.rb create mode 100644 spec/lib/gitlab/ci/variables/collection/sorted_spec.rb create mode 100644 spec/lib/gitlab/composer/version_index_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/code_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/code_stage_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/events_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/issue_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/issue_stage_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/plan_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/plan_stage_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/production_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/review_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/review_stage_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/staging_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/staging_stage_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/test_event_fetcher_spec.rb delete mode 100644 spec/lib/gitlab/cycle_analytics/test_stage_spec.rb create mode 100644 spec/lib/gitlab/danger/title_linting_spec.rb create mode 100644 spec/lib/gitlab/danger/weightage/maintainers_spec.rb create mode 100644 spec/lib/gitlab/danger/weightage/reviewers_spec.rb create mode 100644 spec/lib/gitlab/database/postgres_hll/buckets_spec.rb create mode 100644 spec/lib/gitlab/database/reindexing/grafana_notifier_spec.rb create mode 100644 spec/lib/gitlab/email/handler/create_note_on_issuable_handler_spec.rb create mode 100644 spec/lib/gitlab/faraday/error_callback_spec.rb create mode 100644 spec/lib/gitlab/git/changed_path_spec.rb create mode 100644 spec/lib/gitlab/git/wiki_page_version_spec.rb delete mode 100644 spec/lib/gitlab/gitpod_spec.rb create mode 100644 spec/lib/gitlab/graphql/batch_key_spec.rb create mode 100644 spec/lib/gitlab/graphql/queries_spec.rb create mode 100644 spec/lib/gitlab/kubernetes/pod_cmd_spec.rb delete mode 100644 spec/lib/gitlab/middleware/multipart/handler_for_jwt_params_spec.rb rename spec/lib/gitlab/middleware/{multipart_with_handler_for_jwt_params_spec.rb => multipart_spec.rb} (91%) delete mode 100644 spec/lib/gitlab/middleware/multipart_with_handler_spec.rb create mode 100644 spec/lib/gitlab/template/gitlab_ci_syntax_yml_template_spec.rb create mode 100644 spec/lib/gitlab/tracking/standard_context_spec.rb create mode 100644 spec/lib/gitlab/usage/metric_definition_spec.rb create mode 100644 spec/lib/gitlab/usage/metric_spec.rb create mode 100644 spec/lib/gitlab/usage_data_counters/ci_template_unique_counter_spec.rb create mode 100644 spec/lib/gitlab/usage_data_counters/merge_request_activity_unique_counter_spec.rb rename spec/lib/gitlab/usage_data_counters/{guest_package_event_counter_spec.rb => package_event_counter_spec.rb} (67%) create mode 100644 spec/lib/release_highlights/validator/entry_spec.rb create mode 100644 spec/lib/release_highlights/validator_spec.rb create mode 100644 spec/migrations/20210112143418_remove_duplicate_services2_spec.rb create mode 100644 spec/migrations/add_has_external_wiki_trigger_spec.rb create mode 100644 spec/migrations/remove_alerts_service_records_spec.rb create mode 100644 spec/migrations/remove_duplicate_labels_from_groups_spec.rb create mode 100644 spec/migrations/schedule_populate_finding_uuid_for_vulnerability_feedback_spec.rb rename spec/models/{audit_event_partitioned_spec.rb => audit_event_archived_spec.rb} (64%) rename spec/models/{ => ci}/commit_with_pipeline_spec.rb (98%) delete mode 100644 spec/models/cycle_analytics/code_spec.rb delete mode 100644 spec/models/cycle_analytics/issue_spec.rb delete mode 100644 spec/models/cycle_analytics/plan_spec.rb delete mode 100644 spec/models/cycle_analytics/project_level_spec.rb create mode 100644 spec/models/cycle_analytics/project_level_stage_adapter_spec.rb delete mode 100644 spec/models/cycle_analytics/review_spec.rb delete mode 100644 spec/models/cycle_analytics/staging_spec.rb delete mode 100644 spec/models/cycle_analytics/test_spec.rb create mode 100644 spec/models/namespace/package_setting_spec.rb delete mode 100644 spec/models/namespace_onboarding_action_spec.rb create mode 100644 spec/models/onboarding_progress_spec.rb create mode 100644 spec/models/packages/debian/file_metadatum_spec.rb create mode 100644 spec/models/packages/debian/group_architecture_spec.rb create mode 100644 spec/models/packages/debian/group_distribution_spec.rb create mode 100644 spec/models/packages/debian/project_architecture_spec.rb create mode 100644 spec/models/packages/debian/project_distribution_spec.rb create mode 100644 spec/models/project_pages_metadatum_spec.rb create mode 100644 spec/requests/api/graphql/mutations/ci/ci_cd_settings_update_spec.rb create mode 100644 spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb create mode 100644 spec/requests/api/graphql/namespace/package_settings_spec.rb create mode 100644 spec/requests/api/graphql/packages/package_composer_details_spec.rb create mode 100644 spec/requests/api/nuget_group_packages_spec.rb create mode 100644 spec/requests/api/snippet_repository_storage_moves_spec.rb rename spec/{controllers => requests}/jwks_controller_spec.rb (93%) rename spec/{controllers => requests}/runner_setup_controller_spec.rb (81%) rename spec/{controllers => requests}/users_controller_spec.rb (57%) create mode 100644 spec/rubocop/cop/rspec/web_mock_enable_spec.rb delete mode 100644 spec/serializers/analytics_stage_serializer_spec.rb create mode 100644 spec/serializers/member_entity_spec.rb create mode 100644 spec/serializers/member_serializer_spec.rb create mode 100644 spec/serializers/member_user_entity_spec.rb delete mode 100644 spec/services/alert_management/sync_alert_service_data_service_spec.rb rename spec/services/ci/{pipelines/create_artifact_service_spec.rb => pipeline_artifacts/coverage_report_service_spec.rb} (96%) create mode 100644 spec/services/ci/pipeline_artifacts/destroy_expired_artifacts_service_spec.rb create mode 100644 spec/services/ci/pipeline_processing/test_cases/dag_build_fails_deploy_is_delayed_and_needs_test.yml create mode 100644 spec/services/ci/pipeline_processing/test_cases/dag_build_fails_deploy_is_manual_and_needs_test.yml create mode 100644 spec/services/namespaces/package_settings/update_service_spec.rb create mode 100644 spec/services/packages/debian/create_package_file_service_spec.rb create mode 100644 spec/services/packages/debian/extract_metadata_service_spec.rb create mode 100644 spec/services/packages/debian/get_or_create_incoming_service_spec.rb create mode 100644 spec/services/pages/migrate_legacy_storage_to_deployment_service_spec.rb create mode 100644 spec/services/repositories/housekeeping_service_spec.rb create mode 100644 spec/services/snippets/schedule_bulk_repository_shard_moves_service_spec.rb create mode 100644 spec/services/snippets/update_repository_storage_service_spec.rb create mode 100644 spec/support/gitlab_stubs/gitlab_ci_for_sast_default_analyzers.yml create mode 100644 spec/support/gitlab_stubs/gitlab_ci_for_sast_excluded_analyzers.yml create mode 100644 spec/support/helpers/database/database_helpers.rb create mode 100644 spec/support/helpers/database/partitioning_helpers.rb create mode 100644 spec/support/helpers/database/table_schema_helpers.rb create mode 100644 spec/support/helpers/database/trigger_helpers.rb delete mode 100644 spec/support/helpers/database_helpers.rb delete mode 100644 spec/support/helpers/partitioning_helpers.rb delete mode 100644 spec/support/helpers/table_schema_helpers.rb delete mode 100644 spec/support/helpers/trigger_helpers.rb create mode 100644 spec/support/shared_contexts/requests/api/nuget_packages_shared_context.rb create mode 100644 spec/support/shared_examples/finders/packages/debian/distributions_finder_shared_examples.rb create mode 100644 spec/support/shared_examples/finders/packages_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/mutations/http_integrations_shared_examples.rb delete mode 100644 spec/support/shared_examples/lib/gitlab/cycle_analytics/base_stage_shared_examples.rb delete mode 100644 spec/support/shared_examples/lib/gitlab/cycle_analytics/default_query_config_shared_examples.rb create mode 100644 spec/support/shared_examples/metrics/sampler_shared_examples.rb create mode 100644 spec/support/shared_examples/models/boards/listable_shared_examples.rb create mode 100644 spec/support/shared_examples/models/concerns/can_housekeep_repository_shared_examples.rb create mode 100644 spec/support/shared_examples/models/concerns/repositories/can_housekeep_repository_shared_examples.rb create mode 100644 spec/support/shared_examples/models/packages/debian/architecture_shared_examples.rb create mode 100644 spec/support/shared_examples/models/packages/debian/distribution_shared_examples.rb create mode 100644 spec/support/shared_examples/quick_actions/merge_request/rebase_quick_action_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/repository_storage_moves_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/releases_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/sessionless_auth_request_shared_examples.rb create mode 100644 spec/support/shared_examples/serializers/pipeline_artifacts_shared_example.rb create mode 100644 spec/support/shared_examples/services/boards/items_list_service_shared_examples.rb create mode 100644 spec/support/shared_examples/services/namespace_package_settings_shared_examples.rb create mode 100644 spec/support/shared_examples/services/onboarding_progress_shared_examples.rb create mode 100644 spec/support/shared_examples/services/repositories/housekeeping_shared_examples.rb create mode 100644 spec/support/shared_examples/services/schedule_bulk_repository_shard_moves_shared_examples.rb create mode 100644 spec/support/shared_examples/workers/schedule_bulk_repository_shard_moves_shared_examples.rb create mode 100644 spec/support/shared_examples/workers/update_repository_move_shared_examples.rb create mode 100644 spec/support_specs/matchers/be_sorted_spec.rb create mode 100644 spec/tasks/gitlab/pages_rake_spec.rb delete mode 100644 spec/tooling/lib/tooling/test_file_finder_spec.rb create mode 100644 spec/uploaders/packages/debian/distribution_release_file_uploader_spec.rb create mode 100644 spec/workers/bulk_imports/entity_worker_spec.rb rename spec/workers/ci/{pipelines/create_artifact_worker_spec.rb => pipeline_artifacts/coverage_report_worker_spec.rb} (70%) create mode 100644 spec/workers/ci/pipeline_artifacts/expire_artifacts_worker_spec.rb create mode 100644 spec/workers/experiments/record_conversion_event_worker_spec.rb create mode 100644 spec/workers/jira_connect/sync_deployments_worker_spec.rb create mode 100644 spec/workers/jira_connect/sync_feature_flags_worker_spec.rb create mode 100644 spec/workers/namespaces/onboarding_pipeline_created_worker_spec.rb create mode 100644 spec/workers/snippet_schedule_bulk_repository_shard_moves_worker_spec.rb create mode 100644 spec/workers/snippet_update_repository_storage_worker_spec.rb delete mode 100644 tooling/lib/tooling/test_file_finder.rb delete mode 100644 vendor/assets/javascripts/jquery.scrollTo.js create mode 100644 vendor/project_templates/kotlin_native_linux.tar.gz create mode 100644 vendor/project_templates/learn_gitlab_gold_trial.tar.gz create mode 100755 workhorse/_support/fmt.sh delete mode 100755 workhorse/_support/validate-formatting.sh create mode 100644 workhorse/cmd/gitlab-resize-image/png/reader.go create mode 100644 workhorse/cmd/gitlab-resize-image/png/reader_test.go create mode 100644 workhorse/internal/log/logging.go create mode 100644 workhorse/internal/log/logging_test.go create mode 100644 workhorse/testdata/image_bad_iccp.png create mode 100644 workhorse/testdata/image_stripped_iccp.png diff --git a/.eslintrc.yml b/.eslintrc.yml index 1e6df6f5a7..a764f74978 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -43,6 +43,18 @@ rules: promise/always-return: off promise/no-callback-in-promise: off "@gitlab/no-global-event-off": error + + # BEGIN eslint-plugin-vue@7 overrides + # TODO: Remove these rules as part of + # https://gitlab.com/groups/gitlab-org/-/epics/5142. These are setting + # various vue lint rules as they were in eslint-plugin-vue@6, or disabling + # new ones, to ease migration to v7, so violations of each can be fixed + # separately. + vue/no-mutating-props: off + vue/one-component-per-file: off + vue/no-lone-template: off + vue/component-definition-name-casing: off + # END eslint-plugin-vue@7 overrides overrides: - files: - '**/spec/**/*' diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5e54f9cde3..b41d7bcd34 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -64,7 +64,7 @@ variables: BUILD_ASSETS_IMAGE: "false" ES_JAVA_OPTS: "-Xms256m -Xmx256m" ELASTIC_URL: "http://elastic:changeme@elasticsearch:9200" - DOCKER_VERSION: "19.03.0" + DOCKER_VERSION: "20.10.1" CACHE_CLASSES: "true" # Preparing custom clone path to reduce space used by all random forks @@ -110,3 +110,4 @@ include: - local: .gitlab/ci/notify.gitlab-ci.yml - local: .gitlab/ci/dast.gitlab-ci.yml - local: .gitlab/ci/workhorse.gitlab-ci.yml + - local: .gitlab/ci/graphql.gitlab-ci.yml diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 70d9dbc9ad..df81d05eec 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -250,10 +250,10 @@ Dangerfile @gl-quality/eng-prod /ee/spec/lib/gitlab/code_owners/ @reprazent @kerrizor @garyh /doc/user/project/code_owners.md @reprazent @kerrizor @garyh -[Product Analytics] -/ee/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product_analytics/engineers -/ee/lib/ee/gitlab/usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/grafana_embed_usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/cycle_analytics/usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product_analytics/engineers +[Product Intelligence] +/ee/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product-intelligence/engineers +/ee/lib/ee/gitlab/usage_data.rb @gitlab-org/growth/product-intelligence/engineers +/lib/gitlab/grafana_embed_usage_data.rb @gitlab-org/growth/product-intelligence/engineers +/lib/gitlab/usage_data.rb @gitlab-org/growth/product_intelligence/engineers +/lib/gitlab/cycle_analytics/usage_data.rb @gitlab-org/growth/product-intelligence/engineers +/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product-intelligence/engineers diff --git a/.gitlab/ci/dev-fixtures.gitlab-ci.yml b/.gitlab/ci/dev-fixtures.gitlab-ci.yml index c19dce7e4a..1848283f92 100644 --- a/.gitlab/ci/dev-fixtures.gitlab-ci.yml +++ b/.gitlab/ci/dev-fixtures.gitlab-ci.yml @@ -15,7 +15,6 @@ # SEED_NESTED_GROUPS: "false" # requires network connection .run-dev-fixtures-script: &run-dev-fixtures-script - - run_timed_command "scripts/gitaly-test-build" - run_timed_command "scripts/gitaly-test-spawn" - run_timed_command "RAILS_ENV=test bundle exec rake db:seed_fu" diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index d6dc709a11..955f44c621 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -43,7 +43,7 @@ docs-lint markdown: - .default-retry - .docs:rules:docs-lint # When updating the image version here, update it in /scripts/lint-doc.sh too. - image: "registry.gitlab.com/gitlab-org/gitlab-docs/lint-markdown:alpine-3.12-vale-2.6.1-markdownlint-0.24.0" + image: "registry.gitlab.com/gitlab-org/gitlab-docs/lint-markdown:alpine-3.12-vale-2.8.0-markdownlint-0.26.0" stage: test needs: [] script: @@ -84,16 +84,3 @@ ui-docs-links lint: needs: [] script: - bundle exec haml-lint -i DocumentationLinks - -graphql-reference-verify: - extends: - - .default-retry - - .rails-cache - - .default-before_script - - .docs:rules:graphql-reference-verify - - .use-pg11 - stage: test - needs: ["setup-test-env"] - script: - - bundle exec rake gitlab:graphql:check_docs - - bundle exec rake gitlab:graphql:check_schema diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 0b921309ce..c87305cab1 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -103,7 +103,6 @@ update-yarn-cache: WEBPACK_VENDOR_DLL: "true" script: - run_timed_command "gem install knapsack --no-document" - - run_timed_command "scripts/gitaly-test-build" - run_timed_command "scripts/gitaly-test-spawn" - source ./scripts/rspec_helpers.sh - rspec_paralellized_job "--tag frontend_fixture" @@ -236,6 +235,8 @@ coverage-frontend: - *yarn-install script: - run_timed_command "yarn node scripts/frontend/merge_coverage_frontend.js" + # Removing the individual coverage results, as we just merged them. + - rm -r coverage-frontend/jest-* coverage: '/^Statements\s*:\s*?(\d+(?:\.\d+)?)%/' artifacts: name: coverage-frontend diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 0fafd5869d..355607c17a 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -112,7 +112,7 @@ .use-kaniko: image: - name: gcr.io/kaniko-project/executor:debug-v0.20.0 + name: gcr.io/kaniko-project/executor:debug-v1.3.0 entrypoint: [""] before_script: - source scripts/utils.sh diff --git a/.gitlab/ci/graphql.gitlab-ci.yml b/.gitlab/ci/graphql.gitlab-ci.yml new file mode 100644 index 0000000000..4aff0ef630 --- /dev/null +++ b/.gitlab/ci/graphql.gitlab-ci.yml @@ -0,0 +1,14 @@ +graphql-verify: + variables: + SETUP_DB: "false" + extends: + - .default-retry + - .rails-cache + - .default-before_script + - .graphql:rules:graphql-verify + stage: test + needs: [] + script: + - bundle exec rake gitlab:graphql:validate + - bundle exec rake gitlab:graphql:check_docs + - bundle exec rake gitlab:graphql:check_schema diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index a66e0d88db..4961bd508d 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -14,7 +14,6 @@ pages: - mv coverage/ public/coverage-ruby/ || true - mv coverage-frontend/ public/coverage-frontend/ || true - mv coverage-javascript/ public/coverage-javascript/ || true - - mv webpack-report/ public/webpack-report/ || true - cp .public/assets/application-*.css public/application.css || true - cp .public/assets/application-*.css.gz public/application.css.gz || true artifacts: diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 2818b6be17..a2a16424f4 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -10,7 +10,6 @@ # Only install knapsack after bundle install! Otherwise oddly some native # gems could not be found under some circumstance. No idea why, hours wasted. - run_timed_command "gem install knapsack --no-document" - - run_timed_command "scripts/gitaly-test-build" - run_timed_command "scripts/gitaly-test-spawn" - source ./scripts/rspec_helpers.sh @@ -150,20 +149,35 @@ setup-test-env: script: - run_timed_command "bundle exec ruby -I. -e 'require \"config/environment\"; TestEnv.init'" - run_timed_command "scripts/gitaly-test-build" # Do not use 'bundle exec' here - - rm tmp/tests/gitaly/.ruby-bundle # This file prevents gems from being installed even if vendor/gitaly-ruby is missing artifacts: expire_in: 7d paths: - config/secrets.yml - - tmp/tests/gitaly - - tmp/tests/gitlab-elasticsearch-indexer - - tmp/tests/gitlab-shell - - tmp/tests/gitlab-test-fork - - tmp/tests/gitlab-test-fork_bare - - tmp/tests/gitlab-test - - tmp/tests/gitlab-workhorse - - tmp/tests/repositories - - tmp/tests/second_storage + - tmp/tests/gitaly/config.toml + - tmp/tests/gitaly/gitaly + - tmp/tests/gitaly/gitaly2.config.toml + - tmp/tests/gitaly/gitaly-git2go + - tmp/tests/gitaly/gitaly-hooks + - tmp/tests/gitaly/gitaly-lfs-smudge + - tmp/tests/gitaly/gitaly-ssh + - tmp/tests/gitaly/internal/ + - tmp/tests/gitaly/internal_sockets/ + - tmp/tests/gitaly/Makefile + - tmp/tests/gitaly/praefect + - tmp/tests/gitaly/praefect.config.toml + - tmp/tests/gitaly/ruby/ + - tmp/tests/gitlab-elasticsearch-indexer/bin/gitlab-elasticsearch-indexer + - tmp/tests/gitlab-shell/ + - tmp/tests/gitlab-test-fork/ + - tmp/tests/gitlab-test-fork_bare/ + - tmp/tests/gitlab-test/ + - tmp/tests/gitlab-workhorse/gitlab-zip-metadata + - tmp/tests/gitlab-workhorse/gitlab-zip-cat + - tmp/tests/gitlab-workhorse/gitlab-workhorse + - tmp/tests/gitlab-workhorse/gitlab-resize-image + - tmp/tests/gitlab-workhorse/config.toml + - tmp/tests/repositories/ + - tmp/tests/second_storage/ when: always update-rails-cache: @@ -286,6 +300,16 @@ rspec system pg11 minimal: - .minimal-rspec-tests - .rails:rules:ee-and-foss-system:minimal +# Dedicated job to test DB library code against PG12. +# Note that these are already tested against PG11 in the `rspec unit pg11` / `rspec-ee unit pg11` jobs. +rspec db-library-code pg12: + extends: + - .rspec-base-pg12 + - .rails:rules:ee-and-foss-db-library-code + script: + - *base-script + - rspec_db_library_code + rspec fast_spec_helper: extends: - .rspec-base-pg11 @@ -311,6 +335,14 @@ db:check-schema: script: - source scripts/schema_changed.sh +db:check-migrations: + extends: + - .db-job-base + - .rails:rules:ee-and-foss-mr-with-migration + script: + - scripts/validate_migration_schema + allow_failure: true + db:migrate-from-v12.10.0: extends: .db-job-base variables: @@ -376,6 +408,38 @@ db:backup_and_restore: rules: - changes: ["lib/backup/**/*"] +rspec:deprecations: + extends: + - .default-retry + - .default-before_script + - .static-analysis-cache + - .rails:rules:deprecations + stage: post-test + allow_failure: true + # We cannot use needs since it would mean needing 84 jobs (since most are parallelized) + # so we use `dependencies` here. + dependencies: + - rspec migration pg11 + - rspec unit pg11 + - rspec integration pg11 + - rspec system pg11 + - rspec-ee migration pg11 + - rspec-ee unit pg11 + - rspec-ee integration pg11 + - rspec-ee system pg11 + - rspec-ee unit pg11 geo + - rspec-ee integration pg11 geo + - rspec-ee system pg11 geo + variables: + SETUP_DB: "false" + script: + - run_timed_command "bundle exec rubocop --only Lint/LastKeywordArgument --parallel" + artifacts: + expire_in: 31d + when: always + paths: + - deprecations/ + rspec:coverage: extends: - .coverage-base @@ -549,33 +613,36 @@ rspec-ee unit pg11 geo: - .rails:rules:ee-only-unit - .rspec-ee-unit-geo-parallel -rspec-ee unit pg11 geo minimal: - extends: - - rspec-ee unit pg11 geo - - .minimal-rspec-tests - - .rails:rules:ee-only-unit:minimal +# FIXME: Temporarily disable geo minimal rspec jobs https://gitlab.com/gitlab-org/gitlab/-/issues/294212 +#rspec-ee unit pg11 geo minimal: +# extends: +# - rspec-ee unit pg11 geo +# - .minimal-rspec-tests +# - .rails:rules:ee-only-unit:minimal rspec-ee integration pg11 geo: extends: - .rspec-ee-base-geo-pg11 - .rails:rules:ee-only-integration -rspec-ee integration pg11 geo minimal: - extends: - - rspec-ee integration pg11 geo - - .minimal-rspec-tests - - .rails:rules:ee-only-integration:minimal +# FIXME: Temporarily disable geo minimal rspec jobs https://gitlab.com/gitlab-org/gitlab/-/issues/294212 +#rspec-ee integration pg11 geo minimal: +# extends: +# - rspec-ee integration pg11 geo +# - .minimal-rspec-tests +# - .rails:rules:ee-only-integration:minimal rspec-ee system pg11 geo: extends: - .rspec-ee-base-geo-pg11 - .rails:rules:ee-only-system -rspec-ee system pg11 geo minimal: - extends: - - rspec-ee system pg11 geo - - .minimal-rspec-tests - - .rails:rules:ee-only-system:minimal +# FIXME: Temporarily disable geo minimal rspec jobs https://gitlab.com/gitlab-org/gitlab/-/issues/294212 +#rspec-ee system pg11 geo minimal: +# extends: +# - rspec-ee system pg11 geo +# - .minimal-rspec-tests +# - .rails:rules:ee-only-system:minimal db:rollback geo: extends: diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 85aec07055..77ada89aa6 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -4,9 +4,9 @@ # - template: Security/Dependency-Scanning.gitlab-ci.yml # - template: Security/DAST.gitlab-ci.yml -# We need to duplicate this job's definition because it seems it's impossible to -# override an included `only.refs`. -# See https://gitlab.com/gitlab-org/gitlab/issues/31371. +# We need to duplicate this job's definition because the rules +# defined in the extended jobs rely on local YAML anchors +# (`*if-default-refs`) code_quality: extends: - .default-retry @@ -36,9 +36,9 @@ code_quality: - gl-code-quality-report.json # GitLab-specific expire_in: 1 week # GitLab-specific -# We need to duplicate this job's definition because it seems it's impossible to -# override an included `only.refs`. -# See https://gitlab.com/gitlab-org/gitlab/issues/31371. +# We need to duplicate this job's definition because the rules +# defined in the extended jobs rely on local YAML anchors +# (`*if-default-refs`) .sast: extends: - .default-retry @@ -89,74 +89,58 @@ secrets-sast: sast: gl-secret-detection-report.json expire_in: 1 week # GitLab-specific -# We need to duplicate this job's definition because it seems it's impossible to -# override an included `only.refs`. -# See https://gitlab.com/gitlab-org/gitlab/issues/31371. -dependency_scanning: +# We need to duplicate this job's definition because the rules +# defined in the extended jobs rely on local YAML anchors +# (`*if-default-refs`) +.dependency_scanning: extends: - .default-retry - .reports:rules:dependency_scanning - - .use-docker-in-docker stage: test needs: [] variables: DS_MAJOR_VERSION: 2 - DS_EXCLUDED_PATHS: "qa/qa/ee/fixtures/secure_premade_reports,spec,ee/spec" # GitLab-specific - script: - - | - if ! docker info &>/dev/null; then - if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then - export DOCKER_HOST='tcp://localhost:2375' - fi - fi - - | # this is required to avoid undesirable reset of Docker image ENV variables being set on build stage - function propagate_env_vars() { - CURRENT_ENV=$(printenv) - - for VAR_NAME; do - echo $CURRENT_ENV | grep "${VAR_NAME}=" > /dev/null && echo "--env $VAR_NAME " - done - } - - | - docker run \ - $(propagate_env_vars \ - DS_ANALYZER_IMAGES \ - DS_ANALYZER_IMAGE_PREFIX \ - DS_ANALYZER_IMAGE_TAG \ - DS_DEFAULT_ANALYZERS \ - DS_EXCLUDED_PATHS \ - DS_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \ - DS_PULL_ANALYZER_IMAGE_TIMEOUT \ - DS_RUN_ANALYZER_TIMEOUT \ - DS_PYTHON_VERSION \ - DS_PIP_VERSION \ - DS_PIP_DEPENDENCY_PATH \ - GEMNASIUM_DB_LOCAL_PATH \ - GEMNASIUM_DB_REMOTE_URL \ - GEMNASIUM_DB_REF_NAME \ - PIP_INDEX_URL \ - PIP_EXTRA_INDEX_URL \ - PIP_REQUIREMENTS_FILE \ - MAVEN_CLI_OPTS \ - BUNDLER_AUDIT_UPDATE_DISABLED \ - BUNDLER_AUDIT_ADVISORY_DB_URL \ - BUNDLER_AUDIT_ADVISORY_DB_REF_NAME \ - ) \ - --volume "$PWD:/code" \ - --volume /var/run/docker.sock:/var/run/docker.sock \ - "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$DS_MAJOR_VERSION" /code - # Post-processing: This will be an after_script once this job will use the Dependency Scanning CI template - - apk add jq - # Lower execa severity based on https://gitlab.com/gitlab-org/gitlab/-/issues/223859#note_452922390 - - jq '(.vulnerabilities[] | select (.cve == "yarn.lock:execa:gemnasium:05cfa2e8-2d0c-42c1-8894-638e2f12ff3d")).severity = "Medium"' gl-dependency-scanning-report.json > temp.json && mv temp.json gl-dependency-scanning-report.json + DS_EXCLUDED_PATHS: "qa/qa/ee/fixtures/secure_premade_reports, spec, ee/spec" # GitLab-specific + SECURE_ANALYZERS_PREFIX: "registry.gitlab.com/gitlab-org/security-products/analyzers" artifacts: paths: - gl-dependency-scanning-report.json # GitLab-specific reports: dependency_scanning: gl-dependency-scanning-report.json expire_in: 1 week # GitLab-specific + script: + - /analyzer run -# The job below analysis dependencies for malicous behavior +dependency_scanning gemnasium: + extends: .dependency_scanning + image: + name: "$SECURE_ANALYZERS_PREFIX/gemnasium:$DS_MAJOR_VERSION" + before_script: + # git-lfs is needed for auto-remediation + - apk add git-lfs + after_script: + # Post-processing + - apk add jq + # Lower execa severity based on https://gitlab.com/gitlab-org/gitlab/-/issues/223859#note_452922390 + - jq '(.vulnerabilities[] | select (.cve == "yarn.lock:execa:gemnasium:05cfa2e8-2d0c-42c1-8894-638e2f12ff3d")).severity = "Medium"' gl-dependency-scanning-report.json > temp.json && mv temp.json gl-dependency-scanning-report.json + +dependency_scanning bundler-audit: + extends: .dependency_scanning + image: + name: "$SECURE_ANALYZERS_PREFIX/bundler-audit:$DS_MAJOR_VERSION" + +dependency_scanning retire-js: + extends: .dependency_scanning + image: + name: "$SECURE_ANALYZERS_PREFIX/retire.js:$DS_MAJOR_VERSION" + +dependency_scanning gemnasium-python: + extends: .dependency_scanning + image: + name: "$SECURE_ANALYZERS_PREFIX/gemnasium-python:$DS_MAJOR_VERSION" + +# Analyze dependencies for malicious behavior +# See https://gitlab.com/gitlab-com/gl-security/security-research/package-hunter package_hunter: extends: - .reports:schedule-dast diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index f1bd173ff6..b7d9f18dcb 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -38,7 +38,7 @@ review-build-cng: - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng # When the job is manual, review-deploy is also manual and we don't want people # to have to manually start the jobs in sequence, so we do it for them. - - '[ -z $CI_JOB_MANUAL ] || scripts/api/play_job --job-name "review-deploy"' + - '[ -z $CI_JOB_MANUAL ] || scripts/api/play_job.rb --job-name "review-deploy"' .review-workflow-base: extends: @@ -48,7 +48,7 @@ review-build-cng: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" REVIEW_APPS_DOMAIN: "temp.gitlab-review.app" # FIXME: using temporary domain DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v4.3.0" + GITLAB_HELM_CHART_REF: "v4.6.3" environment: name: review/${CI_COMMIT_REF_SLUG}${FREQUENCY} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} @@ -78,8 +78,8 @@ review-deploy: - disable_sign_ups || (delete_release && exit 1) # When the job is manual, review-qa-smoke is also manual and we don't want people # to have to manually start the jobs in sequence, so we do it for them. - - '[ -z $CI_JOB_MANUAL ] || scripts/api/play_job --job-name "review-qa-smoke"' - - '[ -z $CI_JOB_MANUAL ] || scripts/api/play_job --job-name "review-performance"' + - '[ -z $CI_JOB_MANUAL ] || scripts/api/play_job.rb --job-name "review-qa-smoke"' + - '[ -z $CI_JOB_MANUAL ] || scripts/api/play_job.rb --job-name "review-performance"' after_script: # Run seed-dast-test-data.sh only when DAST_RUN is set to true. This is to pupulate review app with data for DAST scan. # Set DAST_RUN to true when jobs are manually scheduled. diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 159defc83c..5e8cdf0daa 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -155,9 +155,15 @@ - "{,ee/}{,spec/}lib/{,ee/}gitlab/database{,_spec}.rb" - "{,ee/}{,spec/}lib/{,ee/}gitlab/background_migration/**/*" - "{,ee/}{,spec/}lib/{,ee/}gitlab/background_migration{,_spec}.rb" + - "{,ee/}spec/support/helpers/database/**/*" - "config/prometheus/common_metrics.yml" # Used by Gitlab::DatabaseImporters::CommonMetrics::Importer - "{,ee/}app/models/project_statistics.rb" # Used to calculate sizes in migration specs +.db-library-patterns: &db-library-patterns + - "{,ee/}{,spec/}lib/{,ee/}gitlab/database/**/*" + - "{,ee/}{,spec/}lib/{,ee/}gitlab/database{,_spec}.rb" + - "{,ee/}spec/support/helpers/database/**/*" + .backstage-patterns: &backstage-patterns - "Dangerfile" - "danger/**/*" @@ -349,7 +355,11 @@ changes: *docs-patterns when: on_success -.docs:rules:graphql-reference-verify: +################## +# GraphQL rules # +################## + +.graphql:rules:graphql-verify: rules: - <<: *if-not-ee when: never @@ -507,6 +517,12 @@ - <<: *if-merge-request changes: *db-patterns +.rails:rules:ee-and-foss-mr-with-migration: + rules: + - <<: *if-merge-request + changes: *db-patterns + - <<: *if-merge-request-title-run-all-rspec + .rails:rules:ee-and-foss-unit: rules: - changes: *backend-patterns @@ -765,6 +781,11 @@ - <<: *if-merge-request-title-as-if-foss changes: *code-backstage-patterns +.rails:rules:ee-and-foss-db-library-code: + rules: + - changes: *db-library-patterns + - <<: *if-merge-request-title-run-all-rspec + .rails:rules:ee-mr-and-master-only: rules: - <<: *if-not-ee @@ -825,6 +846,13 @@ - <<: *if-merge-request changes: *code-backstage-patterns +.rails:rules:deprecations: + rules: + - <<: *if-not-ee + when: never + - <<: *if-master-schedule-nightly + - <<: *if-merge-request-title-run-all-rspec + .rails:rules:rspec-coverage: rules: - <<: *if-not-ee diff --git a/.gitlab/issue_templates/Acceptance Testing.md b/.gitlab/issue_templates/Acceptance Testing.md index 5a6c35f28a..5289638255 100644 --- a/.gitlab/issue_templates/Acceptance Testing.md +++ b/.gitlab/issue_templates/Acceptance Testing.md @@ -27,7 +27,7 @@ Then leave running while monitoring and performing some testing through web, api - [ ] [Inspect logs in ELK](https://log.gitlab.net/app/kibana) - [ ] [Check for errors in GitLab Dev Sentry](https://sentry.gitlab.net/gitlab/devgitlaborg/?query=is%3Aunresolved) -## 2. Staging Trial +## 3. Staging Trial #### Check Staging Server Versions - [ ] GitLab: https://staging.gitlab.com/help diff --git a/.gitlab/issue_templates/Design Sprint.md b/.gitlab/issue_templates/Design Sprint.md new file mode 100644 index 0000000000..787c4469b8 --- /dev/null +++ b/.gitlab/issue_templates/Design Sprint.md @@ -0,0 +1,203 @@ + + +## Design Sprint Focus +* [ ] Have you [determined that a Design Sprint is appropriate for this project](#anchor-tag-to-handbook-page)? + + +## Objectives + + + +## Outputs + +- [ ] A User testing flow. +- [ ] A Prototype to be tested with users. +- [ ] User testing analysis. +- [ ] (If the solution is viable) An epic or issue that describes the direction in details and the next steps +- [ ] Necessary updates to the Handbook. + +## Design Sprint Details + +| Start | End | +| ------ | ------ | +| YYYY-MM-DD | YYYY-MM-DD | +| TT:TT PST | TT:TT PST | + + +### WHEN + +**Start date:** + +**End date:** + +**Reference time zone:** + +### WHERE + +**Zoom link:** + +### WHO + + - `Name` `gitlab handle` - Facilitator + - `Name` `gitlab handle` - Decider (usually the Product Manager) + - `Name` `gitlab handle` - Co-decider (optional) + - `Name` `gitlab handle` - Sprint team member + - `Name` `gitlab handle` - Sprint team member + - `Name` `gitlab handle` - Sprint team member + - `Name` `gitlab handle` - Sprint team member + - `Name` `gitlab handle` - Sprint team member + - `Name` `gitlab handle` - Sprint team member + - `Name` `gitlab handle` - Co-facilitator (optional) + +## Tools +Here is the list of tools for the Sprint preparation, collaboration and documentation. Prior to the Sprint make sure you have access to all of the following: + +* **GitLab**
+Each Sprint day outcomes and material will be documented in a separate issue under the Design Sprint epic. + +* **Mural** (You can join as anonymous but we need to be able to identify input against names, so please create an account beforehand.
+We will use Mural for most of the Sprint collaboration. Some of the things we will do in Mural: + * Create artifacts like affinity diagrams from participants' input + * Use post-its to comment on each other's points and to add notes + * Vote on ideas and solutions + * Create the first draft of the prototype. +The Mural link to the collaboration project will be provided in the issue before the start of the Design Sprint. + +* **Video and/or screen recording tool** (Loom, Quicktime, Zoom or another tool you are using).
+As part of the pre-Sprint homework, you will be asked to record a short Lightning Walkthrough video. You can use any tool you feel comfortable with as long as it can capture your screen, mouse pointer and your audio. + +* **A4/Letter sized paper (preferably white blank), Sharpies/Pens** (please don't use a pencil because it doesn't create enough contrast for photos).
+Day 2 of the sprint involves some (async) ideation via sketching so you will need a writing utensil (Sharpies are preferred because they force you to draw at a lower fidelity because the small details aren't necessary at this point) and some paper. This is the most fun part of the Sprint where you get into a design thinking mindset and can appeal to your creative self. Don't worry, it's not about artistry, it's about ideas and collaboration. + +* **Camera (phone or other) or scanner**
+You will need to upload sketches as images for the facilitator to prepare the material before the next sync meeting. You can take a photo with your phone or use a scanner if available. + +* **Post-it notes (Optional)**
+If you enjoy taking notes using post-it notes make sure you have available some of them as well. The upside is that they will make you feel more like you are in a workshop and will help the ideas flow (I find that typing is distracting while ideating). The downside is that you will have to digitalise the ones you want to share with the team in Mural. + +## Artefacts & Pre-Read Material + + + +### Handbook pages + + +### Competitor resources + + + +### Articles on Design Sprints + * [The Design Sprint](https://www.gv.com/sprint/) + * [The Ultimate Guide To Remote Design Sprints](https://drive.google.com/file/d/16bwrAqHVf8qxovd87Q7LdzqwAgy7a6Rx/view?usp=sharing) + +## Asyncronus tasks + +### Design Sprint preparation + + + +- [ ] Finalise participant list - `decider` and `facilitator` +- [ ] Create [participation form](https://docs.google.com/forms/d/e/1FAIpQLSc0_BNltvRW8yXXaJd8sIKzgDmrSGqILMfkoCJrAj6sFcsMcg/viewform?usp=sf_link) and send to participants (**deadline**: [date]) - `facilitator` +- [ ] Promote this issue to an epic - `facilitator` +- [ ] Create issues under the epic for the pre-workshop tasks: Expert interviews ([example](https://gitlab.com/groups/gitlab-org/configure/-/epics/3#note_332412524)), Lightning walkthroughs and How might we.. notetaking assignment ([example](https://gitlab.com/gitlab-org/configure/general/-/issues/52)), Voting How might we... notes assignment ([example](https://gitlab.com/gitlab-org/configure/general/-/issues/54)) - `facilitator` +- [ ] Create sync meetings in calendar and invite all participants (**deadline**: [date]) - `decider` or `facilitator` +- [ ] Block 2 hours for Sprint activities in calendar for the Sprint week - `all participants` +- [ ] Prepare material and tools (eg. presentation templates, Google folders, Instructions videos etc) and Mural board from the [Mural template ](https://app.mural.co/invitation/mural/gitlab2474/1586990879319?sender=jmandell0210&key=03c25e92-9a43-4a3d-8907-6f0c3b094ab8) - facilitator +- [ ] Finalize Agenda - `facilitator` +- [ ] Run a test with material and tools - `facilitator` +- [ ] Start user recruiting for prototype user testing (EOD 1) - `facilitator` or `decider` + +### Pre-Sprint activities (Homework exercises) + +Each exercise should be explained and documented in a separate issue. You can use the example issues above as templates. + +- [ ] Fill form and submit (**deadline**: [date]) - `all participants except the facilitator` +- [ ] Expert interview analysis - `facilitator` +- [ ] Lightning walkthrough videos (**deadline**: [date]) - `all participants except the facilitator` +- [ ] How might we... notetaking assignment (**deadline**: [date]) - `all participants except the facilitator` +- [ ] Voting How might we... notes assignment (**deadline**: [date]) - `all participants except the facilitator` +- [ ] Add all required material to the Mural board (**deadline**: [date]) - `facilitator` + +### During Sprint activities + +- [ ] Organise user testing sessions - `facilitator` or `decider` +- [ ] Create the Prototype to be tested and task list (End of Day 3) - `Product designer` or `Front end developer` +- [ ] Run user testing sessions - `facilitator` or `decider` + +### Post-Sprint activities + +- [ ] Create a feedback issue for the Design Sprint - `facilitator` or `decider` +- [ ] Analyse user testing results - `facilitator` or `decider` +- [ ] Create report and share with the Design Sprint participants and wider team - `facilitator` or `decider` + +## Personas + +Deciding which persona we are focusing on will be part of the Day 1 discussions in the workshop. The personas we are going to consider are: + + + +## Agenda +### Day 1 + + | Activity | Duration | Tool | Description | +|---|---|---|---| +| Warm-up exercise | 5 mins | Mural | Write 1 post-it answering the questions:
"My name is…"
"My role is…"
“Something about myself you may not know is…”
"My wish for this workshop is…" | +| Summarise the async activities & complete Map | 20 mins | Mural | The Map is intended to show the focus of the Sprint and doesn't need to be complete or detailed. Steps:
Go through the Map and the top voted How might we’s tree as a warm-up/reminder.
• Make appropriate adjustments and additions to the map based on the reviews from the team.
• Add the most voted HMWs to the most relevant area on the Map. If a HMW can go to more than one place, add it to the most left area. | +| Long term goals/Deciding the Sprint goal | 15 mins | Mural | • Long term goal: Everyone spends 5 minutes in silence and writes one (max 2) long term goal post-it note for the Sprint. (5 mins )
• One by one everyone will read their goal aloud to the team. (5 mins)
Everyone besides the decider will vote on the goal of the Sprint (1 dot). (4 minutes)
The decider then makes the final decision on the long term goal of the Sprint. (1 min) | + | Sprint questions | 20 mins | Mural | • Referencing the Long Term goal, everyone will write 2-3 post-it note Sprint questions for the biggest challenges they think might stop us from achieving our long term goal (what might hold us back or hinder us from achieving this goal). The questions should start with “Can we...” (similarly to the HMW). (7 mins)
• One by one everyone will read their Sprint questions aloud to the team. (5 mins)
• Everyone (including the decider) votes on the top 3 questions they think we should focus on as Sprint challenges (3 dots). (5 mins)
• Separate the 3 most voted questions and keep them on the side. (1 min)
• Finally, the decider chooses one Sprint question that will be the question we will focus on more during the Sprint by placing a green smiley sticker on it. (1 min)
• Move the long term goal and the Sprint questions to the dedicated Mural space, highlighting the ultimate Sprint question that the decider chose. (1 min) | +| Recap day.
Short intro to next day and share the video with the next day exercise instructions. | 5 mins | Mural, Zoom | Summarise activities of the day and decisions. Brief walkthrough of the next day's activities and wrap up the day. | + +### Day 2 + | Activity | Duration | Tool | Description | +|---|---|---|---| +| Summary of Day 1 outcomes | 5 mins | Mural | Go through the previous day's activities, the Long term goal and the top voted Sprint questions, highlighting the ultimate Sprint question, and summarise the concept solution sketching homework exercise. | +| Concept gallery review | 20 mins | Mural | • Everyone takes some time to read through and look at every aspect of each of the sketches in the Concept Gallery. The concept sketches are anonymous to avoid bias (15 mins).
• The team will then vote on their favorite concepts and/or components of a concept via the red dots. When they see something that interests them and they think it will help solve the long term goal/challenges they can add one or more dots. They can use as many red dots as they want. Be frivolous when adding dots but if you really like or think something is important, add more to draw attention to it (5 mins).
Note: If anyone has any questions about a concept sketch create a red sticky and write that question down placing it under the concept sketches. | +| Speed critique | 5 mins | Mural | • The facilitator walks through each of the concepts, briefly summarizing each concept (to the best of their ability) with a focus on the areas that have been dotted.
• During this time the facilitator will also try to answer any of the red post-it questions.
• When the facilitator believes they’ve reached the end of their summary for that concept, ask the team if there was a concept that was voted on but not discussed or if the point of the red dot vote was missed in the discussion. +| Straw Poll | ~15 mins | Mural | • All the participants, besides the Decider, vote using the larger green dot by adding their initials to it and placing it on the concept sketch they believe is the best one that will best fulfill the long term goal and challenges of this sprint and is worthy of being prototyped (2 mins)
• Each participant will create a post-it note that explains their reasoning for choosing the concept. (5 mins)
• Each participant will then get 1 minute to read through their post-it and attempt to sell their preferred concept to the Decider and the other participants. (5-10 mins) | +| Super Vote (The Decider) | 10 mins | Mural | • The Decider makes their final decision of which of the concepts is the one to move forward with.
• The decider can discuss their thought process and any questions with the rest of the participants.
• They will get 2 green smiley stickers to vote with. Placing one on the concept they want to move forward with and the second, optional smiley, can be used to mark any other area of any other concept they think should also be incorporated into the prototype. | + + +### Day 3 + | Activity | Duration | Tool | Description | +|---|---|---|---| +| User test flow | 25 mins | Mural | • Each participant writes (on separate post-its) 6 steps/actions that represent a step of a flow (you can think of a high-level prototype flow) from start to finish. Place them in the appropriate location on the User Test section. (10 mins)
• Each participant takes 1 minute to walk the team through their flows one-by-one (5-10 mins total). Note: It's best to have the Decider go last.
• Voting: All the Sprint participants get one red dot (the Decider gets 2) to vote on the flow row they think is the best foundation for the prototype.
• After everyone has voted the Decider will vote on the row they think is best with one dot using the second dot to, optionally, vote on an element of another flow they think should be incorporated into the prototype. (5 mins)
• If the second dot is used copy the specific sticky into the main flow voted by the Decider. | +| Storyboard | 45 mins | Mural | • Copy the winning flow from the User Test Flow exercise to the Storyboard/Prototype section placing each individual post-it note into its own container.
• Look at the sketch concepts and move over any relevant screens that fulfill the needs of the sticky note in that container. You can move the entire concept or screen capture cut/paste parts of concepts. Note: Don’t add any unnecessary details or ideas that aren’t needed for the end result prototype
• Fill in the details that are required for each step described in the sticky. | +| Recap day | 5 mins | Mural, Zoom | Summarise activities of the day and decisions. Brief walkthrough of the next day's activities and wrap up the day. | + +### Day 4 + | Activity | Duration | Tool | Description | +|---|---|---|---| +| Validate Prototype | 30 mins | Mural | • Go through the Prototype created by the Product designer or Front end developer and discuss any inaccuracies or missing content. | +| Wrap up the Sprint | 15 mins | Zoom, GitLab | • Recap the Sprint and discuss next steps. Create user testing issues. | + +### Day 5 + | Activity | Duration | Tool | Description | +|---|---|---|---| +| Prototype testing with 5 users | ~45 mins | Figma or code/Zoom | • Test the prototype with users. | + +## Ground Rules +* Honor the Facilitator's directions. They're the guide for the entire process. +* Minimise distractions: During the week you will need to dedicate some hours to the Sprint for async tasks and sync video conferences. During this time we recommend blocking time in your calendar and having devices or apps with notifications turned off during that time. +* All opinions are valid and are equally important, however, the Decider has the ultimate, final decision. +* Everyone is an active participant in a sync activity (with the exception of the Observers). +* One conversation at a time. +* Document as much as you can: We should have concrete outputs to share with broader team. Also interesting ideas or fixes should be documented to be transferred in issues for our backlog. +* Stick to scheduled breaks during sync calls. The Facilitator will guide each session and set break times. +* The Sprint is one of the few chances we get to work so closely together. Have fun! diff --git a/.gitlab/issue_templates/Feature proposal.md b/.gitlab/issue_templates/Feature proposal.md index 5ab46bfa26..66450c37a2 100644 --- a/.gitlab/issue_templates/Feature proposal.md +++ b/.gitlab/issue_templates/Feature proposal.md @@ -77,6 +77,15 @@ Please list the test areas (unit, integration and end-to-end) that needs to be a See the test engineering planning process and reach out to your counterpart Software Engineer in Test for assistance: https://about.gitlab.com/handbook/engineering/quality/test-engineering/#test-planning --> +### Available Tier + + + ### What does success look like, and how can we measure that? -
- - - {{ $options.i18n.integrationFormSteps.opsgenie.info }} - - - - - - - - {{ $options.i18n.integrationFormSteps.prometheusFormUrl.help }} - - -
-
+
{{ s__('AlertSettings|Save integration') }} - {{ s__('AlertSettings|Save and test payload') }} - {{ __('Cancel') }} + {{ __('Cancel') }}
diff --git a/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue b/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue index a55e63c3bc..d0cac066ff 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_settings_wrapper.vue @@ -1,5 +1,4 @@ + + diff --git a/app/assets/javascripts/authentication/u2f/authenticate.js b/app/assets/javascripts/authentication/u2f/authenticate.js index f9b5ca3e5b..f5217e9c9b 100644 --- a/app/assets/javascripts/authentication/u2f/authenticate.js +++ b/app/assets/javascripts/authentication/u2f/authenticate.js @@ -37,7 +37,7 @@ export default class U2FAuthenticate { // Note: The server library fixes this behaviour in (unreleased) version 1.0.0. // This can be removed once we upgrade. // https://github.com/castle/ruby-u2f/commit/103f428071a81cd3d5f80c2e77d522d5029946a4 - this.signRequests = u2fParams.sign_requests.map(request => omit(request, 'challenge')); + this.signRequests = u2fParams.sign_requests.map((request) => omit(request, 'challenge')); this.templates = { inProgress: '#js-authenticate-token-2fa-in-progress', @@ -48,7 +48,7 @@ export default class U2FAuthenticate { start() { return importU2FLibrary() - .then(utils => { + .then((utils) => { this.u2fUtils = utils; this.renderInProgress(); }) @@ -60,7 +60,7 @@ export default class U2FAuthenticate { this.appId, this.challenge, this.signRequests, - response => { + (response) => { if (response.errorCode) { const error = new U2FError(response.errorCode, 'authenticate'); return this.renderError(error); diff --git a/app/assets/javascripts/authentication/u2f/register.js b/app/assets/javascripts/authentication/u2f/register.js index 9773a9185f..52940e1c30 100644 --- a/app/assets/javascripts/authentication/u2f/register.js +++ b/app/assets/javascripts/authentication/u2f/register.js @@ -34,7 +34,7 @@ export default class U2FRegister { start() { return importU2FLibrary() - .then(utils => { + .then((utils) => { this.u2fUtils = utils; this.renderSetup(); }) @@ -46,7 +46,7 @@ export default class U2FRegister { this.appId, this.registerRequests, this.signRequests, - response => { + (response) => { if (response.errorCode) { const error = new U2FError(response.errorCode, 'register'); return this.renderError(error); diff --git a/app/assets/javascripts/authentication/webauthn/authenticate.js b/app/assets/javascripts/authentication/webauthn/authenticate.js index 42c4c2b63b..47cb7a40f7 100644 --- a/app/assets/javascripts/authentication/webauthn/authenticate.js +++ b/app/assets/javascripts/authentication/webauthn/authenticate.js @@ -39,11 +39,11 @@ export default class WebAuthnAuthenticate { authenticate() { navigator.credentials .get({ publicKey: this.webauthnParams }) - .then(resp => { + .then((resp) => { const convertedResponse = convertGetResponse(resp); this.renderAuthenticated(JSON.stringify(convertedResponse)); }) - .catch(err => { + .catch((err) => { this.flow.renderError(new WebAuthnError(err, 'authenticate')); }); } diff --git a/app/assets/javascripts/authentication/webauthn/register.js b/app/assets/javascripts/authentication/webauthn/register.js index 06e4ffd6f3..62ebf85abe 100644 --- a/app/assets/javascripts/authentication/webauthn/register.js +++ b/app/assets/javascripts/authentication/webauthn/register.js @@ -39,8 +39,8 @@ export default class WebAuthnRegister { .create({ publicKey: this.webauthnOptions, }) - .then(cred => this.renderRegistered(JSON.stringify(convertCreateResponse(cred)))) - .catch(err => this.flow.renderError(new WebAuthnError(err, 'register'))); + .then((cred) => this.renderRegistered(JSON.stringify(convertCreateResponse(cred)))) + .catch((err) => this.flow.renderError(new WebAuthnError(err, 'register'))); } renderSetup() { diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js index d937060536..22717a3f84 100644 --- a/app/assets/javascripts/awards_handler.js +++ b/app/assets/javascripts/awards_handler.js @@ -56,13 +56,13 @@ export class AwardsHandler { } }, ); - this.registerEventListener('on', $parentEl, 'click', this.toggleButtonSelector, e => { + this.registerEventListener('on', $parentEl, 'click', this.toggleButtonSelector, (e) => { e.stopPropagation(); e.preventDefault(); this.showEmojiMenu($(e.currentTarget)); }); - this.registerEventListener('on', $('html'), 'click', e => { + this.registerEventListener('on', $('html'), 'click', (e) => { const $target = $(e.target); if (!$target.closest(`.${this.menuClass}`).length) { $('.js-awards-block.current').removeClass('current'); @@ -74,7 +74,7 @@ export class AwardsHandler { }); const emojiButtonSelector = `.js-awards-block .js-emoji-btn, .${this.menuClass} .js-emoji-btn`; - this.registerEventListener('on', $parentEl, 'click', emojiButtonSelector, e => { + this.registerEventListener('on', $parentEl, 'click', emojiButtonSelector, (e) => { e.preventDefault(); const $target = $(e.currentTarget); const $glEmojiElement = $target.find('gl-emoji'); @@ -98,10 +98,7 @@ export class AwardsHandler { showEmojiMenu($addBtn) { if ($addBtn.hasClass('js-note-emoji')) { - $addBtn - .closest('.note') - .find('.js-awards-block') - .addClass('current'); + $addBtn.closest('.note').find('.js-awards-block').addClass('current'); } else { $addBtn.closest('.js-awards-block').addClass('current'); } @@ -193,7 +190,7 @@ export class AwardsHandler { (promiseChain, categoryNameKey) => promiseChain.then( () => - new Promise(resolve => { + new Promise((resolve) => { const emojisInCategory = categoryMap[categoryNameKey]; const categoryMarkup = this.renderCategory( categoryLabelMap[categoryNameKey], @@ -216,7 +213,7 @@ export class AwardsHandler { menu.dispatchEvent(new CustomEvent('build-emoji-menu-finish')); } }) - .catch(err => { + .catch((err) => { emojiContentElement.insertAdjacentHTML( 'beforeend', '

We encountered an error while adding the remaining categories

', @@ -233,7 +230,7 @@ export class AwardsHandler {
@@ -198,7 +198,7 @@ export default { required @input="debouncedPreview" /> -
{{ s__('Badges|Please fill in a valid URL') }}
+
{{ s__('Badges|Enter a valid URL') }}
{{ badgeImageUrlExample }} diff --git a/app/assets/javascripts/badges/components/badge_settings.vue b/app/assets/javascripts/badges/components/badge_settings.vue index 1978178310..73c63a72b1 100644 --- a/app/assets/javascripts/badges/components/badge_settings.vue +++ b/app/assets/javascripts/badges/components/badge_settings.vue @@ -42,7 +42,7 @@ export default { .then(() => { createFlash(s__('Badges|The badge was deleted.'), 'notice'); }) - .catch(error => { + .catch((error) => { createFlash(s__('Badges|Deleting the badge failed, please try again.')); throw error; }); diff --git a/app/assets/javascripts/badges/store/actions.js b/app/assets/javascripts/badges/store/actions.js index 806c2423e7..3377f6c099 100644 --- a/app/assets/javascripts/badges/store/actions.js +++ b/app/assets/javascripts/badges/store/actions.js @@ -2,7 +2,7 @@ import axios from '~/lib/utils/axios_utils'; import types from './mutation_types'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; -export const transformBackendBadge = badge => ({ +export const transformBackendBadge = (badge) => ({ ...convertObjectPropsToCamelCase(badge, true), isDeleting: false, }); @@ -27,11 +27,11 @@ export default { image_url: newBadge.imageUrl, link_url: newBadge.linkUrl, }) - .catch(error => { + .catch((error) => { dispatch('receiveNewBadgeError'); throw error; }) - .then(res => { + .then((res) => { dispatch('receiveNewBadge', transformBackendBadge(res.data)); }); }, @@ -50,7 +50,7 @@ export default { const endpoint = `${state.apiEndpointUrl}/${badgeId}`; return axios .delete(endpoint) - .catch(error => { + .catch((error) => { dispatch('receiveDeleteBadgeError', badgeId); throw error; }) @@ -78,11 +78,11 @@ export default { const endpoint = state.apiEndpointUrl; return axios .get(endpoint) - .catch(error => { + .catch((error) => { dispatch('receiveLoadBadgesError'); throw error; }) - .then(res => { + .then((res) => { dispatch('receiveLoadBadges', res.data.map(transformBackendBadge)); }); }, @@ -113,11 +113,11 @@ export default { const renderEndpoint = `${state.apiEndpointUrl}/render?${parameters}`; return axios .get(renderEndpoint) - .catch(error => { + .catch((error) => { dispatch('receiveRenderedBadgeError'); throw error; }) - .then(res => { + .then((res) => { dispatch('receiveRenderedBadge', transformBackendBadge(res.data)); }); }, @@ -142,11 +142,11 @@ export default { image_url: badge.imageUrl, link_url: badge.linkUrl, }) - .catch(error => { + .catch((error) => { dispatch('receiveUpdatedBadgeError'); throw error; }) - .then(res => { + .then((res) => { dispatch('receiveUpdatedBadge', transformBackendBadge(res.data)); }); }, diff --git a/app/assets/javascripts/badges/store/mutations.js b/app/assets/javascripts/badges/store/mutations.js index bd84e68c00..3f4689aeb1 100644 --- a/app/assets/javascripts/badges/store/mutations.js +++ b/app/assets/javascripts/badges/store/mutations.js @@ -1,7 +1,7 @@ import types from './mutation_types'; import { PROJECT_BADGE } from '../constants'; -const reorderBadges = badges => +const reorderBadges = (badges) => badges.sort((a, b) => { if (a.kind !== b.kind) { return a.kind === PROJECT_BADGE ? 1 : -1; @@ -31,7 +31,7 @@ export default { }, [types.RECEIVE_UPDATED_BADGE](state, updatedBadge) { - const badges = state.badges.map(badge => { + const badges = state.badges.map((badge) => { if (badge.id === updatedBadge.id) { return updatedBadge; } @@ -77,13 +77,13 @@ export default { }, [types.RECEIVE_DELETE_BADGE](state, badgeId) { - const badges = state.badges.filter(badge => badge.id !== badgeId); + const badges = state.badges.filter((badge) => badge.id !== badgeId); Object.assign(state, { badges, }); }, [types.RECEIVE_DELETE_BADGE_ERROR](state, badgeId) { - const badges = state.badges.map(badge => { + const badges = state.badges.map((badge) => { if (badge.id === badgeId) { return { ...badge, @@ -98,7 +98,7 @@ export default { }); }, [types.REQUEST_DELETE_BADGE](state, badgeId) { - const badges = state.badges.map(badge => { + const badges = state.badges.map((badge) => { if (badge.id === badgeId) { return { ...badge, diff --git a/app/assets/javascripts/batch_comments/components/preview_item.vue b/app/assets/javascripts/batch_comments/components/preview_item.vue index dca6d90fbc..3e93168f0e 100644 --- a/app/assets/javascripts/batch_comments/components/preview_item.vue +++ b/app/assets/javascripts/batch_comments/components/preview_item.vue @@ -47,7 +47,7 @@ export default { } return sprintf(__("%{authorsName}'s thread"), { - authorsName: this.discussion.notes.find(note => !note.system).author.name, + authorsName: this.discussion.notes.find((note) => !note.system).author.name, }); }, linePosition() { @@ -98,9 +98,7 @@ export default { {{ titleText }}