From 317deac8b5d3177a3b1691d4d02715508eb5f4be Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Wed, 8 Apr 2020 14:13:33 +0530 Subject: [PATCH] New upstream version 12.9.2 --- .editorconfig | 15 + .gitignore | 4 +- .gitlab-ci.yml | 24 + .gitlab/CODEOWNERS | 37 +- .gitlab/ci/dev-fixtures.gitlab-ci.yml | 2 - .gitlab/ci/docs.gitlab-ci.yml | 14 +- .gitlab/ci/frontend.gitlab-ci.yml | 88 +- .gitlab/ci/global.gitlab-ci.yml | 23 +- .gitlab/ci/memory.gitlab-ci.yml | 14 +- .gitlab/ci/pages.gitlab-ci.yml | 3 +- .gitlab/ci/qa.gitlab-ci.yml | 3 +- .gitlab/ci/rails.gitlab-ci.yml | 37 +- .gitlab/ci/reports.gitlab-ci.yml | 9 +- .gitlab/ci/review.gitlab-ci.yml | 14 +- .gitlab/ci/rules.gitlab-ci.yml | 22 +- .gitlab/ci/setup.gitlab-ci.yml | 6 +- .gitlab/ci/test-metadata.gitlab-ci.yml | 19 - .gitlab/ci/yaml.gitlab-ci.yml | 4 +- .gitlab/issue_templates/Feature proposal.md | 6 + .gitlab/issue_templates/Problem_Validation.md | 2 +- .gitlab/issue_templates/QA failure.md | 5 +- .gitlab/issue_templates/Security Release.md | 34 +- .../issue_templates/Technical Evaluation.md | 9 +- .../merge_request_templates/Documentation.md | 1 + .../Security Release.md | 2 +- .haml-lint_todo.yml | 107 +- .markdownlint.json | 3 +- .rubocop.yml | 16 +- .vale.ini | 39 +- CHANGELOG-EE.md | 156 +- CHANGELOG.md | 527 +- GITALY_SERVER_VERSION | 2 +- GITLAB_PAGES_VERSION | 2 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 31 +- Gemfile.lock | 123 +- VERSION | 2 +- .../images/cluster_app_logos/modsecurity.png | Bin 0 -> 6235 bytes app/assets/javascripts/api.js | 16 +- .../badges/components/badge_form.vue | 6 +- .../behaviors/markdown/render_mermaid.js | 154 +- .../blob/balsamiq/balsamiq_viewer.js | 2 +- .../blob/components/blob_content.vue | 8 +- .../blob/components/blob_edit_content.vue | 49 + .../blob/components/blob_edit_header.vue | 35 + .../blob/file_template_mediator.js | 6 + app/assets/javascripts/blob/notebook/index.js | 86 +- .../blob/notebook/notebook_viewer.vue | 81 + app/assets/javascripts/blob/pdf/index.js | 54 +- .../javascripts/blob/pdf/pdf_viewer.vue | 49 + .../blob/pipeline_tour_success_modal.vue | 78 + .../components/popover.vue | 121 + .../blob/suggest_gitlab_ci_yml/index.js | 17 + .../javascripts/blob/template_selector.js | 4 +- app/assets/javascripts/blob/utils.js | 24 + app/assets/javascripts/blob/viewer/index.js | 71 +- .../javascripts/blob_edit/blob_bundle.js | 6 + .../javascripts/boards/components/board.js | 11 +- .../boards/components/board_card.vue | 9 +- .../boards/components/board_list.vue | 8 +- .../boards/components/board_sidebar.js | 8 +- .../boards/components/boards_selector.vue | 110 +- .../boards/components/issue_card_inner.vue | 51 +- .../issue_card_inner_scoped_label.vue | 45 - .../boards/components/issue_due_date.vue | 10 +- .../boards/components/project_select.vue | 4 +- app/assets/javascripts/boards/index.js | 13 +- .../boards/mixins/sortable_default_options.js | 1 - .../javascripts/boards/models/assignee.js | 4 +- app/assets/javascripts/boards/models/issue.js | 38 +- app/assets/javascripts/boards/models/list.js | 5 +- .../boards/mount_multiple_boards_switcher.js | 9 + .../boards/queries/board.fragment.graphql | 4 + .../boards/queries/group_boards.query.graphql | 13 + .../queries/project_boards.query.graphql | 13 + .../javascripts/boards/stores/boards_store.js | 71 +- .../javascripts/broadcast_notification.js | 10 +- .../components/ci_variable_modal.vue | 224 + .../components/ci_variable_popover.vue | 55 + .../components/ci_variable_settings.vue | 32 + .../components/ci_variable_table.vue | 184 + .../javascripts/ci_variable_list/constants.js | 16 + .../javascripts/ci_variable_list/index.js | 25 + .../ci_variable_list/store/actions.js | 155 + .../ci_variable_list/store/index.js | 17 + .../ci_variable_list/store/mutation_types.js | 22 + .../ci_variable_list/store/mutations.js | 86 + .../ci_variable_list/store/state.js | 24 + .../ci_variable_list/store/utils.js | 43 + .../javascripts/clusters/clusters_bundle.js | 24 +- .../clusters/components/applications.vue | 45 +- .../ingress_modsecurity_settings.vue | 164 + .../clusters/stores/clusters_store.js | 11 +- .../clusters_list/components/clusters.vue | 99 + .../javascripts/clusters_list/constants.js | 15 + app/assets/javascripts/clusters_list/index.js | 22 + .../clusters_list/store/actions.js | 37 + .../javascripts/clusters_list/store/index.js | 16 + .../clusters_list/store/mutation_types.js | 2 + .../clusters_list/store/mutations.js | 12 + .../javascripts/clusters_list/store/state.js | 5 + .../code_navigation/store/actions.js | 5 +- app/assets/javascripts/commons/polyfills.js | 19 + .../commons/polyfills/custom_event.js | 7 + .../javascripts/commons/polyfills/element.js | 32 +- .../javascripts/commons/polyfills/event.js | 8 +- .../javascripts/commons/polyfills/nodelist.js | 7 + .../polyfills/request_idle_callback.js | 7 + .../javascripts/commons/polyfills/svg.js | 10 +- app/assets/javascripts/confirm_modal.js | 14 + .../contributors/components/contributors.vue | 10 +- .../contributors/stores/getters.js | 10 +- .../components/cluster_form_dropdown.vue | 3 +- .../eks_cluster_configuration_form.vue | 29 +- .../components/service_credentials_form.vue | 6 +- .../eks_cluster/store/getters.js | 3 + .../create_cluster/eks_cluster/store/state.js | 2 +- .../components/gke_dropdown_mixin.js | 3 +- .../components/gke_project_id_dropdown.vue | 6 +- .../create_merge_request_dropdown.js | 10 +- .../components/stage_nav_item.vue | 7 +- .../deploy_keys/components/key.vue | 9 +- .../components/resolve_discussion_btn.js | 70 - .../diff_notes/diff_notes_bundle.js | 3 +- .../javascripts/diffs/components/app.vue | 13 +- .../components/compare_versions_dropdown.vue | 7 +- .../diffs/components/diff_expansion_cell.vue | 26 +- .../diffs/components/diff_file.vue | 29 +- .../diffs/components/diff_file_header.vue | 6 +- .../diffs/components/diff_file_row.vue | 2 +- .../diffs/components/diff_stats.vue | 2 +- .../diffs/components/image_diff_overlay.vue | 4 +- .../components/inline_diff_comment_row.vue | 2 +- .../components/inline_diff_table_row.vue | 22 +- .../diffs/components/inline_diff_view.vue | 2 + .../diffs/components/no_changes.vue | 6 +- .../components/parallel_diff_comment_row.vue | 4 +- .../parallel_diff_expansion_row.vue | 2 +- .../components/parallel_diff_table_row.vue | 33 +- .../diffs/components/parallel_diff_view.vue | 3 + app/assets/javascripts/diffs/index.js | 2 + app/assets/javascripts/diffs/store/actions.js | 26 +- app/assets/javascripts/diffs/store/getters.js | 24 + .../diffs/store/modules/diff_state.js | 1 + .../javascripts/diffs/store/mutation_types.js | 1 + .../javascripts/diffs/store/mutations.js | 7 + app/assets/javascripts/diffs/store/utils.js | 74 +- app/assets/javascripts/dropzone_input.js | 11 +- app/assets/javascripts/due_date_select.js | 1 + app/assets/javascripts/editor/editor_lite.js | 9 +- app/assets/javascripts/emoji/index.js | 4 +- .../components/enable_review_app_button.vue | 8 +- .../components/error_details.vue | 170 +- .../components/error_tracking_list.vue | 90 +- .../error_tracking/store/list/actions.js | 7 + .../store/list/mutation_types.js | 1 + .../error_tracking/store/list/mutations.js | 3 + .../error_tracking/store/list/state.js | 1 + .../available_dropdown_mappings.js | 4 +- .../filtered_search/dropdown_utils.js | 8 +- .../filtered_search_dropdown_manager.js | 20 +- .../filtered_search_manager.js | 54 +- .../issuable_filtered_search_token_keys.js | 4 +- .../stores/recent_searches_store.js | 4 +- .../filtered_search/visual_token_value.js | 39 +- .../components/frequent_items_list.vue | 2 +- .../components/frequent_items_list_item.vue | 19 +- .../frequent_items_search_input.vue | 4 +- .../javascripts/frequent_items/utils.js | 4 +- .../components/grafana_integration.vue | 4 +- .../groups/components/group_item.vue | 6 +- .../groups/components/item_actions.vue | 2 +- app/assets/javascripts/groups/constants.js | 4 +- .../commit_sidebar/editor_header.vue | 30 +- .../ide/components/commit_sidebar/form.vue | 14 +- .../ide/components/commit_sidebar/list.vue | 57 +- .../components/commit_sidebar/list_item.vue | 16 +- .../ide/components/file_row_extra.vue | 13 +- .../ide/components/nav_dropdown_button.vue | 4 +- .../ide/components/new_dropdown/upload.vue | 21 +- .../ide/components/pipelines/list.vue | 3 +- .../ide/components/preview/clientside.vue | 23 +- .../ide/components/repo_commit_section.vue | 22 +- .../ide/components/repo_editor.vue | 1 + app/assets/javascripts/ide/index.js | 1 + .../javascripts/ide/lib/themes/white.js | 144 +- app/assets/javascripts/ide/stores/state.js | 1 + app/assets/javascripts/ide/utils.js | 53 + .../components/import_projects_table.vue | 4 +- .../issuable_suggestions/components/app.vue | 3 +- .../issuable_suggestions/components/item.vue | 6 +- .../components/issuables_list_app.vue | 21 +- .../javascripts/issue_show/stores/index.js | 3 +- .../issue_show/utils/update_description.js | 4 +- app/assets/javascripts/labels_select.js | 41 +- .../javascripts/lib/utils/common_utils.js | 77 +- .../javascripts/lib/utils/datetime_utility.js | 19 +- app/assets/javascripts/lib/utils/highlight.js | 7 +- .../javascripts/lib/utils/icon_utils.js | 44 +- .../javascripts/lib/utils/text_utility.js | 24 +- .../utils/unit_format/formatter_factory.js | 139 + .../lib/utils/unit_format/index.js | 257 + app/assets/javascripts/locale/sprintf.js | 4 +- .../logs/components/environment_logs.vue | 278 + .../logs/components/log_control_buttons.vue | 92 + app/assets/javascripts/logs/index.js | 24 + app/assets/javascripts/logs/stores/actions.js | 148 + app/assets/javascripts/logs/stores/getters.js | 9 + app/assets/javascripts/logs/stores/index.js | 23 + .../javascripts/logs/stores/mutation_types.js | 19 + .../javascripts/logs/stores/mutations.js | 93 + app/assets/javascripts/logs/stores/state.js | 51 + app/assets/javascripts/logs/utils.js | 28 + app/assets/javascripts/main.js | 5 +- .../monitoring/components/charts/column.vue | 28 +- .../components/charts/empty_chart.vue | 5 +- .../monitoring/components/charts/heatmap.vue | 5 +- .../monitoring/components/charts/options.js | 78 + .../components/charts/single_stat.vue | 5 +- .../components/charts/stacked_column.vue | 6 +- .../components/charts/time_series.vue | 49 +- .../monitoring/components/dashboard.vue | 26 +- .../monitoring/components/embed.vue | 9 +- .../monitoring/components/panel_type.vue | 228 +- .../components/shared/prometheus_header.vue | 15 - .../javascripts/monitoring/constants.js | 36 - .../javascripts/monitoring/stores/actions.js | 44 +- .../javascripts/monitoring/stores/getters.js | 4 +- .../monitoring/stores/mutations.js | 37 +- .../javascripts/monitoring/stores/state.js | 2 +- .../javascripts/monitoring/stores/utils.js | 110 +- app/assets/javascripts/monitoring/utils.js | 2 +- app/assets/javascripts/notes.js | 8 +- .../notes/components/discussion_actions.vue | 2 +- .../notes/components/discussion_counter.vue | 9 +- .../discussion_jump_to_next_button.vue | 11 +- .../components/discussion_resolve_button.vue | 12 +- .../notes/mixins/discussion_navigation.js | 152 +- .../notes/services/notes_service.js | 41 - .../javascripts/notes/stores/actions.js | 88 +- .../javascripts/notes/stores/getters.js | 2 + .../javascripts/notes/stores/modules/index.js | 2 +- .../javascripts/notes/stores/mutations.js | 8 +- .../javascripts/notifications_dropdown.js | 2 +- .../components/external_dashboard.vue | 4 +- .../broadcast_messages/broadcast_message.js | 6 +- .../pages/admin/clusters/index/index.js | 2 + app/assets/javascripts/pages/admin/index.js | 3 + .../pages/admin/integrations/edit/index.js | 16 + .../index/components/delete_project_modal.vue | 8 +- .../javascripts/pages/admin/sessions/index.js | 1 + .../users/components/delete_user_modal.vue | 6 +- .../pages/groups/clusters/index/index.js | 2 + .../pages/groups/new/group_path_validator.js | 4 +- .../pages/groups/settings/ci_cd/show/index.js | 26 +- .../pages/projects/blob/new/index.js | 11 +- .../pages/projects/blob/show/index.js | 22 + .../pages/projects/clusters/index/index.js | 2 + .../labels/components/promote_label_modal.vue | 4 +- .../javascripts/pages/projects/logs/index.js | 3 + .../components/interval_pattern_input.vue | 4 +- .../projects/pipelines/init_pipelines.js | 28 +- .../projects/registry/repositories/index.js | 10 +- .../pages/projects/releases/show/index.js | 3 + .../projects/settings/ci_cd/show/index.js | 29 +- .../settings/integrations/show/index.js | 6 + .../settings/operations/show/index.js | 4 +- .../projects/settings/repository/form.js | 2 - .../permissions/components/settings_panel.vue | 26 +- .../pages/projects/snippets/show/index.js | 1 + .../wikis/components/delete_wiki_modal.vue | 4 +- .../javascripts/pages/projects/wikis/wikis.js | 16 + .../pages/registrations/new/index.js | 11 + .../pages/sessions/new/username_validator.js | 4 +- .../javascripts/pages/snippets/show/index.js | 1 + .../pages/users/activity_calendar.js | 6 +- .../pipelines/pipeline_details_bundle.js | 12 +- .../account/components/update_username.vue | 10 +- app/assets/javascripts/profile/gl_crop.js | 10 +- .../javascripts/projects/project_new.js | 4 + .../prometheus_metrics/prometheus_metrics.js | 6 +- .../components/project_policy_alert.vue | 69 + .../registry/explorer/constants.js | 47 +- .../registry/explorer/pages/details.vue | 267 +- .../registry/explorer/pages/index.vue | 2 +- .../registry/explorer/pages/list.vue | 149 +- .../registry/explorer/stores/actions.js | 13 +- .../registry/explorer/stores/getters.js | 6 + .../registry/explorer/stores/index.js | 2 + .../registry/explorer/stores/mutations.js | 1 + .../components/registry_settings_app.vue | 44 +- .../components/related_merge_requests.vue | 16 +- .../releases/components/app_edit.vue | 23 +- .../releases/components/app_index.vue | 51 +- .../releases/components/app_show.vue | 29 + .../releases/components/evidence_block.vue | 8 +- .../releases/components/release_block.vue | 23 +- .../components/release_block_assets.vue | 2 +- .../components/release_block_author.vue | 4 +- .../components/release_block_footer.vue | 8 +- .../components/release_block_header.vue | 14 +- .../components/release_block_metadata.vue | 16 +- .../release_block_milestone_info.vue | 64 +- .../components/release_block_milestones.vue | 2 +- app/assets/javascripts/releases/constants.js | 8 +- app/assets/javascripts/releases/mount_edit.js | 10 +- .../javascripts/releases/mount_index.js | 12 +- app/assets/javascripts/releases/mount_show.js | 21 + .../javascripts/releases/stores/index.js | 6 +- .../releases/stores/modules/detail/actions.js | 9 +- .../releases/stores/modules/list/actions.js | 12 +- app/assets/javascripts/reports/store/utils.js | 13 +- .../repository/components/last_commit.vue | 4 +- app/assets/javascripts/right_sidebar.js | 34 +- .../components/self_monitor_form.vue | 2 +- .../javascripts/self_monitor/store/state.js | 2 +- app/assets/javascripts/shared/popover.js | 4 +- .../components/assignees/assignee_title.vue | 6 +- .../components/lock/lock_issue_sidebar.vue | 4 +- .../time_tracking/sidebar_time_tracking.vue | 4 +- .../sidebar/lib/sidebar_move_issue.js | 4 +- .../queries/sidebarDetails.query.graphql | 7 + ...lsForHealthStatusFeatureFlag.query.graphql | 7 + .../queries/updateStatus.mutation.graphql | 7 + .../sidebar/services/sidebar_service.js | 38 +- .../javascripts/sidebar/sidebar_mediator.js | 6 +- .../javascripts/snippet/snippet_bundle.js | 50 +- .../snippets/components/snippet_blob_edit.vue | 36 + .../components/snippet_description_edit.vue | 72 + .../snippets/components/snippet_title.vue | 2 +- .../components/snippet_visibility_edit.vue | 95 + app/assets/javascripts/snippets/constants.js | 18 + .../fragments/snippetBase.fragment.graphql | 1 + app/assets/javascripts/terminal/terminal.js | 4 +- app/assets/javascripts/tracking.js | 2 + app/assets/javascripts/u2f/authenticate.js | 6 +- app/assets/javascripts/u2f/register.js | 4 +- app/assets/javascripts/user_popovers.js | 1 + .../components/deployment/constants.js | 5 + .../components/deployment/deployment.vue | 57 +- .../deployment/deployment_action_button.vue | 75 + .../deployment/deployment_actions.vue | 190 + .../deployment/deployment_stop_button.vue | 83 - .../deployment/deployment_view_button.vue | 21 +- .../components/mr_widget_header.vue | 5 +- .../mr_widget_pipeline_container.vue | 4 +- .../components/mr_widget_suggest_pipeline.vue | 68 +- .../components/states/commits_header.vue | 4 +- .../states/mr_widget_auto_merge_enabled.vue | 4 +- .../components/states/mr_widget_conflicts.vue | 4 +- .../states/mr_widget_pipeline_tour.vue | 143 + .../components/states/ready_to_merge.vue | 34 +- .../components/states/work_in_progress.vue | 42 +- .../mr_widget_options.vue | 8 +- .../services/mr_widget_service.js | 2 +- .../stores/mr_widget_store.js | 25 +- .../components/blob_viewers/mixins.js | 4 + .../components/blob_viewers/rich_viewer.vue | 6 +- .../components/changed_file_icon.vue | 22 +- .../vue_shared/components/confirm_modal.vue | 68 + .../date_time_picker/date_time_picker.vue | 6 + .../diff_viewer/viewers/image_diff_viewer.vue | 1 + .../vue_shared/components/gl_mentions.vue | 101 + .../vue_shared/components/loading_button.vue | 21 +- .../components/markdown/toolbar.vue | 7 +- .../components/notes/system_note.vue | 7 +- .../components/pagination/constants.js | 4 +- .../sidebar/labels_select/dropdown_title.vue | 7 +- .../sidebar/labels_select/dropdown_value.vue | 31 +- .../dropdown_value_regular_label.vue | 34 - .../dropdown_value_scoped_label.vue | 47 - .../labels_select_vue/dropdown_button.vue | 21 + .../labels_select_vue/dropdown_contents.vue | 30 + .../dropdown_contents_create_view.vue | 124 + .../dropdown_contents_labels_view.vue | 178 + .../labels_select_vue/dropdown_title.vue | 39 + .../labels_select_vue/dropdown_value.vue | 53 + .../labels_select_vue/labels_select_root.vue | 195 + .../labels_select_vue/store/actions.js | 61 + .../labels_select_vue/store/getters.js | 30 + .../sidebar/labels_select_vue/store/index.js | 12 + .../labels_select_vue/store/mutation_types.js | 20 + .../labels_select_vue/store/mutations.js | 76 + .../sidebar/labels_select_vue/store/state.js | 27 + .../components/user_popover/user_popover.vue | 54 +- .../javascripts/vue_shared/constants.js | 56 + .../stylesheets/bootstrap_migration.scss | 4 +- .../stylesheets/components/popover.scss | 10 + app/assets/stylesheets/framework.scss | 1 + app/assets/stylesheets/framework/blocks.scss | 14 +- .../framework/broadcast_messages.scss | 9 + app/assets/stylesheets/framework/buttons.scss | 7 +- app/assets/stylesheets/framework/common.scss | 4 + .../stylesheets/framework/dropdowns.scss | 85 +- .../stylesheets/framework/editor-lite.scss | 5 + app/assets/stylesheets/framework/filters.scss | 1 + app/assets/stylesheets/framework/images.scss | 2 +- app/assets/stylesheets/framework/mixins.scss | 19 +- app/assets/stylesheets/framework/modal.scss | 10 +- app/assets/stylesheets/framework/spinner.scss | 3 +- .../stylesheets/framework/typography.scss | 4 +- .../stylesheets/framework/variables.scss | 2 + .../framework/vue_transitions.scss | 2 + app/assets/stylesheets/highlight/common.scss | 12 + .../stylesheets/highlight/themes/dark.scss | 11 + .../stylesheets/highlight/themes/monokai.scss | 11 + .../stylesheets/highlight/themes/none.scss | 11 + .../highlight/themes/solarized-dark.scss | 11 + .../highlight/themes/solarized-light.scss | 11 + .../stylesheets/highlight/white_base.scss | 18 + app/assets/stylesheets/notify.scss | 16 + .../page_bundles/_ide_monaco_overrides.scss | 146 + app/assets/stylesheets/page_bundles/ide.scss | 231 +- app/assets/stylesheets/pages/boards.scss | 17 +- app/assets/stylesheets/pages/builds.scss | 57 + app/assets/stylesheets/pages/clusters.scss | 6 + .../stylesheets/pages/cycle_analytics.scss | 4 +- app/assets/stylesheets/pages/diff.scss | 8 + .../stylesheets/pages/environments.scss | 8 + .../stylesheets/pages/error_details.scss | 20 + app/assets/stylesheets/pages/error_list.scss | 50 +- .../pages/error_tracking_list.scss | 2 +- app/assets/stylesheets/pages/groups.scss | 2 +- app/assets/stylesheets/pages/issuable.scss | 41 +- app/assets/stylesheets/pages/issues.scss | 19 + app/assets/stylesheets/pages/labels.scss | 23 +- .../stylesheets/pages/merge_requests.scss | 4 + app/assets/stylesheets/pages/milestone.scss | 16 +- app/assets/stylesheets/pages/notes.scss | 14 +- app/assets/stylesheets/pages/pipelines.scss | 14 + app/assets/stylesheets/pages/profile.scss | 27 +- app/assets/stylesheets/pages/prometheus.scss | 4 - app/assets/stylesheets/pages/settings.scss | 32 + app/assets/stylesheets/utilities.scss | 7 +- app/assets/stylesheets/vendors/tribute.scss | 41 + .../admin/application_settings_controller.rb | 2 + .../admin/broadcast_messages_controller.rb | 1 + .../authenticates_2fa_for_admin_mode.rb | 84 + app/controllers/admin/dashboard_controller.rb | 1 + .../admin/integrations_controller.rb | 67 + app/controllers/admin/jobs_controller.rb | 4 +- .../admin/serverless/domains_controller.rb | 16 +- app/controllers/admin/sessions_controller.rb | 18 +- app/controllers/application_controller.rb | 13 +- .../concerns/authenticates_with_two_factor.rb | 2 - .../concerns/clientside_preview_csp.rb | 17 + .../concerns/cycle_analytics_params.rb | 2 +- app/controllers/concerns/import_url_params.rb | 8 +- ...tcha.rb => invisible_captcha_on_signup.rb} | 2 +- app/controllers/concerns/issuable_actions.rb | 2 +- app/controllers/concerns/lfs_request.rb | 4 + app/controllers/concerns/notes_actions.rb | 2 +- .../concerns/sessionless_authentication.rb | 12 +- app/controllers/concerns/snippets_actions.rb | 13 +- app/controllers/concerns/spammable_actions.rb | 2 +- .../static_object_external_storage_csp.rb | 16 + app/controllers/concerns/uploads_actions.rb | 5 +- .../explore/snippets_controller.rb | 4 +- app/controllers/graphql_controller.rb | 5 + .../groups/deploy_tokens_controller.rb | 12 + .../registry/repositories_controller.rb | 2 +- .../groups/settings/ci_cd_controller.rb | 30 +- app/controllers/groups_controller.rb | 5 +- app/controllers/ide_controller.rb | 3 + app/controllers/import/gitea_controller.rb | 23 +- .../import/gitlab_projects_controller.rb | 30 +- .../ldap/omniauth_callbacks_controller.rb | 8 +- .../omniauth_callbacks_controller.rb | 17 +- app/controllers/profiles/keys_controller.rb | 2 +- app/controllers/profiles_controller.rb | 1 + app/controllers/projects/blob_controller.rb | 1 + .../projects/commits_controller.rb | 3 + .../projects/deploy_keys_controller.rb | 17 +- .../projects/deploy_tokens_controller.rb | 2 +- app/controllers/projects/forks_controller.rb | 27 +- app/controllers/projects/graphs_controller.rb | 3 +- app/controllers/projects/hooks_controller.rb | 11 +- .../projects/import/jira_controller.rb | 60 + app/controllers/projects/issues_controller.rb | 1 + app/controllers/projects/jobs_controller.rb | 4 +- app/controllers/projects/logs_controller.rb | 79 + .../projects/merge_requests_controller.rb | 14 +- .../projects/milestones_controller.rb | 3 - .../dashboards_controller.rb | 48 + .../projects/pipeline_schedules_controller.rb | 4 +- .../projects/pipelines_controller.rb | 8 +- .../registry/repositories_controller.rb | 2 +- .../projects/releases_controller.rb | 20 +- .../projects/repositories_controller.rb | 8 + .../projects/services_controller.rb | 30 +- .../projects/settings/ci_cd_controller.rb | 31 +- .../settings/integrations_controller.rb | 4 - .../settings/operations_controller.rb | 5 + .../settings/repository_controller.rb | 22 - .../projects/snippets_controller.rb | 22 +- .../projects/tags/releases_controller.rb | 6 +- app/controllers/projects_controller.rb | 2 +- app/controllers/registrations_controller.rb | 2 +- .../git_http_client_controller.rb | 9 +- .../repositories/git_http_controller.rb | 23 +- .../repositories/lfs_api_controller.rb | 14 +- app/controllers/search_controller.rb | 11 + app/controllers/sessions_controller.rb | 6 +- app/controllers/snippets_controller.rb | 35 +- app/controllers/users/terms_controller.rb | 2 +- app/finders/award_emojis_finder.rb | 2 +- app/finders/ci/jobs_finder.rb | 53 + app/finders/ci/pipeline_schedules_finder.rb | 28 + app/finders/ci/pipelines_finder.rb | 158 + .../ci/pipelines_for_merge_request_finder.rb | 90 + app/finders/ci/runner_jobs_finder.rb | 45 + app/finders/fork_targets_finder.rb | 20 + app/finders/jobs_finder.rb | 51 - app/finders/pipeline_schedules_finder.rb | 26 - app/finders/pipelines_finder.rb | 156 - app/finders/projects/export_job_finder.rb | 29 + app/finders/runner_jobs_finder.rb | 43 - app/finders/serverless_domain_finder.rb | 35 + app/finders/snippets_finder.rb | 4 +- app/graphql/gitlab_schema.rb | 3 + .../admin/sidekiq_queues/delete_jobs.rb | 52 + .../concerns/mutations/resolves_group.rb | 6 +- .../concerns/mutations/resolves_issuable.rb | 24 + .../concerns/mutations/resolves_project.rb | 6 +- app/graphql/mutations/issues/base.rb | 8 +- app/graphql/mutations/issues/update.rb | 20 +- app/graphql/mutations/merge_requests/base.rb | 8 +- app/graphql/resolvers/base_resolver.rb | 4 + app/graphql/resolvers/boards_resolver.rb | 18 +- .../resolvers/concerns/resolves_pipelines.rb | 2 +- app/graphql/resolvers/issues_resolver.rb | 9 + .../resolvers/projects/snippets_resolver.rb | 5 + .../delete_jobs_response_type.rb | 29 + app/graphql/types/base_field.rb | 36 +- app/graphql/types/group_type.rb | 13 + app/graphql/types/mutation_type.rb | 1 + app/graphql/types/project_type.rb | 13 + app/graphql/types/snippet_type.rb | 1 + app/helpers/analytics_navbar_helper.rb | 9 +- app/helpers/application_helper.rb | 2 +- app/helpers/application_settings_helper.rb | 4 +- app/helpers/auth_helper.rb | 22 +- app/helpers/blob_helper.rb | 16 + app/helpers/boards_helper.rb | 10 +- app/helpers/broadcast_messages_helper.rb | 16 +- app/helpers/ci_variables_helper.rb | 16 + app/helpers/clusters_helper.rb | 27 + app/helpers/environments_helper.rb | 9 + app/helpers/form_helper.rb | 15 +- app/helpers/ide_helper.rb | 5 +- app/helpers/issuables_helper.rb | 1 + app/helpers/labels_helper.rb | 92 +- app/helpers/markup_helper.rb | 6 +- app/helpers/milestones_helper.rb | 20 +- app/helpers/projects_helper.rb | 11 + app/helpers/releases_helper.rb | 4 +- app/helpers/submodule_helper.rb | 13 +- app/helpers/suggest_pipeline_helper.rb | 9 + app/helpers/system_note_helper.rb | 4 +- app/helpers/user_callouts_helper.rb | 5 + app/helpers/users_helper.rb | 15 + app/helpers/visibility_level_helper.rb | 2 +- app/mailers/emails/pipelines.rb | 4 + app/mailers/previews/notify_preview.rb | 4 + app/models/ability.rb | 2 +- app/models/appearance.rb | 2 +- app/models/application_setting.rb | 13 + .../application_setting_implementation.rb | 56 +- app/models/ci/bridge.rb | 16 +- app/models/ci/build.rb | 53 +- app/models/ci/job_artifact.rb | 23 +- app/models/ci/job_variable.rb | 5 +- app/models/ci/pipeline.rb | 41 +- app/models/ci/processable.rb | 6 + app/models/ci/ref.rb | 23 + .../clusters/applications/cert_manager.rb | 4 +- .../clusters/applications/crossplane.rb | 3 +- .../clusters/applications/elastic_stack.rb | 5 +- app/models/clusters/applications/ingress.rb | 9 +- app/models/clusters/applications/knative.rb | 16 + .../clusters/applications/prometheus.rb | 15 + app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/cluster.rb | 37 +- .../clusters/concerns/application_core.rb | 2 +- .../clusters/concerns/application_data.rb | 8 +- .../clusters/concerns/application_status.rb | 5 +- app/models/commit.rb | 19 +- .../blob_language_from_git_attributes.rb | 4 +- app/models/concerns/bulk_insert_safe.rb | 135 + .../concerns/bulk_insertable_associations.rb | 115 + app/models/concerns/cache_markdown_field.rb | 18 +- app/models/concerns/ci/has_ref.rb | 33 + app/models/concerns/ci/metadatable.rb | 2 + app/models/concerns/has_ref.rb | 31 - app/models/concerns/has_repository.rb | 5 +- app/models/concerns/issuable.rb | 14 +- app/models/concerns/milestone_eventable.rb | 9 + app/models/concerns/milestoneable.rb | 2 +- app/models/concerns/milestoneish.rb | 28 +- app/models/concerns/reactive_caching.rb | 23 + app/models/concerns/spammable.rb | 4 +- app/models/concerns/time_trackable.rb | 2 +- app/models/concerns/usage_statistics.rb | 13 + app/models/concerns/versioned_description.rb | 2 +- app/models/concerns/with_uploads.rb | 1 - app/models/deploy_token.rb | 2 +- app/models/deployment.rb | 13 +- app/models/description_version.rb | 8 +- app/models/discussion.rb | 4 +- app/models/environment.rb | 17 +- app/models/environment_status.rb | 14 +- app/models/epic.rb | 2 + .../project_error_tracking_setting.rb | 6 +- app/models/event.rb | 54 +- app/models/external_pull_request.rb | 2 +- app/models/group.rb | 17 +- app/models/group_deploy_token.rb | 2 +- app/models/hooks/project_hook.rb | 2 +- app/models/identity.rb | 2 +- app/models/internal_id.rb | 2 +- app/models/internal_id_enums.rb | 10 + app/models/issue.rb | 14 +- app/models/jira_import_data.rb | 19 + app/models/key.rb | 24 +- app/models/label.rb | 4 - app/models/lfs_object.rb | 1 + app/models/list.rb | 2 +- app/models/member.rb | 2 +- app/models/merge_request.rb | 77 +- app/models/merge_request/metrics.rb | 2 + app/models/merge_request/pipelines.rb | 88 - app/models/merge_request_diff.rb | 1 + app/models/merge_request_diff_commit.rb | 2 + app/models/milestone.rb | 17 +- app/models/milestone_note.rb | 50 + app/models/milestone_release.rb | 2 +- app/models/namespace.rb | 14 +- app/models/note.rb | 38 +- app/models/notification_recipient.rb | 11 +- app/models/notification_setting.rb | 14 +- app/models/pages_domain.rb | 5 + app/models/project.rb | 118 +- app/models/project_ci_cd_setting.rb | 2 +- app/models/project_export_job.rb | 26 + app/models/project_import_state.rb | 4 + .../chat_message/base_message.rb | 6 +- .../chat_message/pipeline_message.rb | 9 +- .../chat_message/push_message.rb | 13 +- .../chat_notification_service.rb | 4 +- .../project_services/issue_tracker_service.rb | 14 +- app/models/project_services/jira_service.rb | 37 +- .../microsoft_teams_service.rb | 2 +- .../pipelines_email_service.rb | 2 +- .../project_services/prometheus_service.rb | 4 +- app/models/project_services/slack_service.rb | 16 +- .../slack_slash_commands_service.rb | 2 +- .../project_services/youtrack_service.rb | 2 +- app/models/project_wiki.rb | 31 +- app/models/prometheus_alert.rb | 4 +- app/models/protected_branch.rb | 10 +- app/models/release.rb | 2 +- app/models/releases/link.rb | 3 + app/models/repository.rb | 28 +- app/models/resource_event.rb | 45 + app/models/resource_label_event.rb | 31 +- app/models/resource_milestone_event.rb | 24 + app/models/resource_weight_event.rb | 19 +- app/models/sent_notification.rb | 5 +- app/models/serverless/domain.rb | 44 + app/models/serverless/domain_cluster.rb | 11 +- app/models/serverless/lookup_path.rb | 30 + app/models/serverless/virtual_domain.rb | 22 + app/models/service.rb | 18 +- app/models/snippet.rb | 48 +- app/models/snippet_repository.rb | 63 + app/models/timelog.rb | 4 +- app/models/user.rb | 44 +- app/models/user_bot_type_enums.rb | 1 - app/models/user_callout_enums.rb | 3 +- app/models/user_detail.rb | 7 + app/models/user_highest_role.rb | 7 + app/models/user_type_enums.rb | 15 + app/models/users_statistics.rb | 14 + app/models/wiki_page.rb | 60 +- app/models/x509_certificate.rb | 7 + app/models/zoom_meeting.rb | 2 + app/policies/group_policy.rb | 3 + app/policies/note_policy.rb | 52 +- app/policies/personal_snippet_policy.rb | 3 + app/policies/project_policy.rb | 6 + app/policies/project_snippet_policy.rb | 4 +- app/policies/snippet_policy.rb | 4 + .../{hooks => }/project_hook_presenter.rb | 0 .../import_export/project_export_presenter.rb | 40 + .../projects/prometheus/alert_presenter.rb | 19 +- app/presenters/release_presenter.rb | 2 +- .../{hooks => }/service_hook_presenter.rb | 0 app/presenters/snippet_blob_presenter.rb | 29 +- app/presenters/snippet_presenter.rb | 8 + app/serializers/cluster_application_entity.rb | 2 + app/serializers/diff_file_entity.rb | 14 +- app/serializers/environment_entity.rb | 20 + app/serializers/group_variable_entity.rb | 1 + app/serializers/issue_board_entity.rb | 3 + .../merge_request_widget_entity.rb | 10 +- app/serializers/pipeline_serializer.rb | 7 +- app/serializers/serverless/domain_entity.rb | 8 + app/services/audit_event_service.rb | 24 +- app/services/boards/issues/list_service.rb | 2 + .../create_cross_project_pipeline_service.rb | 41 +- .../ci/create_job_artifacts_service.rb | 98 +- app/services/ci/create_pipeline_service.rb | 1 + .../ci/find_exposed_artifacts_service.rb | 6 +- .../ci/generate_coverage_reports_service.rb | 30 + .../ci/parse_dotenv_artifact_service.rb | 64 + .../ci/pipeline_bridge_status_service.rb | 9 +- app/services/ci/register_job_service.rb | 10 +- app/services/ci/retry_build_service.rb | 5 +- .../ci/update_ci_ref_status_service.rb | 65 + .../applications/base_helm_service.rb | 2 +- .../clusters/applications/base_service.rb | 6 + .../configure_istio_ingress_service.rb | 4 + app/services/commits/cherry_pick_service.rb | 2 - app/services/concerns/akismet_methods.rb | 10 +- app/services/concerns/deploy_token_methods.rb | 11 + .../concerns/incident_management/settings.rb | 15 + app/services/deploy_tokens/create_service.rb | 11 - .../link_merge_requests_service.rb | 4 - .../error_tracking/issue_update_service.rb | 1 + .../git/process_ref_changes_service.rb | 2 +- .../groups/deploy_tokens/create_service.rb | 13 + .../groups/import_export/export_service.rb | 30 +- .../groups/import_export/import_service.rb | 45 +- .../issuable/clone/attributes_rewriter.rb | 18 + .../issuable/common_system_notes_service.rb | 17 +- app/services/issues/base_service.rb | 12 + app/services/issues/close_service.rb | 29 +- app/services/issues/create_service.rb | 1 + app/services/issues/import_csv_service.rb | 15 +- app/services/issues/reopen_service.rb | 1 + app/services/issues/update_service.rb | 20 +- app/services/labels/transfer_service.rb | 6 +- app/services/lfs/lock_file_service.rb | 4 +- app/services/lfs/unlock_file_service.rb | 4 +- .../merge_requests/after_create_service.rb | 19 + .../merge_requests/create_pipeline_service.rb | 23 +- app/services/merge_requests/create_service.rb | 21 +- .../merge_requests/merge_to_ref_service.rb | 2 +- app/services/merge_requests/update_service.rb | 12 +- .../metrics/dashboard/base_embed_service.rb | 4 + .../dashboard/clone_dashboard_service.rb | 10 +- .../dashboard/custom_metric_embed_service.rb | 2 +- .../dashboard/default_embed_service.rb | 2 +- .../dashboard/dynamic_embed_service.rb | 2 +- .../dashboard/grafana_metric_embed_service.rb | 24 +- .../dashboard/update_dashboard_service.rb | 109 + .../milestones/closed_issues_count_service.rb | 17 + .../milestones/issues_count_service.rb | 17 + app/services/milestones/transfer_service.rb | 18 +- .../notification_recipients/build_service.rb | 38 + .../builder/base.rb} | 214 +- .../builder/default.rb | 74 + .../builder/merge_request_unmergeable.rb | 26 + .../builder/new_note.rb | 56 + .../builder/new_release.rb | 25 + .../builder/project_maintainers.rb | 24 + app/services/notification_service.rb | 45 +- app/services/pod_logs/base_service.rb | 134 + .../pod_logs/elasticsearch_service.rb | 79 + app/services/pod_logs/kubernetes_service.rb | 88 + app/services/post_receive_service.rb | 18 +- .../projects/alerting/notify_service.rb | 14 +- .../cleanup_tags_service.rb | 9 +- app/services/projects/create_service.rb | 15 + .../projects/deploy_tokens/create_service.rb | 13 + app/services/projects/destroy_service.rb | 19 +- app/services/projects/fork_service.rb | 51 +- .../projects/import_export/export_service.rb | 41 +- app/services/projects/import_service.rb | 6 +- .../lfs_download_link_list_service.rb | 30 +- .../projects/lfs_pointers/lfs_link_service.rb | 4 +- app/services/projects/lsif_data_service.rb | 28 +- .../protect_default_branch_service.rb | 2 +- app/services/projects/update_pages_service.rb | 4 +- .../update_repository_storage_service.rb | 125 + app/services/projects/update_service.rb | 11 + app/services/repositories/base_service.rb | 8 +- app/services/repositories/destroy_service.rb | 4 +- .../change_milestone_service.rb | 36 + .../merge_into_notes_service.rb | 9 +- ...nthetic_milestone_notes_builder_service.rb | 31 + app/services/search_service.rb | 48 +- .../serverless/associate_domain_service.rb | 30 + app/services/snippets/bulk_destroy_service.rb | 74 + app/services/snippets/create_service.rb | 56 +- app/services/snippets/destroy_service.rb | 30 +- app/services/snippets/update_service.rb | 58 +- app/services/spam/ham_service.rb | 2 +- app/services/spam/mark_as_spam_service.rb | 14 +- app/services/spam/spam_check_service.rb | 22 +- app/services/system_note_service.rb | 4 + .../system_notes/issuables_service.rb | 8 +- .../system_notes/merge_requests_service.rb | 2 +- app/services/test_hooks/base_service.rb | 2 +- app/services/test_hooks/project_service.rb | 14 +- app/services/test_hooks/system_service.rb | 2 +- app/services/users/build_service.rb | 10 +- app/services/users/destroy_service.rb | 5 +- .../x509_certificate_revoke_service.rb | 9 + app/uploaders/attachment_uploader.rb | 11 + app/uploaders/avatar_uploader.rb | 7 +- app/uploaders/content_type_whitelist.rb | 53 + app/uploaders/favicon_uploader.rb | 9 +- app/uploaders/gitlab_uploader.rb | 2 + app/uploaders/object_storage.rb | 2 +- app/uploaders/upload_type_check.rb | 98 - .../application_settings/_ci_cd.html.haml | 2 +- .../application_settings/_signin.html.haml | 2 +- .../application_settings/_signup.html.haml | 14 + .../_visibility_and_access.html.haml | 5 +- .../application_settings/ci_cd.html.haml | 2 + .../metrics_and_profiling.html.haml | 2 + .../admin/broadcast_messages/_form.html.haml | 7 + app/views/admin/dashboard/index.html.haml | 8 +- app/views/admin/integrations/_form.html.haml | 12 + app/views/admin/integrations/edit.html.haml | 5 + app/views/admin/services/_form.html.haml | 2 +- app/views/admin/sessions/_new_base.html.haml | 4 +- .../admin/sessions/_tabs_normal.html.haml | 2 +- .../admin/sessions/_two_factor_otp.html.haml | 9 + .../admin/sessions/_two_factor_u2f.html.haml | 17 + app/views/admin/sessions/new.html.haml | 6 +- app/views/admin/sessions/two_factor.html.haml | 15 + app/views/award_emoji/_awards_block.html.haml | 1 - app/views/ci/variables/_index.html.haml | 53 +- .../_advanced_settings_container.html.haml | 6 + .../clusters/_advanced_settings_tab.html.haml | 6 + .../clusters/clusters/_applications.html.haml | 1 + .../clusters/_applications_tab.html.haml | 5 + .../clusters/clusters/_configure.html.haml | 26 - .../clusters/clusters/_details.html.haml | 11 + .../clusters/clusters/_details_tab.html.haml | 5 + ...aml => _gitlab_integration_form.html.haml} | 23 +- .../clusters/clusters/_namespace.html.haml | 2 +- .../_provider_details_form.html.haml} | 2 +- app/views/clusters/clusters/index.html.haml | 23 +- app/views/clusters/clusters/show.html.haml | 22 +- .../clusters/clusters/user/_form.html.haml | 2 +- app/views/dashboard/merge_requests.html.haml | 4 +- app/views/dashboard/todos/_todo.html.haml | 12 +- app/views/dashboard/todos/index.html.haml | 8 +- .../devise/shared/_omniauth_box.html.haml | 11 +- app/views/discussions/_resolve_all.html.haml | 8 - .../registry/repositories/index.html.haml | 3 +- .../settings/_permanent_deletion.html.haml | 2 +- .../groups/settings/_permissions.html.haml | 1 + .../groups/settings/ci_cd/show.html.haml | 3 + app/views/groups/show.html.haml | 2 + app/views/help/ui.html.haml | 23 +- app/views/ide/_show.html.haml | 2 +- .../import/shared/_new_project_form.html.haml | 2 +- app/views/layouts/_page.html.haml | 2 +- app/views/layouts/fullscreen.html.haml | 2 +- .../nav/sidebar/_analytics_links.html.haml | 5 + .../layouts/nav/sidebar/_group.html.haml | 18 +- .../layouts/nav/sidebar/_project.html.haml | 55 +- .../notify/_successful_pipeline.html.haml | 118 + .../notify/_successful_pipeline.text.erb | 32 + .../notify/pipeline_fixed_email.html.haml | 1 + .../notify/pipeline_fixed_email.text.erb | 1 + .../notify/pipeline_success_email.html.haml | 118 +- .../notify/pipeline_success_email.text.erb | 33 +- app/views/profiles/_email_settings.html.haml | 2 +- app/views/profiles/keys/_form.html.haml | 13 +- app/views/profiles/keys/_key.html.haml | 41 +- .../profiles/keys/_key_details.html.haml | 5 +- app/views/profiles/keys/_key_table.html.haml | 2 +- .../notifications/_email_settings.html.haml | 2 +- .../notifications/_group_settings.html.haml | 2 +- app/views/profiles/show.html.haml | 2 +- app/views/projects/_activity.html.haml | 3 +- app/views/projects/_commit_button.html.haml | 3 +- app/views/projects/_wiki.html.haml | 2 +- app/views/projects/blob/_editor.html.haml | 8 +- .../blob/_pipeline_tour_success.html.haml | 1 + .../blob/_template_selectors.html.haml | 5 +- app/views/projects/blob/new.html.haml | 6 + app/views/projects/blob/preview.html.haml | 2 +- app/views/projects/blob/show.html.haml | 2 + .../projects/blob/viewers/_markup.html.haml | 2 +- app/views/projects/ci/builds/_build.html.haml | 2 +- .../projects/commit/_commit_box.html.haml | 4 +- .../x509/_certificate_details.html.haml | 2 + .../projects/deploy_tokens/_index.html.haml | 17 - app/views/projects/edit.html.haml | 2 +- app/views/projects/find_file/show.html.haml | 3 +- app/views/projects/forks/new.html.haml | 6 - app/views/projects/graphs/charts.html.haml | 1 + app/views/projects/hook_logs/show.html.haml | 4 + app/views/projects/hooks/edit.html.haml | 5 +- .../{_index.html.haml => index.html.haml} | 4 + app/views/projects/import/jira/show.html.haml | 24 + .../projects/issues/_discussion.html.haml | 2 +- app/views/projects/issues/_issue.html.haml | 2 +- .../projects/issues/_new_branch.html.haml | 2 +- .../issues/import_csv/_button.html.haml | 2 + app/views/projects/logs/empty_logs.html.haml | 14 + app/views/projects/logs/index.html.haml | 1 + .../merge_requests/_merge_request.html.haml | 2 +- .../projects/merge_requests/_widget.html.haml | 1 + .../projects/merge_requests/show.html.haml | 1 + app/views/projects/milestones/show.html.haml | 4 +- app/views/projects/new.html.haml | 2 +- app/views/projects/notes/_actions.html.haml | 4 +- .../pipeline_schedules/index.html.haml | 2 +- .../projects/pipelines/_with_tabs.html.haml | 2 +- .../registry/repositories/index.html.haml | 7 +- app/views/projects/runners/_runner.html.haml | 2 +- app/views/projects/services/_form.html.haml | 2 +- app/views/projects/services/_index.html.haml | 6 +- app/views/projects/services/edit.html.haml | 3 +- app/views/projects/services/slack/_help.haml | 16 + .../projects/settings/ci_cd/_form.html.haml | 21 +- .../projects/settings/ci_cd/show.html.haml | 5 + .../settings/integrations/show.html.haml | 14 +- .../_configuration_banner.html.haml | 24 + .../operations/_error_tracking.html.haml | 2 +- .../settings/operations/_incidents.html.haml | 2 +- .../settings/operations/_prometheus.html.haml | 19 + .../settings/operations/show.html.haml | 2 + .../settings/repository/show.html.haml | 3 - app/views/projects/snippets/show.html.haml | 3 +- app/views/projects/tags/new.html.haml | 12 +- app/views/projects/wikis/_form.html.haml | 16 +- app/views/projects/wikis/show.html.haml | 2 +- app/views/search/_category.html.haml | 1 - .../search/results/_snippet_blob.html.haml | 2 +- app/views/shared/_broadcast_message.html.haml | 10 +- .../_default_branch_protection.html.haml | 3 + .../shared/_delete_label_modal.html.haml | 2 +- app/views/shared/_no_ssh.html.haml | 17 +- app/views/shared/_outdated_browser.html.haml | 19 +- app/views/shared/_service_settings.html.haml | 2 +- .../shared/badges/_badge_settings.html.haml | 2 - .../shared/boards/components/_board.html.haml | 13 +- .../components/sidebar/_labels.html.haml | 15 +- .../deploy_tokens/_form.html.haml | 4 +- .../shared/deploy_tokens/_index.html.haml | 18 + .../deploy_tokens/_new_deploy_token.html.haml | 0 .../deploy_tokens/_revoke_modal.html.haml | 8 +- .../deploy_tokens/_table.html.haml | 8 +- .../shared/issuable/_search_bar.html.haml | 2 + app/views/shared/issuable/_sidebar.html.haml | 3 + .../issuable/_sidebar_assignees.html.haml | 2 +- .../shared/milestones/_issuable.html.haml | 7 +- .../shared/milestones/_labels_tab.html.haml | 8 +- .../shared/milestones/_milestone.html.haml | 4 +- .../shared/milestones/_sidebar.html.haml | 4 +- app/views/shared/milestones/_top.html.haml | 2 +- app/views/shared/notes/_note.html.haml | 2 +- .../_custom_notifications.html.haml | 1 + app/views/shared/projects/_project.html.haml | 5 +- app/views/shared/snippets/_blob.html.haml | 20 +- app/views/shared/snippets/_embed.html.haml | 7 +- app/views/shared/snippets/_form.html.haml | 4 +- app/views/shared/snippets/_list.html.haml | 2 +- app/views/shared/web_hooks/_form.html.haml | 22 +- app/views/snippets/notes/_actions.html.haml | 1 - app/views/snippets/show.html.haml | 3 +- app/views/u2f/_authenticate.html.haml | 1 - app/views/users/_cover_controls.html.haml | 2 + app/views/users/_profile_basic_info.html.haml | 2 +- app/views/users/show.html.haml | 47 +- app/workers/admin_email_worker.rb | 4 +- app/workers/all_queues.yml | 585 +- app/workers/archive_trace_worker.rb | 2 +- app/workers/authorized_keys_worker.rb | 31 + app/workers/authorized_projects_worker.rb | 4 +- app/workers/auto_devops/disable_worker.rb | 2 +- app/workers/auto_merge_process_worker.rb | 2 +- app/workers/background_migration_worker.rb | 24 +- app/workers/build_coverage_worker.rb | 2 +- app/workers/build_finished_worker.rb | 4 +- app/workers/build_hooks_worker.rb | 4 +- app/workers/build_queue_worker.rb | 4 +- app/workers/build_success_worker.rb | 4 +- app/workers/build_trace_sections_worker.rb | 2 +- app/workers/chaos/cpu_spin_worker.rb | 2 +- app/workers/chaos/db_spin_worker.rb | 2 +- app/workers/chaos/kill_worker.rb | 2 +- app/workers/chaos/leak_mem_worker.rb | 2 +- app/workers/chaos/sleep_worker.rb | 2 +- app/workers/chat_notification_worker.rb | 10 +- app/workers/ci/archive_traces_cron_worker.rb | 2 +- app/workers/ci/build_prepare_worker.rb | 2 +- app/workers/ci/build_schedule_worker.rb | 2 +- .../ci/build_trace_chunk_flush_worker.rb | 2 +- .../create_cross_project_pipeline_worker.rb | 2 +- .../ci/pipeline_bridge_status_worker.rb | 4 +- ...ign_resource_from_resource_group_worker.rb | 2 +- .../cleanup_container_repository_worker.rb | 2 +- app/workers/cluster_configure_istio_worker.rb | 2 +- app/workers/cluster_configure_worker.rb | 2 +- app/workers/cluster_install_app_worker.rb | 2 +- app/workers/cluster_patch_app_worker.rb | 2 +- .../cluster_project_configure_worker.rb | 2 +- app/workers/cluster_provision_worker.rb | 2 +- app/workers/cluster_upgrade_app_worker.rb | 2 +- ...luster_wait_for_app_installation_worker.rb | 2 +- ...ster_wait_for_ingress_ip_address_worker.rb | 2 +- .../applications/activate_service_worker.rb | 2 +- .../applications/deactivate_service_worker.rb | 2 +- .../clusters/applications/uninstall_worker.rb | 2 +- .../wait_for_uninstall_app_worker.rb | 2 +- app/workers/clusters/cleanup/app_worker.rb | 2 +- .../cleanup/project_namespace_worker.rb | 2 +- .../cleanup/service_account_worker.rb | 2 +- app/workers/concerns/application_worker.rb | 11 + .../gitlab/github_import/notify_upon_death.rb | 31 - .../gitlab/github_import/object_importer.rb | 2 +- .../concerns/gitlab/notify_upon_death.rb | 29 + .../concerns/project_export_options.rb | 25 + app/workers/concerns/waitable_worker.rb | 2 +- app/workers/concerns/worker_attributes.rb | 38 +- .../container_expiration_policy_worker.rb | 2 +- app/workers/create_commit_signature_worker.rb | 2 +- app/workers/create_evidence_worker.rb | 4 +- app/workers/create_note_diff_file_worker.rb | 2 +- app/workers/create_pipeline_worker.rb | 4 +- .../delete_container_repository_worker.rb | 2 +- app/workers/delete_diff_files_worker.rb | 2 +- app/workers/delete_merged_branches_worker.rb | 2 +- app/workers/delete_stored_files_worker.rb | 2 +- app/workers/delete_user_worker.rb | 2 +- app/workers/deployments/finished_worker.rb | 2 +- .../deployments/forward_deployment_worker.rb | 2 +- app/workers/deployments/success_worker.rb | 2 +- .../detect_repository_languages_worker.rb | 2 +- app/workers/email_receiver_worker.rb | 4 +- app/workers/emails_on_push_worker.rb | 4 +- .../environments/auto_stop_cron_worker.rb | 2 +- .../error_tracking_issue_link_worker.rb | 6 +- app/workers/expire_build_artifacts_worker.rb | 2 +- .../expire_build_instance_artifacts_worker.rb | 2 +- app/workers/expire_job_cache_worker.rb | 3 +- app/workers/expire_pipeline_cache_worker.rb | 4 +- app/workers/file_hook_worker.rb | 2 +- app/workers/git_garbage_collect_worker.rb | 2 +- .../github_import/advance_stage_worker.rb | 53 +- .../github_import/import_diff_note_worker.rb | 2 +- .../github_import/import_issue_worker.rb | 2 +- .../github_import/import_lfs_object_worker.rb | 2 +- .../github_import/import_note_worker.rb | 2 +- .../import_pull_request_worker.rb | 2 +- .../refresh_import_jid_worker.rb | 2 +- .../stage/finish_import_worker.rb | 2 +- .../stage/import_base_data_worker.rb | 2 +- .../import_issues_and_diff_notes_worker.rb | 2 +- .../stage/import_lfs_objects_worker.rb | 2 +- .../stage/import_notes_worker.rb | 2 +- .../stage/import_pull_requests_worker.rb | 2 +- .../stage/import_repository_worker.rb | 2 +- app/workers/gitlab/import/advance_stage.rb | 61 + .../gitlab/phabricator_import/base_worker.rb | 2 +- .../phabricator_import/import_tasks_worker.rb | 2 +- app/workers/gitlab_shell_worker.rb | 14 +- app/workers/gitlab_usage_ping_worker.rb | 4 +- app/workers/group_destroy_worker.rb | 2 +- app/workers/group_export_worker.rb | 2 +- app/workers/group_import_worker.rb | 2 +- app/workers/hashed_storage/base_worker.rb | 2 +- app/workers/hashed_storage/migrator_worker.rb | 2 +- .../hashed_storage/project_migrate_worker.rb | 2 +- .../hashed_storage/project_rollback_worker.rb | 2 +- .../hashed_storage/rollbacker_worker.rb | 2 +- .../import_export_project_cleanup_worker.rb | 2 +- app/workers/import_issues_csv_worker.rb | 2 +- .../process_alert_worker.rb | 2 +- .../invalid_gpg_signature_update_worker.rb | 2 +- app/workers/irker_worker.rb | 2 +- app/workers/issue_due_scheduler_worker.rb | 2 +- .../mail_scheduler/issue_due_worker.rb | 2 +- .../notification_service_worker.rb | 2 +- ...merge_request_mergeability_check_worker.rb | 2 +- app/workers/merge_worker.rb | 4 +- app/workers/migrate_external_diffs_worker.rb | 2 +- .../namespaceless_project_destroy_worker.rb | 2 +- .../prune_aggregation_schedules_worker.rb | 2 +- .../namespaces/root_statistics_worker.rb | 10 +- .../namespaces/schedule_aggregation_worker.rb | 10 +- app/workers/new_issue_worker.rb | 4 +- app/workers/new_merge_request_worker.rb | 12 +- app/workers/new_note_worker.rb | 4 +- app/workers/new_release_worker.rb | 2 +- app/workers/object_pool/create_worker.rb | 2 +- app/workers/object_pool/destroy_worker.rb | 2 +- app/workers/object_pool/join_worker.rb | 2 +- .../object_pool/schedule_join_worker.rb | 2 +- .../object_storage/background_move_worker.rb | 2 +- .../object_storage/migrate_uploads_worker.rb | 2 + .../pages_domain_removal_cron_worker.rb | 2 +- .../pages_domain_ssl_renewal_cron_worker.rb | 2 +- .../pages_domain_ssl_renewal_worker.rb | 2 +- .../pages_domain_verification_cron_worker.rb | 2 +- .../pages_domain_verification_worker.rb | 2 +- app/workers/pages_worker.rb | 2 +- .../personal_access_tokens/expiring_worker.rb | 2 +- app/workers/pipeline_hooks_worker.rb | 4 +- app/workers/pipeline_metrics_worker.rb | 4 +- app/workers/pipeline_notification_worker.rb | 18 +- app/workers/pipeline_process_worker.rb | 4 +- app/workers/pipeline_schedule_worker.rb | 2 +- app/workers/pipeline_success_worker.rb | 4 +- .../pipeline_update_ci_ref_status_worker.rb | 17 + app/workers/pipeline_update_worker.rb | 4 +- app/workers/post_receive.rb | 73 +- app/workers/process_commit_worker.rb | 18 +- app/workers/project_cache_worker.rb | 4 +- .../project_daily_statistics_worker.rb | 2 +- app/workers/project_destroy_worker.rb | 2 +- app/workers/project_export_worker.rb | 11 +- app/workers/project_service_worker.rb | 2 +- ...roject_update_repository_storage_worker.rb | 13 + .../propagate_service_template_worker.rb | 2 +- app/workers/prune_old_events_worker.rb | 4 +- app/workers/prune_web_hook_logs_worker.rb | 2 +- app/workers/reactive_caching_worker.rb | 8 +- app/workers/rebase_worker.rb | 2 +- .../remote_mirror_notification_worker.rb | 2 +- .../remove_expired_group_links_worker.rb | 2 +- app/workers/remove_expired_members_worker.rb | 2 +- .../remove_unreferenced_lfs_objects_worker.rb | 2 +- .../repository_archive_cache_worker.rb | 2 +- app/workers/repository_check/batch_worker.rb | 2 +- app/workers/repository_check/clear_worker.rb | 2 +- .../repository_check/dispatch_worker.rb | 2 +- .../single_repository_worker.rb | 2 +- app/workers/repository_cleanup_worker.rb | 2 +- app/workers/repository_fork_worker.rb | 30 +- app/workers/repository_import_worker.rb | 2 +- .../repository_remove_remote_worker.rb | 2 +- .../repository_update_remote_mirror_worker.rb | 2 +- app/workers/requests_profiles_worker.rb | 2 +- app/workers/run_pipeline_schedule_worker.rb | 2 +- .../schedule_migrate_external_diffs_worker.rb | 2 +- .../self_monitoring_project_create_worker.rb | 2 +- .../self_monitoring_project_delete_worker.rb | 2 +- app/workers/stage_update_worker.rb | 4 +- app/workers/stuck_ci_jobs_worker.rb | 2 +- app/workers/stuck_export_jobs_worker.rb | 54 + app/workers/stuck_import_jobs_worker.rb | 2 +- app/workers/stuck_merge_jobs_worker.rb | 2 +- app/workers/system_hook_push_worker.rb | 2 +- .../confidential_issue_worker.rb | 2 +- .../todos_destroyer/entity_leave_worker.rb | 2 +- .../todos_destroyer/group_private_worker.rb | 2 +- .../private_features_worker.rb | 2 +- .../todos_destroyer/project_private_worker.rb | 2 +- app/workers/trending_projects_worker.rb | 2 +- .../update_external_pull_requests_worker.rb | 2 +- ..._head_pipeline_for_merge_request_worker.rb | 4 +- app/workers/update_merge_requests_worker.rb | 20 +- .../update_project_statistics_worker.rb | 2 +- app/workers/upload_checksum_worker.rb | 2 +- .../wait_for_cluster_creation_worker.rb | 2 +- app/workers/web_hook_worker.rb | 2 +- app/workers/x509_certificate_revoke_worker.rb | 17 + babel.config.js | 2 - bin/actioncable | 63 + bin/background_jobs | 92 +- bin/background_jobs_sk | 67 + bin/background_jobs_sk_cluster | 76 + bin/mail_room | 2 +- bin/sidekiq-cluster | 19 + cable/config.ru | 6 + config/application.rb | 17 +- config/environments/development.rb | 15 + config/environments/test.rb | 5 + config/feature_categories.yml | 17 +- config/gitlab.yml.example | 11 +- .../initializers/0_eager_load_http_cookie.rb | 10 + config/initializers/0_license.rb | 20 +- config/initializers/1_settings.rb | 23 +- config/initializers/5_backend.rb | 2 +- config/initializers/8_devise.rb | 6 +- config/initializers/9_fast_gettext.rb | 7 - config/initializers/actioncable.rb | 8 + .../active_record_force_reconnects.rb | 7 + .../initializers/active_record_lifecycle.rb | 2 + config/initializers/console_message.rb | 2 +- config/initializers/graphql.rb | 6 - config/initializers/lograge.rb | 34 +- config/initializers/omniauth.rb | 8 +- config/initializers/sidekiq.rb | 27 +- config/initializers/sidekiq_cluster.rb | 2 +- config/initializers/tracing.rb | 16 - .../000_inflections.rb} | 1 + .../001_fast_gettext.rb | 8 + .../100_patch_omniauth_saml.rb | 5 +- config/locales/carrierwave.en.yml | 4 +- config/locales/en.yml | 2 + config/prometheus/common_metrics.yml | 142 +- .../puma_actioncable.example.development.rb | 88 + config/routes.rb | 11 +- config/routes/admin.rb | 7 +- config/routes/git_http.rb | 8 + config/routes/group.rb | 7 + config/routes/import.rb | 1 + config/routes/merge_requests.rb | 1 + config/routes/project.rb | 34 +- config/routes/user.rb | 4 +- config/settings.rb | 9 +- config/sidekiq_queues.yml | 10 + config/webpack.config.js | 68 +- config/webpack.vendor.config.js | 3 + danger/database/Dangerfile | 3 + danger/gemfile/Dangerfile | 36 - danger/karma/Dangerfile | 50 + danger/metadata/Dangerfile | 3 +- danger/telemetry/Dangerfile | 19 + db/fixtures/development/11_keys.rb | 6 +- ...20180305144721_add_privileged_to_runner.rb | 2 +- ...d_pages_access_level_to_project_feature.rb | 2 +- ...0529093006_ensure_remote_mirror_columns.rb | 2 +- ..._deploy_strategy_to_project_auto_devops.rb | 2 +- ...164905_add_common_to_prometheus_metrics.rb | 2 +- ...dd_legacy_abac_to_cluster_providers_gcp.rb | 2 +- ...1017001059_add_cluster_type_to_clusters.rb | 2 +- ...190218134158_add_masked_to_ci_variables.rb | 2 +- ...134209_add_masked_to_ci_group_variables.rb | 2 +- ...ooter_enabled_flag_to_appearances_table.rb | 2 +- ...add_multi_line_attributes_to_suggestion.rb | 2 - ...30_add_auto_ssl_enabled_to_pages_domain.rb | 2 +- .../20190325165127_add_managed_to_cluster.rb | 2 +- ...30217_add_variable_type_to_ci_variables.rb | 2 +- ...d_merge_train_enabled_to_ci_cd_settings.rb | 2 - ...add_variable_type_to_ci_group_variables.rb | 2 +- ..._type_to_ci_pipeline_schedule_variables.rb | 2 +- ...80107_add_deployment_events_to_services.rb | 2 +- ...o_approval_merge_request_approval_rules.rb | 2 +- ...90607085356_add_source_to_pages_domains.rb | 2 +- ...egies_to_operations_feature_flag_scopes.rb | 2 +- ...add_rule_type_to_approval_project_rules.rb | 2 +- ...espace_per_environment_flag_to_clusters.rb | 2 +- ...819_add_object_storage_flag_to_geo_node.rb | 2 +- ...de_owner_approval_to_protected_branches.rb | 2 +- ...16151221_add_active_jobs_limit_to_plans.rb | 2 +- ...90901174200_add_max_issue_count_to_list.rb | 2 +- ...add_cloud_run_to_clusters_providers_gcp.rb | 2 +- ...whitespace_in_diffs_to_user_preferences.rb | 2 +- ...918104731_add_cleanup_status_to_cluster.rb | 2 +- db/migrate/20191001170300_create_ci_ref.rb | 19 + ...ion_delivered_to_personal_access_tokens.rb | 2 +- ...3093207_add_comment_actions_to_services.rb | 2 +- ...1028130054_add_max_issue_weight_to_list.rb | 2 +- ...901_add_enabled_to_grafana_integrations.rb | 2 +- .../20191105155113_add_secret_to_snippet.rb | 2 +- ...0191106144901_add_state_to_merge_trains.rb | 2 +- ...fixed_pipeline_to_notification_settings.rb | 9 + ...12090226_add_artifacts_to_ci_build_need.rb | 2 +- ..._not_null_in_design_management_versions.rb | 15 + .../20191121193110_add_issue_links_type.rb | 2 +- ...6_add_dismissable_to_broadcast_messages.rb | 9 + ..._confidential_to_doorkeeper_application.rb | 2 +- ...ldcard_and_domain_type_to_pages_domains.rb | 2 - ...add_broadcast_type_to_broadcast_message.rb | 2 +- ...e_to_design_management_designs_versions.rb | 9 + ...4915_add_repository_storage_to_snippets.rb | 2 +- ...8125015_add_storage_version_to_snippets.rb | 2 +- ...d_environment_name_to_ci_build_metadata.rb | 13 + ..._add_deploy_token_type_to_deploy_tokens.rb | 2 +- ...200128184209_add_usage_to_pages_domains.rb | 2 +- ...d_to_design_management_designs_versions.rb | 9 + ...lock_version_to_zero_for_merge_requests.rb | 8 +- ...default_lock_version_to_zero_for_issues.rb | 8 +- ..._default_lock_version_to_zero_for_epics.rb | 8 +- ...ault_lock_version_to_zero_for_ci_builds.rb | 8 +- ...ault_lock_version_to_zero_for_ci_stages.rb | 8 +- ...t_lock_version_to_zero_for_ci_pipelines.rb | 8 +- ...hange_saml_provider_outer_forks_default.rb | 15 + ...default_branch_protection_to_namespaces.rb | 19 + ..._add_auto_renew_to_gitlab_subscriptions.rb | 10 + ...ure_flag_to_instance_security_dashboard.rb | 25 + ...12133945_add_group_hooks_to_plan_limits.rb | 9 + ...12134201_insert_group_hooks_plan_limits.rb | 23 + ...il_restrictions_to_application_settings.rb | 15 + ...ests_forwarding_to_application_settings.rb | 20 + ...0215222507_drop_forked_project_links_fk.rb | 27 + ...5225103_drop_forked_project_links_table.rb | 17 + ...219105209_add_filepath_to_release_links.rb | 8 + ...ronment_id_to_deployment_merge_requests.rb | 9 + ...ment_id_fk_to_deployment_merge_requests.rb | 17 + ...d_uniq_idx_to_deployment_merge_requests.rb | 17 + .../20200220180944_add_keep_divergent_refs.rb | 11 + ...dex_on_pages_domain_on_domain_lowercase.rb | 19 + ...074028_add_mr_metrics_first_approved_at.rb | 13 + .../20200221100514_create_users_statistics.rb | 19 + ...npm_package_requests_forwarding_default.rb | 17 + ...ate_prometheus_services_background_jobs.rb | 26 + ...20200222055543_add_confidential_to_note.rb | 18 + ...20200224020219_add_status_page_settings.rb | 18 + ...3804_add_version_to_feature_flags_table.rb | 21 + ...dd_project_subscriptions_to_plan_limits.rb | 9 + ...index_for_group_and_iid_search_to_epics.rb | 22 + ...nsert_project_subscriptions_plan_limits.rb | 25 + .../20200226100614_create_requirements.rb | 28 + ...00226100624_requirements_add_project_fk.rb | 19 + ...200226100634_requirements_add_author_fk.rb | 19 + ...d_at_to_dismissed_at_in_vulnerabilities.rb | 17 + ...d_by_to_dismissed_by_in_vulnerabilities.rb | 17 + .../20200227164113_create_scim_identities.rb | 18 + .../20200227165129_create_user_details.rb | 24 + ...200228160542_create_ci_sources_projects.rb | 17 + .../20200303055348_add_expires_at_to_keys.rb | 9 + ...074328_add_index_on_snippet_description.rb | 18 + db/migrate/20200304085423_add_user_type.rb | 21 + .../20200304090155_add_user_type_index.rb | 17 + ...ci_sources_project_pipeline_foreign_key.rb | 19 + ...rces_project_source_project_foreign_key.rb | 19 + ...04160800_add_index_services_on_template.rb | 19 + ...te_template_services_duplicated_by_type.rb | 25 + ...dex_to_service_unique_template_per_type.rb | 17 + ...rge_request_metrics_first_reassigned_at.rb | 19 + ...151736_delete_template_project_services.rb | 19 + ...4_add_merge_request_assignee_created_at.rb | 19 + ...x_on_author_id_and_created_at_to_events.rb | 17 + ...thor_id_and_id_and_created_at_to_issues.rb | 17 + ..._user_id_and_created_at_to_ci_pipelines.rb | 19 + ...ex_on_author_id_and_created_at_to_todos.rb | 16 + ...ndex_on_project_id_and_type_to_services.rb | 22 + ...n_creator_id_and_created_at_to_projects.rb | 22 + ...sitory_access_level_to_project_features.rb | 18 + ...309162244_add_open_project_tracker_data.rb | 23 + ...builds_access_level_to_project_features.rb | 18 + ...d_creator_id_and_created_at_to_projects.rb | 18 + ...ed_and_provider_type_and_id_to_clusters.rb | 19 + ...20200310132654_add_instance_to_services.rb | 17 + ...uthor_id_and_id_and_created_at_to_notes.rb | 19 + ...dex_to_service_unique_instance_per_type.rb | 17 + ...add_runtime_created_to_ci_job_variables.rb | 19 + ...ser_id_status_created_at_to_deployments.rb | 17 + ...0200311093210_create_user_highest_roles.rb | 25 + ...d_index_on_id_and_status_to_deployments.rb | 17 + ...dd_ci_pipeline_schedules_to_plan_limits.rb | 17 + ...nsert_ci_pipeline_schedules_plan_limits.rb | 25 + ...200311165635_create_project_export_jobs.rb | 19 + ...id_and_service_desk_enabled_to_projects.rb | 18 + ...rce_type_ldap_and_created_at_to_members.rb | 18 + ...at_link_enabled_to_application_settings.rb | 20 + ...ve_storage_version_column_from_snippets.rb | 2 +- ...831_migrate_design_notes_mentions_to_db.rb | 61 + ...temporary_index_for_notes_with_mentions.rb | 29 + ...3510_cleanup_empty_commit_user_mentions.rb | 28 + ...110_migrate_commit_notes_mentions_to_db.rb | 37 + ...210353_cleanup_optimistic_locking_nulls.rb | 44 + ...00_cleanup_empty_merge_request_mentions.rb | 27 + ...orary_merge_request_with_mentions_index.rb | 20 + ...39_migrate_merge_request_mentions_to_db.rb | 35 + ..._remove_security_dashboard_feature_flag.rb | 25 + ...environment_for_self_monitoring_project.rb | 28 + ...dd_index_to_job_artifact_secure_reports.rb | 24 + ...7225719_schedule_migrate_security_scans.rb | 31 + ...200219183456_remove_issue_state_indexes.rb | 40 + ...4219_remove_merge_request_state_indexes.rb | 39 + ...20200219193058_remove_state_from_issues.rb | 30 + ...193117_remove_state_from_merge_requests.rb | 30 + ...remove_repository_storage_from_snippets.rb | 28 + ...nup_closed_at_rename_in_vulnerabilities.rb | 17 + ...nup_closed_by_rename_in_vulnerabilities.rb | 17 + ...40242_update_occurrence_severity_column.rb | 34 + ...52_update_vulnerability_severity_column.rb | 31 + ...e_file_type_from_packages_package_files.rb | 9 + ...5115_schedule_link_lfs_objects_projects.rb | 29 + ...8_remove_temporary_promoted_notes_index.rb | 22 + ...e_and_noteable_id_to_sent_notifications.rb | 21 + db/schema.rb | 228 +- derailed-benchmarks/.gitlab-ci.yml | 56 + derailed-benchmarks/CHANGELOG.md | 5 +- derailed-benchmarks/README.md | 2 + .../derailed_benchmarks.gemspec | 4 +- .../lib/derailed_benchmarks/stats_from_dir.rb | 27 +- .../lib/derailed_benchmarks/tasks.rb | 6 +- .../lib/derailed_benchmarks/version.rb | 2 +- .../stats_from_dir_test.rb | 16 - .../test/integration/tasks_test.rb | 2 +- .../vale/styles/gitlab/Contractions.yml | 76 - .../vale/styles/gitlab/LatinTerms.yml | 39 - .../vale/styles/gitlab/OxfordComma.yml | 6 - .../vale/styles/gitlab/SentenceSpacing.yml | 32 - .../vale/styles/gitlab/Substitutions.yml | 36 - doc/.vale/gitlab/Contractions.yml | 53 + doc/.vale/gitlab/FirstPerson.yml | 13 + doc/.vale/gitlab/InternalLinkExtension.yml | 11 + doc/.vale/gitlab/LatinTerms.yml | 17 + doc/.vale/gitlab/OxfordComma.yml | 11 + doc/.vale/gitlab/RelativeLinks.yml | 11 + doc/.vale/gitlab/SentenceSpacing.yml | 15 + doc/.vale/gitlab/Substitutions.yml | 13 + doc/README.md | 12 +- doc/administration/audit_events.md | 62 +- doc/administration/auth/README.md | 1 + doc/administration/auth/authentiq.md | 5 +- doc/administration/auth/cognito.md | 79 + doc/administration/auth/crowd.md | 2 +- .../how_to_configure_ldap_gitlab_ce/index.md | 6 +- doc/administration/auth/ldap-ee.md | 12 +- doc/administration/auth/ldap.md | 15 +- doc/administration/auth/oidc.md | 8 + doc/administration/auth/okta.md | 27 +- doc/administration/compliance.md | 3 +- .../background_verification.md | 16 +- .../geo/disaster_recovery/index.md | 10 +- .../geo/disaster_recovery/planned_failover.md | 22 +- .../geo/replication/configuration.md | 14 +- .../geo/replication/database.md | 4 +- .../geo/replication/datatypes.md | 59 +- .../geo/replication/docker_registry.md | 5 +- .../geo/replication/high_availability.md | 132 +- doc/administration/geo/replication/index.md | 8 +- .../geo/replication/location_aware_git_url.md | 2 +- .../geo/replication/object_storage.md | 2 +- .../geo/replication/remove_geo_node.md | 2 +- .../geo/replication/troubleshooting.md | 201 +- doc/administration/geo/replication/tuning.md | 4 +- .../geo/replication/updating_the_geo_nodes.md | 2 + .../replication/version_specific_updates.md | 16 +- doc/administration/git_annex.md | 18 +- doc/administration/git_protocol.md | 34 +- .../img/praefect_architecture_v12_9.png | Bin 0 -> 44098 bytes doc/administration/gitaly/index.md | 66 +- doc/administration/gitaly/praefect.md | 779 +- doc/administration/gitaly/reference.md | 2 +- .../high_availability/README.md | 345 +- .../high_availability/consul.md | 3 +- .../high_availability/database.md | 33 +- .../high_availability/gitaly.md | 9 +- .../high_availability/gitlab.md | 3 + .../high_availability/monitoring_node.md | 4 +- doc/administration/high_availability/nfs.md | 17 +- .../nfs_host_client_setup.md | 6 +- .../high_availability/object_storage.md | 32 + .../high_availability/pgbouncer.md | 2 +- doc/administration/high_availability/redis.md | 32 +- doc/administration/housekeeping.md | 4 +- doc/administration/incoming_email.md | 71 +- doc/administration/index.md | 11 +- doc/administration/instance_limits.md | 67 +- doc/administration/integration/plantuml.md | 12 +- doc/administration/job_artifacts.md | 29 +- doc/administration/lfs/lfs_administration.md | 8 +- .../lfs/manage_large_binaries_with_git_lfs.md | 4 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 2 +- doc/administration/libravatar.md | 4 +- doc/administration/logs.md | 241 +- .../gitlab_self_monitoring_project/index.md | 39 +- .../performance/grafana_configuration.md | 9 +- .../performance/influxdb_configuration.md | 2 +- .../monitoring/prometheus/gitlab_metrics.md | 20 +- .../monitoring/prometheus/index.md | 44 +- .../operations/extra_sidekiq_processes.md | 54 +- .../operations/fast_ssh_key_lookup.md | 6 +- doc/administration/operations/puma.md | 4 +- .../operations/ssh_certificates.md | 8 +- doc/administration/operations/unicorn.md | 18 +- .../packages/container_registry.md | 12 +- .../packages/dependency_proxy.md | 7 +- doc/administration/packages/index.md | 3 + doc/administration/pages/index.md | 61 +- doc/administration/raketasks/maintenance.md | 1 + .../raketasks/uploads/migrate.md | 5 + .../reply_by_email_postfix_setup.md | 14 +- .../repository_storage_paths.md | 4 +- doc/administration/restart_gitlab.md | 10 +- doc/administration/server_hooks.md | 5 +- doc/administration/snippets/index.md | 2 +- .../static_objects_external_storage.md | 177 +- doc/administration/troubleshooting/debug.md | 20 +- .../troubleshooting/gdb-stuck-ruby.txt | 6 +- .../gitlab_rails_cheat_sheet.md | 59 +- .../img/AzureAD-basic_SAML.png | Bin 137104 -> 30365 bytes .../troubleshooting/img/AzureAD-claims.png | Bin 55574 -> 14213 bytes .../img/OneLogin-SSOsettings.png | Bin 85242 -> 25397 bytes .../img/OneLogin-app_details.png | Bin 61390 -> 18305 bytes .../img/OneLogin-encryption.png | Bin 34245 -> 9980 bytes .../img/OneLogin-parameters.png | Bin 17139 -> 5051 bytes .../troubleshooting/img/OneLogin-userAdd.png | Bin 32711 -> 10021 bytes .../troubleshooting/kubernetes_cheat_sheet.md | 14 +- .../troubleshooting/postgresql.md | 6 +- doc/administration/troubleshooting/sidekiq.md | 40 +- doc/administration/uploads.md | 4 +- doc/api/README.md | 22 +- doc/api/admin_sidekiq_queues.md | 47 + doc/api/api_resources.md | 71 +- doc/api/appearance.md | 4 +- doc/api/audit_events.md | 18 +- doc/api/boards.md | 20 +- doc/api/broadcast_messages.md | 48 +- doc/api/commits.md | 72 +- doc/api/container_registry.md | 32 +- doc/api/custom_attributes.md | 8 +- doc/api/dependencies.md | 2 +- doc/api/deploy_keys.md | 12 +- doc/api/deploy_tokens.md | 238 + doc/api/deployments.md | 10 +- doc/api/discussions.md | 62 +- doc/api/environments.md | 12 +- doc/api/epic_issues.md | 22 +- doc/api/epic_links.md | 10 +- doc/api/epics.md | 20 +- doc/api/error_tracking.md | 4 +- doc/api/events.md | 8 +- doc/api/feature_flag_specs.md | 12 +- doc/api/feature_flags.md | 8 +- doc/api/features.md | 6 +- doc/api/geo_nodes.md | 18 +- .../graphql/reference/gitlab_schema.graphql | 804 +- doc/api/graphql/reference/gitlab_schema.json | 39354 ++++++++-------- doc/api/graphql/reference/index.md | 136 +- doc/api/group_activity_analytics.md | 55 + doc/api/group_badges.md | 12 +- doc/api/group_boards.md | 20 +- doc/api/group_clusters.md | 41 +- doc/api/group_import_export.md | 39 +- doc/api/group_labels.md | 14 +- doc/api/group_level_variables.md | 42 +- doc/api/group_milestones.md | 16 +- doc/api/groups.md | 73 +- doc/api/import.md | 2 +- doc/api/issue_links.md | 6 +- doc/api/issues.md | 65 +- doc/api/issues_statistics.md | 12 +- doc/api/jobs.md | 28 +- doc/api/keys.md | 2 + doc/api/labels.md | 16 +- doc/api/license.md | 8 +- doc/api/lint.md | 2 +- doc/api/managed_licenses.md | 10 +- doc/api/markdown.md | 4 +- doc/api/members.md | 53 +- doc/api/merge_request_approvals.md | 34 +- doc/api/merge_request_context_commits.md | 28 +- doc/api/merge_requests.md | 84 +- doc/api/merge_trains.md | 80 + doc/api/milestones.md | 18 +- doc/api/namespaces.md | 6 +- doc/api/notes.md | 40 +- doc/api/notification_settings.md | 14 +- doc/api/oauth2.md | 49 +- doc/api/packages.md | 21 +- doc/api/pipeline_schedules.md | 22 +- doc/api/pipeline_triggers.md | 20 +- doc/api/pipelines.md | 30 +- doc/api/project_aliases.md | 18 +- doc/api/project_badges.md | 12 +- doc/api/project_clusters.md | 38 +- doc/api/project_import_export.md | 16 +- doc/api/project_level_variables.md | 20 +- doc/api/project_snippets.md | 18 +- doc/api/project_statistics.md | 2 +- doc/api/project_templates.md | 5 +- doc/api/projects.md | 91 +- doc/api/protected_branches.md | 12 +- doc/api/protected_environments.md | 18 +- doc/api/protected_tags.md | 10 +- doc/api/releases/index.md | 66 +- doc/api/releases/links.md | 10 +- doc/api/remote_mirrors.md | 121 + doc/api/repositories.md | 42 +- doc/api/repository_files.md | 24 +- doc/api/repository_submodules.md | 2 +- doc/api/resource_label_events.md | 14 +- doc/api/runners.md | 48 +- doc/api/scim.md | 4 +- doc/api/search.md | 8 +- doc/api/services.md | 212 +- doc/api/settings.md | 22 +- doc/api/sidekiq_metrics.md | 8 +- doc/api/statistics.md | 2 +- doc/api/suggestions.md | 2 +- doc/api/system_hooks.md | 8 +- doc/api/tags.md | 12 +- doc/api/templates/dockerfiles.md | 4 +- doc/api/templates/licenses.md | 4 +- doc/api/todos.md | 6 +- doc/api/users.md | 290 +- doc/api/version.md | 2 +- doc/api/visual_review_discussions.md | 2 +- doc/api/vulnerability_findings.md | 7 +- doc/api/wikis.md | 12 +- doc/ci/README.md | 13 +- doc/ci/caching/index.md | 13 +- doc/ci/cloud_deployment/index.md | 58 + doc/ci/docker/using_docker_build.md | 20 +- doc/ci/docker/using_docker_images.md | 12 +- doc/ci/environments.md | 74 +- .../img/incremental_rollouts_play_v12_7.png | Bin 94182 -> 26784 bytes .../environments/img/timed_rollout_v12_7.png | Bin 73699 -> 24016 bytes .../deployment/composer-npm-deploy.md | 4 +- .../index.md | 8 +- .../end_to_end_testing_webdriverio/index.md | 2 +- .../laravel_with_gitlab_and_envoy/index.md | 6 +- doc/ci/examples/license_management.md | 4 +- doc/ci/examples/test-scala-application.md | 2 +- .../img/select_template_v12_6.png | Bin 51825 -> 32253 bytes .../img/set_up_ci_v12_6.png | Bin 93168 -> 57203 bytes doc/ci/img/collapsible_log_v12_6.png | Bin 96571 -> 0 bytes doc/ci/img/ecs_dashboard_v12_9.png | Bin 0 -> 109395 bytes doc/ci/img/environment_auto_stop_v12_8.png | Bin 43534 -> 16587 bytes .../environments_deployment_cluster_v12_8.png | Bin 0 -> 17704 bytes .../parent_pipeline_graph_expanded_v12_6.png | Bin 298902 -> 96087 bytes doc/ci/interactive_web_terminal/index.md | 2 +- doc/ci/introduction/index.md | 2 +- doc/ci/jenkins/index.md | 129 +- doc/ci/junit_test_reports.md | 12 +- doc/ci/large_repositories/index.md | 2 +- doc/ci/merge_request_pipelines/index.md | 4 +- .../pipelines_for_merged_results/index.md | 30 +- .../merge_trains/index.md | 16 +- doc/ci/multi_project_pipelines.md | 62 +- doc/ci/parent_child_pipelines.md | 63 +- doc/ci/pipelines.md | 549 +- .../pipelines/img/collapsible_log_v12_6.png | Bin 0 -> 96471 bytes .../pipelines/img/job_artifacts_browser.png | Bin .../img/job_artifacts_browser_button.png | Bin .../img/job_artifacts_builds_page.png | Bin .../img/job_artifacts_pipelines_page.png | Bin .../img/job_failure_reason.png | Bin .../img/job_latest_artifacts_browser.png | Bin .../img/manual_job_variables.png | Bin .../{ => pipelines}/img/pipeline-delete.png | Bin .../img/pipeline_incremental_rollout.png | Bin .../pipelines/img/pipeline_schedule_play.png | Bin .../img/pipeline_schedule_variables.png | Bin .../pipelines/img/pipeline_schedules_list.png | Bin .../img/pipeline_schedules_new_form.png | Bin .../img/pipeline_schedules_ownership.png | Bin doc/ci/{ => pipelines}/img/pipelines.png | Bin .../img/pipelines_duration_chart.png | Bin 0 -> 10587 bytes .../{ => pipelines}/img/pipelines_grouped.png | Bin .../{ => pipelines}/img/pipelines_index.png | Bin .../img/pipelines_mini_graph.png | Bin .../img/pipelines_mini_graph_simple.png | Bin .../img/pipelines_mini_graph_sorting.png | Bin .../img/pipelines_settings_badges.png | Bin .../img/pipelines_settings_test_coverage.png | Bin .../pipelines/img/pipelines_success_chart.png | Bin 0 -> 23249 bytes .../img/pipelines_test_coverage_build.png | Bin .../img/pipelines_test_coverage_mr_widget.png | Bin doc/ci/pipelines/index.md | 567 + doc/ci/pipelines/job_artifacts.md | 215 + doc/ci/pipelines/pipeline_architectures.md | 269 + doc/ci/pipelines/schedules.md | 142 + doc/ci/pipelines/settings.md | 309 + doc/ci/quick_start/README.md | 7 +- .../img/enable_review_app_v12_8.png | Bin 46424 -> 14013 bytes doc/ci/review_apps/index.md | 6 +- doc/ci/runners/README.md | 14 +- doc/ci/services/postgres.md | 15 +- doc/ci/services/redis.md | 2 +- doc/ci/ssh_keys/README.md | 2 +- doc/ci/triggers/README.md | 6 +- doc/ci/variables/README.md | 34 +- .../img/new_custom_variables_example.png | Bin 68252 -> 0 bytes doc/ci/variables/predefined_variables.md | 5 +- doc/ci/yaml/README.md | 271 +- doc/development/README.md | 31 +- doc/development/adding_database_indexes.md | 2 +- doc/development/api_graphql_styleguide.md | 72 +- doc/development/api_styleguide.md | 8 + doc/development/application_limits.md | 73 +- doc/development/architecture.md | 16 +- doc/development/background_migrations.md | 18 +- doc/development/chaos_endpoints.md | 10 +- doc/development/code_comments.md | 2 +- doc/development/code_review.md | 141 +- doc/development/contributing/design.md | 8 +- .../contributing/issue_workflow.md | 47 +- .../contributing/merge_request_workflow.md | 1 + doc/development/contributing/style_guides.md | 8 + doc/development/creating_enums.md | 2 +- doc/development/dangerbot.md | 22 +- .../add_foreign_key_to_existing_column.md | 136 + doc/development/database_debugging.md | 2 +- doc/development/database_review.md | 22 +- doc/development/db_dump.md | 8 +- doc/development/deleting_migrations.md | 2 +- doc/development/documentation/index.md | 72 +- .../documentation/site_architecture/index.md | 46 +- .../site_architecture/release_process.md | 16 +- doc/development/documentation/structure.md | 2 +- doc/development/documentation/styleguide.md | 199 +- doc/development/documentation/workflow.md | 148 +- doc/development/elasticsearch.md | 2 +- doc/development/event_tracking/backend.md | 37 +- doc/development/event_tracking/frontend.md | 146 +- doc/development/event_tracking/index.md | 75 +- doc/development/experiment_guide/index.md | 4 +- doc/development/fe_guide/dependencies.md | 40 + .../fe_guide/development_process.md | 4 +- doc/development/fe_guide/event_tracking.md | 4 +- doc/development/fe_guide/graphql.md | 130 +- doc/development/fe_guide/icons.md | 2 +- doc/development/fe_guide/index.md | 46 +- doc/development/fe_guide/principles.md | 4 +- doc/development/fe_guide/style/javascript.md | 15 + doc/development/fe_guide/vuex.md | 11 +- doc/development/feature_flags/controls.md | 2 +- doc/development/feature_flags/process.md | 9 +- doc/development/file_storage.md | 4 +- doc/development/geo.md | 5 + doc/development/geo/framework.md | 209 + doc/development/gitaly.md | 8 +- doc/development/github_importer.md | 30 +- doc/development/go_guide/index.md | 4 +- doc/development/i18n/proofreader.md | 1 + .../img/reference_architecture.png | Bin 112468 -> 44285 bytes doc/development/import_export.md | 47 +- doc/development/import_project.md | 18 +- .../insert_into_tables_in_batches.md | 196 + doc/development/instrumentation.md | 4 +- doc/development/integrations/jira_connect.md | 2 - doc/development/integrations/secure.md | 11 +- .../secure_partner_integration.md | 103 + doc/development/issuable-like-models.md | 6 +- doc/development/kubernetes.md | 2 +- doc/development/licensing.md | 5 +- doc/development/logging.md | 61 +- doc/development/mass_insert.md | 2 +- .../merge_request_performance_guidelines.md | 177 +- doc/development/migration_style_guide.md | 88 +- .../module_with_instance_variables.md | 4 +- .../namespaces_storage_statistics.md | 6 +- .../new_fe_guide/development/accessibility.md | 2 +- doc/development/new_fe_guide/index.md | 2 +- doc/development/packages.md | 177 +- doc/development/performance.md | 54 +- doc/development/permissions.md | 4 +- doc/development/pipelines.md | 264 +- doc/development/profiling.md | 13 + doc/development/prometheus_metrics.md | 5 +- doc/development/query_recorder.md | 104 +- doc/development/rails_initializers.md | 16 + doc/development/redis.md | 2 +- doc/development/reference_processing.md | 157 + doc/development/scalability.md | 2 +- doc/development/serializing_data.md | 2 +- doc/development/shell_commands.md | 2 +- doc/development/sidekiq_debugging.md | 19 +- doc/development/sidekiq_style_guide.md | 128 +- .../testing_guide/best_practices.md | 7 + .../end_to_end/best_practices.md | 2 +- .../testing_guide/end_to_end/index.md | 26 + .../end_to_end/quick_start_guide.md | 17 +- .../end_to_end/rspec_metadata_tests.md | 15 + ...unning_tests_that_require_special_setup.md | 50 + doc/development/testing_guide/flaky_tests.md | 6 +- .../testing_guide/frontend_testing.md | 6 +- doc/development/testing_guide/review_apps.md | 93 +- .../testing_guide/testing_levels.md | 6 +- .../testing_guide/testing_migrations_guide.md | 14 +- doc/development/what_requires_downtime.md | 5 +- doc/gitlab-basics/create-your-ssh-keys.md | 7 +- .../aws/img/aws_ha_architecture_diagram.png | Bin 133747 -> 40323 bytes doc/install/aws/index.md | 171 +- doc/install/installation.md | 38 +- doc/install/requirements.md | 34 +- doc/integration/bitbucket.md | 5 +- doc/integration/elasticsearch.md | 34 +- .../img/jira_dev_panel_jira_setup_1-1.png | Bin 45848 -> 13286 bytes .../img/jira_dev_panel_setup_com_1.png | Bin 0 -> 15392 bytes .../img/jira_dev_panel_setup_com_2.png | Bin 0 -> 22370 bytes .../img/jira_dev_panel_setup_com_3.png | Bin 0 -> 7639 bytes doc/integration/jira_development_panel.md | 54 +- doc/integration/kerberos.md | 3 +- doc/integration/omniauth.md | 6 +- doc/integration/saml.md | 15 +- doc/integration/shibboleth.md | 13 +- doc/integration/sourcegraph.md | 4 +- doc/integration/twitter.md | 2 +- doc/integration/ultra_auth.md | 2 +- doc/integration/vault.md | 137 +- ...corporate_contributor_license_agreement.md | 2 +- doc/policy/maintenance.md | 22 +- doc/raketasks/backup_restore.md | 45 +- doc/raketasks/cleanup.md | 13 +- doc/raketasks/features.md | 2 +- .../generate_sample_prometheus_data.md | 2 +- doc/raketasks/import.md | 12 +- doc/raketasks/list_repos.md | 4 +- doc/raketasks/user_management.md | 8 +- doc/security/crime_vulnerability.md | 2 +- doc/security/rack_attack.md | 6 +- doc/security/unlock_user.md | 4 +- doc/security/webhooks.md | 13 +- doc/ssh/README.md | 56 +- doc/subscriptions/index.md | 510 +- doc/system_hooks/system_hooks.md | 20 +- doc/telemetry/backend.md | 34 + doc/telemetry/frontend.md | 167 + doc/telemetry/index.md | 72 + doc/topics/airgap/index.md | 10 + .../application_development_platform/index.md | 2 +- doc/topics/autodevops/index.md | 115 +- doc/topics/autodevops/quick_start_guide.md | 2 +- doc/topics/autodevops/upgrading_postgresql.md | 239 + .../index.md | 6 +- doc/topics/git/troubleshooting_git.md | 27 +- .../img/guide_waf_ingress_installation.png | Bin 54834 -> 0 bytes .../guide_waf_ingress_installation_v12_9.png | Bin 0 -> 24830 bytes .../guide_waf_ingress_save_changes_v12_9.png | Bin 0 -> 37120 bytes doc/topics/web_application_firewall/index.md | 2 +- .../quick_start_guide.md | 77 +- doc/university/training/topics/subtree.md | 8 +- doc/update/README.md | 21 +- doc/update/mysql_to_postgresql.md | 16 +- doc/update/patch_versions.md | 2 +- doc/update/restore_after_failure.md | 10 +- doc/update/upgrading_from_ce_to_ee.md | 2 +- .../activating_deactivating_users.md | 4 +- doc/user/admin_area/appearance.md | 4 +- .../admin_area/blocking_unblocking_users.md | 4 +- doc/user/admin_area/broadcast_messages.md | 2 +- doc/user/admin_area/index.md | 56 +- .../settings/account_and_limit_settings.md | 2 +- .../settings/continuous_integration.md | 19 +- .../admin_area/settings/gitaly_timeouts.md | 34 + ..._registry_npm_package_requests_forward.png | Bin 0 -> 28630 bytes .../settings/img/gitaly_timeouts.png | Bin 0 -> 24654 bytes doc/user/admin_area/settings/index.md | 1 + .../admin_area/settings/usage_statistics.md | 295 + .../visibility_and_access_controls.md | 2 + .../img/code_review_analytics_v12_8.png | Bin 110305 -> 40082 bytes .../img/label_based_stage_vsm_v12_9.png | Bin 0 -> 26700 bytes .../analytics/img/new_vsm_stage_v12_9.png | Bin 0 -> 15154 bytes .../analytics/img/vsm_stage_list_v12_9.png | Bin 0 -> 28784 bytes doc/user/analytics/productivity_analytics.md | 6 +- doc/user/analytics/value_stream_analytics.md | 71 +- .../compliance_dashboard/index.md | 30 +- .../configuration/index.md | 4 +- .../img/container_scanning.png | Bin 32549 -> 0 bytes .../img/container_scanning_v12_9.png | Bin 0 -> 73869 bytes .../container_scanning/index.md | 204 +- .../dast/img/dast_all.png | Bin 25844 -> 0 bytes .../dast/img/dast_all_v12_9.png | Bin 0 -> 39268 bytes .../dast/img/dast_single.png | Bin 69353 -> 0 bytes .../dast/img/dast_single_v12_9.png | Bin 0 -> 96419 bytes doc/user/application_security/dast/index.md | 39 +- .../dependency_list/index.md | 4 +- .../dependency_scanning/index.md | 68 +- .../img/multi_select_v12_9.png | Bin 0 -> 32804 bytes .../img/outdated_report_branch_v12_9.png | Bin 0 -> 15172 bytes .../img/outdated_report_pipeline_v12_9.png | Bin 0 -> 16694 bytes .../img/security_configuration_page_v12_6.png | Bin 68210 -> 0 bytes .../img/security_configuration_page_v12_9.png | Bin 0 -> 51545 bytes doc/user/application_security/index.md | 90 +- .../license_compliance/index.md | 325 +- .../license_management/index.md | 4 +- .../offline_deployments/index.md | 55 + .../application_security/sast/img/sast.png | Bin 24876 -> 0 bytes .../sast/img/sast_v12_9.png | Bin 0 -> 40172 bytes doc/user/application_security/sast/index.md | 87 +- .../security_dashboard/index.md | 4 +- doc/user/asciidoc.md | 4 +- doc/user/clusters/applications.md | 300 +- doc/user/clusters/crossplane.md | 64 +- .../clusters/img/threat_monitoring_v12_9.png | Bin 0 -> 53242 bytes .../img/compliance_dashboard_v12_8.png | Bin .../compliance/compliance_dashboard/index.md | 31 + doc/user/compliance/index.md | 10 + .../img/license_compliance.png | Bin .../license_compliance_add_license_v12_3.png | Bin .../img/license_compliance_decision.png | Bin .../license_compliance_pipeline_tab_v12_3.png | Bin .../img/license_compliance_search_v12_3.png | Bin .../img/license_compliance_settings_v12_3.png | Bin .../img/license_list_v12_6.png | Bin .../img/policies_maintainer_add_v12_9.png | Bin 0 -> 22423 bytes .../img/policies_maintainer_edit_v12_9.png | Bin 0 -> 35281 bytes .../license_compliance/img/policies_v12_9.png | Bin 0 -> 66698 bytes .../compliance/license_compliance/index.md | 342 + .../suggestion_code_block_output_v12_8.png | Bin 29769 -> 15870 bytes doc/user/gitlab_com/index.md | 40 +- .../epics/img/epic_view_roadmap_v12.3.png | Bin 50491 -> 0 bytes .../epics/img/epic_view_roadmap_v12_9.png | Bin 0 -> 127201 bytes doc/user/group/epics/index.md | 60 +- doc/user/group/index.md | 20 +- .../img/issues_created_per_month_v12_8.png | Bin 66854 -> 26718 bytes doc/user/group/issues_analytics/index.md | 5 +- doc/user/group/roadmap/img/roadmap_view.png | Bin 49757 -> 0 bytes .../group/roadmap/img/roadmap_view_v12_9.png | Bin 0 -> 118218 bytes doc/user/group/roadmap/index.md | 21 +- doc/user/group/saml_sso/index.md | 84 +- doc/user/group/subgroups/index.md | 5 +- .../markdown_copy_from_spreadsheet_v12_7.png | Bin 371532 -> 180083 bytes doc/user/img/markdown_paste_table_v12_7.png | Bin 153855 -> 89728 bytes doc/user/incident_management/index.md | 11 +- doc/user/index.md | 2 +- doc/user/instance_statistics/user_cohorts.md | 2 +- doc/user/markdown.md | 117 +- doc/user/packages/conan_repository/index.md | 4 +- .../img/expiration-policy-app.png | Bin 93286 -> 32054 bytes doc/user/packages/index.md | 2 +- doc/user/packages/maven_repository/index.md | 10 +- doc/user/packages/npm_registry/index.md | 22 +- .../img/visual_studio_adding_nuget_source.png | Bin 115238 -> 36730 bytes .../img/visual_studio_nuget_source_added.png | Bin 75079 -> 23888 bytes doc/user/packages/nuget_repository/index.md | 151 +- doc/user/packages/workflows/monorepo.md | 6 +- doc/user/permissions.md | 52 +- .../account/two_factor_authentication.md | 22 +- doc/user/profile/notifications.md | 28 +- doc/user/project/badges.md | 6 +- .../project/clusters/add_remove_clusters.md | 2 +- .../img/kubernetes_pod_logs_v12_8.png | Bin 152582 -> 0 bytes .../img/kubernetes_pod_logs_v12_9.png | Bin 0 -> 117938 bytes doc/user/project/clusters/index.md | 30 +- .../project/clusters/kubernetes_pod_logs.md | 23 +- doc/user/project/clusters/serverless/aws.md | 279 +- .../clusters/serverless/img/deploy-stage.png | Bin 5036 -> 0 bytes .../serverless/img/function-list_v12_7.png | Bin 0 -> 18551 bytes .../clusters/serverless/img/knative-app.png | Bin 9440 -> 0 bytes .../serverless/img/sam-api-endpoint.png | Bin 0 -> 29991 bytes .../serverless/img/sam-complete-raw.png | Bin 0 -> 38847 bytes doc/user/project/clusters/serverless/index.md | 64 +- doc/user/project/code_owners.md | 14 +- doc/user/project/deploy_tokens/index.md | 36 +- doc/user/project/description_templates.md | 2 +- .../img/deploy_boards_landing_page.png | Bin 43047 -> 14454 bytes .../img/issue_boards_blocked_icon_v12_8.png | Bin 66310 -> 31841 bytes ...ng => issue_boards_multi_select_v12_4.png} | Bin .../project/img/labels_key_value_v12_1.png | Bin 166480 -> 55495 bytes doc/user/project/import/bitbucket_server.md | 2 +- doc/user/project/import/gemnasium.md | 4 +- doc/user/project/import/github.md | 23 +- doc/user/project/import/index.md | 29 +- doc/user/project/index.md | 14 +- doc/user/project/insights/index.md | 17 + .../integrations/gitlab_slack_application.md | 8 +- doc/user/project/integrations/hipchat.md | 2 +- .../integrations/img/grafana_embedded.png | Bin 64082 -> 28071 bytes .../prometheus_cluster_health_embed_v12_9.png | Bin 0 -> 50178 bytes ...heus_dashboard_edit_metric_link_v_12_9.png | Bin 0 -> 29178 bytes ...eus_dashboard_label_variable_shorthand.png | Bin 0 -> 3897 bytes .../prometheus_dashboard_label_variables.png | Bin 0 -> 8076 bytes .../prometheus_dashboard_repeated_label.png | Bin 0 -> 3116 bytes doc/user/project/integrations/irker.md | 2 +- doc/user/project/integrations/jira.md | 10 +- doc/user/project/integrations/prometheus.md | 187 +- .../prometheus_library/kubernetes.md | 8 +- .../project/integrations/prometheus_units.md | 110 + doc/user/project/integrations/slack.md | 6 +- doc/user/project/integrations/webhooks.md | 29 +- doc/user/project/issue_board.md | 31 +- doc/user/project/issues/csv_import.md | 8 +- doc/user/project/issues/design_management.md | 50 +- .../design_drag_and_drop_uploads_v12_9.png | Bin 0 -> 402118 bytes .../issues/img/issue_health_status_v12_9.png | Bin 0 -> 10509 bytes .../issues/img/related_issue_block_v12_8.png | Bin 117786 -> 35817 bytes .../issues/img/related_issues_add_v12_8.png | Bin 105785 -> 32939 bytes .../img/related_issues_remove_v12_8.png | Bin 36051 -> 10708 bytes doc/user/project/issues/index.md | 45 +- .../project/issues/issue_data_and_actions.md | 8 +- doc/user/project/labels.md | 2 +- .../merge_requests/accessibility_testing.md | 57 + .../merge_requests/cherry_pick_changes.md | 14 + .../project/merge_requests/code_quality.md | 36 +- .../img/approvals_premium_mr_widget_v12_7.png | Bin 198351 -> 50214 bytes .../img/cherry_pick_mr_timeline_v12_9.png | Bin 0 -> 29557 bytes .../img/mr_approvals_by_code_owners_v12_7.png | Bin 88749 -> 25594 bytes .../img/scoped_to_protected_branch_v12_8.png | Bin 91714 -> 32970 bytes .../img/test_coverage_visualization_v12_9.png | Bin 0 -> 55119 bytes doc/user/project/merge_requests/index.md | 12 +- .../merge_requests/license_management.md | 4 +- .../reviewing_and_managing_merge_requests.md | 2 +- .../merge_requests/squash_and_merge.md | 3 + .../test_coverage_visualization.md | 78 + .../project/milestones/burndown_charts.md | 2 +- .../project/new_ci_build_permissions_model.md | 10 +- doc/user/project/operations/error_tracking.md | 4 +- .../ssl_tls_concepts.md | 2 +- .../new_or_existing_website.md | 2 +- doc/user/project/pages/index.md | 2 +- doc/user/project/pages/introduction.md | 2 +- doc/user/project/pipelines/job_artifacts.md | 213 +- doc/user/project/pipelines/schedules.md | 135 +- doc/user/project/pipelines/settings.md | 275 +- doc/user/project/protected_branches.md | 2 +- doc/user/project/push_options.md | 4 +- .../img/release_with_milestone_v12_9.png | Bin 0 -> 27783 bytes .../releases/img/releases_count_v12_8.png | Bin 92444 -> 27622 bytes .../project/releases/img/releases_v12_9.png | Bin 0 -> 51974 bytes .../releases/img/upcoming_release_v12_7.png | Bin 87736 -> 23246 bytes doc/user/project/releases/index.md | 93 +- .../project/repository/forking_workflow.md | 20 +- .../img/forking_workflow_fork_button.png | Bin 27407 -> 10365 bytes doc/user/project/repository/index.md | 2 +- .../repository/jupyter_notebooks/index.md | 2 +- .../reducing_the_repo_size_using_git.md | 2 +- .../repository/repository_mirroring.md | 5 + doc/user/project/repository/web_editor.md | 25 +- .../repository/x509_signed_commits/index.md | 2 +- doc/user/project/settings/import_export.md | 44 +- doc/user/project/settings/index.md | 14 +- .../web_ide/img/commit_changes_v12_3.png | Bin 196689 -> 0 bytes .../web_ide/img/commit_changes_v12_9.png | Bin 0 -> 681399 bytes doc/user/project/web_ide/index.md | 33 +- doc/user/project/wiki/index.md | 12 +- doc/user/reserved_names.md | 1 - doc/user/search/index.md | 3 +- doc/user/shortcuts.md | 2 +- .../migration/create_table_migration.rb | 2 +- .../active_record/migration/migration.rb | 5 +- .../post_deployment_migration/migration.rb | 5 +- jest.config.js | 14 +- lib/api/admin/sidekiq.rb | 36 + lib/api/api.rb | 4 +- lib/api/api_guard.rb | 28 +- lib/api/broadcast_messages.rb | 2 + lib/api/deploy_tokens.rb | 149 + lib/api/deployments.rb | 3 +- lib/api/discussions.rb | 4 +- lib/api/entities/broadcast_message.rb | 2 +- lib/api/entities/commit.rb | 4 + lib/api/entities/deploy_token.rb | 10 + lib/api/entities/deploy_token_with_token.rb | 9 + lib/api/entities/discussion.rb | 2 +- lib/api/entities/gpg_key.rb | 2 +- lib/api/entities/group.rb | 1 + .../pages/lookup_path.rb} | 5 - .../entities/internal/pages/virtual_domain.rb | 14 + .../internal/serverless/lookup_path.rb | 13 + .../internal/serverless/virtual_domain.rb | 14 + lib/api/entities/milestone_with_stats.rb | 12 + .../note_with_gitlab_employee_badge.rb | 10 + lib/api/entities/project.rb | 3 + lib/api/entities/project_upload.rb | 21 + lib/api/entities/release.rb | 4 +- lib/api/entities/releases/link.rb | 10 + lib/api/entities/remote_mirror.rb | 3 + lib/api/entities/ssh_key.rb | 2 +- lib/api/entities/user.rb | 2 +- lib/api/entities/user_details_with_admin.rb | 2 + .../user_with_gitlab_employee_badge.rb | 9 + lib/api/files.rb | 14 +- lib/api/group_variables.rb | 2 + lib/api/helpers.rb | 24 +- lib/api/helpers/custom_validators.rb | 24 + lib/api/helpers/file_upload_helpers.rb | 5 +- lib/api/helpers/groups_helpers.rb | 3 + lib/api/helpers/internal_helpers.rb | 18 +- lib/api/helpers/notes_helpers.rb | 2 +- lib/api/helpers/projects_helpers.rb | 2 + lib/api/internal/base.rb | 16 +- lib/api/internal/pages.rb | 23 +- lib/api/issues.rb | 1 + lib/api/lsif_data.rb | 10 +- lib/api/notes.rb | 2 +- lib/api/pipeline_schedules.rb | 2 +- lib/api/pipelines.rb | 4 +- lib/api/project_container_repositories.rb | 6 +- lib/api/project_import.rb | 35 +- lib/api/project_snippets.rb | 5 + lib/api/projects.rb | 37 +- lib/api/release/links.rb | 2 + lib/api/releases.rb | 2 +- lib/api/remote_mirrors.rb | 28 +- lib/api/repositories.rb | 6 + lib/api/runner.rb | 6 +- lib/api/runners.rb | 4 +- lib/api/todos.rb | 11 +- lib/api/users.rb | 37 +- lib/api/version.rb | 3 + lib/backup/manager.rb | 53 +- lib/backup/repository.rb | 34 +- .../broadcast_message_placeholders_filter.rb | 57 + lib/banzai/filter/inline_embeds_filter.rb | 26 +- .../filter/inline_grafana_metrics_filter.rb | 37 +- lib/banzai/filter/inline_metrics_filter.rb | 19 +- .../filter/inline_metrics_redactor_filter.rb | 22 +- lib/banzai/filter/issuable_state_filter.rb | 4 +- lib/banzai/filter/label_reference_filter.rb | 17 +- lib/banzai/filter/reference_filter.rb | 3 +- lib/banzai/filter/repository_link_filter.rb | 15 +- lib/banzai/pipeline/gfm_pipeline.rb | 10 +- lib/banzai/pipeline/post_process_pipeline.rb | 3 +- lib/declarative_policy.rb | 2 + lib/declarative_policy/preferred_scope.rb | 4 +- lib/feature.rb | 8 +- lib/feature/gitaly.rb | 3 + lib/gitlab/access/branch_protection.rb | 4 + lib/gitlab/application_rate_limiter.rb | 3 +- lib/gitlab/auth.rb | 4 +- lib/gitlab/auth/current_user_mode.rb | 23 +- lib/gitlab/auth/key_status_checker.rb | 29 + lib/gitlab/auth/ldap/access.rb | 16 +- lib/gitlab/auth/ldap/adapter.rb | 14 +- lib/gitlab/auth/ldap/auth_hash.rb | 6 +- lib/gitlab/auth/ldap/authentication.rb | 10 +- lib/gitlab/auth/ldap/config.rb | 4 +- lib/gitlab/auth/ldap/dn.rb | 2 +- lib/gitlab/auth/ldap/ldap_connection_error.rb | 4 +- lib/gitlab/auth/ldap/person.rb | 14 +- lib/gitlab/auth/ldap/user.rb | 10 +- lib/gitlab/auth/o_auth/provider.rb | 15 +- lib/gitlab/auth/o_auth/user.rb | 16 +- lib/gitlab/authorized_keys.rb | 2 +- .../backfill_snippet_repositories.rb | 89 + .../cleanup_optimistic_locking_nulls.rb | 32 + .../link_lfs_objects_projects.rb | 82 + .../migrate_security_scans.rb | 13 + ...ove_undefined_occurrence_severity_level.rb | 13 + ..._undefined_vulnerability_severity_level.rb | 13 + .../update_authorized_keys_file_since.rb | 13 - .../create_resource_user_mention.rb | 5 +- .../user_mentions/models/commit.rb | 35 + .../models/commit_user_mention.rb | 18 + .../models/concerns/isolated_mentionable.rb | 138 +- .../concerns/mentionable_migration_methods.rb | 22 +- .../models/design_management/design.rb | 32 + .../models/design_user_mention.rb | 18 + .../user_mentions/models/epic.rb | 4 +- .../user_mentions/models/merge_request.rb | 45 + .../models/merge_request_user_mention.rb | 18 + .../user_mentions/models/note.rb | 16 +- lib/gitlab/bitbucket_import/importer.rb | 4 +- lib/gitlab/cache/import/caching.rb | 153 + lib/gitlab/checks/branch_check.rb | 18 +- lib/gitlab/checks/diff_check.rb | 4 +- lib/gitlab/checks/lfs_check.rb | 2 +- lib/gitlab/checks/lfs_integrity.rb | 4 +- lib/gitlab/checks/post_push_message.rb | 15 +- lib/gitlab/checks/project_moved.rb | 4 +- lib/gitlab/checks/push_check.rb | 2 +- lib/gitlab/checks/push_file_count_check.rb | 37 + lib/gitlab/checks/snippet_check.rb | 38 + lib/gitlab/checks/tag_check.rb | 8 +- lib/gitlab/ci/artifact_file_reader.rb | 71 + lib/gitlab/ci/config.rb | 19 +- lib/gitlab/ci/config/entry/artifacts.rb | 2 - lib/gitlab/ci/config/entry/bridge.rb | 93 +- lib/gitlab/ci/config/entry/cache.rb | 2 - lib/gitlab/ci/config/entry/default.rb | 2 - lib/gitlab/ci/config/entry/include.rb | 2 +- lib/gitlab/ci/config/entry/inherit.rb | 30 + lib/gitlab/ci/config/entry/inherit/default.rb | 51 + .../ci/config/entry/inherit/variables.rb | 48 + lib/gitlab/ci/config/entry/job.rb | 106 +- lib/gitlab/ci/config/entry/processable.rb | 125 + lib/gitlab/ci/config/entry/release.rb | 2 - lib/gitlab/ci/config/entry/release/assets.rb | 2 - lib/gitlab/ci/config/entry/reports.rb | 7 +- lib/gitlab/ci/config/entry/root.rb | 15 +- lib/gitlab/ci/config/entry/service.rb | 34 +- lib/gitlab/ci/config/entry/workflow.rb | 1 - lib/gitlab/ci/config/external/context.rb | 5 +- .../ci/config/external/file/artifact.rb | 93 + 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 | 3 +- lib/gitlab/ci/parsers.rb | 3 +- lib/gitlab/ci/parsers/coverage/cobertura.rb | 64 + lib/gitlab/ci/parsers/test/junit.rb | 12 +- lib/gitlab/ci/pipeline/chain/base.rb | 2 +- .../ci/pipeline/chain/build/associations.rb | 28 + lib/gitlab/ci/pipeline/chain/command.rb | 4 + .../ci/pipeline/chain/config/process.rb | 3 +- lib/gitlab/ci/pipeline/seed/build.rb | 33 +- lib/gitlab/ci/pipeline/seed/deployment.rb | 14 +- lib/gitlab/ci/pipeline/seed/environment.rb | 14 +- lib/gitlab/ci/reports/coverage_reports.rb | 43 + lib/gitlab/ci/reports/test_case.rb | 9 +- .../ci/templates/Deploy-ECS.gitlab-ci.yml | 36 + .../Browser-Performance-Testing.gitlab-ci.yml | 2 - .../ci/templates/Jobs/Build.gitlab-ci.yml | 1 - .../templates/Jobs/Code-Quality.gitlab-ci.yml | 4 +- .../DAST-Default-Branch-Deploy.gitlab-ci.yml | 2 +- .../ci/templates/Jobs/Deploy.gitlab-ci.yml | 3 +- ...Managed-Cluster-Applications.gitlab-ci.yml | 5 +- .../ci/templates/Pages/Jekyll.gitlab-ci.yml | 3 +- .../templates/Pages/Middleman.gitlab-ci.yml | 2 +- .../ci/templates/Pages/Nanoc.gitlab-ci.yml | 2 +- .../templates/Pages/Octopress.gitlab-ci.yml | 2 +- .../Security/Container-Scanning.gitlab-ci.yml | 9 +- .../ci/templates/Security/DAST.gitlab-ci.yml | 1 + .../Dependency-Scanning.gitlab-ci.yml | 7 +- .../ci/templates/Security/SAST.gitlab-ci.yml | 4 +- .../Verify/Accessibility.gitlab-ci.yml | 19 + lib/gitlab/ci/yaml_processor.rb | 9 +- lib/gitlab/config/entry/attributable.rb | 2 +- lib/gitlab/config/entry/configurable.rb | 31 +- .../config_checker/puma_rugged_checker.rb | 28 + lib/gitlab/cycle_analytics/usage_data.rb | 21 +- lib/gitlab/danger/commit_linter.rb | 7 +- lib/gitlab/danger/helper.rb | 7 +- lib/gitlab/data_builder/push.rb | 3 +- lib/gitlab/database/batch_count.rb | 2 +- lib/gitlab/database/connection_timer.rb | 50 + lib/gitlab/database/migration_helpers.rb | 74 +- .../force_disconnectable_mixin.rb | 30 + lib/gitlab/diff/highlight_cache.rb | 27 + lib/gitlab/elasticsearch/logs.rb | 150 + lib/gitlab/email.rb | 22 + lib/gitlab/email/receiver.rb | 25 +- lib/gitlab/encoding_helper.rb | 13 +- lib/gitlab/experimentation.rb | 13 +- lib/gitlab/file_type_detection.rb | 14 +- lib/gitlab/git/blob.rb | 26 +- lib/gitlab/git/repository.rb | 26 +- lib/gitlab/git/rugged_impl/use_rugged.rb | 22 +- lib/gitlab/git_access.rb | 84 +- lib/gitlab/git_access_snippet.rb | 96 +- lib/gitlab/git_access_wiki.rb | 4 +- lib/gitlab/git_post_receive.rb | 10 +- lib/gitlab/gitaly_client.rb | 26 +- lib/gitlab/gitaly_client/commit_service.rb | 3 +- lib/gitlab/gitaly_client/operation_service.rb | 3 +- lib/gitlab/gitaly_client/remote_service.rb | 14 - .../gitaly_client/repository_service.rb | 16 + lib/gitlab/github_import.rb | 2 +- lib/gitlab/github_import/caching.rb | 151 - .../importer/repository_importer.rb | 5 +- lib/gitlab/github_import/issuable_finder.rb | 4 +- lib/gitlab/github_import/label_finder.rb | 4 +- lib/gitlab/github_import/milestone_finder.rb | 4 +- lib/gitlab/github_import/page_counter.rb | 4 +- .../github_import/parallel_scheduling.rb | 6 +- lib/gitlab/github_import/user_finder.rb | 10 +- lib/gitlab/gl_repository.rb | 12 +- lib/gitlab/gl_repository/repo_type.rb | 18 +- lib/gitlab/gon_helper.rb | 1 + .../formatters/lograge_with_timestamp.rb | 20 +- lib/gitlab/graphql/connections.rb | 4 + lib/gitlab/graphql/docs/helper.rb | 22 + .../graphql/docs/templates/default.md.haml | 5 +- ...ffset_active_record_relation_connection.rb | 13 + .../offset_active_record_relation.rb | 12 + lib/gitlab/graphql/timeout.rb | 11 + lib/gitlab/import_export.rb | 16 +- .../move_file_strategy.rb | 19 + lib/gitlab/import_export/attribute_cleaner.rb | 4 +- .../import_export/base/object_builder.rb | 105 + .../import_export/base/relation_factory.rb | 312 + .../import_export/base_object_builder.rb | 103 - .../import_export/base_relation_factory.rb | 307 - lib/gitlab/import_export/error.rb | 9 +- .../import_export/fast_hash_serializer.rb | 6 + .../import_export.yml} | 1 + .../import_export/group/object_builder.rb | 57 + .../import_export/group/relation_factory.rb | 42 + .../import_export/group/tree_restorer.rb | 113 + lib/gitlab/import_export/group/tree_saver.rb | 57 + .../import_export/group_object_builder.rb | 55 - .../group_project_object_builder.rb | 117 - .../import_export/group_relation_factory.rb | 40 - .../import_export/group_tree_restorer.rb | 116 - lib/gitlab/import_export/group_tree_saver.rb | 55 - lib/gitlab/import_export/importer.rb | 12 +- .../import_export/json/legacy_reader.rb | 104 + .../import_export/json/legacy_writer.rb | 73 + .../json/streaming_serializer.rb | 82 + ...saver.rb => legacy_relation_tree_saver.rb} | 4 +- lib/gitlab/import_export/members_mapper.rb | 16 +- lib/gitlab/import_export/project/base_task.rb | 41 + .../import_export/project/export_task.rb | 43 + .../{ => project}/import_export.yml | 17 +- .../import_export/project/import_task.rb | 110 + .../project/legacy_tree_saver.rb | 68 + .../import_export/project/object_builder.rb | 119 + .../import_export/project/relation_factory.rb | 164 + .../import_export/project/tree_restorer.rb | 75 + .../import_export/project/tree_saver.rb | 56 + .../import_export/project_relation_factory.rb | 184 - .../import_export/project_tree_loader.rb | 72 - .../import_export/project_tree_restorer.rb | 92 - .../import_export/project_tree_saver.rb | 68 - lib/gitlab/import_export/reader.rb | 8 + .../import_export/relation_rename_service.rb | 48 - .../import_export/relation_tree_restorer.rb | 72 +- lib/gitlab/import_export/shared.rb | 8 - .../import_export/snippet_repo_restorer.rb | 48 + .../import_export/snippet_repo_saver.rb | 21 + .../import_export/snippets_repo_restorer.rb | 36 + .../import_export/snippets_repo_saver.rb | 34 + lib/gitlab/incoming_email.rb | 8 +- lib/gitlab/jira/http_client.rb | 7 +- lib/gitlab/job_waiter.rb | 31 +- lib/gitlab/kubernetes/helm.rb | 8 +- lib/gitlab/kubernetes/helm/api.rb | 2 +- lib/gitlab/kubernetes/helm/client_command.rb | 2 +- lib/gitlab/kubernetes/namespace.rb | 8 +- lib/gitlab/legacy_github_import/importer.rb | 12 +- lib/gitlab/lograge/custom_options.rb | 43 + lib/gitlab/markdown_cache.rb | 2 +- lib/gitlab/metrics/dashboard/finder.rb | 6 +- .../metrics/dashboard/service_selector.rb | 3 +- .../dashboard/stages/grafana_formatter.rb | 111 +- lib/gitlab/middleware/go.rb | 3 +- lib/gitlab/middleware/read_only/controller.rb | 8 +- lib/gitlab/object_hierarchy.rb | 2 +- lib/gitlab/omniauth_logging/json_formatter.rb | 13 + lib/gitlab/path_regex.rb | 25 +- lib/gitlab/process_memory_cache.rb | 13 + lib/gitlab/profiler.rb | 32 +- lib/gitlab/project_template.rb | 3 +- lib/gitlab/prometheus/query_variables.rb | 6 +- lib/gitlab/quick_actions/extractor.rb | 39 +- .../quick_actions/substitution_definition.rb | 2 +- lib/gitlab/rate_limit_helpers.rb | 35 + lib/gitlab/reactive_cache_set_cache.rb | 34 + lib/gitlab/redacted_search_results_logger.rb | 9 + lib/gitlab/reference_counter.rb | 55 +- lib/gitlab/reference_extractor.rb | 2 +- lib/gitlab/regex.rb | 11 +- lib/gitlab/repo_path.rb | 50 +- lib/gitlab/repository_cache_adapter.rb | 2 +- lib/gitlab/repository_set_cache.rb | 24 +- lib/gitlab/request_profiler/middleware.rb | 6 +- lib/gitlab/search/found_blob.rb | 2 +- lib/gitlab/serverless/domain.rb | 13 - lib/gitlab/serverless/function_uri.rb | 46 - lib/gitlab/serverless/service.rb | 6 +- lib/gitlab/set_cache.rb | 71 + lib/gitlab/setup_helper.rb | 2 - lib/gitlab/shell.rb | 343 +- lib/gitlab/sidekiq_cluster.rb | 162 + lib/gitlab/sidekiq_cluster/cli.rb | 184 + lib/gitlab/sidekiq_config/cli_methods.rb | 6 +- lib/gitlab/sidekiq_config/dummy_worker.rb | 3 +- lib/gitlab/sidekiq_config/worker.rb | 9 +- lib/gitlab/sidekiq_logging/client_logger.rb | 11 + .../sidekiq_logging/deduplication_logger.rb | 19 + lib/gitlab/sidekiq_logging/json_formatter.rb | 3 + lib/gitlab/sidekiq_logging/logs_jobs.rb | 25 + .../sidekiq_logging/structured_logger.rb | 20 +- lib/gitlab/sidekiq_middleware.rb | 34 +- .../sidekiq_middleware/duplicate_jobs.rb | 13 + .../duplicate_jobs/client.rb | 13 + .../duplicate_jobs/duplicate_job.rb | 116 + .../duplicate_jobs/server.rb | 13 + .../duplicate_jobs/strategies.rb | 21 + .../strategies/until_executing.rb | 41 + lib/gitlab/sidekiq_middleware/metrics.rb | 4 +- .../request_store_middleware.rb | 10 +- .../sidekiq_middleware/server_metrics.rb | 8 + lib/gitlab/sidekiq_queue.rb | 68 + lib/gitlab/slash_commands/presenters/base.rb | 2 +- .../finders/global_template_finder.rb | 17 +- lib/gitlab/template/gitlab_ci_yml_template.rb | 11 +- .../clear_thread_memory_cache_middleware.rb | 17 + lib/gitlab/tracing.rb | 37 - lib/gitlab/uploads/migration_helper.rb | 6 + lib/gitlab/url_blocker.rb | 8 +- .../url_blockers/domain_whitelist_entry.rb | 21 + lib/gitlab/url_blockers/ip_whitelist_entry.rb | 22 + lib/gitlab/url_blockers/url_whitelist.rb | 12 +- lib/gitlab/url_builder.rb | 5 +- lib/gitlab/usage_counters/common.rb | 30 + lib/gitlab/usage_counters/pod_logs.rb | 11 + lib/gitlab/usage_data.rb | 35 +- lib/gitlab/user_access.rb | 4 +- lib/gitlab/user_access_snippet.rb | 49 + lib/gitlab/utils.rb | 16 +- lib/gitlab/utils/json_size_estimator.rb | 104 + lib/gitlab/utils/log_limited_array.rb | 10 +- lib/gitlab/utils/measuring.rb | 75 + lib/gitlab/with_request_store.rb | 13 + lib/gitlab/workhorse.rb | 2 +- lib/gitlab/x509/commit.rb | 6 +- lib/gitlab_danger.rb | 3 +- lib/grafana/time_window.rb | 130 + lib/grafana/validator.rb | 96 + lib/quality/kubernetes_client.rb | 3 +- lib/quality/test_level.rb | 9 +- lib/sentry/client/issue.rb | 18 +- lib/support/init.d/gitlab | 8 +- lib/support/init.d/gitlab.default.example | 4 +- lib/system_check/gitlab_shell_check.rb | 2 +- lib/system_check/ldap_check.rb | 6 +- lib/tasks/cleanup.rake | 33 + lib/tasks/gitlab/backup.rake | 21 +- lib/tasks/gitlab/cleanup.rake | 2 +- lib/tasks/gitlab/graphql.rake | 20 +- lib/tasks/gitlab/import_export/export.rake | 46 + lib/tasks/gitlab/import_export/import.rake | 214 +- lib/tasks/gitlab/info.rake | 9 +- lib/tasks/gitlab/shell.rake | 10 +- lib/tasks/gitlab/uploads/migrate.rake | 4 +- lib/tasks/sidekiq.rake | 2 +- locale/gitlab.pot | 1509 +- locale/unfound_translations.rb | 1 + package.json | 90 +- qa/Dockerfile | 2 +- qa/Gemfile | 2 +- qa/Gemfile.lock | 14 +- qa/README.md | 15 +- qa/qa.rb | 6 +- .../monitored_auto_devops/.gitlab-ci.yml | 2 +- qa/qa/git/repository.rb | 2 +- qa/qa/page/dashboard/snippet/new.rb | 2 +- qa/qa/page/group/menu.rb | 7 +- qa/qa/page/merge_request/show.rb | 5 + qa/qa/page/project/issue/show.rb | 2 +- .../operations/kubernetes/add_existing.rb | 4 +- .../project/operations/kubernetes/show.rb | 36 +- qa/qa/page/project/operations/metrics.rb | 49 - qa/qa/page/project/operations/metrics/show.rb | 50 + qa/qa/page/project/settings/ci_cd.rb | 10 + qa/qa/page/project/settings/deploy_tokens.rb | 4 +- qa/qa/page/project/settings/repository.rb | 6 - qa/qa/page/project/web_ide/edit.rb | 15 + qa/qa/resource/deploy_key.rb | 4 +- qa/qa/resource/deploy_token.rb | 16 +- qa/qa/resource/kubernetes_cluster.rb | 5 + qa/qa/resource/ssh_key.rb | 31 + qa/qa/runtime/browser.rb | 15 +- qa/qa/service/cluster_provider/k3s.rb | 94 + qa/qa/service/docker_run/base.rb | 4 + qa/qa/service/docker_run/k3s.rb | 46 + .../project/view_project_activity_spec.rb | 5 +- .../2_plan/issue/create_issue_spec.rb | 2 +- .../rebase_merge_request_spec.rb | 2 +- .../squash_merge_request_spec.rb | 2 +- .../add_list_delete_branches_spec.rb | 2 +- .../3_create/repository/add_ssh_key_spec.rb | 2 +- .../repository/protocol_v2_push_http_spec.rb | 5 +- .../repository/protocol_v2_push_ssh_spec.rb | 20 +- .../push_mirroring_over_http_spec.rb | 2 +- .../repository/push_over_http_spec.rb | 5 +- .../repository/push_protected_branch_spec.rb | 2 +- .../3_create/repository/use_ssh_key_spec.rb | 8 +- .../3_create/snippet/create_snippet_spec.rb | 2 +- .../web_ide/review_merge_request_spec.rb | 42 + .../wiki/create_edit_clone_push_wiki_spec.rb | 2 +- .../add_remove_ci_variable_spec.rb | 2 +- .../deploy_key/add_deploy_key_spec.rb | 4 +- .../deploy_key/clone_using_deploy_key_spec.rb | 2 +- .../kubernetes/kubernetes_integration_spec.rb | 19 +- qa/spec/git/repository_spec.rb | 8 +- qa/spec/service/docker_run/k3s_spec.rb | 32 + rubocop/cop/ban_catch_throw.rb | 34 + .../cop/gitlab/keys-first-and-values-first.rb | 2 +- .../cop/migration/add_column_with_default.rb | 44 +- rubocop/cop/migration/schedule_async.rb | 54 + .../with_lock_retries_with_change.rb | 30 + rubocop/cop/scalability/idempotent_worker.rb | 59 + rubocop/migration_helpers.rb | 4 + scripts/clean-old-cached-assets | 2 + scripts/frontend/block_dependencies.js | 21 + scripts/frontend/merge_coverage_frontend.js | 31 + scripts/frontend/parallel_ci_sequencer.js | 41 + scripts/gemfile_lock_changed.sh | 26 + scripts/lint-doc.sh | 59 +- scripts/lint-rugged | 6 +- scripts/review_apps/automated_cleanup.rb | 34 +- scripts/review_apps/base-config.yaml | 24 +- scripts/security-harness | 6 +- scripts/static-analysis | 4 +- scripts/trigger-build | 24 +- scripts/utils.sh | 94 - spec/bin/sidekiq_cluster_spec.rb | 45 + spec/config/settings_spec.rb | 6 + .../admin/integrations_controller_spec.rb | 86 + .../serverless/domains_controller_spec.rb | 90 +- .../admin/services_controller_spec.rb | 10 +- .../admin/sessions_controller_spec.rb | 116 +- .../application_controller_spec.rb | 37 +- .../boards/issues_controller_spec.rb | 12 + .../concerns/import_url_params_spec.rb | 6 +- .../explore/snippets_controller_spec.rb | 31 +- .../registry/repositories_controller_spec.rb | 2 +- .../groups/settings/ci_cd_controller_spec.rb | 12 + spec/controllers/groups_controller_spec.rb | 7 + .../import/gitea_controller_spec.rb | 16 +- .../import/gitlab_projects_controller_spec.rb | 58 + .../profiles/keys_controller_spec.rb | 16 + spec/controllers/profiles_controller_spec.rb | 10 + .../projects/clusters_controller_spec.rb | 3 - .../projects/deploy_keys_controller_spec.rb | 16 +- .../projects/forks_controller_spec.rb | 11 + .../projects/hooks_controller_spec.rb | 9 +- .../projects/import/jira_controller_spec.rb | 173 + .../projects/issues_controller_spec.rb | 16 +- .../projects/logs_controller_spec.rb | 143 + .../merge_requests_controller_spec.rb | 142 + .../projects/milestones_controller_spec.rb | 4 + .../dashboards_controller_spec.rb | 126 + .../projects/pipelines_controller_spec.rb | 104 +- .../registry/repositories_controller_spec.rb | 4 +- .../projects/releases_controller_spec.rb | 97 + .../projects/repositories_controller_spec.rb | 14 + .../serverless/functions_controller_spec.rb | 2 +- .../projects/services_controller_spec.rb | 10 - .../settings/ci_cd_controller_spec.rb | 8 + .../settings/repository_controller_spec.rb | 20 - .../projects/snippets_controller_spec.rb | 93 +- .../projects/tags/releases_controller_spec.rb | 10 +- spec/controllers/projects_controller_spec.rb | 6 +- .../repositories/git_http_controller_spec.rb | 82 +- spec/controllers/search_controller_spec.rb | 8 + spec/controllers/sessions_controller_spec.rb | 61 + .../snippets/notes_controller_spec.rb | 2 +- spec/controllers/snippets_controller_spec.rb | 195 +- .../users/terms_controller_spec.rb | 160 +- spec/db/schema_spec.rb | 1 + spec/factories/broadcast_messages.rb | 6 + spec/factories/ci/builds.rb | 19 +- spec/factories/ci/job_artifacts.rb | 44 +- spec/factories/ci/job_variables.rb | 4 + spec/factories/ci/pipelines.rb | 9 + spec/factories/ci/ref.rb | 16 + spec/factories/ci/test_case.rb | 31 + spec/factories/clusters/applications/helm.rb | 32 + spec/factories/deployments.rb | 2 +- spec/factories/merge_requests.rb | 12 + spec/factories/notes.rb | 4 + spec/factories/project_export_jobs.rb | 8 + spec/factories/releases/link.rb | 1 + spec/factories/resource_milestone_event.rb | 12 + spec/factories/serverless/domain.rb | 11 + spec/factories/services.rb | 11 + spec/factories/snippets.rb | 5 +- spec/factories/user_details.rb | 8 + spec/factories/user_highest_roles.rb | 7 + spec/factories/wiki_pages.rb | 2 +- spec/factories/x509_certificate.rb | 1 + .../features/admin/admin_health_check_spec.rb | 2 +- spec/features/admin/admin_mode/login_spec.rb | 184 + spec/features/admin/admin_mode/logout_spec.rb | 42 + spec/features/admin/admin_mode_spec.rb | 4 +- spec/features/admin/admin_runners_spec.rb | 24 +- spec/features/boards/boards_spec.rb | 6 +- spec/features/boards/issue_ordering_spec.rb | 25 + spec/features/boards/modal_filter_spec.rb | 2 +- spec/features/boards/multiple_boards_spec.rb | 10 +- spec/features/boards/new_issue_spec.rb | 8 +- spec/features/boards/sidebar_spec.rb | 14 +- spec/features/broadcast_messages_spec.rb | 69 +- .../clusters/cluster_detail_page_spec.rb | 14 +- ...installing_applications_shared_examples.rb | 7 + spec/features/commits_spec.rb | 41 +- spec/features/container_registry_spec.rb | 75 - spec/features/dashboard/issues_filter_spec.rb | 6 +- spec/features/dashboard/issues_spec.rb | 2 +- .../features/dashboard/merge_requests_spec.rb | 4 +- spec/features/dashboard/root_explore_spec.rb | 10 +- .../discussion_comments/commit_spec.rb | 2 +- .../discussion_comments/merge_request_spec.rb | 3 + .../discussion_comments/snippets_spec.rb | 6 +- .../user_filters_errors_by_status_spec.rb | 40 + .../user_searches_sentry_errors_spec.rb | 2 +- .../explore/user_explores_projects_spec.rb | 10 +- spec/features/group_variables_spec.rb | 2 +- spec/features/groups/clusters/user_spec.rb | 7 +- .../groups/container_registry_spec.rb | 93 + ...ith_external_authorization_service_spec.rb | 2 +- spec/features/groups/issues_spec.rb | 2 +- .../user_sees_links_to_issuables_spec.rb | 2 +- spec/features/groups/merge_requests_spec.rb | 2 +- spec/features/groups/navbar_spec.rb | 19 +- spec/features/groups/settings/ci_cd_spec.rb | 13 + .../ide/clientside_preview_csp_spec.rb | 35 + ...static_object_external_storage_csp_spec.rb | 31 + spec/features/issuables/issuable_list_spec.rb | 8 +- .../filtered_search/dropdown_assignee_spec.rb | 6 +- .../filtered_search/dropdown_author_spec.rb | 6 +- .../filtered_search/dropdown_base_spec.rb | 8 +- .../filtered_search/dropdown_emoji_spec.rb | 6 +- .../filtered_search/dropdown_label_spec.rb | 2 +- .../dropdown_milestone_spec.rb | 2 +- .../filtered_search/dropdown_release_spec.rb | 2 +- .../filtered_search/filter_issues_spec.rb | 74 +- .../filtered_search/visual_tokens_spec.rb | 16 +- spec/features/issues/issue_detail_spec.rb | 2 +- spec/features/issues/issue_sidebar_spec.rb | 23 + .../issues/user_creates_issue_spec.rb | 2 +- spec/features/issues/user_edits_issue_spec.rb | 7 +- .../features/issues/user_views_issues_spec.rb | 2 +- spec/features/labels_hierarchy_spec.rb | 6 +- spec/features/markdown/mermaid_spec.rb | 67 +- spec/features/markdown/metrics_spec.rb | 74 +- .../maintainer_edits_fork_spec.rb | 2 +- .../user_creates_image_diff_notes_spec.rb | 2 +- ...er_interacts_with_batched_mr_diffs_spec.rb | 2 +- .../user_manages_subscription_spec.rb | 2 + ...user_merges_when_pipeline_succeeds_spec.rb | 4 + .../merge_request/user_posts_notes_spec.rb | 3 +- ...diff_notes_and_discussions_resolve_spec.rb | 3 + .../user_sees_avatar_on_diff_notes_spec.rb | 2 +- .../merge_request/user_sees_diff_spec.rb | 4 - .../user_sees_merge_widget_spec.rb | 22 +- .../merge_request/user_views_diffs_spec.rb | 27 +- ...ws_merge_request_from_deleted_fork_spec.rb | 2 +- .../filters_generic_behavior_spec.rb | 2 +- .../user_filters_by_assignees_spec.rb | 4 +- .../user_filters_by_labels_spec.rb | 6 +- .../user_filters_by_milestones_spec.rb | 10 +- .../user_filters_by_multiple_criteria_spec.rb | 4 +- .../user_filters_by_target_branch_spec.rb | 6 +- .../user_sorts_merge_requests_spec.rb | 8 +- .../user_views_open_merge_requests_spec.rb | 6 +- .../milestones/user_creates_milestone_spec.rb | 4 +- .../milestones/user_edits_milestone_spec.rb | 6 +- .../user_promotes_milestone_spec.rb | 8 +- .../milestones/user_views_milestone_spec.rb | 8 +- .../milestones/user_views_milestones_spec.rb | 26 +- .../features/profiles/active_sessions_spec.rb | 108 +- .../profiles/user_edit_profile_spec.rb | 52 +- spec/features/project_group_variables_spec.rb | 1 + spec/features/project_variables_spec.rb | 2 +- spec/features/projects/active_tabs_spec.rb | 37 +- .../user_downloads_artifacts_spec.rb | 6 +- .../projects/badges/pipeline_badge_spec.rb | 2 +- .../features/projects/blobs/blob_show_spec.rb | 42 + ...ser_follows_pipeline_suggest_nudge_spec.rb | 67 + .../branches/user_deletes_branch_spec.rb | 2 +- .../branches/user_views_branches_spec.rb | 6 +- spec/features/projects/clusters/gcp_spec.rb | 7 +- spec/features/projects/clusters/user_spec.rb | 7 +- spec/features/projects/clusters_spec.rb | 1 + .../user_views_user_status_on_commit_spec.rb | 4 +- .../projects/container_registry_spec.rb | 168 + spec/features/projects/deploy_keys_spec.rb | 4 +- .../environments/environments_spec.rb | 2 + .../labels/user_creates_labels_spec.rb | 6 +- .../projects/labels/user_edits_labels_spec.rb | 6 +- .../labels/user_promotes_label_spec.rb | 8 +- .../user_sees_links_to_issuables_spec.rb | 4 +- .../projects/labels/user_views_labels_spec.rb | 5 +- spec/features/projects/navbar_spec.rb | 224 +- .../projects/pipelines/pipeline_spec.rb | 42 +- .../releases/user_views_edit_release_spec.rb | 112 + .../releases/user_views_release_spec.rb | 37 + .../releases/user_views_releases_spec.rb | 17 +- .../services/user_views_services_spec.rb | 2 +- .../projects/settings/ci_cd_settings_spec.rb | 112 + .../settings/operations_settings_spec.rb | 2 +- .../settings/pipelines_settings_spec.rb | 22 + .../settings/project_settings_spec.rb | 2 +- .../settings/registry_settings_spec.rb | 1 + .../settings/repository_settings_spec.rb | 116 - .../user_interacts_with_deploy_keys_spec.rb | 4 +- ...ser_sees_revoke_deploy_token_modal_spec.rb | 2 +- ...ings_spec.rb => webhooks_settings_spec.rb} | 21 +- .../show/user_manages_notifications_spec.rb | 20 +- .../show/user_sees_git_instructions_spec.rb | 12 +- .../user_sees_last_commit_ci_status_spec.rb | 4 +- .../projects/show/user_sees_readme_spec.rb | 5 +- .../projects/snippets/create_snippet_spec.rb | 61 +- .../snippets/user_comments_on_snippet_spec.rb | 6 +- .../snippets/user_updates_snippet_spec.rb | 25 +- .../features/projects/sourcegraph_csp_spec.rb | 90 +- .../projects/tags/user_edits_tags_spec.rb | 2 +- .../projects/user_sees_user_popover_spec.rb | 3 +- .../projects/user_uses_shortcuts_spec.rb | 20 +- .../projects/wiki/markdown_preview_spec.rb | 2 +- .../wiki/user_creates_wiki_page_spec.rb | 12 +- .../wiki/user_updates_wiki_page_spec.rb | 7 +- .../wiki/user_views_wiki_page_spec.rb | 52 +- spec/features/read_only_spec.rb | 2 +- .../features/reportable_note/snippets_spec.rb | 8 +- .../security/project/internal_access_spec.rb | 2 +- .../security/project/private_access_spec.rb | 2 +- .../security/project/public_access_spec.rb | 2 +- .../features/snippets/search_snippets_spec.rb | 41 - spec/features/snippets/spam_snippets_spec.rb | 26 +- .../snippets/user_creates_snippet_spec.rb | 62 +- .../snippets/user_edits_snippet_spec.rb | 19 +- .../uploads/user_uploads_file_to_note_spec.rb | 2 +- spec/features/user_sorts_things_spec.rb | 8 +- spec/features/users/show_spec.rb | 28 + spec/finders/award_emojis_finder_spec.rb | 5 + spec/finders/{ => ci}/jobs_finder_spec.rb | 2 +- .../pipeline_schedules_finder_spec.rb | 2 +- .../finders/{ => ci}/pipelines_finder_spec.rb | 2 +- ...ipelines_for_merge_request_finder_spec.rb} | 2 +- .../{ => ci}/runner_jobs_finder_spec.rb | 2 +- spec/finders/fork_targets_finder_spec.rb | 35 + .../projects/export_job_finder_spec.rb | 51 + spec/finders/serverless_domain_finder_spec.rb | 103 + spec/finders/snippets_finder_spec.rb | 11 + spec/fixtures/api/schemas/cluster_status.json | 10 +- .../api/schemas/entities/issue_board.json | 1 + spec/fixtures/api/schemas/entities/user.json | 3 +- spec/fixtures/api/schemas/environment.json | 4 +- .../internal/serverless/lookup_path.json | 28 + .../internal/serverless/virtual_domain.json | 14 + .../schemas/public_api/v4/commit/basic.json | 6 +- .../schemas/public_api/v4/deploy_token.json | 33 + .../schemas/public_api/v4/deploy_tokens.json | 6 + .../public_api/v4/merge_request_simple.json | 26 + .../public_api/v4/milestone_with_stats.json | 30 + .../public_api/v4/project/export_status.json | 3 +- .../api/schemas/public_api/v4/release.json | 2 +- .../v4/release/release_for_guest.json | 2 +- spec/fixtures/api/schemas/release/link.json | 2 + spec/fixtures/api/schemas/remote_mirror.json | 5 +- spec/fixtures/build.env.gz | Bin 0 -> 46 bytes spec/fixtures/ci_build_artifacts.zip | Bin 106365 -> 107464 bytes spec/fixtures/cobertura/coverage.xml | 43 + spec/fixtures/cobertura/coverage.xml.gz | Bin 0 -> 576 bytes .../fixtures/cobertura/coverage_gocov_xml.xml | 216 + .../cobertura/coverage_gocov_xml.xml.gz | Bin 0 -> 1103 bytes .../coverage_with_corrupted_data.xml | 50 + .../coverage_with_corrupted_data.xml.gz | Bin 0 -> 571 bytes spec/fixtures/csv_gitlab_export.csv | 5 + .../group_export_invalid_subrelations.tar.gz | Bin 0 -> 3036 bytes .../lib/elasticsearch/logs_response.json | 73 + spec/fixtures/lib/elasticsearch/query.json | 39 + .../elasticsearch/query_with_container.json | 46 + .../lib/elasticsearch/query_with_cursor.json | 43 + .../elasticsearch/query_with_end_time.json | 48 + .../lib/elasticsearch/query_with_search.json | 48 + .../elasticsearch/query_with_start_time.json | 48 + .../lib/elasticsearch/query_with_times.json | 49 + .../gitlab/import_export/complex/project.json | 8 +- .../gitlab/import_export/group/project.json | 64 +- .../import_export/invalid_json/project.json | 3 + .../gitlab/import_export/light/project.json | 22 + .../project.json | 144 + .../metrics/dashboard/schemas/axis.json | 10 + .../metrics/dashboard/schemas/panels.json | 1 + .../sentry/issues_sample_response.json | 42 + spec/fixtures/trace/sample_trace | 4 +- .../frontend/__mocks__/monaco-editor/index.js | 13 + spec/frontend/__mocks__/mousetrap/index.js | 6 + .../badges/components/badge_form_spec.js | 27 +- .../badges/components/badge_list_row_spec.js | 23 +- .../badges/components/badge_list_spec.js | 10 +- .../badges/components/badge_settings_spec.js | 27 +- .../badges/components/badge_spec.js | 14 +- .../badges/dummy_badge.js | 0 .../badges/store/actions_spec.js | 92 +- .../badges/store/mutations_spec.js | 0 .../behaviors/quick_submit_spec.js | 84 +- .../blob/3d_viewer/mesh_object_spec.js | 0 .../blob/balsamiq/balsamiq_viewer_spec.js | 90 +- spec/frontend/blob/blob_file_dropzone_spec.js | 50 + .../blob_edit_content_spec.js.snap | 14 + .../blob_edit_header_spec.js.snap | 16 + .../blob/components/blob_edit_content_spec.js | 81 + .../blob/components/blob_edit_header_spec.js | 50 + .../blob/notebook/notebook_viever_spec.js | 108 + spec/frontend/blob/pdf/pdf_viewer_spec.js | 67 + .../blob/pipeline_tour_success_spec.js | 40 + spec/frontend/blob/sketch/index_spec.js | 92 + .../components/popover_spec.js | 100 + spec/frontend/blob/utils_spec.js | 95 + .../blob/viewer/index_spec.js | 39 +- .../blob_edit/blob_bundle_spec.js | 3 +- spec/frontend/boards/boards_store_spec.js | 17 - .../boards/components/boards_selector_spec.js | 210 + .../issue_card_inner_scoped_label_spec.js | 43 - .../boards/components/issue_due_date_spec.js | 55 +- spec/frontend/boards/issue_card_spec.js | 51 +- .../components/ci_variable_modal_spec.js | 99 + .../components/ci_variable_popover_spec.js | 48 + .../components/ci_variable_settings_spec.js | 39 + .../components/ci_variable_table_spec.js | 84 + .../ci_variable_list/services/mock_data.js | 91 + .../ci_variable_list/store/actions_spec.js | 279 + .../ci_variable_list/store/mutations_spec.js | 64 + .../ci_variable_list/store/utils_spec.js | 49 + spec/frontend/ci_variable_list/stubs.js | 14 + .../remove_cluster_confirmation_spec.js.snap | 9 +- .../clusters/components/applications_spec.js | 25 + .../ingress_modsecurity_settings_spec.js | 129 + spec/frontend/clusters/services/mock_data.js | 1 + .../clusters/stores/clusters_store_spec.js | 2 + .../clusters_list/components/clusters_spec.js | 78 + spec/frontend/clusters_list/mock_data.js | 47 + .../clusters_list/store/actions_spec.js | 50 + .../code_navigation/store/actions_spec.js | 26 +- spec/frontend/confirm_modal_spec.js | 126 + .../contributors/store/getters_spec.js | 32 +- .../components/cluster_form_dropdown_spec.js | 142 +- .../eks_cluster_configuration_form_spec.js | 122 +- .../eks_cluster/store/getters_spec.js | 13 + .../components/gke_zone_dropdown_spec.js | 101 + .../create_cluster/gke_cluster/helpers.js | 64 + .../gke_cluster/stores/actions_spec.js | 7 +- .../gke_cluster/stores/getters_spec.js | 0 .../gke_cluster/stores/mutations_spec.js | 0 .../create_merge_request_dropdown_spec.js | 2 +- .../diffs/components/app_spec.js | 96 +- .../diffs/components/commit_item_spec.js | 181 + .../compare_versions_dropdown_spec.js | 19 + .../diffs/components/diff_file_row_spec.js | 2 + .../diffs/components/tree_list_spec.js | 138 + spec/frontend/diffs/create_diffs_store.js | 15 + .../environments/environments_app_spec.js | 168 + .../components/error_details_spec.js | 110 +- .../components/error_tracking_list_spec.js | 27 +- .../error_tracking/store/list/actions_spec.js | 14 + .../store/list/mutation_spec.js | 11 + spec/frontend/fixtures/groups.rb | 1 + spec/frontend/fixtures/labels.rb | 17 + spec/frontend/fixtures/metrics_dashboard.rb | 41 + spec/frontend/fixtures/projects.rb | 1 + .../fixtures/static/notebook_viewer.html | 1 - spec/frontend/fixtures/static/pdf_viewer.html | 1 - .../frequent_items_list_item_spec.js | 101 + .../components/frequent_items_list_spec.js | 101 + spec/frontend/frequent_items/mock_data.js | 57 + .../grafana_integration_spec.js.snap | 6 +- .../helpers/dom_shims/form_element.js | 1 + .../helpers/dom_shims/get_client_rects.js | 14 +- .../dom_shims/image_element_properties.js | 12 + spec/frontend/helpers/dom_shims/index.js | 4 + spec/frontend/helpers/dom_shims/scroll_by.js | 7 + .../helpers/dom_shims/size_properties.js | 19 + spec/frontend/helpers/tracking_helper.js | 2 +- .../commit_sidebar/editor_header_spec.js | 27 +- .../pipelines/__snapshots__/list_spec.js.snap | 1 + .../ide/components/preview/clientside_spec.js | 55 +- spec/frontend/ide/utils_spec.js | 60 +- .../components/issuables_list_app_spec.js | 141 +- spec/frontend/labels_select_spec.js | 74 +- .../lib/utils/common_utils_spec.js | 734 +- .../lib/utils/datetime_utility_spec.js | 39 + spec/frontend/lib/utils/icon_utils_spec.js | 72 +- spec/frontend/lib/utils/mock_data.js | 8 + spec/frontend/lib/utils/text_utility_spec.js | 23 +- .../unit_format/formatter_factory_spec.js | 276 + .../lib/utils/unit_format/index_spec.js | 157 + .../logs/components/environment_logs_spec.js | 428 + .../components/log_control_buttons_spec.js | 92 + spec/frontend/logs/mock_data.js | 53 + spec/frontend/logs/stores/actions_spec.js | 398 + spec/frontend/logs/stores/getters_spec.js | 40 + spec/frontend/logs/stores/mutations_spec.js | 259 + spec/frontend/logs/utils_spec.js | 38 + .../mocks/ce/diffs/workers/tree_worker.js | 8 + .../dashboard_template_spec.js.snap | 18 +- .../components/charts/anomaly_spec.js | 4 - .../components/charts/column_spec.js | 61 +- .../components/charts/empty_chart_spec.js | 8 - .../components/charts/options_spec.js | 60 + .../components/charts/time_series_spec.js | 930 +- .../monitoring/components/dashboard_spec.js | 31 +- .../components/dashboard_url_time_spec.js | 2 +- .../monitoring/components/panel_type_spec.js | 97 + spec/frontend/monitoring/embed/embed_spec.js | 4 +- spec/frontend/monitoring/embed/mock_data.js | 37 +- spec/frontend/monitoring/mock_data.js | 369 +- .../shared/prometheus_header_spec.js | 26 - .../frontend/monitoring/store/actions_spec.js | 68 +- .../frontend/monitoring/store/getters_spec.js | 81 +- .../monitoring/store/mutations_spec.js | 55 +- spec/frontend/monitoring/store/utils_spec.js | 268 +- ...iscussion_jump_to_next_button_spec.js.snap | 3 + .../components/discussion_counter_spec.js | 91 + .../discussion_jump_to_next_button_spec.js | 27 +- .../discussion_keyboard_navigator_spec.js | 73 +- .../notes/components/note_app_spec.js | 11 +- spec/frontend/notes/helpers.js | 12 + .../mixins/discussion_navigation_spec.js | 178 + spec/frontend/notes/old_notes_spec.js | 5 +- .../notes/stores/actions_spec.js | 80 +- spec/frontend/notes/stores/getters_spec.js | 7 + spec/frontend/notes/stores/mutation_spec.js | 24 + .../project_feature_settings_spec.js | 124 + .../components/project_setting_row_spec.js | 63 + .../components/settings_panel_spec.js | 434 + .../project_import_gitlab_project_spec.js | 0 .../projects/project_new_spec.js | 0 .../components/project_policy_alert_spec.js | 132 + .../registry/explorer/pages/details_spec.js | 24 +- .../registry/explorer/pages/list_spec.js | 10 +- .../registry/explorer/stores/actions_spec.js | 24 +- .../registry/explorer/stores/getters_spec.js | 34 + .../explorer/stores/mutations_spec.js | 7 +- .../project_empty_state_spec.js.snap | 6 + .../components/registry_settings_app_spec.js | 27 +- .../releases/components/app_edit_spec.js | 140 +- .../releases/components/app_show_spec.js | 61 + .../components/evidence_block_spec.js | 18 +- .../components/release_block_footer_spec.js | 2 +- .../components/release_block_header_spec.js | 43 +- .../release_block_milestone_info_spec.js | 103 +- .../releases/components/release_block_spec.js | 102 +- spec/frontend/releases/mock_data.js | 6 +- .../stores/modules/detail/actions_spec.js | 100 +- spec/frontend/reports/store/utils_spec.js | 34 +- .../__snapshots__/last_commit_spec.js.snap | 8 +- spec/{javascripts => frontend}/search_spec.js | 13 +- ...js.snap => self_monitor_form_spec.js.snap} | 0 ...itor_spec.js => self_monitor_form_spec.js} | 8 +- spec/frontend/sidebar/assignee_title_spec.js | 116 + spec/frontend/sidebar/mock_data.js | 10 + spec/frontend/snippet/snippet_bundle_spec.js | 94 + .../snippet_blob_edit_spec.js.snap | 24 + .../snippet_description_edit_spec.js.snap | 48 + .../snippet_visibility_edit_spec.js.snap | 94 + .../components/snippet_blob_edit_spec.js | 40 + .../snippet_description_edit_spec.js | 52 + .../snippets/components/snippet_title_spec.js | 4 +- .../snippet_visibility_edit_spec.js | 94 + spec/frontend/tracking_spec.js | 8 + .../mr_widget_suggest_pipeline_spec.js | 55 +- .../states/mr_widget_pipeline_tour_spec.js | 143 + .../states/pipeline_tour_mock_data.js | 10 + .../deployment_action_button_spec.js | 124 + .../deployment/deployment_actions_spec.js | 220 + .../deployment/deployment_mock_data.js | 45 +- .../deployment/deployment_spec.js | 69 +- .../deployment/deployment_view_button_spec.js | 2 +- spec/frontend/vue_mr_widget/mock_data.js | 319 + .../vue_mr_widget/mr_widget_options_spec.js | 858 + .../__snapshots__/expand_button_spec.js.snap | 8 + .../blob_viewers/rich_viewer_spec.js | 11 +- .../blob_viewers/simple_viewer_spec.js | 1 + .../components/changed_file_icon_spec.js | 10 +- .../components/confirm_modal_spec.js | 120 + .../viewers/image_diff_viewer_spec.js | 114 +- .../vue_shared/components/gl_mentions_spec.js | 34 + .../issue/related_issuable_mock_data.js | 121 + .../labels_select/dropdown_title_spec.js | 31 +- .../labels_select/dropdown_value_spec.js | 61 +- .../labels_select_vue/dropdown_button_spec.js | 55 + .../dropdown_contents_create_view_spec.js | 223 + .../dropdown_contents_labels_view_spec.js | 265 + .../dropdown_contents_spec.js | 54 + .../labels_select_vue/dropdown_title_spec.js | 61 + .../labels_select_vue/dropdown_value_spec.js | 84 + .../labels_select_root_spec.js | 127 + .../sidebar/labels_select_vue/mock_data.js | 66 + .../labels_select_vue/store/actions_spec.js | 276 + .../labels_select_vue/store/getters_spec.js | 31 + .../labels_select_vue/store/mutations_spec.js | 172 + .../user_popover/user_popover_spec.js | 107 +- spec/frontend/wikis_spec.js | 27 +- spec/graphql/features/authorization_spec.rb | 3 +- spec/graphql/gitlab_schema_spec.rb | 23 +- .../concerns/mutations/resolves_group_spec.rb | 4 +- .../mutations/resolves_issuable_spec.rb | 72 + .../mutations/resolves_project_spec.rb | 4 +- .../mutations/issues/set_confidential_spec.rb | 2 +- .../mutations/issues/set_due_date_spec.rb | 2 +- spec/graphql/mutations/issues/update_spec.rb | 53 + .../merge_requests/set_assignees_spec.rb | 2 +- .../merge_requests/set_labels_spec.rb | 2 +- .../merge_requests/set_locked_spec.rb | 2 +- .../merge_requests/set_milestone_spec.rb | 2 +- .../merge_requests/set_subscription_spec.rb | 2 +- .../mutations/merge_requests/set_wip_spec.rb | 2 +- .../mutations/todos/mark_all_done_spec.rb | 2 +- .../graphql/mutations/todos/mark_done_spec.rb | 2 +- .../mutations/todos/restore_many_spec.rb | 2 +- spec/graphql/mutations/todos/restore_spec.rb | 2 +- .../graphql/resolvers/boards_resolver_spec.rb | 15 + .../concerns/resolves_pipelines_spec.rb | 10 +- spec/graphql/resolvers/group_resolver_spec.rb | 4 +- .../graphql/resolvers/issues_resolver_spec.rb | 32 +- .../merge_request_pipelines_resolver_spec.rb | 8 +- .../resolvers/merge_requests_resolver_spec.rb | 13 +- .../project_pipelines_resolver_spec.rb | 6 +- .../resolvers/project_resolver_spec.rb | 7 +- .../projects/snippets_resolver_spec.rb | 10 + spec/graphql/types/base_field_spec.rb | 23 +- spec/graphql/types/board_type_spec.rb | 15 + spec/graphql/types/group_type_spec.rb | 10 +- spec/graphql/types/project_type_spec.rb | 7 + spec/graphql/types/snippet_type_spec.rb | 43 + spec/helpers/auth_helper_spec.rb | 32 +- spec/helpers/auto_devops_helper_spec.rb | 4 +- spec/helpers/award_emoji_helper_spec.rb | 2 +- spec/helpers/blob_helper_spec.rb | 91 +- spec/helpers/boards_helper_spec.rb | 4 +- .../helpers/broadcast_messages_helper_spec.rb | 7 +- spec/helpers/environments_helper_spec.rb | 6 +- spec/helpers/events_helper_spec.rb | 2 +- spec/helpers/form_helper_spec.rb | 19 + spec/helpers/issuables_helper_spec.rb | 4 +- spec/helpers/issues_helper_spec.rb | 2 +- spec/helpers/labels_helper_spec.rb | 34 +- spec/helpers/markup_helper_spec.rb | 37 +- spec/helpers/notes_helper_spec.rb | 2 +- spec/helpers/notifications_helper_spec.rb | 1 + .../projects/error_tracking_helper_spec.rb | 4 +- spec/helpers/projects_helper_spec.rb | 52 + spec/helpers/releases_helper_spec.rb | 21 +- spec/helpers/submodule_helper_spec.rb | 47 +- spec/helpers/users_helper_spec.rb | 38 + spec/helpers/visibility_level_helper_spec.rb | 2 +- .../100_patch_omniauth_saml_spec.rb} | 2 +- spec/initializers/lograge_spec.rb | 2 +- ...pec.js => balsamiq_viewer_browser_spec.js} | 2 + .../blob/blob_file_dropzone_spec.js | 39 - spec/javascripts/blob/notebook/index_spec.js | 130 - spec/javascripts/blob/pdf/index_spec.js | 72 - spec/javascripts/blob/sketch/index_spec.js | 120 - spec/javascripts/boards/board_card_spec.js | 8 +- .../boards/components/boards_selector_spec.js | 203 - spec/javascripts/boards/list_spec.js | 17 +- .../collapsed_sidebar_todo_spec.js | 6 +- spec/javascripts/create_cluster/.eslintrc.yml | 3 - .../components/gke_zone_dropdown_spec.js | 94 - .../create_cluster/gke_cluster/helpers.js | 49 - .../create_cluster/gke_cluster/mock_data.js | 75 - .../diffs/components/commit_item_spec.js | 166 - .../components/diff_expansion_cell_spec.js | 203 +- .../diffs/components/diff_file_spec.js | 7 +- .../components/inline_diff_table_row_spec.js | 61 + .../parallel_diff_table_row_spec.js | 62 + .../diffs/components/tree_list_spec.js | 126 - spec/javascripts/diffs/create_diffs_store.js | 16 +- .../diffs/mock_data/diff_discussions.js | 12 +- spec/javascripts/diffs/store/actions_spec.js | 43 + spec/javascripts/diffs/store/getters_spec.js | 30 + .../javascripts/diffs/store/mutations_spec.js | 14 +- spec/javascripts/diffs/store/utils_spec.js | 116 +- .../dirty_submit/dirty_submit_form_spec.js | 6 +- spec/javascripts/editor/editor_lite_spec.js | 49 + .../environments/environments_app_spec.js | 279 - spec/javascripts/environments/mock_data.js | 66 - .../visual_token_value_spec.js | 4 +- .../frequent_items_list_item_spec.js | 94 - .../components/frequent_items_list_spec.js | 90 - spec/javascripts/groups/mock_data.js | 3 +- spec/javascripts/helpers/tracking_helper.js | 28 +- .../components/commit_sidebar/form_spec.js | 2 +- .../ide/components/file_row_extra_spec.js | 30 +- .../components/repo_commit_section_spec.js | 14 +- .../issue_show/components/app_spec.js | 14 +- spec/javascripts/labels_issue_sidebar_spec.js | 4 +- spec/javascripts/lib/utils/browser_spec.js | 175 + spec/javascripts/lib/utils/mock_data.js | 9 +- .../components/dashboard_resize_spec.js | 2 +- .../components/discussion_counter_spec.js | 90 - .../notes/components/noteable_note_spec.js | 4 +- spec/javascripts/notes/helpers.js | 13 +- spec/javascripts/pdf/index_spec.js | 3 - spec/javascripts/pdf/page_spec.js | 4 +- .../releases/components/app_index_spec.js | 127 +- .../stores/modules/list/actions_spec.js | 6 +- .../grouped_test_reports_app_spec.js | 20 +- .../sidebar/assignee_title_spec.js | 123 - .../sidebar/lock/lock_issue_sidebar_spec.js | 13 + .../sidebar/sidebar_mediator_spec.js | 10 +- spec/javascripts/smart_interval_spec.js | 4 +- .../components/deployment_stop_button_spec.js | 95 - .../states/mr_widget_ready_to_merge_spec.js | 16 +- .../components/states/mr_widget_wip_spec.js | 4 +- spec/javascripts/vue_mr_widget/mock_data.js | 319 +- .../vue_mr_widget/mr_widget_options_spec.js | 855 - .../stores/mr_widget_store_spec.js | 12 + .../content_viewer/content_viewer_spec.js | 84 +- .../issue/related_issuable_mock_data.js | 115 +- spec/lib/api/entities/release_spec.rb | 32 +- .../lib/api/helpers/custom_validators_spec.rb | 91 +- spec/lib/backup/manager_spec.rb | 56 +- spec/lib/backup/repository_spec.rb | 6 +- ...adcast_message_placeholders_filter_spec.rb | 89 + .../inline_grafana_metrics_filter_spec.rb | 75 +- .../filter/inline_metrics_filter_spec.rb | 75 +- .../inline_metrics_redactor_filter_spec.rb | 36 +- .../filter/label_reference_filter_spec.rb | 26 +- .../filter/repository_link_filter_spec.rb | 36 +- spec/lib/banzai/pipeline/gfm_pipeline_spec.rb | 2 +- spec/lib/event_filter_spec.rb | 21 +- spec/lib/feature/gitaly_spec.rb | 10 + spec/lib/feature_spec.rb | 12 +- .../gitlab/access/branch_protection_spec.rb | 17 + spec/lib/gitlab/alerting/alert_spec.rb | 11 +- .../lib/gitlab/auth/current_user_mode_spec.rb | 462 +- .../gitlab/auth/key_status_checker_spec.rb | 68 + spec/lib/gitlab/auth/ldap/access_spec.rb | 10 +- spec/lib/gitlab/auth/ldap/adapter_spec.rb | 10 +- spec/lib/gitlab/auth/ldap/auth_hash_spec.rb | 4 +- .../gitlab/auth/ldap/authentication_spec.rb | 8 +- spec/lib/gitlab/auth/ldap/config_spec.rb | 2 +- spec/lib/gitlab/auth/ldap/dn_spec.rb | 50 +- spec/lib/gitlab/auth/ldap/person_spec.rb | 4 +- spec/lib/gitlab/auth/ldap/user_spec.rb | 2 +- spec/lib/gitlab/auth/o_auth/user_spec.rb | 36 +- spec/lib/gitlab/auth/saml/user_spec.rb | 16 +- spec/lib/gitlab/auth_spec.rb | 13 +- spec/lib/gitlab/authorized_keys_spec.rb | 4 +- ...d_merge_request_diff_commits_count_spec.rb | 2 +- .../archive_legacy_traces_spec.rb | 2 +- ...ckfill_hashed_project_repositories_spec.rb | 2 +- ...ckfill_legacy_project_repositories_spec.rb | 2 +- ...ll_project_fullpath_in_repo_config_spec.rb | 2 +- .../backfill_project_settings_spec.rb | 2 +- .../backfill_snippet_repositories_spec.rb | 154 + .../digest_column_spec.rb | 2 +- .../encrypt_columns_spec.rb | 2 +- .../encrypt_runners_tokens_spec.rb | 2 +- .../fix_cross_project_label_links_spec.rb | 2 +- ...x_projects_without_project_feature_spec.rb | 2 +- .../fix_promoted_epics_discussion_ids_spec.rb | 2 +- .../fix_user_namespace_names_spec.rb | 2 +- .../fix_user_project_route_names_spec.rb | 2 +- .../legacy_upload_mover_spec.rb | 13 + .../link_lfs_objects_projects_spec.rb | 113 + .../migrate_build_stage_spec.rb | 2 +- ...ate_fingerprint_sha256_within_keys_spec.rb | 2 +- ...rate_issue_trackers_sensitive_data_spec.rb | 2 +- .../migrate_legacy_artifacts_spec.rb | 2 +- ...rate_null_private_profile_to_false_spec.rb | 2 +- .../migrate_pages_metadata_spec.rb | 2 +- .../migrate_stage_index_spec.rb | 2 +- ...cluster_kubernetes_namespace_table_spec.rb | 2 +- ...late_merge_request_assignees_table_spec.rb | 2 +- .../untracked_file_spec.rb | 2 +- .../populate_untracked_uploads_spec.rb | 2 +- .../prepare_untracked_uploads_spec.rb | 2 +- ...recalculate_project_authorizations_spec.rb | 2 +- ...uthorizations_with_min_max_user_id_spec.rb | 2 +- .../remove_restricted_todos_spec.rb | 2 +- .../reset_merge_status_spec.rb | 2 +- .../schedule_calculate_wiki_sizes_spec.rb | 2 +- ...nfidential_note_events_on_services_spec.rb | 2 +- ...nfidential_note_events_on_webhooks_spec.rb | 2 +- ...o_match_visibility_level_of_parent_spec.rb | 2 +- .../create_resource_user_mention_spec.rb | 109 + .../bare_repository_import/repository_spec.rb | 9 +- .../gitlab/bitbucket_import/importer_spec.rb | 13 +- .../import}/caching_spec.rb | 2 +- spec/lib/gitlab/checks/branch_check_spec.rb | 20 +- spec/lib/gitlab/checks/diff_check_spec.rb | 2 +- spec/lib/gitlab/checks/force_push_spec.rb | 2 +- spec/lib/gitlab/checks/lfs_check_spec.rb | 2 +- .../lib/gitlab/checks/project_created_spec.rb | 29 +- spec/lib/gitlab/checks/project_moved_spec.rb | 103 +- spec/lib/gitlab/checks/push_check_spec.rb | 2 +- .../checks/push_file_count_check_spec.rb | 53 + spec/lib/gitlab/checks/snippet_check_spec.rb | 43 + spec/lib/gitlab/checks/tag_check_spec.rb | 8 +- .../gitlab/ci/artifact_file_reader_spec.rb | 100 + .../gitlab/ci/build/policy/changes_spec.rb | 5 +- .../gitlab/ci/build/policy/kubernetes_spec.rb | 2 +- .../gitlab/ci/build/policy/variables_spec.rb | 2 +- .../lib/gitlab/ci/config/entry/bridge_spec.rb | 2 + .../ci/config/entry/inherit/default_spec.rb | 42 + .../ci/config/entry/inherit/variables_spec.rb | 42 + spec/lib/gitlab/ci/config/entry/job_spec.rb | 16 +- spec/lib/gitlab/ci/config/entry/jobs_spec.rb | 1 + .../ci/config/entry/processable_spec.rb | 381 + .../gitlab/ci/config/entry/reports_spec.rb | 2 + spec/lib/gitlab/ci/config/entry/root_spec.rb | 17 +- .../ci/config/external/file/artifact_spec.rb | 167 + .../ci/config/external/file/local_spec.rb | 23 +- .../ci/config/external/file/project_spec.rb | 24 +- .../ci/config/external/file/template_spec.rb | 6 +- .../gitlab/ci/config/external/mapper_spec.rb | 5 +- .../ci/config/external/processor_spec.rb | 7 +- spec/lib/gitlab/ci/config_spec.rb | 110 +- .../ci/parsers/coverage/cobertura_spec.rb | 176 + spec/lib/gitlab/ci/parsers/test/junit_spec.rb | 69 + spec/lib/gitlab/ci/parsers_spec.rb | 10 +- .../pipeline/chain/build/associations_spec.rb | 62 + .../gitlab/ci/pipeline/chain/build_spec.rb | 4 +- .../gitlab/ci/pipeline/chain/command_spec.rb | 2 +- .../gitlab/ci/pipeline/chain/create_spec.rb | 4 +- .../gitlab/ci/pipeline/chain/populate_spec.rb | 4 +- .../gitlab/ci/pipeline/chain/sequence_spec.rb | 5 +- .../lib/gitlab/ci/pipeline/chain/skip_spec.rb | 6 +- .../pipeline/chain/validate/abilities_spec.rb | 4 +- .../chain/validate/repository_spec.rb | 5 +- .../lib/gitlab/ci/pipeline/seed/build_spec.rb | 88 +- .../ci/pipeline/seed/deployment_spec.rb | 43 +- .../ci/pipeline/seed/environment_spec.rb | 59 +- .../ci/reports/coverage_reports_spec.rb | 66 + spec/lib/gitlab/ci/reports/test_case_spec.rb | 12 + spec/lib/gitlab/ci/status/composite_spec.rb | 2 +- .../lib/gitlab/ci/templates/templates_spec.rb | 48 +- spec/lib/gitlab/ci/trace/chunked_io_spec.rb | 2 +- spec/lib/gitlab/ci/trace/stream_spec.rb | 2 +- spec/lib/gitlab/ci/yaml_processor_spec.rb | 102 +- .../gitlab/config/entry/attributable_spec.rb | 2 +- .../puma_rugged_checker_spec.rb | 65 + spec/lib/gitlab/danger/commit_linter_spec.rb | 47 +- spec/lib/gitlab/danger/helper_spec.rb | 6 + .../lib/gitlab/data_builder/wiki_page_spec.rb | 2 +- .../gitlab/database/connection_timer_spec.rb | 100 + .../gitlab/database/migration_helpers_spec.rb | 169 +- .../force_disconnectable_mixin_spec.rb | 55 + .../project/create_service_spec.rb | 28 +- spec/lib/gitlab/diff/highlight_cache_spec.rb | 40 +- spec/lib/gitlab/elasticsearch/logs_spec.rb | 89 + spec/lib/gitlab/encoding_helper_spec.rb | 6 + spec/lib/gitlab/experimentation_spec.rb | 43 +- spec/lib/gitlab/file_type_detection_spec.rb | 29 + spec/lib/gitlab/git/blob_spec.rb | 62 + spec/lib/gitlab/git/lfs_changes_spec.rb | 2 +- spec/lib/gitlab/git/merge_base_spec.rb | 2 +- spec/lib/gitlab/git/push_spec.rb | 3 +- spec/lib/gitlab/git/repository_spec.rb | 116 +- .../gitlab/git/rugged_impl/use_rugged_spec.rb | 37 + spec/lib/gitlab/git_access_snippet_spec.rb | 212 +- spec/lib/gitlab/git_access_spec.rb | 82 +- spec/lib/gitlab/git_access_wiki_spec.rb | 4 +- spec/lib/gitlab/git_post_receive_spec.rb | 2 +- .../gitaly_client/commit_service_spec.rb | 14 + .../gitaly_client/operation_service_spec.rb | 8 +- .../gitaly_client/remote_service_spec.rb | 13 - .../gitaly_client/repository_service_spec.rb | 28 +- .../importer/repository_importer_spec.rb | 17 +- .../github_import/issuable_finder_spec.rb | 2 +- .../gitlab/github_import/label_finder_spec.rb | 4 +- .../github_import/milestone_finder_spec.rb | 4 +- .../gitlab/github_import/page_counter_spec.rb | 2 +- .../github_import/parallel_scheduling_spec.rb | 4 +- .../gitlab/github_import/user_finder_spec.rb | 22 +- spec/lib/gitlab/github_import_spec.rb | 2 +- .../gitlab/gl_repository/repo_type_spec.rb | 78 +- spec/lib/gitlab/gl_repository_spec.rb | 9 +- spec/lib/gitlab/global_id_spec.rb | 2 +- .../formatters/lograge_with_timestamp_spec.rb | 49 + spec/lib/gitlab/graphql/docs/renderer_spec.rb | 96 + .../loaders/batch_lfs_oid_loader_spec.rb | 2 +- ..._active_record_relation_connection_spec.rb | 9 + spec/lib/gitlab/graphql/timeout_spec.rb | 23 + .../gitlab/hashed_storage/migrator_spec.rb | 4 +- .../gitlab/hook_data/issuable_builder_spec.rb | 2 +- .../gitlab/hook_data/issue_builder_spec.rb | 4 +- .../hook_data/merge_request_builder_spec.rb | 2 +- .../import/merge_request_helpers_spec.rb | 4 +- .../base_after_export_strategy_spec.rb | 6 + .../web_upload_strategy_spec.rb | 6 + spec/lib/gitlab/import_export/all_models.yml | 14 + .../object_builder_spec.rb} | 4 +- .../relation_factory_spec.rb} | 15 +- spec/lib/gitlab/import_export/error_spec.rb | 31 + .../fast_hash_serializer_spec.rb | 10 + spec/lib/gitlab/import_export/fork_spec.rb | 4 +- .../object_builder_spec.rb} | 2 +- .../relation_factory_spec.rb} | 4 +- .../tree_restorer_spec.rb} | 2 +- .../tree_saver_spec.rb} | 8 +- .../import_export/import_export_spec.rb | 8 + .../import_test_coverage_spec.rb | 2 - .../lib/gitlab/import_export/importer_spec.rb | 5 +- .../import_export/json/legacy_reader_spec.rb | 149 + .../import_export/json/legacy_writer_spec.rb | 79 + ....rb => legacy_relation_tree_saver_spec.rb} | 2 +- .../import_export/members_mapper_spec.rb | 308 +- .../merge_request_parser_spec.rb | 4 +- .../import_export/project/export_task_spec.rb | 69 + .../project/import_task_spec.rb} | 41 +- .../legacy_tree_saver_spec.rb} | 6 +- .../object_builder_spec.rb} | 2 +- .../relation_factory_spec.rb} | 10 +- .../tree_restorer_spec.rb} | 62 +- .../import_export/project/tree_saver_spec.rb | 346 + .../import_export/project_tree_loader_spec.rb | 49 - .../relation_rename_service_spec.rb | 122 - .../relation_tree_restorer_spec.rb | 27 +- .../gitlab/import_export/repo_saver_spec.rb | 2 +- .../import_export/safe_model_attributes.yml | 10 + .../snippet_repo_restorer_spec.rb | 70 + .../import_export/snippet_repo_saver_spec.rb | 48 + .../snippets_repo_restorer_spec.rb | 55 + .../import_export/snippets_repo_saver_spec.rb | 56 + .../import_export/wiki_repo_saver_spec.rb | 4 +- spec/lib/gitlab/incoming_email_spec.rb | 11 + spec/lib/gitlab/job_waiter_spec.rb | 35 + spec/lib/gitlab/json_cache_spec.rb | 3 +- spec/lib/gitlab/kubernetes/helm/api_spec.rb | 2 +- spec/lib/gitlab/kubernetes/helm/pod_spec.rb | 2 +- spec/lib/gitlab/kubernetes/namespace_spec.rb | 8 +- spec/lib/gitlab/language_detection_spec.rb | 6 +- .../legacy_github_import/importer_spec.rb | 8 +- .../lib/gitlab/lograge/custom_options_spec.rb | 50 + .../gitlab/metrics/dashboard/finder_spec.rb | 6 +- .../stages/grafana_formatter_spec.rb | 96 +- spec/lib/gitlab/middleware/go_spec.rb | 11 +- .../omniauth_logging/json_formatter_spec.rb | 12 + spec/lib/gitlab/path_regex_spec.rb | 33 + .../phabricator_import/cache/map_spec.rb | 2 +- .../issues/task_importer_spec.rb | 2 +- spec/lib/gitlab/profiler_spec.rb | 22 +- .../lib/gitlab/project_authorizations_spec.rb | 72 + spec/lib/gitlab/project_template_spec.rb | 3 +- .../gitlab/prometheus/query_variables_spec.rb | 4 + .../gitlab/quick_actions/extractor_spec.rb | 43 + .../substitution_definition_spec.rb | 2 + spec/lib/gitlab/rate_limit_helpers_spec.rb | 50 + .../gitlab/reactive_cache_set_cache_spec.rb | 74 + spec/lib/gitlab/reference_counter_spec.rb | 62 +- spec/lib/gitlab/reference_extractor_spec.rb | 18 + spec/lib/gitlab/regex_spec.rb | 16 +- spec/lib/gitlab/repo_path_spec.rb | 93 +- .../gitlab/repository_cache_adapter_spec.rb | 3 +- spec/lib/gitlab/repository_cache_spec.rb | 47 +- spec/lib/gitlab/repository_set_cache_spec.rb | 93 +- spec/lib/gitlab/sanitizers/exif_spec.rb | 6 +- spec/lib/gitlab/serverless/domain_spec.rb | 22 - .../gitlab/serverless/function_uri_spec.rb | 81 - spec/lib/gitlab/serverless/service_spec.rb | 10 +- spec/lib/gitlab/shell_spec.rb | 314 +- spec/lib/gitlab/sidekiq_cluster/cli_spec.rb | 282 + spec/lib/gitlab/sidekiq_cluster_spec.rb | 196 + .../gitlab/sidekiq_config/cli_methods_spec.rb | 46 +- spec/lib/gitlab/sidekiq_config/worker_spec.rb | 17 +- .../deduplication_logger_spec.rb | 33 + .../sidekiq_logging/structured_logger_spec.rb | 19 +- .../sidekiq_middleware/client_metrics_spec.rb | 29 +- .../duplicate_jobs/client_spec.rb | 34 + .../duplicate_jobs/duplicate_job_spec.rb | 157 + .../duplicate_jobs/server_spec.rb | 52 + .../strategies/until_executing_spec.rb | 72 + .../duplicate_jobs/strategies_spec.rb | 15 + .../sidekiq_middleware/server_metrics_spec.rb | 33 +- spec/lib/gitlab/sidekiq_middleware_spec.rb | 26 +- spec/lib/gitlab/sidekiq_queue_spec.rb | 87 + .../gitlab/slash_commands/issue_move_spec.rb | 10 +- .../presenters/issue_move_spec.rb | 10 +- .../finders/global_template_finder_spec.rb | 84 +- .../finders/repo_template_finders_spec.rb | 3 +- spec/lib/gitlab/tracing_spec.rb | 69 - spec/lib/gitlab/url_blocker_spec.rb | 64 +- .../domain_whitelist_entry_spec.rb | 58 + .../url_blockers/ip_whitelist_entry_spec.rb | 75 + .../gitlab/url_blockers/url_whitelist_spec.rb | 106 +- spec/lib/gitlab/url_builder_spec.rb | 18 +- spec/lib/gitlab/usage_data_spec.rb | 43 +- spec/lib/gitlab/user_access_snippet_spec.rb | 95 + spec/lib/gitlab/user_access_spec.rb | 39 +- .../gitlab/utils/json_size_estimator_spec.rb | 39 + .../gitlab/utils/log_limited_array_spec.rb | 22 +- spec/lib/gitlab/utils_spec.rb | 8 + spec/lib/gitlab/workhorse_spec.rb | 2 +- spec/lib/gitlab/x509/commit_spec.rb | 16 + spec/lib/gitlab_danger_spec.rb | 2 +- spec/lib/grafana/time_window_spec.rb | 115 + spec/lib/grafana/validator_spec.rb | 119 + spec/lib/quality/kubernetes_client_spec.rb | 6 +- spec/lib/quality/test_level_spec.rb | 46 +- spec/lib/sentry/client/issue_spec.rb | 34 +- spec/mailers/emails/pages_domains_spec.rb | 4 +- spec/mailers/emails/pipelines_spec.rb | 15 +- spec/mailers/notify_spec.rb | 22 +- ...152703_migrate_issue_trackers_data_spec.rb | 2 +- ..._code_owner_approval_from_projects_spec.rb | 2 +- ...4345_add_admin_mode_protected_path_spec.rb | 2 +- ...91204114127_delete_legacy_triggers_spec.rb | 2 +- ...d_timestamp_softwarelicensespolicy_spec.rb | 2 +- ...22123016_backfill_project_settings_spec.rb | 2 +- ...123155929_remove_invalid_jira_data_spec.rb | 2 +- ..._remove_invalid_issue_tracker_data_spec.rb | 2 +- ...hedule_migrate_issue_trackers_data_spec.rb | 2 +- ...nfidential_note_events_on_services_spec.rb | 2 +- spec/migrations/active_record/schema_spec.rb | 2 +- .../add_default_and_free_plans_spec.rb | 2 +- ...deploy_token_type_to_deploy_tokens_spec.rb | 2 +- ...rom_notification_settings_to_users_spec.rb | 2 +- .../add_foreign_keys_to_todos_spec.rb | 2 +- ...to_project_mirror_data_foreign_key_spec.rb | 2 +- ...es_access_level_to_project_feature_spec.rb | 2 +- .../add_pipeline_build_foreign_key_spec.rb | 2 +- ...al_index_on_project_id_to_services_spec.rb | 2 +- ...ovals_user_id_and_merge_request_id_spec.rb | 2 +- ...int_to_project_features_project_id_spec.rb | 2 +- ...mmits_count_for_merge_request_diff_spec.rb | 2 +- ...leased_at_column_on_releases_table_spec.rb | 2 +- ...ll_operations_feature_flags_active_spec.rb | 2 +- ...kfill_operations_feature_flags_iid_spec.rb | 2 +- ...ckfill_releases_name_with_tag_name_spec.rb | 2 +- ...not_null_constraints_to_timestamps_spec.rb | 2 +- ...ll_store_project_full_path_in_repo_spec.rb | 2 +- .../backport_enterprise_schema_spec.rb | 2 +- ...ault_value_for_dsa_key_restriction_spec.rb | 2 +- ...d_local_requests_whitelist_default_spec.rb | 2 +- ...ize_defaults_in_project_statistics_spec.rb | 2 +- spec/migrations/clean_grafana_url_spec.rb | 2 +- ...p_noteable_id_for_notes_on_commits_spec.rb | 2 +- .../cleanup_build_stage_migration_spec.rb | 2 +- ...cleanup_empty_commit_user_mentions_spec.rb | 36 + .../cleanup_environments_external_url_spec.rb | 2 +- .../cleanup_legacy_artifact_migration_spec.rb | 2 +- .../cleanup_optimistic_locking_nulls_spec.rb | 53 + .../cleanup_stages_position_migration_spec.rb | 2 +- ...onment_for_self_monitoring_project_spec.rb | 68 + ...ssing_namespace_for_internal_users_spec.rb | 2 +- ...rnal_ids_where_feature_flags_usage_spec.rb | 2 +- .../delete_template_project_services_spec.rb | 21 + ...mplate_services_duplicated_by_type_spec.rb | 24 + ...rometheus_services_background_jobs_spec.rb | 89 + .../drop_background_migration_jobs_spec.rb | 2 +- .../drop_duplicate_protected_tags_spec.rb | 2 +- ...i_cd_settings_merge_trains_enabled_spec.rb | 2 +- .../encrypt_deploy_tokens_tokens_spec.rb | 2 +- ...crypt_feature_flags_clients_tokens_spec.rb | 2 +- ...attributes_on_application_settings_spec.rb | 2 +- ...ueue_reset_merge_status_second_run_spec.rb | 2 +- .../enqueue_reset_merge_status_spec.rb | 2 +- ...nqueue_verify_pages_domain_workers_spec.rb | 2 +- ...l_empty_finished_at_in_deployments_spec.rb | 2 +- spec/migrations/fill_file_store_spec.rb | 2 +- ..._productivity_analytics_start_date_spec.rb | 2 +- spec/migrations/fix_max_pages_size_spec.rb | 2 +- spec/migrations/fix_null_type_labels_spec.rb | 2 +- ..._pool_repository_source_project_id_spec.rb | 2 +- ...x_projects_without_project_feature_spec.rb | 2 +- .../fix_wrong_pages_access_level_spec.rb | 2 +- .../generate_lets_encrypt_private_key_spec.rb | 2 +- .../generate_missing_routes_spec.rb | 2 +- spec/migrations/import_common_metrics_spec.rb | 2 +- .../insert_project_hooks_plan_limits_spec.rb | 2 +- ...o_dev_ops_domain_to_cluster_domain_spec.rb | 2 +- ...s_to_protected_branches_in_batches_spec.rb | 2 +- ...igrate_commit_notes_mentions_to_db_spec.rb | 37 + ...te_discussion_id_on_promoted_epics_spec.rb | 2 +- .../migrate_forbidden_redirect_uris_spec.rb | 2 +- .../migrate_k8s_service_integration_spec.rb | 2 +- ..._legacy_artifacts_to_job_artifacts_spec.rb | 2 +- ...gacy_managed_clusters_to_unmanaged_spec.rb | 2 +- ...lusters_with_no_token_to_unmanaged_spec.rb | 2 +- ...grate_merge_request_mentions_to_db_spec.rb | 31 + .../migrate_null_wiki_access_levels_spec.rb | 2 +- ...ature_flags_scopes_target_user_ids_spec.rb | 2 +- .../migrations/move_limits_from_plans_spec.rb | 2 +- spec/migrations/nullify_users_role_spec.rb | 2 +- ...e_project_statistics_packages_size_spec.rb | 2 +- ...pe_on_approval_merge_request_rules_spec.rb | 2 +- ..._empty_extern_uid_auth0_identities_spec.rb | 2 +- ...ove_empty_github_service_templates_spec.rb | 2 +- ...e_packages_deprecated_dependencies_spec.rb | 2 +- .../remove_redundant_pipeline_stages_spec.rb | 2 +- ...ve_security_dashboard_feature_flag_spec.rb | 53 + ...lag_to_instance_security_dashboard_spec.rb | 53 + ...reschedule_builds_stages_migration_spec.rb | 2 +- ...mmits_count_for_merge_request_diff_spec.rb | 2 +- ...e_instance_administrators_group_id_spec.rb | 2 +- ...dule_digest_personal_access_tokens_spec.rb | 2 +- ...time_for_pages_domain_certificates_spec.rb | 2 +- ...schedule_link_lfs_objects_projects_spec.rb | 76 + .../schedule_migrate_security_scans_spec.rb | 68 + .../schedule_pages_metadata_migration_spec.rb | 2 +- ...late_merge_request_assignees_table_spec.rb | 2 +- ..._project_authorizations_second_run_spec.rb | 2 +- ...recalculate_project_authorizations_spec.rb | 2 +- .../schedule_runners_token_encryption_spec.rb | 2 +- ...nfidential_note_events_on_webhooks_spec.rb | 2 +- .../schedule_stages_index_migration_spec.rb | 2 +- .../schedule_sync_issuables_state_id_spec.rb | 2 +- ..._sync_issuables_state_id_where_nil_spec.rb | 2 +- .../schedule_to_archive_legacy_traces_spec.rb | 2 +- ...o_match_visibility_level_of_parent_spec.rb | 2 +- ...move_temporary_index_on_project_id_spec.rb | 2 +- .../set_issue_id_for_all_versions_spec.rb | 2 +- .../steal_fill_store_upload_spec.rb | 2 +- .../sync_issuables_state_id_spec.rb | 2 +- .../migrations/truncate_user_fullname_spec.rb | 2 +- ...ackage_requests_forwarding_default_spec.rb | 38 + ...ate_fingerprint_sha256_within_keys_spec.rb | 2 +- .../update_minimum_password_length_spec.rb | 2 +- ...te_project_import_visibility_level_spec.rb | 2 +- ...e_timestamp_softwarelicensespolicy_spec.rb | 2 +- .../cycle_analytics/project_stage_spec.rb | 6 +- spec/models/application_setting_spec.rb | 57 + spec/models/ci/build_spec.rb | 154 +- spec/models/ci/job_artifact_spec.rb | 31 +- spec/models/ci/pipeline_spec.rb | 154 +- spec/models/ci/processable_spec.rb | 24 + spec/models/ci/ref_spec.rb | 11 + .../applications/cert_manager_spec.rb | 6 +- .../applications/elastic_stack_spec.rb | 4 +- .../clusters/applications/ingress_spec.rb | 6 +- .../clusters/applications/knative_spec.rb | 57 + .../clusters/applications/prometheus_spec.rb | 75 +- spec/models/clusters/cluster_spec.rb | 106 +- spec/models/commit_range_spec.rb | 25 - spec/models/commit_spec.rb | 106 +- spec/models/concerns/avatarable_spec.rb | 2 +- .../blob_language_from_git_attributes_spec.rb | 13 +- spec/models/concerns/bulk_insert_safe_spec.rb | 144 +- .../bulk_insertable_associations_spec.rb | 233 + .../concerns/cache_markdown_field_spec.rb | 20 + spec/models/concerns/{ => ci}/has_ref_spec.rb | 2 +- spec/models/concerns/issuable_spec.rb | 2 - spec/models/concerns/milestoneish_spec.rb | 47 +- spec/models/concerns/reactive_caching_spec.rb | 37 + spec/models/concerns/spammable_spec.rb | 40 + spec/models/concerns/usage_statistics_spec.rb | 52 + spec/models/deployment_spec.rb | 15 + spec/models/environment_spec.rb | 63 +- spec/models/environment_status_spec.rb | 16 +- .../project_error_tracking_setting_spec.rb | 21 +- spec/models/group_spec.rb | 10 + spec/models/issue_spec.rb | 105 +- spec/models/key_spec.rb | 49 +- spec/models/label_link_spec.rb | 5 +- spec/models/lfs_object_spec.rb | 9 + spec/models/merge_request_diff_commit_spec.rb | 5 +- spec/models/merge_request_diff_file_spec.rb | 5 +- spec/models/merge_request_spec.rb | 91 +- spec/models/milestone_note_spec.rb | 18 + spec/models/milestone_spec.rb | 28 +- spec/models/namespace_spec.rb | 73 + spec/models/note_spec.rb | 174 +- spec/models/notification_recipient_spec.rb | 42 +- spec/models/notification_setting_spec.rb | 3 +- spec/models/pages_domain_spec.rb | 9 + spec/models/project_export_job_spec.rb | 19 + spec/models/project_import_state_spec.rb | 3 +- .../chat_message/push_message_spec.rb | 34 +- .../chat_notification_service_spec.rb | 23 + .../gitlab_issue_tracker_service_spec.rb | 12 +- .../project_services/jira_service_spec.rb | 30 +- .../prometheus_service_spec.rb | 9 + .../project_services/youtrack_service_spec.rb | 4 +- spec/models/project_spec.rb | 301 +- spec/models/project_wiki_spec.rb | 20 +- spec/models/protected_branch_spec.rb | 50 +- spec/models/release_spec.rb | 1 - spec/models/releases/link_spec.rb | 45 + spec/models/repository_spec.rb | 41 +- spec/models/resource_label_event_spec.rb | 4 + spec/models/resource_milestone_event_spec.rb | 55 + spec/models/resource_weight_event_spec.rb | 7 +- spec/models/serverless/domain_cluster_spec.rb | 8 +- spec/models/serverless/domain_spec.rb | 97 + spec/models/service_spec.rb | 56 +- spec/models/snippet_repository_spec.rb | 158 +- spec/models/snippet_spec.rb | 98 +- spec/models/upload_spec.rb | 30 + spec/models/user_detail_spec.rb | 14 + spec/models/user_highest_role_spec.rb | 13 + spec/models/user_spec.rb | 139 +- spec/models/wiki_page_spec.rb | 77 +- spec/models/x509_certificate_spec.rb | 22 + .../application_setting/term_policy_spec.rb | 2 +- .../ci/pipeline_schedule_policy_spec.rb | 6 +- spec/policies/note_policy_spec.rb | 107 + spec/policies/project_policy_spec.rb | 14 +- spec/policies/project_snippet_policy_spec.rb | 50 +- .../resource_label_event_policy_spec.rb | 8 +- spec/presenters/issue_presenter_spec.rb | 4 +- .../merge_request_presenter_spec.rb | 10 +- .../project_hook_presenter_spec.rb | 0 .../project_export_presenter_spec.rb | 92 + .../prometheus/alert_presenter_spec.rb | 53 +- .../service_hook_presenter_spec.rb | 0 .../presenters/snippet_blob_presenter_spec.rb | 91 +- spec/presenters/snippet_presenter_spec.rb | 20 + spec/requests/api/access_requests_spec.rb | 28 +- spec/requests/api/admin/sidekiq_spec.rb | 65 + .../api_guard/admin_mode_middleware_spec.rb | 35 + spec/requests/api/appearance_spec.rb | 20 +- spec/requests/api/applications_spec.rb | 30 +- spec/requests/api/award_emoji_spec.rb | 50 +- spec/requests/api/badges_spec.rb | 38 +- spec/requests/api/boards_spec.rb | 6 +- spec/requests/api/branches_spec.rb | 46 +- spec/requests/api/broadcast_messages_spec.rb | 66 +- spec/requests/api/commit_statuses_spec.rb | 48 +- spec/requests/api/commits_spec.rb | 110 +- spec/requests/api/deploy_keys_spec.rb | 50 +- spec/requests/api/deploy_tokens_spec.rb | 312 + spec/requests/api/deployments_spec.rb | 39 +- spec/requests/api/discussions_spec.rb | 2 +- spec/requests/api/doorkeeper_access_spec.rb | 8 +- spec/requests/api/environments_spec.rb | 46 +- spec/requests/api/error_tracking_spec.rb | 2 +- spec/requests/api/events_spec.rb | 24 +- spec/requests/api/features_spec.rb | 50 +- spec/requests/api/files_spec.rb | 134 +- .../api/graphql/boards/boards_query_spec.rb | 25 + .../api/graphql/gitlab_schema_spec.rb | 10 +- spec/requests/api/graphql/group_query_spec.rb | 2 +- .../admin/sidekiq_queues/delete_jobs_spec.rb | 71 + .../graphql/mutations/snippets/create_spec.rb | 4 +- .../mutations/snippets/mark_as_spam_spec.rb | 2 +- .../graphql/mutations/snippets/update_spec.rb | 8 +- spec/requests/api/graphql_spec.rb | 52 +- spec/requests/api/group_boards_spec.rb | 2 +- spec/requests/api/group_clusters_spec.rb | 40 +- spec/requests/api/group_export_spec.rb | 14 +- spec/requests/api/group_import_spec.rb | 18 +- spec/requests/api/group_labels_spec.rb | 66 +- spec/requests/api/group_variables_spec.rb | 47 +- spec/requests/api/groups_spec.rb | 238 +- spec/requests/api/helpers_spec.rb | 2 +- spec/requests/api/import_github_spec.rb | 4 +- spec/requests/api/internal/base_spec.rb | 338 +- spec/requests/api/internal/pages_spec.rb | 96 +- .../api/issues/put_projects_issues_spec.rb | 51 +- spec/requests/api/jobs_spec.rb | 112 +- spec/requests/api/keys_spec.rb | 25 +- spec/requests/api/labels_spec.rb | 88 +- spec/requests/api/lint_spec.rb | 8 +- spec/requests/api/lsif_data_spec.rb | 75 +- spec/requests/api/markdown_spec.rb | 14 +- spec/requests/api/members_spec.rb | 60 +- spec/requests/api/merge_request_diffs_spec.rb | 10 +- spec/requests/api/merge_requests_spec.rb | 286 +- spec/requests/api/namespaces_spec.rb | 22 +- spec/requests/api/notes_spec.rb | 18 +- .../api/notification_settings_spec.rb | 16 +- spec/requests/api/oauth_tokens_spec.rb | 6 +- spec/requests/api/pages_domains_spec.rb | 48 +- spec/requests/api/pipeline_schedules_spec.rb | 2 +- spec/requests/api/pipelines_spec.rb | 64 +- spec/requests/api/project_clusters_spec.rb | 40 +- .../project_container_repositories_spec.rb | 57 +- spec/requests/api/project_events_spec.rb | 18 +- spec/requests/api/project_export_spec.rb | 67 +- spec/requests/api/project_hooks_spec.rb | 38 +- spec/requests/api/project_import_spec.rb | 261 +- spec/requests/api/project_milestones_spec.rb | 18 +- spec/requests/api/project_snapshots_spec.rb | 8 +- spec/requests/api/project_snippets_spec.rb | 180 +- spec/requests/api/project_statistics_spec.rb | 8 +- spec/requests/api/project_templates_spec.rb | 38 +- spec/requests/api/projects_spec.rb | 550 +- spec/requests/api/protected_branches_spec.rb | 34 +- spec/requests/api/protected_tags_spec.rb | 24 +- spec/requests/api/release/links_spec.rb | 33 +- spec/requests/api/releases_spec.rb | 80 +- spec/requests/api/remote_mirrors_spec.rb | 73 +- spec/requests/api/repositories_spec.rb | 50 +- spec/requests/api/runner_spec.rb | 252 +- spec/requests/api/runners_spec.rb | 172 +- spec/requests/api/search_spec.rb | 42 +- spec/requests/api/services_spec.rb | 34 +- spec/requests/api/settings_spec.rb | 44 +- spec/requests/api/sidekiq_metrics_spec.rb | 8 +- spec/requests/api/snippets_spec.rb | 120 +- spec/requests/api/statistics_spec.rb | 6 +- spec/requests/api/submodules_spec.rb | 14 +- spec/requests/api/suggestions_spec.rb | 6 +- spec/requests/api/system_hooks_spec.rb | 22 +- spec/requests/api/tags_spec.rb | 30 +- .../api/task_completion_status_spec.rb | 2 +- spec/requests/api/templates_spec.rb | 16 +- spec/requests/api/todos_spec.rb | 12 +- spec/requests/api/triggers_spec.rb | 50 +- spec/requests/api/users_spec.rb | 482 +- spec/requests/api/variables_spec.rb | 44 +- spec/requests/api/version_spec.rb | 48 +- spec/requests/api/wikis_spec.rb | 32 +- spec/requests/git_http_spec.rb | 8 +- .../groups/milestones_controller_spec.rb | 46 +- .../registry/repositories_controller_spec.rb | 2 +- spec/requests/lfs_http_spec.rb | 32 +- spec/requests/sessions_spec.rb | 17 + spec/routing/project_routing_spec.rb | 6 + spec/rubocop/cop/ban_catch_throw_spec.rb | 30 + .../migration/add_column_with_default_spec.rb | 66 +- .../cop/migration/schedule_async_spec.rb | 152 + .../with_lock_retries_with_change_spec.rb | 43 + .../cop/scalability/idempotent_worker_spec.rb | 38 + spec/rubocop/migration_helpers_spec.rb | 56 + spec/serializers/build_details_entity_spec.rb | 2 +- .../cluster_application_entity_spec.rb | 18 + .../container_repository_entity_spec.rb | 12 +- spec/serializers/container_tag_entity_spec.rb | 12 +- .../serializers/deployment_serializer_spec.rb | 5 +- spec/serializers/environment_entity_spec.rb | 20 + .../serializers/group_variable_entity_spec.rb | 2 +- .../merge_request_serializer_spec.rb | 4 +- .../merge_request_widget_entity_spec.rb | 32 +- .../namespace_basic_entity_spec.rb | 2 +- .../pipeline_details_entity_spec.rb | 2 +- spec/serializers/pipeline_entity_spec.rb | 6 +- spec/serializers/pipeline_serializer_spec.rb | 4 +- .../serializers/project_import_entity_spec.rb | 2 +- spec/serializers/project_serializer_spec.rb | 2 +- .../serverless/domain_entity_spec.rb | 19 + .../boards/issues/list_service_spec.rb | 20 +- ...ate_cross_project_pipeline_service_spec.rb | 119 +- .../ci/create_job_artifacts_service_spec.rb | 82 +- .../custom_config_content_spec.rb | 57 +- .../ci/create_pipeline_service_spec.rb | 1 + .../ci/find_exposed_artifacts_service_spec.rb | 42 + .../ci/parse_dotenv_artifact_service_spec.rb | 260 + .../ci/pipeline_bridge_status_service_spec.rb | 18 + spec/services/ci/register_job_service_spec.rb | 26 +- spec/services/ci/retry_build_service_spec.rb | 30 +- .../ci/update_ci_ref_status_service_spec.rb | 169 + ...heck_installation_progress_service_spec.rb | 2 +- .../check_uninstall_progress_service_spec.rb | 2 +- .../applications/create_service_spec.rb | 20 +- .../applications/install_service_spec.rb | 2 +- .../applications/patch_service_spec.rb | 2 +- .../applications/uninstall_service_spec.rb | 2 +- .../applications/update_service_spec.rb | 21 +- .../applications/upgrade_service_spec.rb | 2 +- .../configure_istio_ingress_service_spec.rb | 32 + spec/services/clusters/update_service_spec.rb | 2 +- .../commits/cherry_pick_service_spec.rb | 12 - .../deployments/after_create_service_spec.rb | 22 +- .../link_merge_requests_service_spec.rb | 57 +- .../issue_details_service_spec.rb | 2 +- .../issue_update_service_spec.rb | 6 + spec/services/git/branch_push_service_spec.rb | 23 +- .../git/process_ref_changes_service_spec.rb | 36 +- .../deploy_tokens/create_service_spec.rb | 10 + .../import_export/export_service_spec.rb | 76 +- .../import_export/import_service_spec.rb | 75 +- .../clone/attributes_rewriter_spec.rb | 42 + .../common_system_notes_service_spec.rb | 44 +- spec/services/issues/close_service_spec.rb | 101 +- spec/services/issues/create_service_spec.rb | 8 + .../issues/import_csv_service_spec.rb | 50 + spec/services/issues/reopen_service_spec.rb | 10 + spec/services/issues/update_service_spec.rb | 62 +- spec/services/labels/transfer_service_spec.rb | 98 +- .../after_create_service_spec.rb | 71 + .../merge_requests/create_service_spec.rb | 51 +- .../merge_requests/merge_service_spec.rb | 4 +- .../merge_to_ref_service_spec.rb | 11 + .../merge_requests/refresh_service_spec.rb | 56 +- .../merge_requests/update_service_spec.rb | 8 + .../dashboard/clone_dashboard_service_spec.rb | 2 +- .../custom_metric_embed_service_spec.rb | 8 +- .../dashboard/default_embed_service_spec.rb | 2 +- .../dashboard/dynamic_embed_service_spec.rb | 8 +- .../grafana_metric_embed_service_spec.rb | 8 +- .../update_dashboard_service_spec.rb | 141 + .../closed_issues_count_service_spec.rb | 24 + .../milestones/issues_count_service_spec.rb | 24 + .../milestones/transfer_service_spec.rb | 19 + .../build_service_spec.rb} | 2 +- .../builder/default_spec.rb | 44 + spec/services/notification_service_spec.rb | 114 +- spec/services/pod_logs/base_service_spec.rb | 232 + .../pod_logs/elasticsearch_service_spec.rb | 222 + .../pod_logs/kubernetes_service_spec.rb | 166 + spec/services/post_receive_service_spec.rb | 272 +- .../projects/alerting/notify_service_spec.rb | 73 +- .../cleanup_tags_service_spec.rb | 86 +- spec/services/projects/create_service_spec.rb | 80 +- .../deploy_tokens/create_service_spec.rb | 10 + .../services/projects/destroy_service_spec.rb | 35 +- spec/services/projects/fork_service_spec.rb | 88 +- .../import_export/export_service_spec.rb | 57 +- spec/services/projects/import_service_spec.rb | 10 +- .../lfs_download_link_list_service_spec.rb | 137 +- .../lfs_pointers/lfs_link_service_spec.rb | 4 +- .../projects/lsif_data_service_spec.rb | 15 +- .../operations/update_service_spec.rb | 43 +- .../protect_default_branch_service_spec.rb | 14 +- .../projects/transfer_service_spec.rb | 12 +- .../projects/update_pages_service_spec.rb | 3 + .../update_repository_storage_service_spec.rb | 127 + spec/services/projects/update_service_spec.rb | 27 +- spec/services/releases/update_service_spec.rb | 6 - .../change_milestone_service_spec.rb | 13 + spec/services/search_service_spec.rb | 70 +- .../associate_domain_service_spec.rb | 74 + .../snippets/bulk_destroy_service_spec.rb | 161 + spec/services/snippets/create_service_spec.rb | 81 +- .../services/snippets/destroy_service_spec.rb | 81 +- spec/services/snippets/update_service_spec.rb | 127 +- .../spam/mark_as_spam_service_spec.rb | 2 +- spec/services/system_note_service_spec.rb | 10 + .../system_notes/issuables_service_spec.rb | 43 +- .../merge_requests_service_spec.rb | 2 +- spec/services/users/destroy_service_spec.rb | 54 + spec/services/users/update_service_spec.rb | 7 + .../x509_certificate_revoke_service_spec.rb | 43 + spec/spec_helper.rb | 25 +- spec/support/caching.rb | 15 + spec/support/capybara.rb | 40 +- .../helpers/filtered_search_helpers.rb | 4 +- spec/support/helpers/graphql_helpers.rb | 4 +- .../helpers/idempotent_worker_helper.rb | 15 + spec/support/helpers/kubernetes_helpers.rb | 6 +- spec/support/helpers/ldap_helpers.rb | 24 +- spec/support/helpers/login_helpers.rb | 13 +- .../helpers/metrics_dashboard_url_helpers.rb | 16 + spec/support/helpers/notification_helpers.rb | 2 +- spec/support/helpers/project_forks_helper.rb | 2 +- spec/support/helpers/test_env.rb | 60 +- spec/support/helpers/wait_for_requests.rb | 4 +- spec/support/helpers/wiki_helpers.rb | 5 + spec/support/helpers/workhorse_helpers.rb | 4 +- spec/support/import_export/common_util.rb | 4 +- .../import_export/configuration_helper.rb | 4 +- spec/support/matchers/exceed_query_limit.rb | 10 +- .../services/deploy_token_shared_examples.rb} | 11 +- ...uth_callbacks_controller_shared_context.rb | 2 +- ...and_project_boards_query_shared_context.rb | 50 + .../upload_type_check_shared_context.rb | 38 +- .../filters/inline_embeds_shared_examples.rb | 48 + ...inline_metrics_redactor_shared_examples.rb | 30 + .../deploy_token_shared_examples.rb | 22 + spec/support/shared_examples/csp.rb | 79 + .../features/deploy_token_shared_examples.rb | 27 + .../features/error_tracking_shared_example.rb | 22 +- ...user_dropdown_behaviors_shared_examples.rb | 2 +- .../wiki_file_attachments_shared_examples.rb | 4 +- .../mentions_migration_shared_examples.rb | 22 +- .../config/inheritable_shared_examples.rb | 8 +- .../project_tree_restorer_shared_examples.rb | 13 +- .../application_setting_shared_examples.rb | 47 +- ...r_application_helm_cert_shared_examples.rb | 42 +- ...ster_application_status_shared_examples.rb | 84 +- ...ter_application_version_shared_examples.rb | 6 +- ...lob_replicator_strategy_shared_examples.rb | 77 + .../bulk_insert_safe_shared_examples.rb | 40 + .../issue_tracker_service_shared_examples.rb | 4 + .../note_access_check_shared_examples.rb | 19 + ...attermost_notifications_shared_examples.rb | 50 +- .../move_quick_action_shared_examples.rb | 2 + .../api/discussions_shared_examples.rb | 56 + ...nd_project_boards_query_shared_examples.rb | 112 + .../api/time_tracking_shared_examples.rb | 2 +- .../requests/snippet_shared_examples.rb | 43 + .../shared_examples/resource_events.rb | 117 + .../diff_file_entity_shared_examples.rb | 2 +- .../issues_list_service_shared_examples.rb | 18 +- .../metrics/dashboard_shared_examples.rb | 22 + ...ository_storage_service_shared_examples.rb | 145 + ...hange_milestone_service_shared_examples.rb | 46 + ...mples.rb => measurable_shared_examples.rb} | 4 +- .../uploads/migration_shared_examples.rb | 31 + .../uploaders/upload_type_shared_examples.rb | 83 +- .../migrate_uploads_shared_examples.rb | 120 + .../views/pipeline_status_changes_email.rb | 78 + .../workers/idempotency_shared_examples.rb | 33 + .../exceed_query_limit_helpers_spec.rb | 34 + spec/tasks/gitlab/backup_rake_spec.rb | 67 +- spec/tasks/gitlab/check_rake_spec.rb | 8 +- .../tasks/gitlab/uploads/migrate_rake_spec.rb | 42 +- spec/tasks/gitlab/web_hook_rake_spec.rb | 9 +- spec/uploaders/avatar_uploader_spec.rb | 30 +- spec/uploaders/content_type_whitelist_spec.rb | 35 + spec/uploaders/favicon_uploader_spec.rb | 38 +- spec/uploaders/job_artifact_uploader_spec.rb | 7 + spec/uploaders/object_storage_spec.rb | 2 +- spec/uploaders/upload_type_check_spec.rb | 124 - .../migrate_uploads_worker_spec.rb | 109 - .../admin/sessions/new.html.haml_spec.rb | 2 +- .../sessions/two_factor.html.haml_spec.rb | 41 + .../gitlab_projects/new.html.haml_spec.rb | 7 +- .../nav/sidebar/_project.html.haml_spec.rb | 5 +- .../pipeline_failed_email.html.haml_spec.rb | 70 +- .../pipeline_fixed_email.html.haml_spec.rb | 10 + .../pipeline_fixed_email.text.erb_spec.rb | 10 + .../pipeline_success_email.html.haml_spec.rb | 54 +- .../pipeline_success_email.text.erb_spec.rb | 22 +- .../preferences/show.html.haml_spec.rb | 2 +- .../operations/show.html.haml_spec.rb | 2 +- .../milestones/_issuable.html.haml_spec.rb | 33 +- .../shared/milestones/_top.html.haml_spec.rb | 2 +- spec/workers/authorized_keys_worker_spec.rb | 57 + .../authorized_projects_worker_spec.rb | 17 + .../background_migration_worker_spec.rb | 10 +- .../concerns/application_worker_spec.rb | 41 +- .../notify_upon_death_spec.rb | 4 +- .../concerns/project_export_options_spec.rb | 41 + ...detect_repository_languages_worker_spec.rb | 2 +- spec/workers/every_sidekiq_worker_spec.rb | 30 +- ...re_build_instance_artifacts_worker_spec.rb | 2 +- spec/workers/expire_job_cache_worker_spec.rb | 32 +- spec/workers/gitlab_shell_worker_spec.rb | 33 +- .../notification_service_worker_spec.rb | 2 +- .../namespaces/root_statistics_worker_spec.rb | 2 +- .../schedule_aggregation_worker_spec.rb | 2 +- .../pipeline_notification_worker_spec.rb | 9 +- spec/workers/pipeline_schedule_worker_spec.rb | 4 +- ...pdate_ci_ref_status_worker_service_spec.rb | 18 + spec/workers/post_receive_spec.rb | 111 +- spec/workers/project_export_worker_spec.rb | 46 +- ...t_update_repository_storage_worker_spec.rb | 19 + .../remote_mirror_notification_worker_spec.rb | 4 +- spec/workers/repository_fork_worker_spec.rb | 32 +- .../run_pipeline_schedule_worker_spec.rb | 6 +- spec/workers/stuck_export_jobs_worker_spec.rb | 75 + ...date_external_pull_requests_worker_spec.rb | 4 +- .../update_merge_requests_worker_spec.rb | 12 - .../x509_certificate_revoke_worker_spec.rb | 41 + vendor/ingress/values.yaml | 5 + vendor/project_templates/gatsby.tar.gz | Bin 0 -> 79051 bytes yarn.lock | 1705 +- 3871 files changed, 110914 insertions(+), 50335 deletions(-) create mode 100644 .editorconfig create mode 100644 app/assets/images/cluster_app_logos/modsecurity.png create mode 100644 app/assets/javascripts/blob/components/blob_edit_content.vue create mode 100644 app/assets/javascripts/blob/components/blob_edit_header.vue create mode 100644 app/assets/javascripts/blob/notebook/notebook_viewer.vue create mode 100644 app/assets/javascripts/blob/pdf/pdf_viewer.vue create mode 100644 app/assets/javascripts/blob/pipeline_tour_success_modal.vue create mode 100644 app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue create mode 100644 app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js create mode 100644 app/assets/javascripts/blob/utils.js delete mode 100644 app/assets/javascripts/boards/components/issue_card_inner_scoped_label.vue create mode 100644 app/assets/javascripts/boards/queries/board.fragment.graphql create mode 100644 app/assets/javascripts/boards/queries/group_boards.query.graphql create mode 100644 app/assets/javascripts/boards/queries/project_boards.query.graphql create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue create mode 100644 app/assets/javascripts/ci_variable_list/constants.js create mode 100644 app/assets/javascripts/ci_variable_list/index.js create mode 100644 app/assets/javascripts/ci_variable_list/store/actions.js create mode 100644 app/assets/javascripts/ci_variable_list/store/index.js create mode 100644 app/assets/javascripts/ci_variable_list/store/mutation_types.js create mode 100644 app/assets/javascripts/ci_variable_list/store/mutations.js create mode 100644 app/assets/javascripts/ci_variable_list/store/state.js create mode 100644 app/assets/javascripts/ci_variable_list/store/utils.js create mode 100644 app/assets/javascripts/clusters/components/ingress_modsecurity_settings.vue create mode 100644 app/assets/javascripts/clusters_list/components/clusters.vue create mode 100644 app/assets/javascripts/clusters_list/constants.js create mode 100644 app/assets/javascripts/clusters_list/index.js create mode 100644 app/assets/javascripts/clusters_list/store/actions.js create mode 100644 app/assets/javascripts/clusters_list/store/index.js create mode 100644 app/assets/javascripts/clusters_list/store/mutation_types.js create mode 100644 app/assets/javascripts/clusters_list/store/mutations.js create mode 100644 app/assets/javascripts/clusters_list/store/state.js create mode 100644 app/assets/javascripts/confirm_modal.js delete mode 100644 app/assets/javascripts/diff_notes/components/resolve_discussion_btn.js create mode 100644 app/assets/javascripts/lib/utils/unit_format/formatter_factory.js create mode 100644 app/assets/javascripts/lib/utils/unit_format/index.js create mode 100644 app/assets/javascripts/logs/components/environment_logs.vue create mode 100644 app/assets/javascripts/logs/components/log_control_buttons.vue create mode 100644 app/assets/javascripts/logs/index.js create mode 100644 app/assets/javascripts/logs/stores/actions.js create mode 100644 app/assets/javascripts/logs/stores/getters.js create mode 100644 app/assets/javascripts/logs/stores/index.js create mode 100644 app/assets/javascripts/logs/stores/mutation_types.js create mode 100644 app/assets/javascripts/logs/stores/mutations.js create mode 100644 app/assets/javascripts/logs/stores/state.js create mode 100644 app/assets/javascripts/logs/utils.js create mode 100644 app/assets/javascripts/monitoring/components/charts/options.js delete mode 100644 app/assets/javascripts/monitoring/components/shared/prometheus_header.vue delete mode 100644 app/assets/javascripts/notes/services/notes_service.js create mode 100644 app/assets/javascripts/pages/admin/integrations/edit/index.js create mode 100644 app/assets/javascripts/pages/admin/sessions/index.js create mode 100644 app/assets/javascripts/pages/projects/logs/index.js create mode 100644 app/assets/javascripts/pages/projects/releases/show/index.js create mode 100644 app/assets/javascripts/pages/projects/settings/integrations/show/index.js create mode 100644 app/assets/javascripts/registry/explorer/components/project_policy_alert.vue create mode 100644 app/assets/javascripts/registry/explorer/stores/getters.js create mode 100644 app/assets/javascripts/releases/components/app_show.vue create mode 100644 app/assets/javascripts/releases/mount_show.js create mode 100644 app/assets/javascripts/sidebar/queries/sidebarDetails.query.graphql create mode 100644 app/assets/javascripts/sidebar/queries/sidebarDetailsForHealthStatusFeatureFlag.query.graphql create mode 100644 app/assets/javascripts/sidebar/queries/updateStatus.mutation.graphql create mode 100644 app/assets/javascripts/snippets/components/snippet_blob_edit.vue create mode 100644 app/assets/javascripts/snippets/components/snippet_description_edit.vue create mode 100644 app/assets/javascripts/snippets/components/snippet_visibility_edit.vue create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/deployment/deployment_action_button.vue create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/deployment/deployment_actions.vue delete mode 100644 app/assets/javascripts/vue_merge_request_widget/components/deployment/deployment_stop_button.vue create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_pipeline_tour.vue create mode 100644 app/assets/javascripts/vue_shared/components/confirm_modal.vue create mode 100644 app/assets/javascripts/vue_shared/components/gl_mentions.vue delete mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_value_regular_label.vue delete mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_value_scoped_label.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/dropdown_button.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/dropdown_contents.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/dropdown_contents_create_view.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/dropdown_contents_labels_view.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/dropdown_title.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/dropdown_value.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/labels_select_root.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/store/actions.js create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/store/getters.js create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/store/index.js create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/store/mutation_types.js create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/store/mutations.js create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/labels_select_vue/store/state.js create mode 100644 app/assets/javascripts/vue_shared/constants.js create mode 100644 app/assets/stylesheets/framework/editor-lite.scss create mode 100644 app/assets/stylesheets/page_bundles/_ide_monaco_overrides.scss create mode 100644 app/assets/stylesheets/vendors/tribute.scss create mode 100644 app/controllers/admin/concerns/authenticates_2fa_for_admin_mode.rb create mode 100644 app/controllers/admin/integrations_controller.rb create mode 100644 app/controllers/concerns/clientside_preview_csp.rb rename app/controllers/concerns/{invisible_captcha.rb => invisible_captcha_on_signup.rb} (97%) create mode 100644 app/controllers/concerns/static_object_external_storage_csp.rb create mode 100644 app/controllers/groups/deploy_tokens_controller.rb create mode 100644 app/controllers/projects/import/jira_controller.rb create mode 100644 app/controllers/projects/logs_controller.rb create mode 100644 app/finders/ci/jobs_finder.rb create mode 100644 app/finders/ci/pipeline_schedules_finder.rb create mode 100644 app/finders/ci/pipelines_finder.rb create mode 100644 app/finders/ci/pipelines_for_merge_request_finder.rb create mode 100644 app/finders/ci/runner_jobs_finder.rb create mode 100644 app/finders/fork_targets_finder.rb delete mode 100644 app/finders/jobs_finder.rb delete mode 100644 app/finders/pipeline_schedules_finder.rb delete mode 100644 app/finders/pipelines_finder.rb create mode 100644 app/finders/projects/export_job_finder.rb delete mode 100644 app/finders/runner_jobs_finder.rb create mode 100644 app/finders/serverless_domain_finder.rb create mode 100644 app/graphql/mutations/admin/sidekiq_queues/delete_jobs.rb create mode 100644 app/graphql/mutations/concerns/mutations/resolves_issuable.rb create mode 100644 app/graphql/types/admin/sidekiq_queues/delete_jobs_response_type.rb create mode 100644 app/helpers/suggest_pipeline_helper.rb create mode 100644 app/models/ci/ref.rb create mode 100644 app/models/concerns/bulk_insertable_associations.rb create mode 100644 app/models/concerns/ci/has_ref.rb delete mode 100644 app/models/concerns/has_ref.rb create mode 100644 app/models/concerns/milestone_eventable.rb create mode 100644 app/models/concerns/usage_statistics.rb create mode 100644 app/models/internal_id_enums.rb create mode 100644 app/models/jira_import_data.rb delete mode 100644 app/models/merge_request/pipelines.rb create mode 100644 app/models/milestone_note.rb create mode 100644 app/models/project_export_job.rb create mode 100644 app/models/resource_event.rb create mode 100644 app/models/resource_milestone_event.rb create mode 100644 app/models/serverless/domain.rb create mode 100644 app/models/serverless/lookup_path.rb create mode 100644 app/models/serverless/virtual_domain.rb create mode 100644 app/models/user_detail.rb create mode 100644 app/models/user_highest_role.rb create mode 100644 app/models/user_type_enums.rb create mode 100644 app/models/users_statistics.rb create mode 100644 app/policies/snippet_policy.rb rename app/presenters/{hooks => }/project_hook_presenter.rb (100%) create mode 100644 app/presenters/projects/import_export/project_export_presenter.rb rename app/presenters/{hooks => }/service_hook_presenter.rb (100%) create mode 100644 app/serializers/serverless/domain_entity.rb create mode 100644 app/services/ci/generate_coverage_reports_service.rb create mode 100644 app/services/ci/parse_dotenv_artifact_service.rb create mode 100644 app/services/ci/update_ci_ref_status_service.rb create mode 100644 app/services/concerns/deploy_token_methods.rb create mode 100644 app/services/concerns/incident_management/settings.rb delete mode 100644 app/services/deploy_tokens/create_service.rb create mode 100644 app/services/groups/deploy_tokens/create_service.rb create mode 100644 app/services/merge_requests/after_create_service.rb create mode 100644 app/services/metrics/dashboard/update_dashboard_service.rb create mode 100644 app/services/milestones/closed_issues_count_service.rb create mode 100644 app/services/milestones/issues_count_service.rb create mode 100644 app/services/notification_recipients/build_service.rb rename app/services/{notification_recipient_service.rb => notification_recipients/builder/base.rb} (55%) create mode 100644 app/services/notification_recipients/builder/default.rb create mode 100644 app/services/notification_recipients/builder/merge_request_unmergeable.rb create mode 100644 app/services/notification_recipients/builder/new_note.rb create mode 100644 app/services/notification_recipients/builder/new_release.rb create mode 100644 app/services/notification_recipients/builder/project_maintainers.rb create mode 100644 app/services/pod_logs/base_service.rb create mode 100644 app/services/pod_logs/elasticsearch_service.rb create mode 100644 app/services/pod_logs/kubernetes_service.rb create mode 100644 app/services/projects/deploy_tokens/create_service.rb create mode 100644 app/services/projects/update_repository_storage_service.rb create mode 100644 app/services/resource_events/change_milestone_service.rb create mode 100644 app/services/resource_events/synthetic_milestone_notes_builder_service.rb create mode 100644 app/services/serverless/associate_domain_service.rb create mode 100644 app/services/snippets/bulk_destroy_service.rb create mode 100644 app/services/x509_certificate_revoke_service.rb create mode 100644 app/uploaders/content_type_whitelist.rb delete mode 100644 app/uploaders/upload_type_check.rb create mode 100644 app/views/admin/integrations/_form.html.haml create mode 100644 app/views/admin/integrations/edit.html.haml create mode 100644 app/views/admin/sessions/_two_factor_otp.html.haml create mode 100644 app/views/admin/sessions/_two_factor_u2f.html.haml create mode 100644 app/views/admin/sessions/two_factor.html.haml create mode 100644 app/views/clusters/clusters/_advanced_settings_container.html.haml create mode 100644 app/views/clusters/clusters/_advanced_settings_tab.html.haml create mode 100644 app/views/clusters/clusters/_applications.html.haml create mode 100644 app/views/clusters/clusters/_applications_tab.html.haml delete mode 100644 app/views/clusters/clusters/_configure.html.haml create mode 100644 app/views/clusters/clusters/_details.html.haml create mode 100644 app/views/clusters/clusters/_details_tab.html.haml rename app/views/clusters/clusters/{_form.html.haml => _gitlab_integration_form.html.haml} (70%) rename app/views/clusters/{platforms/kubernetes/_form.html.haml => clusters/_provider_details_form.html.haml} (98%) delete mode 100644 app/views/discussions/_resolve_all.html.haml create mode 100644 app/views/notify/_successful_pipeline.html.haml create mode 100644 app/views/notify/_successful_pipeline.text.erb create mode 100644 app/views/notify/pipeline_fixed_email.html.haml create mode 100644 app/views/notify/pipeline_fixed_email.text.erb create mode 100644 app/views/projects/blob/_pipeline_tour_success.html.haml delete mode 100644 app/views/projects/deploy_tokens/_index.html.haml rename app/views/projects/hooks/{_index.html.haml => index.html.haml} (78%) create mode 100644 app/views/projects/import/jira/show.html.haml create mode 100644 app/views/projects/logs/empty_logs.html.haml create mode 100644 app/views/projects/logs/index.html.haml create mode 100644 app/views/projects/services/slack/_help.haml create mode 100644 app/views/projects/settings/operations/_configuration_banner.html.haml create mode 100644 app/views/projects/settings/operations/_prometheus.html.haml create mode 100644 app/views/shared/_default_branch_protection.html.haml rename app/views/{projects => shared}/deploy_tokens/_form.html.haml (88%) create mode 100644 app/views/shared/deploy_tokens/_index.html.haml rename app/views/{projects => shared}/deploy_tokens/_new_deploy_token.html.haml (100%) rename app/views/{projects => shared}/deploy_tokens/_revoke_modal.html.haml (56%) rename app/views/{projects => shared}/deploy_tokens/_table.html.haml (77%) create mode 100644 app/views/users/_cover_controls.html.haml create mode 100644 app/workers/authorized_keys_worker.rb delete mode 100644 app/workers/concerns/gitlab/github_import/notify_upon_death.rb create mode 100644 app/workers/concerns/gitlab/notify_upon_death.rb create mode 100644 app/workers/concerns/project_export_options.rb create mode 100644 app/workers/gitlab/import/advance_stage.rb create mode 100644 app/workers/pipeline_update_ci_ref_status_worker.rb create mode 100644 app/workers/project_update_repository_storage_worker.rb create mode 100644 app/workers/stuck_export_jobs_worker.rb create mode 100644 app/workers/x509_certificate_revoke_worker.rb create mode 100755 bin/actioncable create mode 100755 bin/background_jobs_sk create mode 100755 bin/background_jobs_sk_cluster create mode 100755 bin/sidekiq-cluster create mode 100644 cable/config.ru create mode 100644 config/initializers/0_eager_load_http_cookie.rb create mode 100644 config/initializers/actioncable.rb create mode 100644 config/initializers/active_record_force_reconnects.rb rename config/{initializers/0_inflections.rb => initializers_before_autoloader/000_inflections.rb} (97%) create mode 100644 config/initializers_before_autoloader/001_fast_gettext.rb rename lib/omni_auth/strategies/saml.rb => config/initializers_before_autoloader/100_patch_omniauth_saml.rb (91%) create mode 100644 config/puma_actioncable.example.development.rb delete mode 100644 danger/gemfile/Dangerfile create mode 100644 danger/karma/Dangerfile create mode 100644 danger/telemetry/Dangerfile create mode 100644 db/migrate/20191001170300_create_ci_ref.rb create mode 100644 db/migrate/20191111165017_add_fixed_pipeline_to_notification_settings.rb create mode 100644 db/migrate/20191114201118_make_created_at_not_null_in_design_management_versions.rb create mode 100644 db/migrate/20191123081456_add_dismissable_to_broadcast_messages.rb create mode 100644 db/migrate/20191206014412_add_image_to_design_management_designs_versions.rb create mode 100644 db/migrate/20200102140148_add_expanded_environment_name_to_ci_build_metadata.rb create mode 100644 db/migrate/20200203015140_add_id_to_design_management_designs_versions.rb create mode 100644 db/migrate/20200206141511_change_saml_provider_outer_forks_default.rb create mode 100644 db/migrate/20200207062728_add_default_branch_protection_to_namespaces.rb create mode 100644 db/migrate/20200211174946_add_auto_renew_to_gitlab_subscriptions.rb create mode 100644 db/migrate/20200212014653_rename_security_dashboard_feature_flag_to_instance_security_dashboard.rb create mode 100644 db/migrate/20200212133945_add_group_hooks_to_plan_limits.rb create mode 100644 db/migrate/20200212134201_insert_group_hooks_plan_limits.rb create mode 100644 db/migrate/20200213093702_add_email_restrictions_to_application_settings.rb create mode 100644 db/migrate/20200213155311_add_npm_package_requests_forwarding_to_application_settings.rb create mode 100644 db/migrate/20200215222507_drop_forked_project_links_fk.rb create mode 100644 db/migrate/20200215225103_drop_forked_project_links_table.rb create mode 100644 db/migrate/20200219105209_add_filepath_to_release_links.rb create mode 100644 db/migrate/20200219133859_add_environment_id_to_deployment_merge_requests.rb create mode 100644 db/migrate/20200219141307_add_environment_id_fk_to_deployment_merge_requests.rb create mode 100644 db/migrate/20200219142522_add_environment_id_merge_request_id_uniq_idx_to_deployment_merge_requests.rb create mode 100644 db/migrate/20200220180944_add_keep_divergent_refs.rb create mode 100644 db/migrate/20200221023320_add_index_on_pages_domain_on_domain_lowercase.rb create mode 100644 db/migrate/20200221074028_add_mr_metrics_first_approved_at.rb create mode 100644 db/migrate/20200221100514_create_users_statistics.rb create mode 100644 db/migrate/20200221105436_update_application_setting_npm_package_requests_forwarding_default.rb create mode 100644 db/migrate/20200221144534_drop_activate_prometheus_services_background_jobs.rb create mode 100644 db/migrate/20200222055543_add_confidential_to_note.rb create mode 100644 db/migrate/20200224020219_add_status_page_settings.rb create mode 100644 db/migrate/20200224163804_add_version_to_feature_flags_table.rb create mode 100644 db/migrate/20200224185814_add_project_subscriptions_to_plan_limits.rb create mode 100644 db/migrate/20200225111018_add_index_for_group_and_iid_search_to_epics.rb create mode 100644 db/migrate/20200225123228_insert_project_subscriptions_plan_limits.rb create mode 100644 db/migrate/20200226100614_create_requirements.rb create mode 100644 db/migrate/20200226100624_requirements_add_project_fk.rb create mode 100644 db/migrate/20200226100634_requirements_add_author_fk.rb create mode 100644 db/migrate/20200226162156_rename_closed_at_to_dismissed_at_in_vulnerabilities.rb create mode 100644 db/migrate/20200226162634_rename_closed_by_to_dismissed_by_in_vulnerabilities.rb create mode 100644 db/migrate/20200227164113_create_scim_identities.rb create mode 100644 db/migrate/20200227165129_create_user_details.rb create mode 100644 db/migrate/20200228160542_create_ci_sources_projects.rb create mode 100644 db/migrate/20200303055348_add_expires_at_to_keys.rb create mode 100644 db/migrate/20200303074328_add_index_on_snippet_description.rb create mode 100644 db/migrate/20200304085423_add_user_type.rb create mode 100644 db/migrate/20200304090155_add_user_type_index.rb create mode 100644 db/migrate/20200304121828_add_ci_sources_project_pipeline_foreign_key.rb create mode 100644 db/migrate/20200304121844_add_ci_sources_project_source_project_foreign_key.rb create mode 100644 db/migrate/20200304160800_add_index_services_on_template.rb create mode 100644 db/migrate/20200304160801_delete_template_services_duplicated_by_type.rb create mode 100644 db/migrate/20200304160823_add_index_to_service_unique_template_per_type.rb create mode 100644 db/migrate/20200305121159_add_merge_request_metrics_first_reassigned_at.rb create mode 100644 db/migrate/20200305151736_delete_template_project_services.rb create mode 100644 db/migrate/20200306095654_add_merge_request_assignee_created_at.rb create mode 100644 db/migrate/20200306160521_add_index_on_author_id_and_created_at_to_events.rb create mode 100644 db/migrate/20200306170211_add_index_on_author_id_and_id_and_created_at_to_issues.rb create mode 100644 db/migrate/20200306170321_add_index_on_user_id_and_created_at_to_ci_pipelines.rb create mode 100644 db/migrate/20200306170531_add_index_on_author_id_and_created_at_to_todos.rb create mode 100644 db/migrate/20200306192548_add_index_on_project_id_and_type_to_services.rb create mode 100644 db/migrate/20200306193236_add_index_on_creator_id_and_created_at_to_projects.rb create mode 100644 db/migrate/20200309140540_add_index_on_project_id_and_repository_access_level_to_project_features.rb create mode 100644 db/migrate/20200309162244_add_open_project_tracker_data.rb create mode 100644 db/migrate/20200309195209_add_index_on_project_id_and_builds_access_level_to_project_features.rb create mode 100644 db/migrate/20200309195710_add_index_on_mirror_and_creator_id_and_created_at_to_projects.rb create mode 100644 db/migrate/20200310123229_add_index_on_enabled_and_provider_type_and_id_to_clusters.rb create mode 100644 db/migrate/20200310132654_add_instance_to_services.rb create mode 100644 db/migrate/20200310133822_add_index_on_author_id_and_id_and_created_at_to_notes.rb create mode 100644 db/migrate/20200310135823_add_index_to_service_unique_instance_per_type.rb create mode 100644 db/migrate/20200310145304_add_runtime_created_to_ci_job_variables.rb create mode 100644 db/migrate/20200311084025_add_index_on_user_id_status_created_at_to_deployments.rb create mode 100644 db/migrate/20200311093210_create_user_highest_roles.rb create mode 100644 db/migrate/20200311094020_add_index_on_id_and_status_to_deployments.rb create mode 100644 db/migrate/20200311141053_add_ci_pipeline_schedules_to_plan_limits.rb create mode 100644 db/migrate/20200311141943_insert_ci_pipeline_schedules_plan_limits.rb create mode 100644 db/migrate/20200311165635_create_project_export_jobs.rb create mode 100644 db/migrate/20200312163407_add_index_on_id_and_service_desk_enabled_to_projects.rb create mode 100644 db/migrate/20200313123934_add_index_on_user_id_type_source_type_ldap_and_created_at_to_members.rb create mode 100644 db/migrate/20200325152327_add_seat_link_enabled_to_application_settings.rb create mode 100644 db/post_migrate/20200124110831_migrate_design_notes_mentions_to_db.rb create mode 100644 db/post_migrate/20200128132510_add_temporary_index_for_notes_with_mentions.rb create mode 100644 db/post_migrate/20200128133510_cleanup_empty_commit_user_mentions.rb create mode 100644 db/post_migrate/20200128134110_migrate_commit_notes_mentions_to_db.rb create mode 100644 db/post_migrate/20200128210353_cleanup_optimistic_locking_nulls.rb create mode 100644 db/post_migrate/20200211155000_cleanup_empty_merge_request_mentions.rb create mode 100644 db/post_migrate/20200211155100_add_temporary_merge_request_with_mentions_index.rb create mode 100644 db/post_migrate/20200211155539_migrate_merge_request_mentions_to_db.rb create mode 100644 db/post_migrate/20200214034836_remove_security_dashboard_feature_flag.rb create mode 100644 db/post_migrate/20200214214934_create_environment_for_self_monitoring_project.rb create mode 100644 db/post_migrate/20200217223651_add_index_to_job_artifact_secure_reports.rb create mode 100644 db/post_migrate/20200217225719_schedule_migrate_security_scans.rb create mode 100644 db/post_migrate/20200219183456_remove_issue_state_indexes.rb create mode 100644 db/post_migrate/20200219184219_remove_merge_request_state_indexes.rb create mode 100644 db/post_migrate/20200219193058_remove_state_from_issues.rb create mode 100644 db/post_migrate/20200219193117_remove_state_from_merge_requests.rb create mode 100644 db/post_migrate/20200221142216_remove_repository_storage_from_snippets.rb create mode 100644 db/post_migrate/20200226162239_cleanup_closed_at_rename_in_vulnerabilities.rb create mode 100644 db/post_migrate/20200226162723_cleanup_closed_by_rename_in_vulnerabilities.rb create mode 100644 db/post_migrate/20200227140242_update_occurrence_severity_column.rb create mode 100644 db/post_migrate/20200302142052_update_vulnerability_severity_column.rb create mode 100644 db/post_migrate/20200304211738_remove_file_type_from_packages_package_files.rb create mode 100644 db/post_migrate/20200310075115_schedule_link_lfs_objects_projects.rb create mode 100644 db/post_migrate/20200310135818_remove_temporary_promoted_notes_index.rb create mode 100644 db/post_migrate/20200311192351_add_index_on_noteable_type_and_noteable_id_to_sent_notifications.rb create mode 100644 derailed-benchmarks/.gitlab-ci.yml delete mode 100644 doc/.linting/vale/styles/gitlab/Contractions.yml delete mode 100644 doc/.linting/vale/styles/gitlab/LatinTerms.yml delete mode 100644 doc/.linting/vale/styles/gitlab/OxfordComma.yml delete mode 100644 doc/.linting/vale/styles/gitlab/SentenceSpacing.yml delete mode 100644 doc/.linting/vale/styles/gitlab/Substitutions.yml create mode 100644 doc/.vale/gitlab/Contractions.yml create mode 100644 doc/.vale/gitlab/FirstPerson.yml create mode 100644 doc/.vale/gitlab/InternalLinkExtension.yml create mode 100644 doc/.vale/gitlab/LatinTerms.yml create mode 100644 doc/.vale/gitlab/OxfordComma.yml create mode 100644 doc/.vale/gitlab/RelativeLinks.yml create mode 100644 doc/.vale/gitlab/SentenceSpacing.yml create mode 100644 doc/.vale/gitlab/Substitutions.yml create mode 100644 doc/administration/auth/cognito.md create mode 100644 doc/administration/gitaly/img/praefect_architecture_v12_9.png create mode 100644 doc/administration/high_availability/object_storage.md create mode 100644 doc/api/admin_sidekiq_queues.md create mode 100644 doc/api/deploy_tokens.md create mode 100644 doc/api/group_activity_analytics.md create mode 100644 doc/api/merge_trains.md create mode 100644 doc/api/remote_mirrors.md delete mode 100644 doc/ci/img/collapsible_log_v12_6.png create mode 100644 doc/ci/img/ecs_dashboard_v12_9.png create mode 100644 doc/ci/img/environments_deployment_cluster_v12_8.png create mode 100644 doc/ci/pipelines/img/collapsible_log_v12_6.png rename doc/{user/project => ci}/pipelines/img/job_artifacts_browser.png (100%) rename doc/{user/project => ci}/pipelines/img/job_artifacts_browser_button.png (100%) rename doc/{user/project => ci}/pipelines/img/job_artifacts_builds_page.png (100%) rename doc/{user/project => ci}/pipelines/img/job_artifacts_pipelines_page.png (100%) rename doc/ci/{ => pipelines}/img/job_failure_reason.png (100%) rename doc/{user/project => ci}/pipelines/img/job_latest_artifacts_browser.png (100%) rename doc/ci/{ => pipelines}/img/manual_job_variables.png (100%) rename doc/ci/{ => pipelines}/img/pipeline-delete.png (100%) rename doc/ci/{ => pipelines}/img/pipeline_incremental_rollout.png (100%) rename doc/{user/project => ci}/pipelines/img/pipeline_schedule_play.png (100%) rename doc/{user/project => ci}/pipelines/img/pipeline_schedule_variables.png (100%) rename doc/{user/project => ci}/pipelines/img/pipeline_schedules_list.png (100%) rename doc/{user/project => ci}/pipelines/img/pipeline_schedules_new_form.png (100%) rename doc/{user/project => ci}/pipelines/img/pipeline_schedules_ownership.png (100%) rename doc/ci/{ => pipelines}/img/pipelines.png (100%) create mode 100644 doc/ci/pipelines/img/pipelines_duration_chart.png rename doc/ci/{ => pipelines}/img/pipelines_grouped.png (100%) rename doc/ci/{ => pipelines}/img/pipelines_index.png (100%) rename doc/ci/{ => pipelines}/img/pipelines_mini_graph.png (100%) rename doc/ci/{ => pipelines}/img/pipelines_mini_graph_simple.png (100%) rename doc/ci/{ => pipelines}/img/pipelines_mini_graph_sorting.png (100%) rename doc/{user/project => ci}/pipelines/img/pipelines_settings_badges.png (100%) rename doc/{user/project => ci}/pipelines/img/pipelines_settings_test_coverage.png (100%) create mode 100644 doc/ci/pipelines/img/pipelines_success_chart.png rename doc/{user/project => ci}/pipelines/img/pipelines_test_coverage_build.png (100%) rename doc/{user/project => ci}/pipelines/img/pipelines_test_coverage_mr_widget.png (100%) create mode 100644 doc/ci/pipelines/index.md create mode 100644 doc/ci/pipelines/job_artifacts.md create mode 100644 doc/ci/pipelines/pipeline_architectures.md create mode 100644 doc/ci/pipelines/schedules.md create mode 100644 doc/ci/pipelines/settings.md delete mode 100644 doc/ci/variables/img/new_custom_variables_example.png create mode 100644 doc/development/database/add_foreign_key_to_existing_column.md create mode 100644 doc/development/fe_guide/dependencies.md create mode 100644 doc/development/insert_into_tables_in_batches.md create mode 100644 doc/development/integrations/secure_partner_integration.md create mode 100644 doc/development/rails_initializers.md create mode 100644 doc/development/reference_processing.md create mode 100644 doc/development/testing_guide/end_to_end/rspec_metadata_tests.md create mode 100644 doc/development/testing_guide/end_to_end/running_tests_that_require_special_setup.md create mode 100644 doc/integration/img/jira_dev_panel_setup_com_1.png create mode 100644 doc/integration/img/jira_dev_panel_setup_com_2.png create mode 100644 doc/integration/img/jira_dev_panel_setup_com_3.png create mode 100644 doc/telemetry/backend.md create mode 100644 doc/telemetry/frontend.md create mode 100644 doc/telemetry/index.md create mode 100644 doc/topics/airgap/index.md create mode 100644 doc/topics/autodevops/upgrading_postgresql.md delete mode 100644 doc/topics/web_application_firewall/img/guide_waf_ingress_installation.png create mode 100644 doc/topics/web_application_firewall/img/guide_waf_ingress_installation_v12_9.png create mode 100644 doc/topics/web_application_firewall/img/guide_waf_ingress_save_changes_v12_9.png create mode 100644 doc/user/admin_area/settings/gitaly_timeouts.md create mode 100644 doc/user/admin_area/settings/img/admin_package_registry_npm_package_requests_forward.png create mode 100644 doc/user/admin_area/settings/img/gitaly_timeouts.png create mode 100644 doc/user/analytics/img/label_based_stage_vsm_v12_9.png create mode 100644 doc/user/analytics/img/new_vsm_stage_v12_9.png create mode 100644 doc/user/analytics/img/vsm_stage_list_v12_9.png delete mode 100644 doc/user/application_security/container_scanning/img/container_scanning.png create mode 100644 doc/user/application_security/container_scanning/img/container_scanning_v12_9.png delete mode 100644 doc/user/application_security/dast/img/dast_all.png create mode 100644 doc/user/application_security/dast/img/dast_all_v12_9.png delete mode 100644 doc/user/application_security/dast/img/dast_single.png create mode 100644 doc/user/application_security/dast/img/dast_single_v12_9.png create mode 100644 doc/user/application_security/img/multi_select_v12_9.png create mode 100644 doc/user/application_security/img/outdated_report_branch_v12_9.png create mode 100644 doc/user/application_security/img/outdated_report_pipeline_v12_9.png delete mode 100644 doc/user/application_security/img/security_configuration_page_v12_6.png create mode 100644 doc/user/application_security/img/security_configuration_page_v12_9.png create mode 100644 doc/user/application_security/offline_deployments/index.md delete mode 100644 doc/user/application_security/sast/img/sast.png create mode 100644 doc/user/application_security/sast/img/sast_v12_9.png create mode 100644 doc/user/clusters/img/threat_monitoring_v12_9.png rename doc/user/{application_security => compliance}/compliance_dashboard/img/compliance_dashboard_v12_8.png (100%) create mode 100644 doc/user/compliance/compliance_dashboard/index.md create mode 100644 doc/user/compliance/index.md rename doc/user/{application_security => compliance}/license_compliance/img/license_compliance.png (100%) rename doc/user/{application_security => compliance}/license_compliance/img/license_compliance_add_license_v12_3.png (100%) rename doc/user/{application_security => compliance}/license_compliance/img/license_compliance_decision.png (100%) rename doc/user/{application_security => compliance}/license_compliance/img/license_compliance_pipeline_tab_v12_3.png (100%) rename doc/user/{application_security => compliance}/license_compliance/img/license_compliance_search_v12_3.png (100%) rename doc/user/{application_security => compliance}/license_compliance/img/license_compliance_settings_v12_3.png (100%) rename doc/user/{application_security => compliance}/license_compliance/img/license_list_v12_6.png (100%) create mode 100644 doc/user/compliance/license_compliance/img/policies_maintainer_add_v12_9.png create mode 100644 doc/user/compliance/license_compliance/img/policies_maintainer_edit_v12_9.png create mode 100644 doc/user/compliance/license_compliance/img/policies_v12_9.png create mode 100644 doc/user/compliance/license_compliance/index.md delete mode 100644 doc/user/group/epics/img/epic_view_roadmap_v12.3.png create mode 100644 doc/user/group/epics/img/epic_view_roadmap_v12_9.png delete mode 100644 doc/user/group/roadmap/img/roadmap_view.png create mode 100644 doc/user/group/roadmap/img/roadmap_view_v12_9.png delete mode 100644 doc/user/project/clusters/img/kubernetes_pod_logs_v12_8.png create mode 100644 doc/user/project/clusters/img/kubernetes_pod_logs_v12_9.png delete mode 100644 doc/user/project/clusters/serverless/img/deploy-stage.png create mode 100644 doc/user/project/clusters/serverless/img/function-list_v12_7.png delete mode 100644 doc/user/project/clusters/serverless/img/knative-app.png create mode 100644 doc/user/project/clusters/serverless/img/sam-api-endpoint.png create mode 100644 doc/user/project/clusters/serverless/img/sam-complete-raw.png rename doc/user/project/img/{issue_boards_multi_select.png => issue_boards_multi_select_v12_4.png} (100%) create mode 100644 doc/user/project/integrations/img/prometheus_cluster_health_embed_v12_9.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_edit_metric_link_v_12_9.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_label_variable_shorthand.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_label_variables.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_repeated_label.png create mode 100644 doc/user/project/integrations/prometheus_units.md create mode 100644 doc/user/project/issues/img/design_drag_and_drop_uploads_v12_9.png create mode 100644 doc/user/project/issues/img/issue_health_status_v12_9.png create mode 100644 doc/user/project/merge_requests/accessibility_testing.md create mode 100644 doc/user/project/merge_requests/img/cherry_pick_mr_timeline_v12_9.png create mode 100644 doc/user/project/merge_requests/img/test_coverage_visualization_v12_9.png create mode 100644 doc/user/project/merge_requests/test_coverage_visualization.md create mode 100644 doc/user/project/releases/img/release_with_milestone_v12_9.png create mode 100644 doc/user/project/releases/img/releases_v12_9.png delete mode 100644 doc/user/project/web_ide/img/commit_changes_v12_3.png create mode 100644 doc/user/project/web_ide/img/commit_changes_v12_9.png create mode 100644 lib/api/admin/sidekiq.rb create mode 100644 lib/api/deploy_tokens.rb create mode 100644 lib/api/entities/deploy_token.rb create mode 100644 lib/api/entities/deploy_token_with_token.rb rename lib/api/entities/{internal.rb => internal/pages/lookup_path.rb} (65%) create mode 100644 lib/api/entities/internal/pages/virtual_domain.rb create mode 100644 lib/api/entities/internal/serverless/lookup_path.rb create mode 100644 lib/api/entities/internal/serverless/virtual_domain.rb create mode 100644 lib/api/entities/milestone_with_stats.rb create mode 100644 lib/api/entities/note_with_gitlab_employee_badge.rb create mode 100644 lib/api/entities/project_upload.rb create mode 100644 lib/api/entities/user_with_gitlab_employee_badge.rb create mode 100644 lib/banzai/filter/broadcast_message_placeholders_filter.rb create mode 100644 lib/gitlab/auth/key_status_checker.rb create mode 100644 lib/gitlab/background_migration/backfill_snippet_repositories.rb create mode 100644 lib/gitlab/background_migration/cleanup_optimistic_locking_nulls.rb create mode 100644 lib/gitlab/background_migration/link_lfs_objects_projects.rb create mode 100644 lib/gitlab/background_migration/migrate_security_scans.rb create mode 100644 lib/gitlab/background_migration/remove_undefined_occurrence_severity_level.rb create mode 100644 lib/gitlab/background_migration/remove_undefined_vulnerability_severity_level.rb delete mode 100644 lib/gitlab/background_migration/update_authorized_keys_file_since.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/commit.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/commit_user_mention.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/design_management/design.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/design_user_mention.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/merge_request.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/merge_request_user_mention.rb create mode 100644 lib/gitlab/cache/import/caching.rb create mode 100644 lib/gitlab/checks/push_file_count_check.rb create mode 100644 lib/gitlab/checks/snippet_check.rb create mode 100644 lib/gitlab/ci/artifact_file_reader.rb create mode 100644 lib/gitlab/ci/config/entry/inherit.rb create mode 100644 lib/gitlab/ci/config/entry/inherit/default.rb create mode 100644 lib/gitlab/ci/config/entry/inherit/variables.rb create mode 100644 lib/gitlab/ci/config/entry/processable.rb create mode 100644 lib/gitlab/ci/config/external/file/artifact.rb create mode 100644 lib/gitlab/ci/parsers/coverage/cobertura.rb create mode 100644 lib/gitlab/ci/pipeline/chain/build/associations.rb create mode 100644 lib/gitlab/ci/reports/coverage_reports.rb create mode 100644 lib/gitlab/ci/templates/Deploy-ECS.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/Verify/Accessibility.gitlab-ci.yml create mode 100644 lib/gitlab/config_checker/puma_rugged_checker.rb create mode 100644 lib/gitlab/database/connection_timer.rb create mode 100644 lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb create mode 100644 lib/gitlab/elasticsearch/logs.rb create mode 100644 lib/gitlab/email.rb delete mode 100644 lib/gitlab/github_import/caching.rb create mode 100644 lib/gitlab/graphql/pagination/offset_active_record_relation_connection.rb create mode 100644 lib/gitlab/graphql/pagination/relations/offset_active_record_relation.rb create mode 100644 lib/gitlab/graphql/timeout.rb create mode 100644 lib/gitlab/import_export/after_export_strategies/move_file_strategy.rb create mode 100644 lib/gitlab/import_export/base/object_builder.rb create mode 100644 lib/gitlab/import_export/base/relation_factory.rb delete mode 100644 lib/gitlab/import_export/base_object_builder.rb delete mode 100644 lib/gitlab/import_export/base_relation_factory.rb rename lib/gitlab/import_export/{group_import_export.yml => group/import_export.yml} (98%) create mode 100644 lib/gitlab/import_export/group/object_builder.rb create mode 100644 lib/gitlab/import_export/group/relation_factory.rb create mode 100644 lib/gitlab/import_export/group/tree_restorer.rb create mode 100644 lib/gitlab/import_export/group/tree_saver.rb delete mode 100644 lib/gitlab/import_export/group_object_builder.rb delete mode 100644 lib/gitlab/import_export/group_project_object_builder.rb delete mode 100644 lib/gitlab/import_export/group_relation_factory.rb delete mode 100644 lib/gitlab/import_export/group_tree_restorer.rb delete mode 100644 lib/gitlab/import_export/group_tree_saver.rb create mode 100644 lib/gitlab/import_export/json/legacy_reader.rb create mode 100644 lib/gitlab/import_export/json/legacy_writer.rb create mode 100644 lib/gitlab/import_export/json/streaming_serializer.rb rename lib/gitlab/import_export/{relation_tree_saver.rb => legacy_relation_tree_saver.rb} (88%) create mode 100644 lib/gitlab/import_export/project/base_task.rb create mode 100644 lib/gitlab/import_export/project/export_task.rb rename lib/gitlab/import_export/{ => project}/import_export.yml (97%) create mode 100644 lib/gitlab/import_export/project/import_task.rb create mode 100644 lib/gitlab/import_export/project/legacy_tree_saver.rb create mode 100644 lib/gitlab/import_export/project/object_builder.rb create mode 100644 lib/gitlab/import_export/project/relation_factory.rb create mode 100644 lib/gitlab/import_export/project/tree_restorer.rb create mode 100644 lib/gitlab/import_export/project/tree_saver.rb delete mode 100644 lib/gitlab/import_export/project_relation_factory.rb delete mode 100644 lib/gitlab/import_export/project_tree_loader.rb delete mode 100644 lib/gitlab/import_export/project_tree_restorer.rb delete mode 100644 lib/gitlab/import_export/project_tree_saver.rb delete mode 100644 lib/gitlab/import_export/relation_rename_service.rb create mode 100644 lib/gitlab/import_export/snippet_repo_restorer.rb create mode 100644 lib/gitlab/import_export/snippet_repo_saver.rb create mode 100644 lib/gitlab/import_export/snippets_repo_restorer.rb create mode 100644 lib/gitlab/import_export/snippets_repo_saver.rb create mode 100644 lib/gitlab/lograge/custom_options.rb create mode 100644 lib/gitlab/omniauth_logging/json_formatter.rb create mode 100644 lib/gitlab/process_memory_cache.rb create mode 100644 lib/gitlab/rate_limit_helpers.rb create mode 100644 lib/gitlab/reactive_cache_set_cache.rb create mode 100644 lib/gitlab/redacted_search_results_logger.rb delete mode 100644 lib/gitlab/serverless/domain.rb delete mode 100644 lib/gitlab/serverless/function_uri.rb create mode 100644 lib/gitlab/set_cache.rb create mode 100644 lib/gitlab/sidekiq_cluster.rb create mode 100644 lib/gitlab/sidekiq_cluster/cli.rb create mode 100644 lib/gitlab/sidekiq_logging/client_logger.rb create mode 100644 lib/gitlab/sidekiq_logging/deduplication_logger.rb create mode 100644 lib/gitlab/sidekiq_logging/logs_jobs.rb create mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs.rb create mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs/client.rb create mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb create mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs/server.rb create mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies.rb create mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing.rb create mode 100644 lib/gitlab/sidekiq_queue.rb create mode 100644 lib/gitlab/testing/clear_thread_memory_cache_middleware.rb delete mode 100644 lib/gitlab/tracing.rb create mode 100644 lib/gitlab/url_blockers/domain_whitelist_entry.rb create mode 100644 lib/gitlab/url_blockers/ip_whitelist_entry.rb create mode 100644 lib/gitlab/usage_counters/common.rb create mode 100644 lib/gitlab/usage_counters/pod_logs.rb create mode 100644 lib/gitlab/user_access_snippet.rb create mode 100644 lib/gitlab/utils/json_size_estimator.rb create mode 100644 lib/gitlab/utils/measuring.rb create mode 100644 lib/gitlab/with_request_store.rb create mode 100644 lib/grafana/time_window.rb create mode 100644 lib/grafana/validator.rb create mode 100644 lib/tasks/cleanup.rake create mode 100644 lib/tasks/gitlab/import_export/export.rake delete mode 100644 qa/qa/page/project/operations/metrics.rb create mode 100644 qa/qa/page/project/operations/metrics/show.rb create mode 100644 qa/qa/service/cluster_provider/k3s.rb create mode 100644 qa/qa/service/docker_run/k3s.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb create mode 100644 qa/spec/service/docker_run/k3s_spec.rb create mode 100644 rubocop/cop/ban_catch_throw.rb create mode 100644 rubocop/cop/migration/schedule_async.rb create mode 100644 rubocop/cop/migration/with_lock_retries_with_change.rb create mode 100644 rubocop/cop/scalability/idempotent_worker.rb create mode 100644 scripts/frontend/block_dependencies.js create mode 100644 scripts/frontend/merge_coverage_frontend.js create mode 100644 scripts/frontend/parallel_ci_sequencer.js create mode 100755 scripts/gemfile_lock_changed.sh create mode 100644 spec/bin/sidekiq_cluster_spec.rb create mode 100644 spec/controllers/admin/integrations_controller_spec.rb create mode 100644 spec/controllers/projects/import/jira_controller_spec.rb create mode 100644 spec/controllers/projects/logs_controller_spec.rb create mode 100644 spec/factories/ci/ref.rb create mode 100644 spec/factories/ci/test_case.rb create mode 100644 spec/factories/project_export_jobs.rb create mode 100644 spec/factories/resource_milestone_event.rb create mode 100644 spec/factories/serverless/domain.rb create mode 100644 spec/factories/user_details.rb create mode 100644 spec/factories/user_highest_roles.rb create mode 100644 spec/features/admin/admin_mode/login_spec.rb create mode 100644 spec/features/admin/admin_mode/logout_spec.rb delete mode 100644 spec/features/container_registry_spec.rb create mode 100644 spec/features/error_tracking/user_filters_errors_by_status_spec.rb create mode 100644 spec/features/groups/container_registry_spec.rb create mode 100644 spec/features/ide/clientside_preview_csp_spec.rb create mode 100644 spec/features/ide/static_object_external_storage_csp_spec.rb create mode 100644 spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb create mode 100644 spec/features/projects/container_registry_spec.rb create mode 100644 spec/features/projects/releases/user_views_edit_release_spec.rb create mode 100644 spec/features/projects/releases/user_views_release_spec.rb create mode 100644 spec/features/projects/settings/ci_cd_settings_spec.rb rename spec/features/projects/settings/{integration_settings_spec.rb => webhooks_settings_spec.rb} (89%) rename spec/finders/{ => ci}/jobs_finder_spec.rb (98%) rename spec/finders/{ => ci}/pipeline_schedules_finder_spec.rb (96%) rename spec/finders/{ => ci}/pipelines_finder_spec.rb (99%) rename spec/{models/merge_request/pipelines_spec.rb => finders/ci/pipelines_for_merge_request_finder_spec.rb} (99%) rename spec/finders/{ => ci}/runner_jobs_finder_spec.rb (98%) create mode 100644 spec/finders/fork_targets_finder_spec.rb create mode 100644 spec/finders/projects/export_job_finder_spec.rb create mode 100644 spec/finders/serverless_domain_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/internal/serverless/lookup_path.json create mode 100644 spec/fixtures/api/schemas/internal/serverless/virtual_domain.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/deploy_token.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/deploy_tokens.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/merge_request_simple.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/milestone_with_stats.json create mode 100644 spec/fixtures/build.env.gz create mode 100644 spec/fixtures/cobertura/coverage.xml create mode 100644 spec/fixtures/cobertura/coverage.xml.gz create mode 100644 spec/fixtures/cobertura/coverage_gocov_xml.xml create mode 100644 spec/fixtures/cobertura/coverage_gocov_xml.xml.gz create mode 100644 spec/fixtures/cobertura/coverage_with_corrupted_data.xml create mode 100644 spec/fixtures/cobertura/coverage_with_corrupted_data.xml.gz create mode 100644 spec/fixtures/csv_gitlab_export.csv create mode 100644 spec/fixtures/group_export_invalid_subrelations.tar.gz create mode 100644 spec/fixtures/lib/elasticsearch/logs_response.json create mode 100644 spec/fixtures/lib/elasticsearch/query.json create mode 100644 spec/fixtures/lib/elasticsearch/query_with_container.json create mode 100644 spec/fixtures/lib/elasticsearch/query_with_cursor.json create mode 100644 spec/fixtures/lib/elasticsearch/query_with_end_time.json create mode 100644 spec/fixtures/lib/elasticsearch/query_with_search.json create mode 100644 spec/fixtures/lib/elasticsearch/query_with_start_time.json create mode 100644 spec/fixtures/lib/elasticsearch/query_with_times.json create mode 100644 spec/fixtures/lib/gitlab/import_export/invalid_json/project.json create mode 100644 spec/fixtures/lib/gitlab/import_export/multi_pipeline_ref_one_external_pr/project.json create mode 100644 spec/fixtures/lib/gitlab/metrics/dashboard/schemas/axis.json create mode 100644 spec/frontend/__mocks__/monaco-editor/index.js create mode 100644 spec/frontend/__mocks__/mousetrap/index.js rename spec/{javascripts => frontend}/badges/components/badge_form_spec.js (85%) rename spec/{javascripts => frontend}/badges/components/badge_list_row_spec.js (81%) rename spec/{javascripts => frontend}/badges/components/badge_list_spec.js (84%) rename spec/{javascripts => frontend}/badges/components/badge_settings_spec.js (80%) rename spec/{javascripts => frontend}/badges/components/badge_spec.js (89%) rename spec/{javascripts => frontend}/badges/dummy_badge.js (100%) rename spec/{javascripts => frontend}/badges/store/actions_spec.js (84%) rename spec/{javascripts => frontend}/badges/store/mutations_spec.js (100%) rename spec/{javascripts => frontend}/behaviors/quick_submit_spec.js (56%) rename spec/{javascripts => frontend}/blob/3d_viewer/mesh_object_spec.js (100%) rename spec/{javascripts => frontend}/blob/balsamiq/balsamiq_viewer_spec.js (78%) create mode 100644 spec/frontend/blob/blob_file_dropzone_spec.js create mode 100644 spec/frontend/blob/components/__snapshots__/blob_edit_content_spec.js.snap create mode 100644 spec/frontend/blob/components/__snapshots__/blob_edit_header_spec.js.snap create mode 100644 spec/frontend/blob/components/blob_edit_content_spec.js create mode 100644 spec/frontend/blob/components/blob_edit_header_spec.js create mode 100644 spec/frontend/blob/notebook/notebook_viever_spec.js create mode 100644 spec/frontend/blob/pdf/pdf_viewer_spec.js create mode 100644 spec/frontend/blob/pipeline_tour_success_spec.js create mode 100644 spec/frontend/blob/sketch/index_spec.js create mode 100644 spec/frontend/blob/suggest_gitlab_ci_yml/components/popover_spec.js create mode 100644 spec/frontend/blob/utils_spec.js rename spec/{javascripts => frontend}/blob/viewer/index_spec.js (84%) rename spec/{javascripts => frontend}/blob_edit/blob_bundle_spec.js (93%) create mode 100644 spec/frontend/boards/components/boards_selector_spec.js delete mode 100644 spec/frontend/boards/components/issue_card_inner_scoped_label_spec.js create mode 100644 spec/frontend/ci_variable_list/components/ci_variable_modal_spec.js create mode 100644 spec/frontend/ci_variable_list/components/ci_variable_popover_spec.js create mode 100644 spec/frontend/ci_variable_list/components/ci_variable_settings_spec.js create mode 100644 spec/frontend/ci_variable_list/components/ci_variable_table_spec.js create mode 100644 spec/frontend/ci_variable_list/services/mock_data.js create mode 100644 spec/frontend/ci_variable_list/store/actions_spec.js create mode 100644 spec/frontend/ci_variable_list/store/mutations_spec.js create mode 100644 spec/frontend/ci_variable_list/store/utils_spec.js create mode 100644 spec/frontend/ci_variable_list/stubs.js create mode 100644 spec/frontend/clusters/components/ingress_modsecurity_settings_spec.js create mode 100644 spec/frontend/clusters_list/components/clusters_spec.js create mode 100644 spec/frontend/clusters_list/mock_data.js create mode 100644 spec/frontend/clusters_list/store/actions_spec.js create mode 100644 spec/frontend/confirm_modal_spec.js create mode 100644 spec/frontend/create_cluster/eks_cluster/store/getters_spec.js create mode 100644 spec/frontend/create_cluster/gke_cluster/components/gke_zone_dropdown_spec.js create mode 100644 spec/frontend/create_cluster/gke_cluster/helpers.js rename spec/{javascripts => frontend}/create_cluster/gke_cluster/stores/actions_spec.js (96%) rename spec/{javascripts => frontend}/create_cluster/gke_cluster/stores/getters_spec.js (100%) rename spec/{javascripts => frontend}/create_cluster/gke_cluster/stores/mutations_spec.js (100%) rename spec/{javascripts => frontend}/diffs/components/app_spec.js (89%) create mode 100644 spec/frontend/diffs/components/commit_item_spec.js rename spec/{javascripts => frontend}/diffs/components/compare_versions_dropdown_spec.js (88%) create mode 100644 spec/frontend/diffs/components/tree_list_spec.js create mode 100644 spec/frontend/diffs/create_diffs_store.js create mode 100644 spec/frontend/environments/environments_app_spec.js create mode 100644 spec/frontend/fixtures/metrics_dashboard.rb delete mode 100644 spec/frontend/fixtures/static/notebook_viewer.html delete mode 100644 spec/frontend/fixtures/static/pdf_viewer.html create mode 100644 spec/frontend/frequent_items/components/frequent_items_list_item_spec.js create mode 100644 spec/frontend/frequent_items/components/frequent_items_list_spec.js create mode 100644 spec/frontend/frequent_items/mock_data.js create mode 100644 spec/frontend/helpers/dom_shims/form_element.js create mode 100644 spec/frontend/helpers/dom_shims/image_element_properties.js create mode 100644 spec/frontend/helpers/dom_shims/scroll_by.js create mode 100644 spec/frontend/helpers/dom_shims/size_properties.js rename spec/{javascripts => frontend}/lib/utils/common_utils_spec.js (58%) create mode 100644 spec/frontend/lib/utils/mock_data.js create mode 100644 spec/frontend/lib/utils/unit_format/formatter_factory_spec.js create mode 100644 spec/frontend/lib/utils/unit_format/index_spec.js create mode 100644 spec/frontend/logs/components/environment_logs_spec.js create mode 100644 spec/frontend/logs/components/log_control_buttons_spec.js create mode 100644 spec/frontend/logs/mock_data.js create mode 100644 spec/frontend/logs/stores/actions_spec.js create mode 100644 spec/frontend/logs/stores/getters_spec.js create mode 100644 spec/frontend/logs/stores/mutations_spec.js create mode 100644 spec/frontend/logs/utils_spec.js create mode 100644 spec/frontend/mocks/ce/diffs/workers/tree_worker.js create mode 100644 spec/frontend/monitoring/components/charts/options_spec.js delete mode 100644 spec/frontend/monitoring/shared/prometheus_header_spec.js create mode 100644 spec/frontend/notes/components/discussion_counter_spec.js create mode 100644 spec/frontend/notes/helpers.js create mode 100644 spec/frontend/notes/mixins/discussion_navigation_spec.js rename spec/{javascripts => frontend}/notes/stores/actions_spec.js (91%) create mode 100644 spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js create mode 100644 spec/frontend/pages/projects/shared/permissions/components/project_setting_row_spec.js create mode 100644 spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js rename spec/{javascripts => frontend}/projects/project_import_gitlab_project_spec.js (100%) rename spec/{javascripts => frontend}/projects/project_new_spec.js (100%) create mode 100644 spec/frontend/registry/explorer/components/project_policy_alert_spec.js create mode 100644 spec/frontend/registry/explorer/stores/getters_spec.js create mode 100644 spec/frontend/releases/components/app_show_spec.js rename spec/{javascripts => frontend}/search_spec.js (78%) rename spec/frontend/self_monitor/components/__snapshots__/{self_monitor_spec.js.snap => self_monitor_form_spec.js.snap} (100%) rename spec/frontend/self_monitor/components/{self_monitor_spec.js => self_monitor_form_spec.js} (87%) create mode 100644 spec/frontend/sidebar/assignee_title_spec.js create mode 100644 spec/frontend/snippet/snippet_bundle_spec.js create mode 100644 spec/frontend/snippets/components/__snapshots__/snippet_blob_edit_spec.js.snap create mode 100644 spec/frontend/snippets/components/__snapshots__/snippet_description_edit_spec.js.snap create mode 100644 spec/frontend/snippets/components/__snapshots__/snippet_visibility_edit_spec.js.snap create mode 100644 spec/frontend/snippets/components/snippet_blob_edit_spec.js create mode 100644 spec/frontend/snippets/components/snippet_description_edit_spec.js create mode 100644 spec/frontend/snippets/components/snippet_visibility_edit_spec.js create mode 100644 spec/frontend/vue_mr_widget/components/states/mr_widget_pipeline_tour_spec.js create mode 100644 spec/frontend/vue_mr_widget/components/states/pipeline_tour_mock_data.js create mode 100644 spec/frontend/vue_mr_widget/deployment/deployment_action_button_spec.js create mode 100644 spec/frontend/vue_mr_widget/deployment/deployment_actions_spec.js create mode 100644 spec/frontend/vue_mr_widget/mock_data.js create mode 100644 spec/frontend/vue_mr_widget/mr_widget_options_spec.js create mode 100644 spec/frontend/vue_shared/components/confirm_modal_spec.js rename spec/{javascripts => frontend}/vue_shared/components/diff_viewer/viewers/image_diff_viewer_spec.js (60%) create mode 100644 spec/frontend/vue_shared/components/gl_mentions_spec.js create mode 100644 spec/frontend/vue_shared/components/issue/related_issuable_mock_data.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/dropdown_button_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/dropdown_contents_create_view_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/dropdown_contents_labels_view_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/dropdown_contents_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/dropdown_title_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/dropdown_value_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/labels_select_root_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/mock_data.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/store/actions_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/store/getters_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/labels_select_vue/store/mutations_spec.js create mode 100644 spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb create mode 100644 spec/graphql/mutations/issues/update_spec.rb create mode 100644 spec/graphql/types/board_type_spec.rb rename spec/{lib/omni_auth/strategies/saml_spec.rb => initializers/100_patch_omniauth_saml_spec.rb} (92%) rename spec/javascripts/blob/balsamiq/{balsamiq_viewer_integration_spec.js => balsamiq_viewer_browser_spec.js} (89%) delete mode 100644 spec/javascripts/blob/blob_file_dropzone_spec.js delete mode 100644 spec/javascripts/blob/notebook/index_spec.js delete mode 100644 spec/javascripts/blob/pdf/index_spec.js delete mode 100644 spec/javascripts/blob/sketch/index_spec.js delete mode 100644 spec/javascripts/boards/components/boards_selector_spec.js delete mode 100644 spec/javascripts/create_cluster/.eslintrc.yml delete mode 100644 spec/javascripts/create_cluster/gke_cluster/components/gke_zone_dropdown_spec.js delete mode 100644 spec/javascripts/create_cluster/gke_cluster/helpers.js delete mode 100644 spec/javascripts/create_cluster/gke_cluster/mock_data.js delete mode 100644 spec/javascripts/diffs/components/commit_item_spec.js delete mode 100644 spec/javascripts/diffs/components/tree_list_spec.js delete mode 100644 spec/javascripts/environments/environments_app_spec.js delete mode 100644 spec/javascripts/environments/mock_data.js delete mode 100644 spec/javascripts/frequent_items/components/frequent_items_list_item_spec.js delete mode 100644 spec/javascripts/frequent_items/components/frequent_items_list_spec.js create mode 100644 spec/javascripts/lib/utils/browser_spec.js delete mode 100644 spec/javascripts/notes/components/discussion_counter_spec.js delete mode 100644 spec/javascripts/sidebar/assignee_title_spec.js delete mode 100644 spec/javascripts/vue_mr_widget/components/deployment_stop_button_spec.js delete mode 100644 spec/javascripts/vue_mr_widget/mr_widget_options_spec.js create mode 100644 spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb create mode 100644 spec/lib/gitlab/auth/key_status_checker_spec.rb create mode 100644 spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb create mode 100644 spec/lib/gitlab/background_migration/link_lfs_objects_projects_spec.rb create mode 100644 spec/lib/gitlab/background_migration/user_mentions/create_resource_user_mention_spec.rb rename spec/lib/gitlab/{github_import => cache/import}/caching_spec.rb (97%) create mode 100644 spec/lib/gitlab/checks/push_file_count_check_spec.rb create mode 100644 spec/lib/gitlab/checks/snippet_check_spec.rb create mode 100644 spec/lib/gitlab/ci/artifact_file_reader_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/inherit/default_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/inherit/variables_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/processable_spec.rb create mode 100644 spec/lib/gitlab/ci/config/external/file/artifact_spec.rb create mode 100644 spec/lib/gitlab/ci/parsers/coverage/cobertura_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/chain/build/associations_spec.rb create mode 100644 spec/lib/gitlab/ci/reports/coverage_reports_spec.rb create mode 100644 spec/lib/gitlab/config_checker/puma_rugged_checker_spec.rb create mode 100644 spec/lib/gitlab/database/connection_timer_spec.rb create mode 100644 spec/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin_spec.rb create mode 100644 spec/lib/gitlab/elasticsearch/logs_spec.rb create mode 100644 spec/lib/gitlab/grape_logging/formatters/lograge_with_timestamp_spec.rb create mode 100644 spec/lib/gitlab/graphql/docs/renderer_spec.rb create mode 100644 spec/lib/gitlab/graphql/pagination/offset_active_record_relation_connection_spec.rb create mode 100644 spec/lib/gitlab/graphql/timeout_spec.rb rename spec/lib/gitlab/import_export/{base_object_builder_spec.rb => base/object_builder_spec.rb} (90%) rename spec/lib/gitlab/import_export/{base_relation_factory_spec.rb => base/relation_factory_spec.rb} (91%) create mode 100644 spec/lib/gitlab/import_export/error_spec.rb rename spec/lib/gitlab/import_export/{group_object_builder_spec.rb => group/object_builder_spec.rb} (97%) rename spec/lib/gitlab/import_export/{group_relation_factory_spec.rb => group/relation_factory_spec.rb} (97%) rename spec/lib/gitlab/import_export/{group_tree_restorer_spec.rb => group/tree_restorer_spec.rb} (98%) rename spec/lib/gitlab/import_export/{group_tree_saver_spec.rb => group/tree_saver_spec.rb} (96%) create mode 100644 spec/lib/gitlab/import_export/json/legacy_reader_spec.rb create mode 100644 spec/lib/gitlab/import_export/json/legacy_writer_spec.rb rename spec/lib/gitlab/import_export/{relation_tree_saver_spec.rb => legacy_relation_tree_saver_spec.rb} (94%) create mode 100644 spec/lib/gitlab/import_export/project/export_task_spec.rb rename spec/{tasks/gitlab/import_export/import_rake_spec.rb => lib/gitlab/import_export/project/import_task_spec.rb} (65%) rename spec/lib/gitlab/import_export/{project_tree_saver_spec.rb => project/legacy_tree_saver_spec.rb} (98%) rename spec/lib/gitlab/import_export/{group_project_object_builder_spec.rb => project/object_builder_spec.rb} (98%) rename spec/lib/gitlab/import_export/{project_relation_factory_spec.rb => project/relation_factory_spec.rb} (95%) rename spec/lib/gitlab/import_export/{project_tree_restorer_spec.rb => project/tree_restorer_spec.rb} (92%) create mode 100644 spec/lib/gitlab/import_export/project/tree_saver_spec.rb delete mode 100644 spec/lib/gitlab/import_export/project_tree_loader_spec.rb delete mode 100644 spec/lib/gitlab/import_export/relation_rename_service_spec.rb create mode 100644 spec/lib/gitlab/import_export/snippet_repo_restorer_spec.rb create mode 100644 spec/lib/gitlab/import_export/snippet_repo_saver_spec.rb create mode 100644 spec/lib/gitlab/import_export/snippets_repo_restorer_spec.rb create mode 100644 spec/lib/gitlab/import_export/snippets_repo_saver_spec.rb create mode 100644 spec/lib/gitlab/lograge/custom_options_spec.rb create mode 100644 spec/lib/gitlab/omniauth_logging/json_formatter_spec.rb create mode 100644 spec/lib/gitlab/rate_limit_helpers_spec.rb create mode 100644 spec/lib/gitlab/reactive_cache_set_cache_spec.rb delete mode 100644 spec/lib/gitlab/serverless/domain_spec.rb delete mode 100644 spec/lib/gitlab/serverless/function_uri_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_cluster/cli_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_cluster_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_logging/deduplication_logger_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/client_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/server_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_queue_spec.rb delete mode 100644 spec/lib/gitlab/tracing_spec.rb create mode 100644 spec/lib/gitlab/url_blockers/domain_whitelist_entry_spec.rb create mode 100644 spec/lib/gitlab/url_blockers/ip_whitelist_entry_spec.rb create mode 100644 spec/lib/gitlab/user_access_snippet_spec.rb create mode 100644 spec/lib/gitlab/utils/json_size_estimator_spec.rb create mode 100644 spec/lib/grafana/time_window_spec.rb create mode 100644 spec/lib/grafana/validator_spec.rb create mode 100644 spec/migrations/cleanup_empty_commit_user_mentions_spec.rb create mode 100644 spec/migrations/cleanup_optimistic_locking_nulls_spec.rb create mode 100644 spec/migrations/create_environment_for_self_monitoring_project_spec.rb create mode 100644 spec/migrations/delete_template_project_services_spec.rb create mode 100644 spec/migrations/delete_template_services_duplicated_by_type_spec.rb create mode 100644 spec/migrations/drop_activate_prometheus_services_background_jobs_spec.rb create mode 100644 spec/migrations/migrate_commit_notes_mentions_to_db_spec.rb create mode 100644 spec/migrations/migrate_merge_request_mentions_to_db_spec.rb create mode 100644 spec/migrations/remove_security_dashboard_feature_flag_spec.rb create mode 100644 spec/migrations/rename_security_dashboard_feature_flag_to_instance_security_dashboard_spec.rb create mode 100644 spec/migrations/schedule_link_lfs_objects_projects_spec.rb create mode 100644 spec/migrations/schedule_migrate_security_scans_spec.rb create mode 100644 spec/migrations/update_application_setting_npm_package_requests_forwarding_default_spec.rb create mode 100644 spec/models/ci/ref_spec.rb create mode 100644 spec/models/concerns/bulk_insertable_associations_spec.rb rename spec/models/concerns/{ => ci}/has_ref_spec.rb (98%) create mode 100644 spec/models/concerns/usage_statistics_spec.rb create mode 100644 spec/models/milestone_note_spec.rb create mode 100644 spec/models/project_export_job_spec.rb create mode 100644 spec/models/resource_milestone_event_spec.rb create mode 100644 spec/models/serverless/domain_spec.rb create mode 100644 spec/models/user_detail_spec.rb create mode 100644 spec/models/user_highest_role_spec.rb rename spec/presenters/{hooks => }/project_hook_presenter_spec.rb (100%) create mode 100644 spec/presenters/projects/import_export/project_export_presenter_spec.rb rename spec/presenters/{hooks => }/service_hook_presenter_spec.rb (100%) create mode 100644 spec/requests/api/admin/sidekiq_spec.rb create mode 100644 spec/requests/api/api_guard/admin_mode_middleware_spec.rb create mode 100644 spec/requests/api/deploy_tokens_spec.rb create mode 100644 spec/requests/api/graphql/boards/boards_query_spec.rb create mode 100644 spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb create mode 100644 spec/requests/sessions_spec.rb create mode 100644 spec/rubocop/cop/ban_catch_throw_spec.rb create mode 100644 spec/rubocop/cop/migration/schedule_async_spec.rb create mode 100644 spec/rubocop/cop/migration/with_lock_retries_with_change_spec.rb create mode 100644 spec/rubocop/cop/scalability/idempotent_worker_spec.rb create mode 100644 spec/rubocop/migration_helpers_spec.rb create mode 100644 spec/serializers/serverless/domain_entity_spec.rb create mode 100644 spec/services/ci/parse_dotenv_artifact_service_spec.rb create mode 100644 spec/services/ci/update_ci_ref_status_service_spec.rb create mode 100644 spec/services/groups/deploy_tokens/create_service_spec.rb create mode 100644 spec/services/merge_requests/after_create_service_spec.rb create mode 100644 spec/services/metrics/dashboard/update_dashboard_service_spec.rb create mode 100644 spec/services/milestones/closed_issues_count_service_spec.rb create mode 100644 spec/services/milestones/issues_count_service_spec.rb rename spec/services/{notification_recipient_service_spec.rb => notification_recipients/build_service_spec.rb} (97%) create mode 100644 spec/services/notification_recipients/builder/default_spec.rb create mode 100644 spec/services/pod_logs/base_service_spec.rb create mode 100644 spec/services/pod_logs/elasticsearch_service_spec.rb create mode 100644 spec/services/pod_logs/kubernetes_service_spec.rb create mode 100644 spec/services/projects/deploy_tokens/create_service_spec.rb create mode 100644 spec/services/projects/update_repository_storage_service_spec.rb create mode 100644 spec/services/resource_events/change_milestone_service_spec.rb create mode 100644 spec/services/serverless/associate_domain_service_spec.rb create mode 100644 spec/services/snippets/bulk_destroy_service_spec.rb create mode 100644 spec/services/x509_certificate_revoke_service_spec.rb create mode 100644 spec/support/helpers/idempotent_worker_helper.rb create mode 100644 spec/support/helpers/metrics_dashboard_url_helpers.rb rename spec/{services/deploy_tokens/create_service_spec.rb => support/services/deploy_token_shared_examples.rb} (84%) create mode 100644 spec/support/shared_contexts/requests/api/graphql/group_and_project_boards_query_shared_context.rb create mode 100644 spec/support/shared_examples/banzai/filters/inline_embeds_shared_examples.rb create mode 100644 spec/support/shared_examples/banzai/filters/inline_metrics_redactor_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/deploy_token_shared_examples.rb create mode 100644 spec/support/shared_examples/csp.rb create mode 100644 spec/support/shared_examples/features/deploy_token_shared_examples.rb create mode 100644 spec/support/shared_examples/models/concerns/blob_replicator_strategy_shared_examples.rb create mode 100644 spec/support/shared_examples/models/note_access_check_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/graphql/group_and_project_boards_query_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/snippet_shared_examples.rb create mode 100644 spec/support/shared_examples/resource_events.rb create mode 100644 spec/support/shared_examples/services/projects/update_repository_storage_service_shared_examples.rb create mode 100644 spec/support/shared_examples/services/resource_events/change_milestone_service_shared_examples.rb rename spec/support/shared_examples/tasks/gitlab/import_export/{import_measurement_shared_examples.rb => measurable_shared_examples.rb} (86%) create mode 100644 spec/support/shared_examples/tasks/gitlab/uploads/migration_shared_examples.rb create mode 100644 spec/support/shared_examples/uploaders/workers/object_storage/migrate_uploads_shared_examples.rb create mode 100644 spec/support/shared_examples/views/pipeline_status_changes_email.rb create mode 100644 spec/support/shared_examples/workers/idempotency_shared_examples.rb create mode 100644 spec/support_specs/matchers/exceed_query_limit_helpers_spec.rb create mode 100644 spec/uploaders/content_type_whitelist_spec.rb delete mode 100644 spec/uploaders/upload_type_check_spec.rb create mode 100644 spec/views/admin/sessions/two_factor.html.haml_spec.rb create mode 100644 spec/views/notify/pipeline_fixed_email.html.haml_spec.rb create mode 100644 spec/views/notify/pipeline_fixed_email.text.erb_spec.rb create mode 100644 spec/workers/authorized_keys_worker_spec.rb rename spec/workers/concerns/gitlab/{github_import => }/notify_upon_death_spec.rb (92%) create mode 100644 spec/workers/concerns/project_export_options_spec.rb create mode 100644 spec/workers/pipeline_update_ci_ref_status_worker_service_spec.rb create mode 100644 spec/workers/project_update_repository_storage_worker_spec.rb create mode 100644 spec/workers/stuck_export_jobs_worker_spec.rb create mode 100644 spec/workers/x509_certificate_revoke_worker_spec.rb create mode 100644 vendor/project_templates/gatsby.tar.gz diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..d704f20c72 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{js,json,vue,scss,rb,haml,yml}] +indent_size = 2 + +[*.{js,json,vue,scss,rb,haml,yml,md}] +indent_style = space +charset = utf-8 diff --git a/.gitignore b/.gitignore index b3e6cbae96..4bebf3fd04 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ eslint-report.html /app/assets/javascripts/locale/**/app.js /backups/* /config/aws.yml +/config/cable.yml /config/database*.yml /config/gitlab.yml /config/gitlab_ci.yml @@ -42,6 +43,7 @@ eslint-report.html /config/redis.shared_state.yml /config/unicorn.rb /config/puma.rb +/config/puma_actioncable.rb /config/secrets.yml /config/sidekiq.yml /config/registry.key @@ -54,7 +56,7 @@ eslint-report.html /dump.rdb /jsconfig.json /log/*.log* -/node_modules/ +/node_modules /nohup.out /public/assets/ /public/uploads.* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 19dca0b2fc..be1818391c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,7 @@ image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.1 stages: - sync - prepare + - fixtures - test - post-test - review-prepare @@ -11,6 +12,29 @@ stages: - post-qa - pages +# always use `gitlab-org` runners +default: + tags: + - gitlab-org + +workflow: + rules: + # If `$FORCE_GITLAB_CI` is set, create a pipeline. + - if: '$FORCE_GITLAB_CI' + # For merge requests, create a pipeline. + - if: '$CI_MERGE_REQUEST_IID' + # For `master` branch, create a pipeline (this includes on schedules, pushes, merges, etc.). + - if: '$CI_COMMIT_BRANCH == "master"' + # For tags, create a pipeline. + - if: '$CI_COMMIT_TAG' + # If `$GITLAB_INTERNAL` isn't set, don't create a pipeline. + - if: '$GITLAB_INTERNAL == null' + when: never + # For stable, auto-deploy, and security branches, create a pipeline. + - if: '$CI_COMMIT_BRANCH =~ /^[\d-]+-stable(-ee)?$/' + - if: '$CI_COMMIT_BRANCH =~ /^\d+-\d+-auto-deploy-\d+$/' + - if: '$CI_COMMIT_BRANCH =~ /^security\//' + variables: RAILS_ENV: "test" NODE_ENV: "test" diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 0b817fe14b..28ad2b4192 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -8,19 +8,29 @@ # Technical writing team are the default reviewers for all markdown docs *.md @gl-docsteam +/doc/ @gl-docsteam # Frontend maintainers should see everything in `app/assets/` -app/assets/ @gitlab-org/maintainers/frontend *.scss @annabeldunstone @gitlab-org/maintainers/frontend -/scripts/frontend/ @gitlab-org/maintainers/frontend +*.js @gitlab-org/maintainers/frontend +/app/assets/ @gitlab-org/maintainers/frontend +/ee/app/assets/ @gitlab-org/maintainers/frontend +/spec/javascripts/ @gitlab-org/maintainers/frontend +/ee/spec/javascripts/ @gitlab-org/maintainers/frontend +/spec/frontend/ @gitlab-org/maintainers/frontend +/ee/spec/frontend/ @gitlab-org/maintainers/frontend # Database maintainers should review changes in `db/` -db/ @gitlab-org/maintainers/database -lib/gitlab/background_migration/ @gitlab-org/maintainers/database -lib/gitlab/database/ @gitlab-org/maintainers/database -lib/gitlab/sql/ @gitlab-org/maintainers/database -lib/gitlab/github_import/ @gitlab-org/maintainers/database +/db/ @gitlab-org/maintainers/database /ee/db/ @gitlab-org/maintainers/database +/lib/gitlab/background_migration/ @gitlab-org/maintainers/database +/ee/lib/ee/gitlab/background_migration/ @gitlab-org/maintainers/database +/lib/gitlab/database/ @gitlab-org/maintainers/database +/ee/lib/gitlab/database/ @gitlab-org/maintainers/database +/lib/gitlab/sql/ @gitlab-org/maintainers/database +/lib/gitlab/github_import/ @gitlab-org/maintainers/database +/app/finders/ @gitlab-org/maintainers/database +/ee/app/finders/ @gitlab-org/maintainers/database # Feature specific owners /ee/lib/gitlab/code_owners/ @reprazent @@ -38,11 +48,20 @@ lib/gitlab/github_import/ @gitlab-org/maintainers/database # Engineering Productivity owned files /.gitlab-ci.yml @gl-quality/eng-prod /.gitlab/ci/ @gl-quality/eng-prod +/.gitlab/ci/docs.gitlab-ci.yml @gl-quality/eng-prod @gl-docsteam +/.gitlab/ci/releases.gitlab-ci.yml @gl-quality/eng-prod @gitlab-org/delivery /.gitlab/CODEOWNERS @gl-quality/eng-prod Dangerfile @gl-quality/eng-prod /danger/ @gl-quality/eng-prod /lib/gitlab/danger/ @gl-quality/eng-prod /scripts/ @gl-quality/eng-prod +/scripts/frontend/ @gl-quality/eng-prod @gitlab-org/maintainers/frontend +.editorconfig @gl-quality/eng-prod -# Delivery owner files -/.gitlab/ci/releases.gitlab-ci.yml @gitlab-org/delivery +# Telemetry owner files +/ee/lib/gitlab/usage_data_counters/ @gitlab-org/growth/telemetry +/ee/lib/ee/gitlab/usage_data.rb @gitlab-org/growth/telemetry +/lib/gitlab/grafana_embed_usage_data.rb @gitlab-org/growth/telemetry +/lib/gitlab/usage_data.rb @gitlab-org/growth/telemetry +/lib/gitlab/cycle_analytics/usage_data.rb @gitlab-org/growth/telemetry +/lib/gitlab/usage_data_counters/ @gitlab-org/growth/telemetry diff --git a/.gitlab/ci/dev-fixtures.gitlab-ci.yml b/.gitlab/ci/dev-fixtures.gitlab-ci.yml index e08f7e969c..e77a75d282 100644 --- a/.gitlab/ci/dev-fixtures.gitlab-ci.yml +++ b/.gitlab/ci/dev-fixtures.gitlab-ci.yml @@ -1,13 +1,11 @@ .run-dev-fixtures: extends: - - .default-tags - .default-retry - .default-cache - .default-before_script - .use-pg9 stage: test needs: ["setup-test-env"] - dependencies: ["setup-test-env"] variables: FIXTURE_PATH: "db/fixtures/development" SEED_CYCLE_ANALYTICS: "true" diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 59f1773da2..946db0c4be 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -1,6 +1,5 @@ .review-docs: extends: - - .default-tags - .default-retry - .docs:rules:review-docs allow_failure: true @@ -16,6 +15,7 @@ name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables # Discussion: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14236/diffs#note_40140693 + auto_stop_in: 2 weeks url: http://docs-preview-$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX on_stop: review-docs-cleanup before_script: @@ -41,18 +41,17 @@ review-docs-cleanup: docs lint: extends: - - .default-tags - .default-retry - .docs:rules:docs-lint - image: "registry.gitlab.com/gitlab-org/gitlab-docs:docs-lint" + image: "registry.gitlab.com/gitlab-org/gitlab-docs:lint" stage: test - dependencies: [] + needs: [] script: - scripts/lint-doc.sh - # Lint Markdown - - markdownlint --config .markdownlint.json 'doc/**/*.md' # Prepare docs for build - - mv doc/ /tmp/gitlab-docs/content/$DOCS_GITLAB_REPO_SUFFIX + # The path must be 'ee/' because we have hardcoded links relying on it + # https://gitlab.com/gitlab-org/gitlab-docs/-/blob/887850752fc0e72856da6632db132f005ba77f16/content/index.erb#L44-63 + - mv doc/ /tmp/gitlab-docs/content/ee - cd /tmp/gitlab-docs # Build HTML from Markdown - bundle exec nanoc @@ -63,7 +62,6 @@ docs lint: graphql-reference-verify: extends: - - .default-tags - .default-retry - .default-cache - .default-before_script diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 3a72c941b8..8685ccc543 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -6,10 +6,10 @@ - tmp/cache/assets/sprockets - tmp/cache/babel-loader - tmp/cache/vue-loader + - tmp/cache/webpack-dlls .gitlab:assets:compile-metadata: extends: - - .default-tags - .default-retry - .default-before_script - .assets-compile-cache @@ -63,7 +63,6 @@ gitlab:assets:compile pull-cache: .compile-assets-metadata: extends: - - .default-tags - .default-retry - .default-before_script - .assets-compile-cache @@ -78,6 +77,7 @@ gitlab:assets:compile pull-cache: SETUP_DB: "false" # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 + WEBPACK_VENDOR_DLL: "true" cache: key: "assets-compile:v9" artifacts: @@ -118,15 +118,52 @@ compile-assets pull-cache as-if-foss: policy: pull key: "assets-compile:v9:foss" -.frontend-job-base: +.frontend-fixtures-base: extends: - - .default-tags - .default-retry - .default-cache - .default-before_script - .use-pg9 + stage: fixtures + needs: + - job: "setup-test-env" + artifacts: true + - job: "compile-assets pull-cache" + artifacts: true + script: + - date + - scripts/gitaly-test-spawn + - date + - bundle exec rake frontend:fixtures + artifacts: + name: frontend-fixtures + expire_in: 31d + when: always + paths: + - node_modules + - public/assets + - tmp/tests/frontend/ + +frontend-fixtures: + extends: + - .frontend-fixtures-base + - .frontend:rules:default-frontend-jobs + +frontend-fixtures-as-if-foss: + extends: + - .frontend-fixtures-base + - .frontend:rules:default-frontend-jobs-as-if-foss + - .as-if-foss + +.frontend-job-base: + extends: + - .default-retry + - .default-cache + - .default-before_script + variables: + USE_BUNDLE_INSTALL: "false" + SETUP_DB: "false" stage: test - needs: ["setup-test-env", "compile-assets pull-cache"] .karma-base: extends: .frontend-job-base @@ -136,14 +173,13 @@ compile-assets pull-cache as-if-foss: script: - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - date - - scripts/gitaly-test-spawn - - date - - bundle exec rake karma + - yarn karma karma: extends: - .karma-base - .frontend:rules:default-frontend-jobs + needs: ["frontend-fixtures"] coverage: '/^Statements *: (\d+\.\d+%)/' artifacts: name: coverage-javascript @@ -161,25 +197,24 @@ karma-as-if-foss: - .karma-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss + needs: ["frontend-fixtures-as-if-foss"] .jest-base: extends: .frontend-job-base script: - - scripts/gitaly-test-spawn - date - - bundle exec rake frontend:fixtures - - date - - yarn jest --ci --coverage + - yarn jest --ci --coverage --testSequencer ./scripts/frontend/parallel_ci_sequencer.js cache: key: jest paths: - - tmp/jest/jest/ + - tmp/cache/jest/ policy: pull-push jest: extends: - .jest-base - .frontend:rules:default-frontend-jobs + needs: ["frontend-fixtures"] artifacts: name: coverage-frontend expire_in: 31d @@ -190,18 +225,38 @@ jest: - tmp/tests/frontend/ reports: junit: junit_jest.xml + parallel: 2 jest-as-if-foss: extends: - .jest-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss + needs: ["frontend-fixtures-as-if-foss"] cache: policy: pull +coverage-frontend: + extends: + - .default-retry + - .frontend:rules:default-frontend-jobs + needs: ["jest"] + stage: post-test + before_script: + - yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline + script: + - yarn node scripts/frontend/merge_coverage_frontend.js + artifacts: + name: coverage-frontend + expire_in: 31d + paths: + - coverage-frontend/ + cache: + paths: + - .yarn-cache/ + .qa-frontend-node: extends: - - .default-tags - .default-retry - .default-cache - .frontend:rules:qa-frontend-node @@ -218,10 +273,6 @@ jest-as-if-foss: - date - yarn run webpack-prod -qa-frontend-node:8: - extends: .qa-frontend-node - image: node:carbon - qa-frontend-node:10: extends: .qa-frontend-node image: node:dubnium @@ -233,7 +284,6 @@ qa-frontend-node:latest: webpack-dev-server: extends: - - .default-tags - .default-retry - .default-cache - .frontend:rules:default-frontend-jobs diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index ffdc115cff..d5c89eacbb 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -1,7 +1,3 @@ -.default-tags: - tags: - - gitlab-org - .default-retry: retry: max: 2 # This is confusing but this means "3 runs at max". @@ -50,6 +46,15 @@ variables: POSTGRES_HOST_AUTH_METHOD: trust +.use-pg11: + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.12-git-2.24-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-11-graphicsmagick-1.3.34" + services: + - name: postgres:11.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + variables: + POSTGRES_HOST_AUTH_METHOD: trust + .use-pg9-ee: services: - name: postgres:9.6.17 @@ -69,6 +74,16 @@ variables: POSTGRES_HOST_AUTH_METHOD: trust +.use-pg11-ee: + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.12-git-2.24-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-11-graphicsmagick-1.3.34" + services: + - name: postgres:11.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + - name: elasticsearch:6.4.2 + variables: + POSTGRES_HOST_AUTH_METHOD: trust + .as-if-foss: variables: FOSS_ONLY: '1' diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index a8e2d90a4e..b2267b03c5 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -1,6 +1,5 @@ .only-code-memory-job-base: extends: - - .default-tags - .default-retry - .default-cache - .default-before_script @@ -8,6 +7,10 @@ memory-static: extends: .only-code-memory-job-base + stage: test + needs: + - job: setup-test-env + artifacts: true variables: SETUP_DB: "false" script: @@ -36,6 +39,12 @@ memory-on-boot: extends: - .only-code-memory-job-base - .use-pg10 + stage: test + needs: + - job: setup-test-env + artifacts: true + - job: compile-assets pull-cache + artifacts: true variables: NODE_ENV: "production" RAILS_ENV: "production" @@ -44,8 +53,7 @@ memory-on-boot: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 script: - # Both bootsnap and derailed monkey-patch Kernel#require, which leads to circular dependency - - ENABLE_BOOTSNAP=false PATH_TO_HIT="/users/sign_in" CUT_OFF=0.3 bundle exec derailed exec perf:mem >> 'tmp/memory_on_boot.txt' + - PATH_TO_HIT="/users/sign_in" CUT_OFF=0.3 bundle exec derailed exec perf:mem >> 'tmp/memory_on_boot.txt' - scripts/generate-memory-metrics-on-boot tmp/memory_on_boot.txt >> 'tmp/memory_on_boot_metrics.txt' artifacts: paths: diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index 993ed21e39..983f675d1d 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -1,11 +1,10 @@ pages: extends: - - .default-tags - .default-retry - .default-cache - .pages:rules stage: pages - dependencies: ["coverage", "karma", "gitlab:assets:compile pull-cache"] + dependencies: ["rspec:coverage", "karma", "gitlab:assets:compile pull-cache"] script: - mv public/ .public/ - mkdir public/ diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index 0e9d7abb3a..b0713c0944 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -1,9 +1,8 @@ .qa-job-base: extends: - - .default-tags - .default-retry stage: test - dependencies: [] + needs: [] cache: key: "qa-framework-jobs:v1" paths: diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 58c4ef0e02..f9074adeab 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -7,7 +7,6 @@ .rails-job-base: extends: - - .default-tags - .default-retry - .default-cache - .default-before_script @@ -202,7 +201,7 @@ gitlab:setup: paths: - log/development.log -coverage: +rspec:coverage: extends: - .rails-job-base - .rails:rules:ee-and-foss @@ -238,6 +237,12 @@ rspec quarantine pg9: - .rails:rules:master-refs-code-backstage - .use-pg10 +rspec migration pg10: + extends: + - .rspec-base-pg10 + - .rspec-base-migration + parallel: 2 + rspec unit pg10: extends: .rspec-base-pg10 parallel: 20 @@ -252,6 +257,34 @@ rspec system pg10: # master-only jobs # #################### +############################ +# nightly master-only jobs # +.rspec-base-pg11: + extends: + - .rspec-base + - .rails:rules:nightly-master-refs-code-backstage + - .use-pg11 + +rspec migration pg11: + extends: + - .rspec-base-pg11 + - .rspec-base-migration + parallel: 2 + +rspec unit pg11: + extends: .rspec-base-pg11 + parallel: 20 + +rspec integration pg11: + extends: .rspec-base-pg11 + parallel: 8 + +rspec system pg11: + extends: .rspec-base-pg11 + parallel: 24 +# nightly master-only jobs # +############################ + ######################### # ee + master-only jobs # rspec-ee quarantine pg9: diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index e7ee47fbe0..f381c423f5 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -12,6 +12,7 @@ code_quality: - .default-retry - .reports:rules:code_quality stage: test + needs: [] image: docker:stable allow_failure: true services: @@ -19,7 +20,7 @@ code_quality: variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" - CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/security-products/codequality:0.85.6" + CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/ci-cd/codequality:0.85.9" script: - | if ! docker info &>/dev/null; then @@ -39,7 +40,6 @@ code_quality: paths: - gl-code-quality-report.json # GitLab-specific expire_in: 1 week # GitLab-specific - dependencies: [] # We need to duplicate this job's definition because it seems it's impossible to # override an included `only.refs`. @@ -52,7 +52,7 @@ sast: - .reports:rules:sast stage: test allow_failure: true - dependencies: [] # GitLab-specific + needs: [] artifacts: paths: - gl-sast-report.json # GitLab-specific @@ -90,6 +90,7 @@ dependency_scanning: - .default-retry - .reports:rules:dependency_scanning stage: test + needs: [] image: docker:stable variables: DOCKER_DRIVER: overlay2 @@ -148,7 +149,6 @@ dependency_scanning: reports: dependency_scanning: gl-dependency-scanning-report.json expire_in: 1 week # GitLab-specific - dependencies: [] # We need to duplicate this job's definition because it seems it's impossible to # override an included `only.refs`. @@ -168,6 +168,7 @@ dast: # DAST_USERNAME: "root" # DAST_USERNAME_FIELD: "user[login]" # DAST_PASSWORD_FIELD: "user[passowrd]" + DAST_VERSION: 1 allow_failure: true script: - 'export DAST_WEBSITE="${DAST_WEBSITE:-$(cat environment_url.txt)}"' diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index e23708337a..14b1561ec1 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -1,6 +1,5 @@ .review-docker: extends: - - .default-tags - .default-retry image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine-ruby-2.6 services: @@ -29,7 +28,6 @@ build-qa-image: review-cleanup: extends: - - .default-tags - .default-retry - .review:rules:review-cleanup stage: prepare @@ -46,7 +44,6 @@ review-cleanup: review-build-cng: extends: - - .default-tags - .default-retry - .review:rules:mr-and-schedule image: ruby:2.6-alpine @@ -63,18 +60,18 @@ review-build-cng: .review-workflow-base: extends: - - .default-tags - .default-retry image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v2.5.1" + GITLAB_HELM_CHART_REF: "v2.6.8" GITLAB_EDITION: "ce" environment: name: review/${CI_COMMIT_REF_NAME} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} on_stop: review-stop + auto_stop_in: 48 hours review-deploy: extends: @@ -84,6 +81,7 @@ review-deploy: needs: - job: review-build-cng artifacts: false + resource_group: "review/${CI_COMMIT_REF_NAME}" allow_failure: true before_script: - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' @@ -215,7 +213,6 @@ review-performance: parallel-spec-reports: extends: - - .default-tags - .review:rules:mr-only-manual image: ruby:2.6-alpine stage: post-qa @@ -242,15 +239,14 @@ parallel-spec-reports: danger-review: extends: - - .default-tags - .default-retry - .default-cache - .review:rules:danger image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger stage: test - dependencies: [] + needs: [] script: - git version - node --version - yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline - - danger --fail-on-errors=true + - danger --fail-on-errors=true --verbose diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 8cf652d51e..3ef28e02e9 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -22,6 +22,9 @@ .if-merge-request: &if-merge-request if: '$CI_MERGE_REQUEST_IID' +.if-nightly-master-schedule: &if-nightly-master-schedule + if: '$NIGHTLY && $CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "schedule"' + .if-dot-com-gitlab-org-schedule: &if-dot-com-gitlab-org-schedule if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_PIPELINE_SOURCE == "schedule"' @@ -77,6 +80,9 @@ - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "doc/api/graphql/reference/*" # Files in this folder are auto-generated +.frontend-dependency-patterns: &frontend-dependency-patterns + - "{package.json,yarn.lock}" + .qa-patterns: &qa-patterns - ".dockerignore" - "qa/**/*" @@ -267,6 +273,9 @@ rules: - <<: *if-master-refs when: on_success + - <<: *if-merge-request + changes: *frontend-dependency-patterns + when: on_success ################ # Memory rules # @@ -343,6 +352,12 @@ changes: *code-backstage-patterns when: on_success +.rails:rules:nightly-master-refs-code-backstage: + rules: + - <<: *if-nightly-master-schedule + changes: *code-backstage-patterns + when: on_success + .rails:rules:ee-only: rules: - <<: *if-not-ee @@ -484,13 +499,6 @@ changes: *code-backstage-patterns when: on_success -.test-metadata:rules:flaky-examples-check: - rules: - - <<: *if-merge-request - changes: *code-backstage-patterns - when: on_success - - ############## # YAML rules # ############## diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index fb203db147..b1918961f3 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -2,7 +2,6 @@ # rubygems.org in the future. cache gems: extends: - - .default-tags - .default-retry - .default-cache - .default-before_script @@ -21,14 +20,14 @@ cache gems: .minimal-job: extends: - - .default-tags - .default-retry - dependencies: [] + needs: [] gitlab_git_test: extends: - .minimal-job - .setup:rules:gitlab_git_test + stage: test script: - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes @@ -36,5 +35,6 @@ no_ee_check: extends: - .minimal-job - .setup:rules:no_ee_check + stage: test script: - scripts/no-ee-check diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 719e4e821c..cda6d996bd 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -37,22 +37,3 @@ update-tests-metadata: - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - source scripts/rspec_helpers.sh - update_tests_metadata - -flaky-examples-check: - extends: - - .default-tags - - .default-retry - - .test-metadata:rules:flaky-examples-check - image: ruby:2.6-alpine - stage: post-test - variables: - NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json - allow_failure: true - artifacts: - expire_in: 30d - paths: - - rspec_flaky/ - script: - - '[[ -f $NEW_FLAKY_SPECS_REPORT ]] || echo "{}" > ${NEW_FLAKY_SPECS_REPORT}' - - scripts/merge-reports ${NEW_FLAKY_SPECS_REPORT} rspec_flaky/new_*_*.json - - scripts/flaky_examples/detect-new-flaky-examples $NEW_FLAKY_SPECS_REPORT diff --git a/.gitlab/ci/yaml.gitlab-ci.yml b/.gitlab/ci/yaml.gitlab-ci.yml index cdc3aa6e57..ab31dd5929 100644 --- a/.gitlab/ci/yaml.gitlab-ci.yml +++ b/.gitlab/ci/yaml.gitlab-ci.yml @@ -2,11 +2,11 @@ # This uses rules from project root `.yamllint`. lint-ci-gitlab: extends: - - .default-tags - .default-retry - .yaml:rules image: sdesbure/yamllint:latest - dependencies: [] + stage: test + needs: [] variables: LINT_PATHS: .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates changelogs script: diff --git a/.gitlab/issue_templates/Feature proposal.md b/.gitlab/issue_templates/Feature proposal.md index fa989e4528..2bbef723b2 100644 --- a/.gitlab/issue_templates/Feature proposal.md +++ b/.gitlab/issue_templates/Feature proposal.md @@ -15,6 +15,8 @@ * [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator) * [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst) * [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst) +* [Simone (Software Engineer in Test)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#simone-software-engineer-in-test) +* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops) Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ --> @@ -57,6 +59,10 @@ See the test engineering planning process and reach out to your counterpart Soft +### Is this a cross-stage feature? + + + ### Links / references /label ~feature diff --git a/.gitlab/issue_templates/Problem_Validation.md b/.gitlab/issue_templates/Problem_Validation.md index bc1fd3374d..f7515c0721 100644 --- a/.gitlab/issue_templates/Problem_Validation.md +++ b/.gitlab/issue_templates/Problem_Validation.md @@ -1,6 +1,6 @@ ## Problem Statement - + ## Reach diff --git a/.gitlab/issue_templates/QA failure.md b/.gitlab/issue_templates/QA failure.md index 13b5d7bf92..e1b3eec5d2 100644 --- a/.gitlab/issue_templates/QA failure.md +++ b/.gitlab/issue_templates/QA failure.md @@ -40,7 +40,10 @@ Attach the screenshot and HTML snapshot of the page from the job's artifacts: /due in 2 weeks -/label ~Quality ~QA ~bug ~S1 +/label ~Quality ~QA ~test + + +/label ~"failure::broken-test" ~"failure::flaky-test" ~"failure::stale-test" ~"failure::test-environment" ~"failure::investigating" +:warning: **Only Release Managers and members of the AppSec team can edit the description of this issue** + +------- + ## Releases tasks - https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/release-manager.md @@ -12,31 +16,17 @@ Set the title to: `Security Release: 12.2.X, 12.1.X, and 12.0.X` ## Version issues: -* 12.2.X: {release task link} -* 12.1.X: {release task link} -* 12.0.X: {release task link} +12.2.X, 12.1.X, 12.0.X: {release task link} ## Issues in GitLab Security -* {https://gitlab.com/gitlab-org/security/gitlab/issues/ link} +To include your issue and merge requests in this Security Release, please mark +your security issues as related to this release tracking issue. You can do this +in the "Linked issues" section below this issue description. -| Version | MR | -|---------|----| -| 12.2 | {https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests link} | -| 12.1 | {https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests link} | -| 12.0 | {https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests link} | -| master | {https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests link} | - -## Issues in Omnibus-GitLab - -* {https://gitlab.com/gitlab-org/security/gitlab/issues/ link} - -| Version | MR | -|---------|----| -| 12.2 | {https://dev.gitlab.org/gitlab/omnibus-gitlab/merge_requests/ link} | -| 12.1 | {https://dev.gitlab.org/gitlab/omnibus-gitlab/merge_requests/ link} | -| 12.0 | {https://dev.gitlab.org/gitlab/omnibus-gitlab/merge_requests/ link} | -| master | {https://dev.gitlab.org/gitlab/omnibus-gitlab/merge_requests/ link} | +:warning: If your security issues are not marked as related to this release +tracking issue, their merge requests may not be included in the security +release. ## QA {QA issue link} @@ -49,5 +39,5 @@ GitLab.com: {https://gitlab.com/gitlab-com/www-gitlab-com/merge_requests/ link} ## Email notification {https://gitlab.com/gitlab-com/marketing/general/issues/ link} -/label ~security +/label ~security ~"upcoming security release" /confidential diff --git a/.gitlab/issue_templates/Technical Evaluation.md b/.gitlab/issue_templates/Technical Evaluation.md index f703f72711..f603d88a76 100644 --- a/.gitlab/issue_templates/Technical Evaluation.md +++ b/.gitlab/issue_templates/Technical Evaluation.md @@ -9,9 +9,12 @@ -- [ ] Add task -- [ ] Add task -- [ ] Add task +- [ ] Determine feasibility of the feature +- [ ] Create issue for implementation or update existing implementation issue description with implementation proposal +- [ ] Set weight on implementation issue +- [ ] If weight is greater than 5, break issue into smaller issues +- [ ] Add task +- [ ] Add task ### Risks and Implementation Considerations diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md index 2a7da2a436..901228ee77 100644 --- a/.gitlab/merge_request_templates/Documentation.md +++ b/.gitlab/merge_request_templates/Documentation.md @@ -1,5 +1,6 @@ + diff --git a/.gitlab/merge_request_templates/Security Release.md b/.gitlab/merge_request_templates/Security Release.md index 02cb4c59fd..24fe44200d 100644 --- a/.gitlab/merge_request_templates/Security Release.md +++ b/.gitlab/merge_request_templates/Security Release.md @@ -12,7 +12,7 @@ See [the general developer security release guidelines](https://gitlab.com/gitla ## Developer checklist -- [ ] **Make sure this merge request mentions the [GitLab Security] issue it belongs to (i.e. `Related to `).** +- [ ] **On "Related issues" section, write down the [GitLab Security] issue it belongs to (i.e. `Related to `).** - [ ] Merge request targets `master`, or `X-Y-stable` for backports. - [ ] Milestone is set for the version this merge request applies to. A closed milestone can be assigned via [quick actions]. - [ ] Title of this merge request is the same as for all backports. diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 2e1b1770f9..dd94d0b494 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,13 +1,13 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2019-05-07 19:04:08 +0100 using Haml-Lint version 0.30.0. +# on 2020-03-04 13:16:29 +0100 using Haml-Lint version 0.34.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. linters: - # Offense count: 2075 + # Offense count: 1646 NoPlainNodes: enabled: true exclude: @@ -19,13 +19,11 @@ linters: - 'app/views/admin/application_settings/_gitaly.html.haml' - 'app/views/admin/application_settings/_influx.html.haml' - 'app/views/admin/application_settings/_ip_limits.html.haml' - - 'app/views/admin/application_settings/_logging.html.haml' - 'app/views/admin/application_settings/_performance.html.haml' - 'app/views/admin/application_settings/_plantuml.html.haml' - 'app/views/admin/application_settings/_prometheus.html.haml' - 'app/views/admin/application_settings/_realtime.html.haml' - 'app/views/admin/application_settings/_repository_check.html.haml' - - 'app/views/admin/application_settings/_repository_storage.html.haml' - 'app/views/admin/application_settings/_signin.html.haml' - 'app/views/admin/application_settings/_signup.html.haml' - 'app/views/admin/application_settings/_spam.html.haml' @@ -42,13 +40,11 @@ linters: - 'app/views/admin/broadcast_messages/index.html.haml' - 'app/views/admin/dashboard/index.html.haml' - 'app/views/admin/deploy_keys/new.html.haml' - - 'app/views/admin/groups/show.html.haml' - 'app/views/admin/health_check/show.html.haml' - 'app/views/admin/hook_logs/_index.html.haml' - 'app/views/admin/hook_logs/show.html.haml' - 'app/views/admin/hooks/_form.html.haml' - 'app/views/admin/hooks/edit.html.haml' - - 'app/views/admin/hooks/index.html.haml' - 'app/views/admin/labels/_form.html.haml' - 'app/views/admin/logs/show.html.haml' - 'app/views/admin/projects/_projects.html.haml' @@ -78,8 +74,6 @@ linters: - 'app/views/dashboard/milestones/index.html.haml' - 'app/views/dashboard/projects/_blank_state_admin_welcome.html.haml' - 'app/views/dashboard/projects/_blank_state_welcome.html.haml' - - 'app/views/dashboard/projects/_zero_authorized_projects.html.haml' - - 'app/views/dashboard/snippets/index.html.haml' - 'app/views/dashboard/todos/_todo.html.haml' - 'app/views/dashboard/todos/index.html.haml' - 'app/views/devise/confirmations/almost_there.haml' @@ -97,12 +91,10 @@ linters: - 'app/views/devise/sessions/two_factor.html.haml' - 'app/views/devise/shared/_omniauth_box.html.haml' - 'app/views/devise/shared/_sign_in_link.html.haml' - - 'app/views/devise/shared/_signup_box.html.haml' - 'app/views/devise/shared/_tabs_normal.html.haml' - 'app/views/discussions/_discussion.html.haml' - 'app/views/discussions/_headline.html.haml' - 'app/views/discussions/_notes.html.haml' - - 'app/views/discussions/_resolve_all.html.haml' - 'app/views/doorkeeper/applications/_delete_form.html.haml' - 'app/views/doorkeeper/authorized_applications/_delete_form.html.haml' - 'app/views/errors/encoding.html.haml' @@ -114,8 +106,6 @@ linters: - 'app/views/events/event/_push.html.haml' - 'app/views/groups/_create_chat_team.html.haml' - 'app/views/groups/_group_admin_settings.html.haml' - - 'app/views/groups/group_members/_new_group_member.html.haml' - - 'app/views/groups/group_members/index.html.haml' - 'app/views/groups/labels/edit.html.haml' - 'app/views/groups/labels/new.html.haml' - 'app/views/groups/milestones/edit.html.haml' @@ -130,29 +120,25 @@ linters: - 'app/views/help/instance_configuration.html.haml' - 'app/views/help/instance_configuration/_gitlab_ci.html.haml' - 'app/views/help/instance_configuration/_gitlab_pages.html.haml' - - 'app/views/help/instance_configuration/_ssh_info.html.haml' - 'app/views/help/ui.html.haml' - 'app/views/import/bitbucket/status.html.haml' - 'app/views/import/bitbucket_server/status.html.haml' - - 'app/views/instance_statistics/cohorts/_cohorts_table.html.haml' - - 'app/views/instance_statistics/cohorts/_usage_ping.html.haml' - 'app/views/invites/show.html.haml' - 'app/views/layouts/_mailer.html.haml' - 'app/views/layouts/header/_default.html.haml' - 'app/views/layouts/header/_new_dropdown.haml' - 'app/views/layouts/mailer/devise.html.haml' - - 'app/views/layouts/nav/sidebar/_profile.html.haml' - 'app/views/layouts/notify.html.haml' - 'app/views/notify/_failed_builds.html.haml' - 'app/views/notify/_reassigned_issuable_email.html.haml' - 'app/views/notify/_removal_notification.html.haml' + - 'app/views/notify/_successful_pipeline.html.haml' - 'app/views/notify/autodevops_disabled_email.html.haml' - 'app/views/notify/changed_milestone_email.html.haml' - 'app/views/notify/import_issues_csv_email.html.haml' - 'app/views/notify/issue_moved_email.html.haml' - 'app/views/notify/member_access_denied_email.html.haml' - 'app/views/notify/member_invite_accepted_email.html.haml' - - 'app/views/notify/member_invite_declined_email.html.haml' - 'app/views/notify/member_invited_email.html.haml' - 'app/views/notify/new_gpg_key_email.html.haml' - 'app/views/notify/new_mention_in_issue_email.html.haml' @@ -163,7 +149,6 @@ linters: - 'app/views/notify/pages_domain_verification_failed_email.html.haml' - 'app/views/notify/pages_domain_verification_succeeded_email.html.haml' - 'app/views/notify/pipeline_failed_email.html.haml' - - 'app/views/notify/pipeline_success_email.html.haml' - 'app/views/notify/project_was_exported_email.html.haml' - 'app/views/notify/project_was_moved_email.html.haml' - 'app/views/notify/project_was_not_exported_email.html.haml' @@ -172,31 +157,11 @@ linters: - 'app/views/notify/removed_milestone_issue_email.html.haml' - 'app/views/notify/removed_milestone_merge_request_email.html.haml' - 'app/views/notify/repository_push_email.html.haml' - - 'app/views/peek/views/_gc.html.haml' - - 'app/views/peek/views/_redis.html.haml' - - 'app/views/peek/views/_sidekiq.html.haml' - - 'app/views/profiles/_event_table.html.haml' - - 'app/views/profiles/active_sessions/_active_session.html.haml' - - 'app/views/profiles/active_sessions/index.html.haml' - - 'app/views/profiles/audit_log.html.haml' - 'app/views/profiles/chat_names/_chat_name.html.haml' - 'app/views/profiles/chat_names/index.html.haml' - 'app/views/profiles/chat_names/new.html.haml' - - 'app/views/profiles/emails/index.html.haml' - - 'app/views/profiles/gpg_keys/_key.html.haml' - - 'app/views/profiles/gpg_keys/index.html.haml' - 'app/views/profiles/keys/_key.html.haml' - - 'app/views/profiles/keys/_key_details.html.haml' - - 'app/views/profiles/keys/index.html.haml' - - 'app/views/profiles/notifications/show.html.haml' - - 'app/views/profiles/passwords/edit.html.haml' - - 'app/views/profiles/personal_access_tokens/index.html.haml' - - 'app/views/profiles/preferences/show.html.haml' - 'app/views/profiles/show.html.haml' - - 'app/views/profiles/two_factor_auths/_codes.html.haml' - - 'app/views/profiles/two_factor_auths/codes.html.haml' - - 'app/views/profiles/two_factor_auths/create.html.haml' - - 'app/views/profiles/two_factor_auths/show.html.haml' - 'app/views/projects/_bitbucket_import_modal.html.haml' - 'app/views/projects/_customize_workflow.html.haml' - 'app/views/projects/_deletion_failed.html.haml' @@ -206,10 +171,8 @@ linters: - 'app/views/projects/_import_project_pane.html.haml' - 'app/views/projects/_issuable_by_email.html.haml' - 'app/views/projects/_md_preview.html.haml' - - 'app/views/projects/_new_project_fields.html.haml' - 'app/views/projects/_readme.html.haml' - 'app/views/projects/artifacts/_artifact.html.haml' - - 'app/views/projects/artifacts/_search_bar.html.haml' - 'app/views/projects/artifacts/_tree_file.html.haml' - 'app/views/projects/artifacts/browse.html.haml' - 'app/views/projects/blame/_age_map_legend.html.haml' @@ -219,7 +182,6 @@ linters: - 'app/views/projects/blob/_new_dir.html.haml' - 'app/views/projects/blob/_remove.html.haml' - 'app/views/projects/blob/_render_error.html.haml' - - 'app/views/projects/blob/_template_selectors.html.haml' - 'app/views/projects/blob/_upload.html.haml' - 'app/views/projects/blob/edit.html.haml' - 'app/views/projects/blob/new.html.haml' @@ -244,8 +206,6 @@ linters: - 'app/views/projects/deploy_keys/_form.html.haml' - 'app/views/projects/deploy_keys/_index.html.haml' - 'app/views/projects/deploy_keys/edit.html.haml' - - 'app/views/projects/deploy_tokens/_revoke_modal.html.haml' - - 'app/views/projects/deploy_tokens/_table.html.haml' - 'app/views/projects/deployments/_deployment.html.haml' - 'app/views/projects/diffs/_file_header.html.haml' - 'app/views/projects/diffs/_replaced_image_diff.html.haml' @@ -254,10 +214,8 @@ linters: - 'app/views/projects/environments/show.html.haml' - 'app/views/projects/forks/error.html.haml' - 'app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml' - - 'app/views/projects/graphs/charts.html.haml' - 'app/views/projects/hook_logs/_index.html.haml' - 'app/views/projects/hook_logs/show.html.haml' - - 'app/views/projects/hooks/_index.html.haml' - 'app/views/projects/hooks/edit.html.haml' - 'app/views/projects/imports/new.html.haml' - 'app/views/projects/imports/show.html.haml' @@ -294,20 +252,9 @@ linters: - 'app/views/projects/merge_requests/widget/open/_error.html.haml' - 'app/views/projects/mirrors/_regenerate_public_ssh_key_confirm_modal.html.haml' - 'app/views/projects/mirrors/_ssh_host_keys.html.haml' - - 'app/views/projects/new.html.haml' - 'app/views/projects/no_repo.html.haml' - - 'app/views/projects/pages/_access.html.haml' - - 'app/views/projects/pages/_destroy.haml' - - 'app/views/projects/pages/_https_only.html.haml' - - 'app/views/projects/pages/_list.html.haml' - - 'app/views/projects/pages/_no_domains.html.haml' - - 'app/views/projects/pages/_use.html.haml' - - 'app/views/projects/pages/show.html.haml' - 'app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml' - 'app/views/projects/pipelines/_info.html.haml' - - 'app/views/projects/pipelines/charts/_pipelines.haml' - - 'app/views/projects/protected_branches/shared/_branches_list.html.haml' - - 'app/views/projects/protected_branches/shared/_create_protected_branch.html.haml' - 'app/views/projects/protected_branches/shared/_dropdown.html.haml' - 'app/views/projects/protected_branches/shared/_index.html.haml' - 'app/views/projects/protected_branches/shared/_matching_branch.html.haml' @@ -325,7 +272,6 @@ linters: - 'app/views/projects/runners/_shared_runners.html.haml' - 'app/views/projects/runners/edit.html.haml' - 'app/views/projects/services/_form.html.haml' - - 'app/views/projects/services/_index.html.haml' - 'app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml' - 'app/views/projects/services/mattermost_slash_commands/_help.html.haml' - 'app/views/projects/services/prometheus/_metrics.html.haml' @@ -338,43 +284,35 @@ linters: - 'app/views/projects/tags/releases/edit.html.haml' - 'app/views/projects/tree/_tree_row.html.haml' - 'app/views/projects/tree/_truncated_notice_tree_row.html.haml' - - 'app/views/projects/triggers/_content.html.haml' - 'app/views/projects/triggers/_form.html.haml' - 'app/views/projects/triggers/_index.html.haml' - 'app/views/projects/triggers/_trigger.html.haml' - 'app/views/projects/triggers/edit.html.haml' - - 'app/views/projects/wikis/_new.html.haml' - 'app/views/projects/wikis/_pages_wiki_page.html.haml' - 'app/views/projects/wikis/edit.html.haml' - 'app/views/projects/wikis/history.html.haml' - - 'app/views/repository_check_mailer/notify.html.haml' - - 'app/views/search/_form.html.haml' - 'app/views/search/results/_issue.html.haml' - 'app/views/search/results/_note.html.haml' - 'app/views/search/results/_snippet_blob.html.haml' - 'app/views/search/results/_snippet_title.html.haml' - 'app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml' - 'app/views/shared/_commit_message_container.html.haml' - - 'app/views/shared/_confirm_modal.html.haml' - 'app/views/shared/_confirm_fork_modal.html.haml' + - 'app/views/shared/_confirm_modal.html.haml' - 'app/views/shared/_delete_label_modal.html.haml' - 'app/views/shared/_group_form.html.haml' - 'app/views/shared/_group_tips.html.haml' - 'app/views/shared/_milestone_expired.html.haml' - 'app/views/shared/_no_password.html.haml' - 'app/views/shared/_no_ssh.html.haml' - - 'app/views/shared/_outdated_browser.html.haml' - - 'app/views/shared/_personal_access_tokens_created_container.html.haml' - - 'app/views/shared/_personal_access_tokens_table.html.haml' - 'app/views/shared/_ping_consent.html.haml' - 'app/views/shared/_project_limit.html.haml' - - 'app/views/shared/_service_settings.html.haml' - 'app/views/shared/boards/components/_board.html.haml' - 'app/views/shared/boards/components/_sidebar.html.haml' - 'app/views/shared/boards/components/sidebar/_due_date.html.haml' - 'app/views/shared/boards/components/sidebar/_labels.html.haml' - 'app/views/shared/boards/components/sidebar/_milestone.html.haml' - - 'app/views/shared/empty_states/_priority_labels.html.haml' + - 'app/views/shared/deploy_tokens/_revoke_modal.html.haml' - 'app/views/shared/hook_logs/_content.html.haml' - 'app/views/shared/issuable/_assignees.html.haml' - 'app/views/shared/issuable/_board_create_list_dropdown.html.haml' @@ -399,57 +337,42 @@ linters: - 'app/views/shared/notifications/_button.html.haml' - 'app/views/shared/notifications/_custom_notifications.html.haml' - 'app/views/shared/notifications/_new_button.html.haml' - - 'app/views/shared/notifications/_notification_dropdown.html.haml' - - 'app/views/shared/plugins/_index.html.haml' - - 'app/views/shared/projects/_dropdown.html.haml' - - 'app/views/shared/projects/_list.html.haml' - - 'app/views/shared/projects/_project.html.haml' - 'app/views/shared/runners/_runner_description.html.haml' - 'app/views/shared/runners/show.html.haml' - - 'app/views/shared/snippets/_embed.html.haml' - 'app/views/shared/snippets/_header.html.haml' - 'app/views/shared/snippets/_snippet.html.haml' - - 'app/views/shared/tokens/_scopes_list.html.haml' - 'app/views/shared/web_hooks/_form.html.haml' - 'app/views/shared/web_hooks/_hook.html.haml' - - 'app/views/shared/web_hooks/_test_button.html.haml' - 'app/views/u2f/_authenticate.html.haml' - 'app/views/u2f/_register.html.haml' - 'app/views/users/_deletion_guidance.html.haml' - 'ee/app/views/admin/_namespace_plan_info.html.haml' - 'ee/app/views/admin/application_settings/_templates.html.haml' - 'ee/app/views/admin/audit_logs/index.html.haml' - - 'ee/app/views/admin/dashboard/stats.html.haml' - 'ee/app/views/admin/emails/show.html.haml' - 'ee/app/views/admin/geo/nodes/edit.html.haml' - 'ee/app/views/admin/geo/nodes/new.html.haml' - 'ee/app/views/admin/geo/projects/_registry_failed.html.haml' - 'ee/app/views/admin/geo/projects/_registry_never.html.haml' - - 'ee/app/views/admin/licenses/_breakdown.html.haml' - 'ee/app/views/admin/licenses/_upload_trial_license.html.haml' - - 'ee/app/views/admin/licenses/missing.html.haml' - 'ee/app/views/admin/licenses/new.html.haml' - 'ee/app/views/admin/licenses/show.html.haml' - 'ee/app/views/admin/monitoring/ee/_nav.html.haml' - 'ee/app/views/admin/projects/_shared_runner_status.html.haml' - - 'ee/app/views/admin/push_rules/show.html.haml' + - 'ee/app/views/admin/users/_auditor_access_level_radio.html.haml' + - 'ee/app/views/admin/users/_auditor_user_badge.html.haml' - 'ee/app/views/admin/users/_limits.html.haml' - 'ee/app/views/admin/users/_user_detail_note.html.haml' - 'ee/app/views/dashboard/projects/_blank_state_ee_trial.html.haml' - 'ee/app/views/errors/kerberos_denied.html.haml' - - 'ee/app/views/groups/analytics/show.html.haml' - - 'ee/app/views/groups/audit_events/index.html.haml' - 'ee/app/views/groups/ee/_settings_nav.html.haml' - 'ee/app/views/groups/epics/_epic.html.haml' - 'ee/app/views/groups/group_members/_ldap_sync.html.haml' - 'ee/app/views/groups/group_members/_sync_button.html.haml' - 'ee/app/views/groups/hooks/edit.html.haml' - - 'ee/app/views/groups/hooks/index.html.haml' - 'ee/app/views/groups/ldap_group_links/index.html.haml' - - 'ee/app/views/groups/pipeline_quota/index.html.haml' - 'ee/app/views/jira_connect/subscriptions/index.html.haml' - 'ee/app/views/layouts/jira_connect.html.haml' - - 'ee/app/views/layouts/nav/ee/_epic_link.html.haml' - 'ee/app/views/layouts/nav/ee/admin/_new_monitoring_sidebar.html.haml' - 'ee/app/views/layouts/service_desk.html.haml' - 'ee/app/views/ldap_group_links/_form.html.haml' @@ -465,26 +388,22 @@ linters: - 'ee/app/views/notify/epic_status_changed_email.html.haml' - 'ee/app/views/notify/issues_csv_email.html.haml' - 'ee/app/views/notify/new_review_email.html.haml' - - 'ee/app/views/notify/prometheus_alert_fired_email.html.haml' - 'ee/app/views/notify/send_admin_notification.html.haml' - 'ee/app/views/notify/send_unsubscribed_notification.html.haml' - 'ee/app/views/notify/unapproved_merge_request_email.html.haml' - 'ee/app/views/oauth/geo_auth/error.html.haml' - 'ee/app/views/profiles/pipeline_quota/index.haml' - - 'ee/app/views/projects/audit_events/index.html.haml' - 'ee/app/views/projects/blob/_owners.html.haml' - 'ee/app/views/projects/commits/_mirror_status.html.haml' - - 'ee/app/views/projects/feature_flags/_configure_feature_flags_modal.html.haml' - 'ee/app/views/projects/issues/_issue_weight.html.haml' - - 'ee/app/views/projects/issues/_related_issues.html.haml' - 'ee/app/views/projects/issues/export_csv/_modal.html.haml' - 'ee/app/views/projects/jobs/_shared_runner_limit_warning.html.haml' - 'ee/app/views/projects/merge_requests/_approvals_count.html.haml' - 'ee/app/views/projects/merge_requests/widget/open/_geo.html.haml' - 'ee/app/views/projects/mirrors/_mirrored_repositories_count.html.haml' + - 'ee/app/views/projects/protected_branches/_update_protected_branch.html.haml' - 'ee/app/views/projects/protected_branches/ee/_create_protected_branch.html.haml' - 'ee/app/views/projects/protected_branches/ee/_dropdown.html.haml' - - 'ee/app/views/projects/protected_branches/ee/_fallback_update_protected_branch.html.haml' - 'ee/app/views/projects/protected_tags/_protected_tag_extra_create_access_levels.haml' - 'ee/app/views/projects/protected_tags/ee/_create_protected_tag.html.haml' - 'ee/app/views/projects/push_rules/_index.html.haml' @@ -494,22 +413,16 @@ linters: - 'ee/app/views/projects/settings/slacks/edit.html.haml' - 'ee/app/views/shared/_additional_email_text.html.haml' - 'ee/app/views/shared/_mirror_update_button.html.haml' - - 'ee/app/views/shared/_shared_runners_minutes_limit.html.haml' - - 'ee/app/views/shared/audit_events/_event_table.html.haml' - 'ee/app/views/shared/boards/components/_list_weight.html.haml' - - 'ee/app/views/shared/boards/components/sidebar/_epic.html.haml' - - 'ee/app/views/shared/ee/_import_form.html.haml' - 'ee/app/views/shared/epic/_search_bar.html.haml' - 'ee/app/views/shared/issuable/_approvals.html.haml' - 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml' - 'ee/app/views/shared/issuable/_filter_weight.html.haml' - - 'ee/app/views/shared/issuable/_sidebar_item_epic.haml' - 'ee/app/views/shared/members/ee/_ldap_tag.html.haml' - 'ee/app/views/shared/members/ee/_override_member_buttons.html.haml' - 'ee/app/views/shared/members/ee/_sso_badge.html.haml' - 'ee/app/views/shared/milestones/_burndown.html.haml' - 'ee/app/views/shared/milestones/_weight.html.haml' - - 'ee/app/views/shared/promotions/_promote_audit_events.html.haml' - 'ee/app/views/shared/promotions/_promote_burndown_charts.html.haml' - 'ee/app/views/shared/promotions/_promote_csv_export.html.haml' - 'ee/app/views/shared/promotions/_promote_issue_weights.html.haml' @@ -517,7 +430,3 @@ linters: - 'ee/app/views/shared/promotions/_promote_servicedesk.html.haml' - 'ee/app/views/shared/push_rules/_form.html.haml' - 'ee/app/views/unsubscribes/show.html.haml' - - 'ee/app/views/admin/users/_auditor_access_level_radio.html.haml' - - 'ee/app/views/admin/users/_auditor_user_badge.html.haml' - - 'ee/app/views/projects/protected_branches/_update_protected_branch.html.haml' - - 'ee/app/views/analytics/cycle_analytics/show.html.haml' diff --git a/.markdownlint.json b/.markdownlint.json index fe3790f47e..4e2f74c610 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -123,5 +123,6 @@ "YouTrack" ], "code_blocks": false - } + }, + "code-fence-style": false } diff --git a/.rubocop.yml b/.rubocop.yml index 514e427127..ebc27c4cc9 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -331,25 +331,19 @@ RSpec/MissingExampleGroupArgument: RSpec/UnspecifiedException: Enabled: false -# Work in progress. See https://gitlab.com/gitlab-org/gitlab/issues/196163 RSpec/HaveGitlabHttpStatus: Enabled: true Exclude: - 'spec/support/matchers/have_gitlab_http_status.rb' Include: - - 'spec/support/**/*' - - 'ee/spec/support/**/*' - - 'spec/features/**/*' - - 'ee/spec/features/**/*' - - 'spec/controllers/**/*' - - 'ee/spec/controllers/**/*' - - 'spec/requests/*.rb' - - 'ee/spec/requests/*.rb' - - 'spec/requests/api/*/**/*.rb' - - 'ee/spec/requests/api/*/**/*.rb' + - 'spec/**/*' + - 'ee/spec/**/*' Style/MultilineWhenThen: Enabled: false Style/FloatDivision: Enabled: false + +Cop/BanCatchThrow: + Enabled: true diff --git a/.vale.ini b/.vale.ini index 89a669ec7f..13b198b914 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,40 +1,9 @@ -# Vale configuration file, taken from https://errata-ai.github.io/vale/config/ +# Vale configuration file. +# +# For more information, see https://errata-ai.gitbook.io/vale/getting-started/configuration. -# The relative path to the folder containing linting rules (styles) -# ----------------------------------------------------------------- -StylesPath = doc/.linting/vale/styles - -# Minimum alert level -# ------------------- -# The minimum alert level to display (suggestion, warning, or error). -# If integrated into CI, builds fail by default on error-level alerts, -# unless you execute Vale with the --no-exit flag +StylesPath = doc/.vale MinAlertLevel = suggestion -# Should Vale parse any file formats other than .md files as Markdown? -# -------------------------------------------------------------------- -[formats] -mdx = md - -# What file types should Vale test? -# ---------------------------------- [*.md] - -# Styles to load -# -------------- -# What styles, located in the StylesPath folder, should Vale load? -# Vale also currently includes write-good, proselint, joblint, and vale BasedOnStyles = gitlab - -# Enabling or disabling specific rules in a style -# ----------------------------------------------- -# To disable a rule in an enabled style, use the following format: -# {style}.{filename} = NO -# To enable a single rule in a disabled style, use the following format: -# vale.Editorializing = YES - -# Altering the severity of a rule in a style -# ------------------------------------------ -# To change the reporting level (suggestion, warning, error) of a rule, -# use the following format: {style}.{filename} = {level} -# vale.Hedging = error diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md index a2f417a16c..c570a5d2fd 100644 --- a/CHANGELOG-EE.md +++ b/CHANGELOG-EE.md @@ -1,5 +1,157 @@ Please view this file on the master branch, on stable branches it's out of date. +## 12.9.2 (2020-03-31) + +### Fixed (4 changes) + +- Fix direct access to individual design on deprecated issue route. !27650 +- Fix error when viewing events from design notes on project activity page. !27840 +- Allow Seat Link to be disabled through configuration or admin toggle. !28015 +- Allow active_users param to be optional for SyncSeatLinkRequestWorker#perform. !28241 + +### Changed (1 change) + +- Send active users for each day in seat link POST request. !27481 + + +## 12.9.1 (2020-03-26) + +### Security (1 change) + +- Add NPM package versions SemVer validation. + + +## 12.9.0 (2020-03-22) + +### Removed (1 change) + +- Remove Security Dashboard button from project page. !24781 + +### Fixed (20 changes) + +- Ensure User IDs are Removed When Moving to All Users Strategy. !25190 +- Fix dismissed vulnerability comment updates. !25328 +- Generate illustrations URLs in the backend. !25375 +- Check user role for each of namespaces while deciding if it is using a paid seat in it. !25437 +- Change MR approval popover to use hover trigger. !25494 +- Change copy of Welcome screen. !25526 +- Fix weight not showing in linked issues. !25718 +- Scope name uniqueness of approval rules to type. !25875 +- Pass correct Time object to Value Stream Management DataCollector. !25885 +- API for Namespace members has correct boolean if user using paid seat. !25988 +- Set the default SSL cert path environment variables when invoking indexer. !26036 +- Add pagination to Instance Level Security Dashboard project selector. !26138 +- Exclude creation event from audit changes. !26140 +- Resolve Usage Ping timeouts on security_products_usage for large hosts. !26296 +- Fix SCIM API not creating new users. !26514 +- BulkIndexer change _routing -> routing to support ES 7. !26639 +- Ensure design events are correctly visible. !26708 +- Add support for async search within Epics dropdown. !26980 +- Fix configuration issue for License Compliance. !27016 +- Geo - Fix ambiguous reference column while loading migrated local files to clean up. !27252 + +### Changed (22 changes, 1 of them is from the community) + +- Add auto_renew attribute to gitlab_subscriptions and expose via api. !24896 (jejacks0n) +- Remove admin user count from Users statistics. !25337 +- Improve error messages in the Dependency List. !25369 +- Do not automatically add approvers as participants of each merge request. !25546 +- Improve loading UX in the License Management list. !25620 +- Improve audit log & events header layout. !25821 +- Adjust the MR approval rule to use a smaller modal. !25955 +- Resolve Code review start time doesnt account for approvals. !25997 +- Prevent 'Invite group' for groups outside a group-managed account group. !26081 +- Improve language when MR Security Report is outdated. !26150 +- Prevent projects from being shared outside a group with managed accounts. !26163 +- Prevent projects from being shared outside a group with managed accounts for forked projects. !26186 +- Extract time range information to be reused. !26431 +- Restrict inviting outside group to a project forked from a group with enforced SSO. !26456 +- Add severity badge to security reports. !26715 +- Consider MR reassign as code review start. !26891 +- Add application limits for Ci::PipelineSchedule. !27004 +- Update license compliance policy classifications text in the UI. !27058 +- Remove approval metric recalculation when approval was removed. !27071 +- Move Value Stream Analytics to the group level. !27304 +- Remove release tag filter from Issues Analytics. !208903 +- Change dependency & license scan pipeline text message. + +### Performance (4 changes) + +- Optimize service desk issue counters query performance in usage data. !26445 +- Preload database records in bulk indexing. !26754 +- Geo: Make the LFS registry the SSOT to optimize query performance. !27154 +- Remove feature flag elastic_bulk_incremental_updates. !27293 + +### Added (58 changes, 9 of them are from the community) + +- Audit number of required approvals changes. !7531 +- Add weight and progress information in Roadmap Epic bars. !18957 +- Adds the ability to dismiss multiple vulnerabilities. !21480 +- Add code quality tab to pipeline view. !21527 +- Add milestones to roadmap. !22748 +- Add Threat Monitoring page. !22911 +- Add epic in filtered search. !22958 +- Add deep links for cycle analytics. !23493 +- Allow existing users to transfer their account to SAML Group managed accounts. !24329 +- Use snowplow for user error reporting in trial. !24430 +- Time period for usage activity by stage in usage data. !24431 +- Adds sorting to group packages api. !24432 +- Export Board Milestones in Group Export. !24606 +- Add possibility to search for epics by partial iids using GraphQL. !24673 +- Add restrict outer forks functionality for group SAML. !24698 +- Release Jira connect feature. !24818 +- Adds project_path sorting to group package API. !24833 +- Add webhook limits for groups. !25129 +- Default design images to 100% of viewport width. !25327 +- Add npm_package_requests_forwarding to application settings. !25346 +- Add bot count to Users statistics in Admin Area. !25355 +- Adding CODEOWNER approval metrics for merge requests. !25386 +- Separate 4 ee entities into own class file. !25400 (Rajendra Kadam) +- Improve zoom reset after resizing window in Design Management. !25406 +- Introduce Project level issues analytics. !25417 +- Add tooltip to guests count in Users Statistics. !25433 +- Separate epic, epic_issue, linked epic ee entities into own class file. !25592 (Rajendra Kadam) +- Add API endpoints for Group Activity Analytics. !25606 +- Add GraphQL mutation to set the epic of an issue. !25628 +- Add merge request metrics first approved at timestamp. !25681 +- Separate ee entities into own class file. !25709 (Rajendra Kadam) +- Embed cluster health metrics in GitLab-flavored Markdown. !25739 +- Always show the Design Tab on Issues but indicate user if feature is not available. !25796 +- Status page settings. !25820 +- Audit user blocked via API. !25872 +- Create a vulnerability-list component. !25927 +- Audit project MR approval permission changes. !25959 +- Add health status data to the epic GraphQL endpoint. !25989 +- Display correct approval rules based on target branch in Edit MR form. !26053 +- Activate triggering webhooks from a subgroup feature. !26070 +- Separate vulnerabilities, feature flags, dependency entities into own class files. !26088 (Rajendra Kadam) +- Support drag-and-drop design uploads in Design Management. !26139 +- Add distinct user count of secure stage items to usage ping. !26194 +- Support drag-and-drop on existing designs in Design Management. !26446 +- Add worker to sync paid seats info daily in the background. !26467 +- Separate project alias, build info, package entities into own class files. !26493 (Rajendra Kadam) +- Support async loading & search of projects within Epics Tree. !26661 +- Add code review reassign metric structure. !26664 +- Separate npm, subs and geo entities into own class file. !26674 (Rajendra Kadam) +- Separate geo_node and license entities into own class file. !26685 (Rajendra Kadam) +- Separate merge request approval entities into own class files. !26860 (Rajendra Kadam) +- Include snippet description as part of snippet title search (advanced search, Elasticsearch reindexing required). !26870 +- Add Roadmap GraphQL and unfiltered epic aggregates. !26919 +- Add NPM package requests forwarding to npmjs.org. !26932 +- Separate approval entities into own class files. !27336 (Rajendra Kadam) +- View description changes history of issues, epics and merge requests. !27445 +- Enable license compliance policies tab for on prem installs. +- Add a bulk processor for ES incremental updates. + +### Other (5 changes, 1 of them is from the community) + +- Refactor WeightSelect to use gitlab-ui dropdown. !20770 +- Update to new severity badge design. !25489 +- Rename close_{at,by} to dismissed_{at,by} in Vulnerabilities. !25609 (Michał Zając) +- Style MR approval popover link to be consistent text size. !25657 +- Allow users to be marked as service users. !202680 + + ## 12.8.7 (2020-03-16) ### Fixed (1 change) @@ -17,11 +169,11 @@ Please view this file on the master branch, on stable branches it's out of date. ## 12.8.4 -- Unreleased due to tagging failure. +- No changes. ## 12.8.3 -- Unreleased due to tagging failure. +- No changes. ## 12.8.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f9b53846b..197596031b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,19 +2,38 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. -## 12.8.8 (2020-03-26) +## 12.9.2 (2020-03-31) -### Security (17 changes) +- No changes. +### Fixed (5 changes) -- Redact notes in moved confidential issues. +- Ensure import by URL works after a failed import. !27546 +- Fix issue/MR state not being preserved when importing a project using Project Import/Export. !27816 +- Leave upload Content-Type unchaged. !27864 +- Disable archive rate limit by default. !28264 +- Fix rake gitlab:setup failing on new installs. !28270 + +### Changed (1 change) + +- Rename feature on the FE and locale. + +### Performance (1 change) + +- Index issues on sent_notifications table. !27034 + + +## 12.9.1 (2020-03-26) + +### Security (16 changes) + +- Add permission check for pipeline status of MR. - Ignore empty remote_id params from Workhorse accelerated uploads. - External user can not create personal snippet through API. - Prevent malicious entry for group name. - Restrict mirroring changes to admins only when mirroring is disabled. - Reject all container registry requests from blocked users. - Deny localhost requests on fogbugz importer. -- Change GitHub service integration token input to password. -- Add permission check for pipeline status of MR. +- Redact notes in moved confidential issues. - Fix UploadRewriter Path Traversal vulnerability. - Block hotlinking to repository archives. - Restrict access to project pipeline metrics reports. @@ -24,6 +43,462 @@ entry. - Prevent updating trigger by other maintainers. - Fix XSS vulnerability in `admin/email` "Recipient Group" dropdown. +### Fixed (1 change) + +- Fix updating the authorized_keys file. !27798 + + +## 12.9.0 (2020-03-22) + +### Security (1 change) + +- Update Puma to 4.3.3. !27232 + +### Removed (3 changes) + +- Remove staging from commit workflow in the Web IDE. !26151 +- Remove and deprecate snippet content search. !26359 +- Remove "Analytics" suffix from the sidebar menu items. !26415 + +### Fixed (117 changes, 19 of them are from the community) + +- Set all NULL `lock_version` values to 0 for issuables. !18418 +- Support finding namespace by ID or path on fork API. !20603 (leoleoasd) +- Fixes caret position after pasting an image 15011. !21382 (Carolina Carvalhosa) +- Use of sha instead of ref when creating a new ref on deployment creation. !23170 +- Fix logic to determine project export state and add regeneration_in_progress state. !23664 +- Create child pipelines dynamically using content from artifact as CI configuration. !23790 +- Handle Gitaly failure when fetching license. !24310 +- Fix error details layout and alignment for mobile view. !24390 +- Added the multiSelect option to stop event propagation when clicking on the dropdown. !24611 (Gwen_) +- Activate Prometheus integration service for newly created project if this project has access to shared Prometheus application. !24676 +- Fix Jump to next unresolved thread. !24728 +- Require a logged in user to accept or decline a term. !24771 +- Fix quick actions executing in multiline inline code when placed on its own line. !24933 (Pavlo Dudchenko) +- Fix timezones for popovers. !24942 +- Prevent "Select project to create merge request" button from overflowing out of the viewport on mobile. !25195 +- Add validation for updated_at parameter in update Issue API. !25201 (Filip Stybel) +- Elasticsearch: when index is absent warn users and disable index button. !25254 +- Fix pipeline details page initialisation on invalid pipeline. !25302 (Fabio Huser) +- Fix bug with sidebar not expanding at certain resolutions. !25313 (Lee Tickett) +- Rescue elasticsearch server error in pod logs. !25367 +- Fix project setting approval input in non-sequential order. !25391 +- Add responsivity to cluster environments table. !25501 +- Board issue due dates appear grey for closed past-due issues. !25507 (rachelfox) +- Fix self monitoring project link. !25516 +- Don't track MR deployment multiple times. !25537 +- Fix an issue with Group Import members with Owner access level being imported with Maintainer access level. Owner access level is now preserved. !25595 +- Allow 0 to be set for pages maximum size per project/group to indicate unlimited size. !25677 +- Fix variable passthrough in the SAST CI/CD template when using DinD. !25697 +- Drop bridge if downstream pipeline has errors. !25706 +- Clean stale background migration jobs. !25707 +- Inject CSP values when repository static objects external caching is enabled. !25711 +- Fix bug deleting internal project snippets by project maintainer. !25792 +- Fix Insights displaying JSON on back navigation. !25801 +- Don't show issue as blocked on the issue board if blocking issue is closed. !25817 +- Return 503 to the Runner when the object storage is unavailable. !25822 +- Ensure temp export data is removed if Group/Project export failed. !25828 +- Fix Kubernetes namespace resolution for new DeploymentCluster records. !25853 +- Fix links to exposed artifacts in MRs from forks. !25868 (Daniel Stone) +- Keep needs association on the retried build. !25888 +- Remove unreachable link from embded dashboard context menu. !25892 +- Fix issue importer so it matches issue export format. !25896 +- Fix snippet blob viewers for rich and plain data. !25945 +- Fix White syntax highlighting theme in Monaco to closely match the Pygments theme. !25966 +- Markup tips for Markdown shown while editing wiki pages in other formats. !25974 +- Fix code search pagination on a custom branch. !25984 +- Fix Snippet content incorrectly caching. !25985 +- Fix 500 error caused by Kubernetes logs not being encoded in UTF-8. !25999 +- Fix "Add an epic" form. !26003 +- Ensure weight changes no longer render duplicate system notes. !26014 +- Geo: Show secondary-only setting on only on secondaries. !26029 +- Fixes project import failures when user is not part of any groups. !26038 +- Fix ImportFailure when restore ci_pipelines:external_pull_request relation. !26041 +- Code Review Analytics: Fix review time display. !26057 +- Allow to fork to the same namespace and different path via API call. !26062 +- Change back internal api return code. !26063 +- Create approval todos on update. !26077 +- Fix issues missing on epic's page after project import. !26099 +- Fix scoped labels rendering in To-Do List. !26146 +- Fix 500 Error when using Gitea Importer. !26166 +- Fix dev vulnerabilities seeder. !26169 +- Use uncached SQL queries for Geo long-running workers. !26187 +- Fix infinite spinner on error detail page. !26188 +- Generate proper link for Pipeline tab. !26193 +- Issue Analytics: Fix svg illustration path for empty state. !26219 +- Fix dashboards dropdown if custom dashboard is broken. !26228 +- Refresh widget after canceling "Merge When Pipeline Succeeds". !26232 +- Fix package file finder for conan packages with a conan_package_reference filter. !26240 +- Fixed bug where processing NuGet packages are returned from the Packages API. !26270 +- Fix bug committing snippet content when creating the snippet. !26287 +- Fix error messages for dashboard clonning process. !26290 +- Fix saving preferences with unrelated changes when gitaly timeouts became invalid. !26292 +- Allow creating default branch in snippet repositories. !26294 +- Container expiration policy settings hide form on API error. !26303 +- Prevent unauthorized users to lock an issue from the collapsed sidebar. !26324 (Gilang Gumilar) +- Mark existing LFS object for upload for forks. !26344 +- Fix scoped labels rendering in emails. !26347 +- Fix issues with non-ASCII plain text files being incorrectly uploaded as binary in the Web IDE. !26360 +- Polyfill fetch for Internet Explorer 11. !26366 +- Fix avg_cycle_analytics uncaught error and optimize query. !26381 +- Fix reversed pipeline order on Project Import. !26390 +- Display GitLab issues created via Sentry global integration. !26418 +- Fix MergeToRefService raises Gitlab::Git::CommandError. !26465 +- Render special references for releases. !26554 +- Show git error message updating snippet. !26570 +- Support Rails 6 `insert_all!`. !26595 +- Fix evidence SHA clipboard hover text. !26608 (Gilang Gumilar) +- Prevent editing weight to scroll to the top. !26613 (Gilang Gumilar) +- Fix spinner in Create MR dropdown. !26679 +- Added a padding-right to items in subgroup list. !26791 +- Prevent default overwrite for theme and color ID in user API. !26792 (Fabio Huser) +- Fix user registration when smartcard authentication is enabled. !26800 +- Correctly send notification on pipeline retry. !26803 (Jacopo Beschi @jacopo-beschi) +- Default to generating blob links for missing paths. !26817 +- Fix Mermaid flowchart width. !26848 (julien MILLAU) +- Ensure valid mount point is used by attachments on notes. !26849 +- Validate that users selects at least two subnets in EKS Form. !26936 +- Fix embeds so that a chart appears only once. !26997 +- Fix capybara screenshots path name for rails configuration. !27002 +- Fix access to logs when multiple pods exist. !27008 +- Fix installation of GitLab-managed crossplane chart. !27040 +- Fix bug displaying snippet update error. !27082 +- Fix WikiPage#title_changed for paths with spaces. !27087 +- Fix backend validation of numeric emoji names. !27101 +- Reorder exported relations by primary_key when using Project Export. !27117 +- Ensure freshness of settings with project creation. !27156 +- Fix bug setting hook env with personal snippets. !27235 +- Fix Conan package download_urls and snapshot to return files based on requested conan_package_reference. !27250 +- Fixes stop_review job upon expired artifacts from previous stages. !27258 (Jack Lei) +- Fix duplicate labels when moving projects within the same ancestor group. !27261 +- Fix project moved message after git operation. !27341 +- Fix submodule links to gist.github.com. !27346 +- Fix remove special chars from snippet url_to_repo. !27390 +- Validate actor against CODEOWNERS entries. +- Fix: tableflip quick action is interpreted even if inside code block. (Pavlo Dudchenko) +- Fix an error with concat method. +- Improved selection of multiple cards. (Gwen_) +- Resolves the disappearance of a ticket when it was moved from the closed list. (Gwen_) + +### Deprecated (1 change) + +- Remove state column from issues and merge_requests. !25561 + +### Changed (81 changes, 18 of them are from the community) + +- Remove kubernetes workaround in container scanning. !21188 +- New styles for scoped labels. !21377 +- Update labels in Vue with GlLabel component. !21465 +- Update Web IDE clientside preview bundler to use GitLab managed server. !21520 +- Allow default time window on grafana embeds. !21884 +- Default to first valid panel in unspecified Grafana embeds. !21932 +- Correctly style scoped labels in sidebar after updating. !22071 +- Add id and image_v432x230 columns to design_management_designs_versions. !22860 +- Decouple Webhooks from Integrations within Project > Settings. !23136 +- Sort closed issues on issue boards using time of closing. !23442 (briankabiro) +- Differentiate between errors and failures in xUnit result. !23476 +- Add 'shard' label for 'job_queue_duration_seconds' metric. !23536 +- Migrate mentions for design notes to design_user_mentions DB table. !23704 +- Migrate mentions for commit notes to commit_user_mentions DB table. !23859 +- Update files when snippet is updated. !23993 +- Move issues routes under /-/ scope. !24791 +- Migrated the sidebar label select dropdown title component spinner to utilize GlLoadingIcon. !24914 (Raihan Kabir) +- Migrated from .fa-spinner to .spinner in 'app/assets/javascripts/notes.js. !24916 (Raihan Kabir (gitlab/rk4bir)) +- Migrated from .fa-spinner to .spinner in app/assets/javascripts/create_merge_request_dropdown.js. !24917 (Raihan Kabir (gitlab/rk4bir)) +- Migrated from .fa-spinner to .spinner in app/assets/javascripts/sidebar/components/assignees/assignee_title.vue. !24919 (rk4bir) +- Replace underscore with lodash for ./app/assets/javascripts/deploy_keys. !24965 (Jacopo Beschi @jacopo-beschi) +- Replace underscore with lodash for ./app/assets/javascripts/badges. !24966 (Jacopo Beschi @jacopo-beschi) +- Add commits limit text at graphs page. !24990 +- Migrated from .fa-spinner to .spinner in app/assets/javascripts/blob/template_selector.js. !25045 (Raihan Kabir (gitlab/rk4bir)) +- Update iOS (Swift) project template logo. !25049 +- Sessionless and API endpoints bypass session for admin mode. !25056 (Diego Louzán) +- New loading spinner for attachemnt uploads via discussion boxes. !25057 (Philip Jonas) +- Hide the private commit email in Notification email list. !25099 (briankabiro) +- Replace underscore with lodash in /app/assets/javascripts/blob/. !25113 (rkpattnaik780) +- Allow access to /version API endpoint with read_user scope. !25211 +- Use only the first line of the commit message on chat service notification. !25224 (Takuya Noguchi) +- Include invalid directories in wiki title message. !25376 +- Replace avatar and favicon upload type consistency validation with content whitelist validation. !25401 +- Showing only "Next" button for snippet explore page. !25404 +- Moved Deploy Keys from Repository to CI/CD settings. !25444 +- Move pod logs to core. !25455 +- Improve error messages of failed migrations. !25457 +- Hides the "Allowed to fail" tag on jobs that are successful. !25458 +- Disable CSRF protection on logout endpoint. !25521 (Diego Louzán) +- Ensure all errors are logged in Group Import. !25619 +- Tweak wiki page title handling. !25647 +- Add refresh dashboard button. !25716 +- Disable draggable behavior on the epic tree chevron (collapse/expand) button. !25729 +- Rate limit archive endpoint by user. !25750 +- Improve audit log header layout. !25821 +- Migrate mentions for merge requests to DB table. !25826 +- Align git returned error codes. !25936 +- Split cluster info page into tabs. !25940 +- Remove visibility check from epic descendant counts. !25975 +- Use colon to tokenize input in filtered search. !26072 +- Add link to dependency proxy docs on the dependency proxy page. !26092 +- Remove Puma notices from AdminArea banner. !26137 +- Add airgap support to Dependency Scanning template. !26145 +- 27880 Make release notes optional and do not delete release when they are removed. !26231 (Pavlo Dudchenko) +- Limit notification-type broadcast display to web interface. !26236 (Aleksandrs Ļedovskis) +- Update renewal banner link for clearer instructions. !26240 +- Special handling for the rich viewer on specific file types. !26260 +- Rename pod logs to logs. !26313 +- Ensure checksums match when updating repository storage. !26334 +- Bump Auto Deploy image to v0.12.1. !26336 +- Use cert-manager 0.10 instead of 0.9 for new chart installations. !26345 +- Use y-axis format configuration in column charts. !26356 +- Add Prometheus metrics for Gitaly and database time in background jobs. !26384 +- Batch processing LFS objects downloads. !26434 +- Add edit custom metric link to metrics dashboard. !26511 +- Remove unused file_type column from packages_package_files. !26527 +- Enable client-side GRPC keepalive for Gitaly. !26536 +- Use ReplicateRepository when moving repo storage. !26550 +- Add functionality to render individual mermaids. !26564 +- Sync snippet after Git action. !26565 +- In single-file editor set syntax highlighting theme according to user's preference. !26606 +- Introduce a feature flag for Notifications for when pipelines are fixed. !26682 (Jacopo Beschi @jacopo-beschi) +- Replace checkbox by toggle for ModSecurity on Cluster App Page. !26720 +- Change capybara screenshots files names taken on tests failures. !26788 +- Update cluster-applications image to v0.11 with a runner bugfix, updated cert-manager, and vault as a new app. !26842 +- Store first commit's authored_date for value stream calculation on merge. !26885 +- Group repository contributors by email instead of name. !26899 (Hilco van der Wilk) +- Move authorized_keys operations into their own Sidekiq queue. !26913 +- Upgrade Elastic Stack helm chart to 1.9.0. !27011 +- Enable customizable_cycle_analytics feature flag by default. !27418 +- Deemphasized styles for inline code blocks. + +### Performance (41 changes, 1 of them is from the community) + +- Cache milestone issue counters and make them independent of user permissions. !21554 +- Persist expanded environment name in ci build metadata. !22374 +- Diffs load each view style separately, on demand. !24821 +- Project repositories are no longer cloned by default when running DAST. !25320 +- Enable Workhorse upload acceleration for Project Import API. !25361 +- Add API pagination for deployed merge requests. !25733 +- Upgrade to Bootsnap 1.4.6. !25844 +- Improve performance of Repository#merged_branch_names. !26005 +- Fix N+1 in Group milestone view. !26051 +- Project Snippets API endpoints check feature status. !26064 +- Memoize loading of CI variables. !26147 +- Refactor workhorse passthrough URL checker. !26157 (Takuya Noguchi) +- Project Snippets GraphQL resolver checks feature status. !26158 +- Improved MR toggle file performance by hiding instead of removing. !26181 +- Use Workhorse acceleration for Project Import file upload via UI. !26278 +- Improve SnippetsFinder performance with disabled project snippets. !26295 +- Add trigram index on snippet description. !26341 +- Optimize todos counters in usage data. !26442 +- Optimize event counters query performance in usage data. !26444 +- Ensure RepositoryLinkFilter handles Gitaly failures gracefully. !26531 +- Fix N+1 queries for PipelinesController#index.json. !26643 +- Optimize Project related count with slack service. !26686 +- Optimize Project counters with respository enabled counter. !26698 +- Optimize Deployment related counters. !26757 +- Optimize ci_pipelines counters in usage data. !26774 +- Improve performance of the "has this commit been reverted?" check. !26784 +- Optimize Project counters with pipelines enabled counter. !26802 +- Optimize notes counters in usage data. !26871 +- Optimize clusters counters query performance in usage data. !26887 +- Enable Workhorse upload acceleration for Project Import uploads via API. !26914 +- Use process-wide memory cache for feature flags. !26935 +- Optimize services usage counters using batch counters. !26973 +- Optimize Project related count service desk enabled. !27115 +- Swap to UNLINK for Redis set cache. !27116 +- Optimize members counters query performance in usage data. !27197 +- Use batch counters instead of approximate counters in usage data. !27218 +- Enable Redis cache key compression. !27254 +- Move feature flag list into process cache. !27511 +- Remove duplicate authorization refresh for group members on project creation. +- Optimize project representation in large imports. +- Replace several temporary indexes with a single one to save time when running mentions migration. + +### Added (115 changes, 16 of them are from the community) + +- Notifications for when pipelines are fixed. !16951 (Jacopo Beschi @jacopo-beschi) +- Backport API support to move between repository storages/shards. !18721 (Ben Bodenmiller) +- Add ability to trigger pipelines when project is rebuilt. !20063 +- Add user dismiss option to broadcast messages. !20665 (Fabio Huser) +- Show notices in Admin area when detected any of these cases: Puma, multi-threaded Puma, multi-threaded Puma + Rugged. !21403 +- Update git workflows and routes to allow snippets. !21739 +- Add Cobertura XML coverage visualization to merge request diff view. !21791 (Fabio Huser) +- Add 2FA support to admin mode feature. !22281 (Diego Louzán) +- GraphQL: Add Board type. !22497 (Alexander Koval) +- Add/update services to delete snippets repositories. !22672 +- Render single snippet blob in repository. !23848 +- Commit file when snippet is created. !23953 +- Addition of the Group Deploy Token interface. !24102 +- Allow multiple Slack channels for notifications. !24132 +- Import/Export snippet repositories. !24150 +- Add custom validator for validating file path. !24223 (Rajendra Kadam) +- Add a bulk processor for elasticsearch incremental updates. !24298 +- Send alert emails for generic incident alerts. !24414 +- Introduce default branch protection at the group level. !24426 +- Add "New release" button to Releases page. !24516 +- Nudge users to select a gitlab-ci.yml template. !24622 +- Allow enabling/disabling modsecurity from UI. !24747 +- Add possibility to track milestone changes on issues and merge requests. !24780 +- Allow group/project board to be queried by ID via GraphQL. !24825 +- Add functionality to revoke a X509Certificate and update related X509CommitSignatures. !24889 (Roger Meier) +- Update file content of an existing custom dashboard. !25024 +- Add deploy tokens instance API endpoint. !25066 +- Add support for alert-based metric embeds in GFM. !25075 +- Add restrictions for signup email addresses. !25122 +- Add accessibility scanning CI template. !25144 +- Expose `plan` and `trial` to `/users/:id` endpoint. !25151 +- Add "Job Title" field in user settings and display on profile. !25155 +- Add endpoint for listing all deploy tokens for a project. !25186 +- Add api endpoint for listing deploy tokens for a group. !25219 +- Add API endpoint for deleting project deploy tokens. !25220 +- Add API endpoint for deleting group deploy tokens. !25222 +- Allow users to get Merge Trains entries via Public API. !25229 +- Added CI_MERGE_REQUEST_CHANGED_PAGE_* to Predefined Variables reference. !25256 +- Add missing arguments to UpdateIssue mutation. !25268 +- Add api endpoint to create deploy tokens. !25270 +- Automatically include embedded metrics for GitLab alert incidents. !25277 +- Allow to create masked variable from group variables API. !25283 (Emmanuel CARRE) +- Add migration to create self monitoring project environment. !25289 +- Add deploy and re-deploy buttons to deployments. !25427 +- Replaced ACE with Monaco editor for Snippets. !25465 +- Add support for user Job Title. !25483 +- Add name_regex_keep param to container registry bulk delete API endpoint. !25484 +- Add Project template for Gatsby. !25486 +- Add filepath to ReleaseLink. !25512 +- Added Drop older active deployments project setting. !25520 +- Add filepath to release links API. !25533 +- Adds new activity panel to package details page. !25534 +- Add filepath redirect url. !25541 +- Add version column to operations_feature_flags table. !25552 +- Filter commits by author. !25597 +- Add api endpoint for creating group deploy tokens. !25629 +- Expose assets filepath URL on UI. !25635 +- Update moved service desk issues notifications. !25640 +- Allow chart descriptions for Insights. !25686 +- Allow to disable inheritance of default job settings. !25690 +- Support more query variables in custom dashboards per project. !25732 +- All image diffs (except for renamed files) show the image file size in the diff. !25734 +- Optional custom icon in the OmniAuth login labels. !25744 (Tobias Wawryniuk, Luca Leonardo Scorcia) +- Add avatar upload support for create and update group APIs. !25751 (Rajendra Kadam) +- Add properties to the dashboard definition to customize y-axis format. !25785 +- Empty state for Code Review Analytics. !25793 +- Search issues in GraphQL API by milestone title and assignees. !25794 +- Add package_type as a filter option to the packages list API endpoint. !25816 +- Add support for configuring remote mirrors via API. !25825 (Rajendra Kadam) +- Display base label in versions drop down. !25834 +- Create table & setup operations endpoint for Status Page Settings. !25863 +- Update Ingress chart version to 1.29.7. !25949 +- Include snippet description as part of snippet title search (basic search). !25961 +- Add admin API endpoint to delete Sidekiq jobs matching metadata. !25998 +- Add documentation for create remote mirrors API. !26012 (Rajendra Kadam) +- Update charts documentation and common_metrics.yml to enable data formatting. !26048 +- Allow issues/merge_requests as an issuable_type in Insights configuration. !26061 +- Add migration for Requirement model. !26097 +- Create scim_identities table in preparation for newer SCIM features in the future. !26124 +- Add web_url attribute to API response for Commits. !26173 +- Filter sentry error list by status (unresolved/ignored/resolved). !26205 +- Add grape custom validator for sha params. !26220 (Rajendra Kadam) +- Update cluster-applications to v0.9.0. !26242 +- Support DotEnv Variables through report type artifact. !26247 +- More logs entries are loaded when logs are scrolled to the top. !26254 +- Introduce db table to store users statistics. !26261 +- Add title to Analytics sidebar menus. !26265 +- Added package_name as filter parameter to packages API. !26291 +- Added tracking to merge request jump to next thread buttons. !26319 (Martin Hobert) +- Introduce optional expiry date for SSH Keys. !26351 +- Show cluster status (FE). !26368 +- Add CI template to deploy to ECS. !26371 +- Make hostname configurable for smartcard authentication. !26411 +- Filter rules by target_branch in approval_settings. !26439 +- Add CRUD for Instance-Level Integrations. !26454 +- Add vars to allow air-gapped usage of Retire.js (Dependency Scanning). !26463 +- Upgrade Pages to 1.17.0. !26478 +- Add dedicated Release page for viewing a single Release. !26502 +- Allow selecting all queues with sidekiq-cluster. !26594 +- Enable feature Dynamic Child Pipeline creation via artifact. !26648 +- Generate JSON-formatted a11y CI artifacts. !26687 +- Add anchor tags to related issues and related merge requests. !26756 (Gilang Gumilar) +- Added Blob Description Edit component in Vue. !26762 +- Added Edit Visibility Vue compoenent for Snippet. !26799 +- Add package_type as a filter option to the group packages list API endpoint. !26833 +- Update UI for project and group settings CI variables. !26901 +- Track merge request cherry-picks. !26907 +- Introduce database table for user highest roles. !26987 +- Add ability to whitelist ports. !27025 +- Add issue summary to Release blocks on the Releases page. !27032 +- Support sidekiq-cluster supervision through bin/background_jobs. !27042 +- Adds crossplane as CI/CD Managed App. !27374 +- Update UI for project and group settings CI variables. !27411 +- Add remote mirrors API. +- Add changed pages dropdown to visual review modal. + +### Other (66 changes, 22 of them are from the community) + +- Make design_management_versions.created_at not null. !20182 (Lee Tickett) +- Drop forked_project_links table. !20771 (Lee Tickett) +- Moves refreshData from issue model to board store. !21409 (nuwe1) +- Use DNT: 1 as an experiment opt-out mechanism. !22100 +- Include full path to an upload in api response. !23500 (briankabiro) +- Update Ruby version in official CI templates. !23585 (Takuya Noguchi) +- Schedule worker to migrate security job artifacts to security scans. !24125 +- Move namespace of Secure Sidekiq queues. !24340 +- Remove spinner from app/views/projects/notes. !25015 (nuwe1) +- Migrate .fa-spinner to .spinner for ee/app/views/shared/members. !25019 (nuwe1) +- Migrate .fa-spinner to .spinner for app/views/ide. !25022 (nuwe1) +- Remove spinner from app/views/award_emoji. !25032 (nuwe1) +- Remove .fa-spinner from app/views/projects/forks. !25034 (nuwe1) +- Remove .fa-spinner from app/views/snippets/notes. !25036 (nuwe1) +- Migrate .fa-spinner to .spinner for app/views/help. !25037 (nuwe1) +- Replaced underscore with lodash for app/assets/javascripts/lib. !25042 (Shubham Pandey) +- Remove unused loading spinner from badge_settings partial. !25044 (nuwe1) +- Migrate .fa-spinner to .spinner for app/views/projects/find_file. !25051 (nuwe1) +- Migrate .fa-spinner to .spinner for app/assets/javascripts/notes/components/discussion_resolve_button.vue. !25055 (nuwe1) +- Change OmniAuth log format to JSON. !25086 +- migrate fa spinner for notification_dropdown.js. !25141 (minghuan) +- Use new loading spinner in Todos dashboard buttons. !25142 (Tsegaselassie Tadesse) +- Refuse to start web server without a working ActiveRecord connection. !25160 +- Simplifying colors in the Web IDE. !25304 +- Clean up conditional `col-` classes in `nav_dropdown_button.vue`. !25312 +- Only load usage ping cron schedule for Sidekiq. !25325 +- Update rouge to v3.16.0. !25334 (Konrad Borowski) +- Update project's permission settings description to reflect actual permissions. !25523 +- Use clearer error message for pages deploy job when the SHA is outdated. !25659 +- Add index on LOWER(domain) for pages_domains. !25664 +- Remove repository_storage column from snippets. !25699 +- Add instance column to services table. !25714 +- Update GitLab Runner Helm Chart to 0.14.0. !25749 +- Update loader for various project views. !25755 (Phellipe K Ribeiro) +- Clarify private visibility for projects. !25852 +- Do not parse undefined severity and confidence from reports. !25884 +- Remove special chars from previous and next items in pagination. !25891 +- Update Auto DevOps deployment template's auto-deploy-image to v0.10.0 (updates the included glibc). !25920 +- Update DAST auto-deploy-image to v0.10.0. !25922 +- Optimize storage usage for newly created ES indices. !25992 +- Replace undefined severity with unknown severity for occurrences. !26085 +- Replace undefined severity with unknown severity for vulnerabilities. !26305 +- Remove unused Snippets#content_types method. !26306 +- Change tooltip text for pipeline on last commit widget. !26315 +- Resolve Change link-icons on security configuration page to follow design system. !26340 +- Put System Metrics chart group first in default dashboard. !26355 +- Validates only one service template per type. !26380 +- update table layout for error tracking list on medium view ports. !26479 +- Validate absence of project_id if service is a template. !26563 +- Move sidekiq-cluster script to Core. !26703 +- Update GitLab's codeclimate to 0.85.9. !26712 (Eddie Stubbington) +- Bump minimum node version to v10.13.0. !26831 +- Remove promoted notes temporary index. !26896 +- Update Project Import API rate limit. !26903 +- Backfill LfsObjectsProject records of forks. !26964 +- Add migration for creating open_project_tracker_data table. !26966 +- Fixed SSH warning style. !26992 +- Use new codequality docker image from ci-cd group. !27098 +- Add tooltip to modification icon in the file tree. !27158 +- Upgrade Gitaly gem and fix UserSquash RPC usage. !27372 +- Replace issue-external icon with external-link. !208827 +- Add keep_divergent_refs to remote_mirrors table. +- Replace issue-duplicate icon with duplicate icon. +- Add confidential attribute to notes table. +- Replace content_viewer_spec setTimeouts with semantic actions / events. (Oregand) +- Improvement in token reference. + ## 12.8.7 (2020-03-16) @@ -64,11 +539,49 @@ entry. ## 12.8.4 -- Unreleased due to tagging failure. +### Fixed (8 changes) + +- Fix Group Import API file upload when object storage is disabled. !25715 +- Fix Web IDE fork modal showing no text. !25842 +- Fixed regression when URL was encoded in a loop. !25849 +- Fixed repository browsing for folders with non-ascii characters. !25877 +- Fix search for Sentry error list. !26129 +- Send credentials with GraphQL fetch requests. !26386 +- Show CI status in project dashboards. !26403 +- Rescue invalid URLs during badge retrieval in asset proxy. !26524 + +### Performance (2 changes) + +- Disable Marginalia line backtrace in production. !26199 +- Remove unnecessary Redis deletes for broadcast messages. !26541 + +### Other (1 change, 1 of them is from the community) + +- Fix fixtures for Error Tracking Web UI. !26233 (Takuya Noguchi) + ## 12.8.3 -- Unreleased due to tagging failure. +### Fixed (8 changes) + +- Fix Group Import API file upload when object storage is disabled. !25715 +- Fix Web IDE fork modal showing no text. !25842 +- Fixed regression when URL was encoded in a loop. !25849 +- Fixed repository browsing for folders with non-ascii characters. !25877 +- Fix search for Sentry error list. !26129 +- Send credentials with GraphQL fetch requests. !26386 +- Show CI status in project dashboards. !26403 +- Rescue invalid URLs during badge retrieval in asset proxy. !26524 + +### Performance (2 changes) + +- Disable Marginalia line backtrace in production. !26199 +- Remove unnecessary Redis deletes for broadcast messages. !26541 + +### Other (1 change, 1 of them is from the community) + +- Fix fixtures for Error Tracking Web UI. !26233 (Takuya Noguchi) + ## 12.8.2 diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index aef81b964a..9db2172381 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -12.8.8 +12.9.2 diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION index 15b989e398..092afa15df 100644 --- a/GITLAB_PAGES_VERSION +++ b/GITLAB_PAGES_VERSION @@ -1 +1 @@ -1.16.0 +1.17.0 diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION index 275283a18f..4044f90867 100644 --- a/GITLAB_SHELL_VERSION +++ b/GITLAB_SHELL_VERSION @@ -1 +1 @@ -11.0.0 +12.0.0 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index a4ea2549bb..381f6620ed 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.21.1 +8.25.1 diff --git a/Gemfile b/Gemfile index 20c713e8c3..5135040180 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' gem 'rails', '6.0.2' -gem 'bootsnap', '~> 1.4' +gem 'bootsnap', '~> 1.4.6' # Improves copy-on-write performance for MRI gem 'nakayoshi_fork', '~> 0.0.4' @@ -58,7 +58,7 @@ gem 'akismet', '~> 3.0' gem 'invisible_captcha', '~> 0.12.1' # Two-factor authentication -gem 'devise-two-factor', '~> 3.0.0' +gem 'devise-two-factor', '~> 3.1.0' gem 'rqrcode-rails3', '~> 0.1.7' gem 'attr_encrypted', '~> 3.1.0' gem 'u2f', '~> 0.2.1' @@ -87,7 +87,7 @@ gem 'grape-entity', '~> 0.7.1' gem 'rack-cors', '~> 1.0.6', require: 'rack/cors' # GraphQL API -gem 'graphql', '~> 1.9.12' +gem 'graphql', '~> 1.9.19' # NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab/issues/31771 # TODO: remove app/views/graphiql/rails/editors/show.html.erb when https://github.com/rmosolgo/graphiql-rails/pull/71 is released: # https://gitlab.com/gitlab-org/gitlab/issues/31747 @@ -149,7 +149,7 @@ gem 'wikicloth', '0.8.1' gem 'asciidoctor', '~> 2.0.10' gem 'asciidoctor-include-ext', '~> 0.3.1', require: false gem 'asciidoctor-plantuml', '0.0.10' -gem 'rouge', '~> 3.15.0' +gem 'rouge', '~> 3.17.0' gem 'truncato', '~> 0.7.11' gem 'bootstrap_form', '~> 4.2.0' gem 'nokogiri', '~> 1.10.5' @@ -159,7 +159,7 @@ gem 'escape_utils', '~> 1.1' gem 'icalendar' # Diffs -gem 'diffy', '~> 3.1.0' +gem 'diffy', '~> 3.3' gem 'diff_match_patch', '~> 0.1.0' # Application server @@ -171,7 +171,7 @@ group :unicorn do end group :puma do - gem 'gitlab-puma', '~> 4.3.1.gitlab.2', require: false + gem 'gitlab-puma', '~> 4.3.3.gitlab.2', require: false gem 'gitlab-puma_worker_killer', '~> 0.1.1.gitlab.1', require: false gem 'rack-timeout', require: false end @@ -237,7 +237,7 @@ gem 'atlassian-jwt', '~> 0.2.0' gem 'flowdock', '~> 0.7' # Slack integration -gem 'slack-notifier', '~> 1.5.1' +gem 'slack-messenger', '~> 2.3.3' # Hangouts Chat integration gem 'hangouts-chat', '~> 0.0.5' @@ -301,7 +301,7 @@ gem 'sentry-raven', '~> 2.9' gem 'premailer-rails', '~> 1.10.3' # LabKit: Tracing and Correlation -gem 'gitlab-labkit', '0.9.1' +gem 'gitlab-labkit', '0.11.0' # I18n gem 'ruby_parser', '~> 3.8', require: false @@ -319,7 +319,7 @@ gem 'peek', '~> 1.1' gem 'snowplow-tracker', '~> 0.6.1' # Memory benchmarks -gem 'derailed_benchmarks', require: false +gem 'gitlab-derailed_benchmarks', require: false # Metrics group :metrics do @@ -355,7 +355,7 @@ group :development, :test do gem 'database_cleaner', '~> 1.7.0' gem 'factory_bot_rails', '~> 5.1.0' - gem 'rspec-rails', '~> 4.0.0.beta3' + gem 'rspec-rails', '~> 4.0.0.beta4' # Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826) gem 'minitest', '~> 5.11.0' @@ -374,8 +374,8 @@ group :development, :test do gem 'scss_lint', '~> 0.56.0', require: false gem 'haml_lint', '~> 0.34.0', require: false - gem 'simplecov', '~> 0.16.1', require: false - gem 'bundler-audit', '~> 0.5.0', require: false + gem 'simplecov', '~> 0.18.5', require: false + gem 'bundler-audit', '~> 0.6.1', require: false gem 'benchmark-ips', '~> 2.3.0', require: false @@ -383,7 +383,7 @@ group :development, :test do gem 'simple_po_parser', '~> 1.1.2', require: false - gem 'timecop', '~> 0.8.0' + gem 'timecop', '~> 0.9.1' gem 'png_quantizator', '~> 0.2.1', require: false @@ -419,7 +419,8 @@ end gem 'octokit', '~> 4.15' -gem 'mail_room', '~> 0.10.0' +# https://gitlab.com/gitlab-org/gitlab/issues/207207 +gem 'gitlab-mail_room', '~> 0.0.3', require: 'mail_room' gem 'email_reply_trimmer', '~> 0.1' gem 'html2text' @@ -455,7 +456,7 @@ group :ed25519 do end # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 1.86.0' +gem 'gitaly', '~> 12.9.0.pre.rc4' gem 'grpc', '~> 1.24.0' diff --git a/Gemfile.lock b/Gemfile.lock index 9735b9be93..25bc537f70 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -123,7 +123,7 @@ GEM binding_ninja (0.2.3) binding_of_caller (0.8.0) debug_inspector (>= 0.0.1) - bootsnap (1.4.5) + bootsnap (1.4.6) msgpack (~> 1.0) bootstrap_form (4.2.0) actionpack (>= 5.0) @@ -134,8 +134,8 @@ GEM bullet (6.0.2) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) - bundler-audit (0.5.0) - bundler (~> 1.2) + bundler-audit (0.6.1) + bundler (>= 1.2.0, < 3) thor (~> 0.18) byebug (9.1.0) capybara (3.22.0) @@ -211,15 +211,6 @@ GEM declarative-option (0.1.0) default_value_for (3.3.0) activerecord (>= 3.2.0, < 6.1) - derailed_benchmarks (1.4.2) - benchmark-ips (~> 2) - get_process_mem (~> 0) - heapy (~> 0) - memory_profiler (~> 0) - rack (>= 1) - rake (> 10, < 14) - ruby-statistics (>= 2.1) - thor (~> 0.19) descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) device_detector (1.0.0) @@ -229,18 +220,18 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (3.0.0) - activesupport + devise-two-factor (3.1.0) + activesupport (< 6.1) attr_encrypted (>= 1.3, < 4, != 2) devise (~> 4.0) - railties + railties (< 6.1) rotp (~> 2.0) diff-lcs (1.3) diff_match_patch (0.1.0) - diffy (3.1.0) + diffy (3.3.0) discordrb-webhooks-blackst0ne (3.3.0) rest-client (~> 2.0) - docile (1.3.1) + docile (1.3.2) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) doorkeeper (5.0.2) @@ -375,12 +366,21 @@ GEM po_to_json (>= 1.0.0) rails (>= 3.2.0) git (1.5.0) - gitaly (1.86.0) + gitaly (12.9.0.pre.rc4) grpc (~> 1.0) github-markup (1.7.0) gitlab-chronic (0.10.5) numerizer (~> 0.2) - gitlab-labkit (0.9.1) + gitlab-derailed_benchmarks (1.6.1) + benchmark-ips (~> 2) + get_process_mem (~> 0) + heapy (~> 0) + memory_profiler (~> 0) + rack (>= 1) + rake (> 10, < 14) + ruby-statistics (>= 2.1) + thor (>= 0.19, < 2) + gitlab-labkit (0.11.0) actionpack (>= 5.0.0, < 6.1.0) activesupport (>= 5.0.0, < 6.1.0) grpc (~> 1.19) @@ -388,9 +388,10 @@ GEM opentracing (~> 0.4) redis (> 3.0.0, < 5.0.0) gitlab-license (1.0.0) + gitlab-mail_room (0.0.3) gitlab-markup (1.7.0) gitlab-net-dns (0.9.1) - gitlab-puma (4.3.1.gitlab.2) + gitlab-puma (4.3.3.gitlab.2) nio4r (~> 2.0) gitlab-puma_worker_killer (0.1.1.gitlab.1) get_process_mem (~> 0.2) @@ -433,7 +434,7 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (~> 0.7) - gpgme (2.0.19) + gpgme (2.0.20) mini_portile2 (~> 2.3) grape (1.1.0) activesupport @@ -455,7 +456,7 @@ GEM graphiql-rails (1.4.10) railties sprockets-rails - graphql (1.9.12) + graphql (1.9.19) graphql-docs (1.6.0) commonmarker (~> 0.16) escape_utils (~> 1.2) @@ -616,7 +617,6 @@ GEM lumberjack (1.0.13) mail (2.7.1) mini_mime (>= 0.1.1) - mail_room (0.10.0) marcel (0.3.3) mimemagic (~> 0.3.2) marginalia (1.8.0) @@ -889,41 +889,41 @@ GEM retriable (3.1.2) rinku (2.0.0) rotp (2.1.2) - rouge (3.15.0) + rouge (3.17.0) rqrcode (0.7.0) chunky_png rqrcode-rails3 (0.1.7) rqrcode (>= 0.4.2) - rspec (3.8.0) - rspec-core (~> 3.8.0) - rspec-expectations (~> 3.8.0) - rspec-mocks (~> 3.8.0) - rspec-core (3.8.2) - rspec-support (~> 3.8.0) - rspec-expectations (3.8.4) + rspec (3.9.0) + rspec-core (~> 3.9.0) + rspec-expectations (~> 3.9.0) + rspec-mocks (~> 3.9.0) + rspec-core (3.9.1) + rspec-support (~> 3.9.1) + rspec-expectations (3.9.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-mocks (3.8.1) + rspec-support (~> 3.9.0) + rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) + rspec-support (~> 3.9.0) rspec-parameterized (0.4.2) binding_ninja (>= 0.2.3) parser proc_to_ast rspec (>= 2.13, < 4) unparser - rspec-rails (4.0.0.beta3) + rspec-rails (4.0.0.beta4) actionpack (>= 4.2) activesupport (>= 4.2) railties (>= 4.2) - rspec-core (~> 3.8) - rspec-expectations (~> 3.8) - rspec-mocks (~> 3.8) - rspec-support (~> 3.8) + rspec-core (~> 3.9) + rspec-expectations (~> 3.9) + rspec-mocks (~> 3.9) + rspec-support (~> 3.9) rspec-retry (0.6.1) rspec-core (> 3.3) rspec-set (0.1.3) - rspec-support (3.8.2) + rspec-support (3.9.2) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) rspec_profiling (0.0.5) @@ -955,7 +955,7 @@ GEM ruby-progressbar (1.10.1) ruby-saml (1.7.2) nokogiri (>= 1.5.10) - ruby-statistics (2.1.1) + ruby-statistics (2.1.2) ruby_dep (1.5.0) ruby_parser (3.13.1) sexp_processor (~> 4.9) @@ -1015,13 +1015,12 @@ GEM jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simple_po_parser (1.1.2) - simplecov (0.16.1) + simplecov (0.18.5) docile (~> 1.1) - json (>= 1.8, < 3) - simplecov-html (~> 0.10.0) - simplecov-html (0.10.2) + simplecov-html (~> 0.11) + simplecov-html (0.12.2) sixarm_ruby_unaccent (1.2.0) - slack-notifier (1.5.1) + slack-messenger (2.3.3) snowplow-tracker (0.6.1) contracts (~> 0.7, <= 0.11) spring (2.0.2) @@ -1065,7 +1064,7 @@ GEM thread_safe (0.3.6) thrift (0.11.0.0) tilt (2.0.10) - timecop (0.8.1) + timecop (0.9.1) timfel-krb5-auth (0.8.3) toml (0.2.0) parslet (~> 1.8.0) @@ -1171,12 +1170,12 @@ DEPENDENCIES benchmark-memory (~> 0.1) better_errors (~> 2.5.0) binding_of_caller (~> 0.8.0) - bootsnap (~> 1.4) + bootsnap (~> 1.4.6) bootstrap_form (~> 4.2.0) brakeman (~> 4.2) browser (~> 2.5) bullet (~> 6.0.2) - bundler-audit (~> 0.5.0) + bundler-audit (~> 0.6.1) capybara (~> 3.22.0) capybara-screenshot (~> 1.0.22) carrierwave (~> 1.3) @@ -1190,12 +1189,11 @@ DEPENDENCIES database_cleaner (~> 1.7.0) deckar01-task_list (= 2.3.1) default_value_for (~> 3.3.0) - derailed_benchmarks device_detector devise (~> 4.6) - devise-two-factor (~> 3.0.0) + devise-two-factor (~> 3.1.0) diff_match_patch (~> 0.1.0) - diffy (~> 3.1.0) + diffy (~> 3.3) discordrb-webhooks-blackst0ne (~> 3.3) doorkeeper (~> 5.0.2) doorkeeper-openid_connect (~> 1.6.3) @@ -1230,14 +1228,16 @@ DEPENDENCIES gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly (~> 1.86.0) + gitaly (~> 12.9.0.pre.rc4) github-markup (~> 1.7.0) gitlab-chronic (~> 0.10.5) - gitlab-labkit (= 0.9.1) + gitlab-derailed_benchmarks + gitlab-labkit (= 0.11.0) gitlab-license (~> 1.0) + gitlab-mail_room (~> 0.0.3) gitlab-markup (~> 1.7.0) gitlab-net-dns (~> 0.9.1) - gitlab-puma (~> 4.3.1.gitlab.2) + gitlab-puma (~> 4.3.3.gitlab.2) gitlab-puma_worker_killer (~> 0.1.1.gitlab.1) gitlab-sidekiq-fetcher (= 0.5.2) gitlab-styles (~> 3.1.0) @@ -1252,7 +1252,7 @@ DEPENDENCIES grape-path-helpers (~> 1.2) grape_logging (~> 1.7) graphiql-rails (~> 1.4.10) - graphql (~> 1.9.12) + graphql (~> 1.9.19) graphql-docs (~> 1.6.0) grpc (~> 1.24.0) gssapi @@ -1284,7 +1284,6 @@ DEPENDENCIES loofah (~> 2.2) lru_redux mail (= 2.7.1) - mail_room (~> 0.10.0) marginalia (~> 1.8.0) memory_profiler (~> 0.9) method_source (~> 0.8) @@ -1347,10 +1346,10 @@ DEPENDENCIES request_store (~> 1.3) responders (~> 3.0) retriable (~> 3.1.2) - rouge (~> 3.15.0) + rouge (~> 3.17.0) rqrcode-rails3 (~> 0.1.7) rspec-parameterized - rspec-rails (~> 4.0.0.beta3) + rspec-rails (~> 4.0.0.beta4) rspec-retry (~> 0.6.1) rspec-set (~> 0.1.3) rspec_junit_formatter @@ -1375,8 +1374,8 @@ DEPENDENCIES sidekiq (~> 5.2.7) sidekiq-cron (~> 1.0) simple_po_parser (~> 1.1.2) - simplecov (~> 0.16.1) - slack-notifier (~> 1.5.1) + simplecov (~> 0.18.5) + slack-messenger (~> 2.3.3) snowplow-tracker (~> 0.6.1) spring (~> 2.0.0) spring-commands-rspec (~> 1.0.4) @@ -1387,7 +1386,7 @@ DEPENDENCIES sys-filesystem (~> 1.1.6) test-prof (~> 0.10.0) thin (~> 1.7.0) - timecop (~> 0.8.0) + timecop (~> 0.9.1) toml-rb (~> 1.0.0) truncato (~> 0.7.11) u2f (~> 0.2.1) diff --git a/VERSION b/VERSION index aef81b964a..9db2172381 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -12.8.8 +12.9.2 diff --git a/app/assets/images/cluster_app_logos/modsecurity.png b/app/assets/images/cluster_app_logos/modsecurity.png new file mode 100644 index 0000000000000000000000000000000000000000..fd58275e1d7a60b4b44ed25bc9e3c842699f4da2 GIT binary patch literal 6235 zcmV-h7^LTkP)OyC{gUa zfgplNmom&SOg-m&4orm^K$G0>$34Fk_G<55ZLhr{@IU?$|Ks-KzX<>dA0H0nLMJXC zB9~A43E%y({Ep+`sm+|knVgK5DH0o@x}f02i*f*(|JKI*n*fmfCIKFFa8y5{P4~WV z^KPY}Xg6AG8A(7%4Qs$7b|jsnt!#Sf3}&;45;FHqiXb;N&iTpdV<~43KLeotw*dLa z0T4D1bR+vtnxSkHK3qYeo+ZUe5K3xo*ha?ImqkMvFw?6zu#kYx2 zQM3ci=87~l%`tD7fu|FX%#v=IHbQ>&$ko3K!ruXaw3)VLsiakp=t`$FVx|2jV=%WQ z=V>$5`va=PvlpIUy_k;TG_ggceSCO6F23&kPkM%?hx|J(BfjshYTsvu#I}A%ibmy5R{hLqK!BheHD$?~TPJ@hKDu*1O43WbyYy&S{Mmx7 zMYe8CzNkj!_%i;7!ZqVpekceZ1c3in^M^eT9KO#)2mz23RbKzzk#X;~E!YoNSE2ow z715=Bou_GNSkaDvig~G%UM;4T5zPtpN($!S*^^p3+m(n zf`}n~WuMPKT_yZree38l>8=IyMXft{mi_0acoomu(^PPE_AXXz9PH_VJedkS7Kw5- z1se_vr78-eE@f1yZMw{7;KL#y=l!{Su{xWnVcO=!MZTRE)a35QrOTSbLTrCugdI)7Fdq@_=9eSV%NE;T z7NJ~CBW{2n!jC0`uC3S8l|e=6b?KB&q1GcOI+k~y{8mGQXRM3Eo*6BQZk&H!69_c| zV6*!2Rf)i{tDXS?*xfudQM@;1t8mJ%tIPa4REt4N!q_B%WBr?A^P?QZWrz{wX^Vay zw)ot~4)u4xsK^6z0vo{Dih~&m=|*g7-Xoq|{75l9q@7*6Ft5^a8(z^gDobT$u90ab zwzRG3aAlFZW6x0$h5e>pG&aalmba(y``)7(&-!&rnn%!v>c(1Dc14IMo)(nhKvDrd zYb?U9@P@GEvMN|)NR$XW@fvBRN^A^oj3ck!eW=?fQcDv`rgZMwa>AlMPXnUP z7)PT&S-SuE*CE3#ak8W_!P47O;>fo7CRTD{55Go3QV0*C|l7iBgG_9r&QxR-_eGD#(#LhlV@Wsg&m20YLXxtL&*buNwyS-Mte&Q^*m{Wh` z+PIH27SJMgQKM%UPG*_|!7KosRvw&l!>VzNas1ZXJ;yWW;guZn=ev>`%Um@n1e!Vu zFvQ;tixSe1Hl_u*sqC4M7NXOB^_KQqjcr&FTsONo=^Sq-j+8Cjk4x^nJz429K~?dH#Z!FY0dIoh-Y5 zgr@`CZ1~vwG#m2C?ZIQ2Uwb996ye8{@!O{@G3m^6$n^l!Efm-!Aya?b-dfasXqS?H zGp-tYkKNwr#^O5{-c;pOO%uBzGslaA25vK2NMm|Ou2ZL8-tPx4OscionX%2^$r?R< zU9kRU8nVZ?MLnVU17FOYY(yu%!;Yv{m>By6YK!H-GT4pYC&j#7HY(compgAu)o7@* zgC{F`tcdQ_x>f+VKi(88H58LME53S?x4-5r9{RQL#~W|TD56TEQ|Fz*rpPv!aN+^F z)VIaR=FVC|#;py;Oud>86%B0Y+X~;rKCHsLwu)WJiU4SO?<8K62L8>GyM6Q6gvqoH zOioi&jUN5~t-ZZnq!WKP>O=ti_=T{ZXKUx2&!UZMQynZfC>-JAil`P1@a@S5`Wnw= z5g6d(h{7}OOzVt0-ML@ zXGwlvwALa3cGI`55xX^=sawFOl^&lY3zznA6Kl6 ze*u}wFxq=NArK91DwE;nhdG#ZIZe;CzO5BzbZd?km!6?eX0l;Ml8vi@sbG?Tiki`h z>ok7F%=b;YuF(;3K)qMZ4AHq?#g9!W*(d?VREKqTDbMh2^#3?Zd=gov0GU#a=VJrW%u#^vucl%3?M$Ri2!@xavdvidS2~v5 z%s~8*RtRk*!m3-Dn3Ir(fclQ;8{mOe=O2NpwLdlngFsVO*}kM1y+?4?{v}gUwEkFL zFJV`^oYT7==)XVGX=BIIfcKZW}sL!v-*!W+#0#1o4{3_12cXOgh%SuR5T+|i_- z1GZj!VrCC4dn1b^$~CjQ3Y^zmI9j0L>W{|(eEGU3Q+w&dT+e~u{mXIk&|%wkQmoYS z`{fHiZO@IlELKvqzADt_2`rMp)Lub2^)Lmma*MDb!Vgmd_0_0?eAkm4{O8O|EbG!3 z*-`~IKgdG)tWfaT+KHD|NasBdaN}JGqT2a^WX=+IUse95j!}po!q|3ElLm@|2OiSr zHH|D)KCho|H4kXG?D+0XS~yzA+)t6S^3~GOKM>0rQHLLco*RMWLK&L=nh52baB!+LNQ~Pz-js-pQaMJ11mI0U32r34 zHE2;A5NigBtQ|eM(*LZ@*AX%E7wU&_eV3?bAy|0gg^b15YipHwaA0}d?o(J2r>xQL z3J#TQqJsS)SE>;A@D;*59dLO>d$Xi&>#w4oH4hKJ>R3@0IV&z=dawspNBC7+FH>pY z`r|do)D*sq2*iyS=}5}b+f!w|DI%i8gI!C`{&ok;E;83`+CG7x=(!R4E>};%U2vjA z$>Q4SIC?xf);#0*j<;BRR$3RxJGbzLo4pN=Tz>>#djXOsbzurgweRJ7DVlG&f%NaX zz{9RGH_f^93TtnrLp8UDS(+?~9G*WXfFMbX>Cq7|4ckmyI!76yqS*LBYO$jI}SK;L(!##>hL!sXKEBK{%b9@u%Vb-v_*mWem-HZsh2+hw#bEOK@TYJg;&Jh5gnGw$GZEjGwOtbV;+cGi#q|}lC8=)0G z?bZ>;FJ4EvQi&(ubVW;7%LOBBXCfZtim`WKTT>&MD3co4Hw3yiBEm_0lsqF*FE~7S?syaUD;;T~;fL>I|FdlP`!$A(lOy62@0yh>x^t{sN!;$6Sa3?NFM9+idhw^#lb~Dl zzTb0UrN2~Y%PL&)VCnd|#N1;V{hUqD1&9dkgrrxm@h&?Tt9!PAWj#~L#-Guh$JKaR!W%`xQ@?;6(z{Cv40;?if;d}Ge=6fHdsxrRn~ zk8ZdScey&>lqOEj10&#ZeG)t6dYCC=-4D8Dg#_gG1^=Pg`uNCoc^}SM>eqvwOos zWHODfX5jA+GBD=oeT0N}!_8}dL9I5NHc5hzQ_DZIa$9udV6KuJtRrsBQf^3FI%JxW zGwb=XG5e6|{nYBgyrzAJwM=RedCypStDr!nCA~tqRDyy9kw$Me=xWb5n5mZQ(pU^{ z-3VP8o18=~dcy2;PvGq!MBLae)$%)`oq90DQiU1~SDr=lc5RWFnhJ@yRG+UKvK5Cj zmk$4eHRn&Mh9LEwpWE$2!MRrs-!TUO*t7PPszK`A-R8lW0g}smV=?QX_BdQQa`9~$ z07*#+ax>q8nfMxi=I%6@6=lmlubBAO<%@rvkFaf5!JI1$U#0A-KEs4UKu8FZ@7;r< zyt3hAKAUqtHI+Qcc#ApfO{Xd=zhG*#exptJ*?t+bq13U_6rC6$G%00kNBUV$-JU3A z3-y7{VzbdEq6hNdWB5PhGm?6i9e0v|HW8}fxuyJsN z(80cvREw_O&uBm>vIkEfz{?v6diEqisHs(hx%EfPnUr0>^+ugNR&27Ue8nI~V?9g& z5ITFhm5p4MqhG-McHKNH+qU)GOS?@~+Huy=w>Gk>HfR(aiq_<{!x=Z! z_XK9uvF`chWNEXm8+9lVAZU8SXpVi$F3pR>$C{f;nBQ4~fStPsMBaWVOnw1rZWcHM zfw|pVXxCRag310%E~Tj$cu4Fx-*rwL~Mkt(AI zZylWjhk8-8YLtIfWzBIVi7C67=`_hS4Q?5?r)M4C@+(7V{mrHXDMt`u#ve^w(D?U! zdq+66>45C(7r~>{kgYYjwK8GF%>MYZ_QBS>DY!OvC`oz(wcL={EXI&FB$&4Yn)RcY zj8A!l59*lh-{YW)#cNanO#BYNf=3A^VQkSMJ->=sSSXd&m+W6Ym2nx{9%Ck}lW!l9 zWxOmVzS}9G&Abn)DZp);wt~7$0$FAnN>`774bS|=$g#&67`Q7QPMv$8_}+DB)Z8P-yDpY&b(Tw7ddgf)TiUOl69kXu4kfZjU27p_6XB-{``+} zifq7x=AGh~2@UOo`i2w-4KSqKI`|aH;XxGA3q@CA5!lcXcV9}Ey>HUdWtlgwpn{s!~pX@Yt<+k@im+@?Zl=EI(om+Ns_m8NYXqkO~Y!Lw8 z&_1nG{G&{+XI#qjx8?7gH^Ftp_tANF-pefnzv0I^?o7D~428O+5Q@~NXj$JLe~bu) zpQ{~I6ot!4S@?2a0!rm72s-wJDkB-HY<*K|*}1g*g_QhG*`~?Cu3bJ2%WD-`*-LA` z2Bc(b)=yI>T4GY82iQ&CcvDPqIv5k%rzDOnzWB#ps{zx0DX-ULQcbRJ>T3jeo%=#l zkPUV6BY>tV8Y5Y35)dyN7Ju$5&m)!U~AIQq46E$T5jgNET! zx1t^1IF2cU79U&JmRh;w*IUF@-}w0yJm{5rbo+VXfT`=s+?q_U)f4n3g#g(+5O8e> zIzJ1vxR6P;AROHQJ4YbpG3a-x7TyF@mr^mg-ZrH})1Yv>*TI7`RT{(mpIPlgCAUre zb$!)K#=7SKW~Fb$fMzM)5vKJNpd04gkIIbQ8SB(@)VTMa9rWY$iiX78Fwj^mn*%tw z0XFsktpSSP1L6XJ(!GDKZC?PZ{M3Wx$JPyZX%Xx!4IB4brcw)yk#j6eom2Sd+EulA zXzh{!SOtWBUfyBg;Ywx(5@E{C@5|!%t>$?(X~O9@?W$CvwmcCrn=I=j-h`4Q2$g@~ z(=ksEZ`p6<6VO4?{p)KKO`FW%T8qd7k5*0`R-5q_%b+>J21BMz%(C{{qW_&%cY&?=>T3K41HcdnTXgL% z3yzAbe7S9^xRVv@u`F);SlR2R_dPv5`NfUeMk*Qv%v1(uGvqR%fOBNvGYv_+BGRM{26^ zZ3eT4#xoR>Z(rY?@M+bNXw+hm+Rm+ql7`7V(%485sr;+t=+^$sbNY`l{_g@%A(Q9c z(?{5&>wzLQ+x$hKk!B=Gs7RVB=CfG^JPuLjm`_xM)By2L5Y%t^{V0avEZ4|**5PGjKF?dN-1_5^9-xl^uZO7fE9<8%YT(P ztN5>@2mYzQE&O0LYD0_f=IMzR-DYbVG##wcP=;3#wGmd`bggD2K`5l9nc&v`*A%q^TqnQ$NG^3FV>vrJTa^-gSHIRFqBq4QLN1Rj&``9J&m+t7 zp5867;Suj8Sy{|w?7#MxqE%J>H$9+ku>3!-`kx2j{{W9P5Xj5t@gD#H002ovPDHLk FV1hIaIj8^t literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 4dc4ce543e..022d79ecf4 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -1,5 +1,3 @@ -import $ from 'jquery'; -import _ from 'underscore'; import axios from './lib/utils/axios_utils'; import { joinPaths } from './lib/utils/url_utility'; import flash from '~/flash'; @@ -47,6 +45,7 @@ const Api = { adminStatisticsPath: '/api/:version/application/statistics', pipelineSinglePath: '/api/:version/projects/:id/pipelines/:pipeline_id', lsifPath: '/api/:version/projects/:id/commits/:commit_id/lsif/info', + environmentsPath: '/api/:version/projects/:id/environments', group(groupId, callback) { const url = Api.buildUrl(Api.groupPath).replace(':id', groupId); @@ -69,7 +68,7 @@ const Api = { }, // Return groups list. Filtered by query - groups(query, options, callback = $.noop) { + groups(query, options, callback = () => {}) { const url = Api.buildUrl(Api.groupsPath); return axios .get(url, { @@ -107,7 +106,7 @@ const Api = { }, // Return projects list. Filtered by query - projects(query, options, callback = _.noop) { + projects(query, options, callback = () => {}) { const url = Api.buildUrl(Api.projectsPath); const defaults = { search: query, @@ -475,12 +474,17 @@ const Api = { return axios.get(url); }, - lsifData(projectPath, commitId, path) { + lsifData(projectPath, commitId, paths) { const url = Api.buildUrl(this.lsifPath) .replace(':id', encodeURIComponent(projectPath)) .replace(':commit_id', commitId); - return axios.get(url, { params: { path } }); + return axios.get(url, { params: { paths } }); + }, + + environments(id) { + const url = Api.buildUrl(this.environmentsPath).replace(':id', encodeURIComponent(id)); + return axios.get(url); }, buildUrl(url) { diff --git a/app/assets/javascripts/badges/components/badge_form.vue b/app/assets/javascripts/badges/components/badge_form.vue index 19668d7e23..dccc0b024b 100644 --- a/app/assets/javascripts/badges/components/badge_form.vue +++ b/app/assets/javascripts/badges/components/badge_form.vue @@ -1,5 +1,5 @@ + diff --git a/app/assets/javascripts/blob/components/blob_edit_header.vue b/app/assets/javascripts/blob/components/blob_edit_header.vue new file mode 100644 index 0000000000..e9b5ceda47 --- /dev/null +++ b/app/assets/javascripts/blob/components/blob_edit_header.vue @@ -0,0 +1,35 @@ + + diff --git a/app/assets/javascripts/blob/file_template_mediator.js b/app/assets/javascripts/blob/file_template_mediator.js index 0fb02ca596..d2c0ef330e 100644 --- a/app/assets/javascripts/blob/file_template_mediator.js +++ b/app/assets/javascripts/blob/file_template_mediator.js @@ -9,6 +9,7 @@ import GitignoreSelector from './template_selectors/gitignore_selector'; import LicenseSelector from './template_selectors/license_selector'; import toast from '~/vue_shared/plugins/global_toast'; import { __ } from '~/locale'; +import initPopover from '~/blob/suggest_gitlab_ci_yml'; export default class FileTemplateMediator { constructor({ editor, currentAction, projectId }) { @@ -128,6 +129,7 @@ export default class FileTemplateMediator { selectTemplateFile(selector, query, data) { const self = this; const { name } = selector.config; + const suggestCommitChanges = document.querySelector('.js-suggest-gitlab-ci-yml-commit-changes'); selector.renderLoading(); @@ -146,6 +148,10 @@ export default class FileTemplateMediator { }, }, }); + + if (suggestCommitChanges) { + initPopover(suggestCommitChanges); + } }) .catch(err => new Flash(`An error occurred while fetching the template: ${err}`)); } diff --git a/app/assets/javascripts/blob/notebook/index.js b/app/assets/javascripts/blob/notebook/index.js index 35634d63e4..a8c94b6263 100644 --- a/app/assets/javascripts/blob/notebook/index.js +++ b/app/assets/javascripts/blob/notebook/index.js @@ -1,87 +1,17 @@ -/* eslint-disable no-new */ import Vue from 'vue'; -import axios from '../../lib/utils/axios_utils'; -import notebookLab from '../../notebook/index.vue'; +import NotebookViewer from './notebook_viewer.vue'; export default () => { const el = document.getElementById('js-notebook-viewer'); - new Vue({ + return new Vue({ el, - components: { - notebookLab, + render(createElement) { + return createElement(NotebookViewer, { + props: { + endpoint: el.dataset.endpoint, + }, + }); }, - data() { - return { - error: false, - loadError: false, - loading: true, - json: {}, - }; - }, - mounted() { - if (gon.katex_css_url) { - const katexStyles = document.createElement('link'); - katexStyles.setAttribute('rel', 'stylesheet'); - katexStyles.setAttribute('href', gon.katex_css_url); - document.head.appendChild(katexStyles); - } - - if (gon.katex_js_url) { - const katexScript = document.createElement('script'); - katexScript.addEventListener('load', () => { - this.loadFile(); - }); - katexScript.setAttribute('src', gon.katex_js_url); - document.head.appendChild(katexScript); - } else { - this.loadFile(); - } - }, - methods: { - loadFile() { - axios - .get(el.dataset.endpoint) - .then(res => res.data) - .then(data => { - this.json = data; - this.loading = false; - }) - .catch(e => { - if (e.status !== 200) { - this.loadError = true; - } - - this.error = true; - }); - }, - }, - template: ` -
-
- -
- -

- - An error occurred while loading the file. Please try again later. - - - An error occurred while parsing the file. - -

-
- `, }); }; diff --git a/app/assets/javascripts/blob/notebook/notebook_viewer.vue b/app/assets/javascripts/blob/notebook/notebook_viewer.vue new file mode 100644 index 0000000000..401fe9beb6 --- /dev/null +++ b/app/assets/javascripts/blob/notebook/notebook_viewer.vue @@ -0,0 +1,81 @@ + + + diff --git a/app/assets/javascripts/blob/pdf/index.js b/app/assets/javascripts/blob/pdf/index.js index 19778d0798..218987585b 100644 --- a/app/assets/javascripts/blob/pdf/index.js +++ b/app/assets/javascripts/blob/pdf/index.js @@ -1,57 +1,17 @@ import Vue from 'vue'; -import pdfLab from '../../pdf/index.vue'; -import { GlLoadingIcon } from '@gitlab/ui'; +import PdfViewer from './pdf_viewer.vue'; export default () => { const el = document.getElementById('js-pdf-viewer'); return new Vue({ el, - components: { - pdfLab, - GlLoadingIcon, + render(createElement) { + return createElement(PdfViewer, { + props: { + pdf: el.dataset.endpoint, + }, + }); }, - data() { - return { - error: false, - loadError: false, - loading: true, - pdf: el.dataset.endpoint, - }; - }, - methods: { - onLoad() { - this.loading = false; - }, - onError(error) { - this.loading = false; - this.loadError = true; - this.error = error; - }, - }, - template: ` -
-
- -
- -

- - An error occurred while loading the file. Please try again later. - - - An error occurred while decoding the file. - -

-
- `, }); }; diff --git a/app/assets/javascripts/blob/pdf/pdf_viewer.vue b/app/assets/javascripts/blob/pdf/pdf_viewer.vue new file mode 100644 index 0000000000..5eaddfc099 --- /dev/null +++ b/app/assets/javascripts/blob/pdf/pdf_viewer.vue @@ -0,0 +1,49 @@ + + + diff --git a/app/assets/javascripts/blob/pipeline_tour_success_modal.vue b/app/assets/javascripts/blob/pipeline_tour_success_modal.vue new file mode 100644 index 0000000000..0739b4d5e3 --- /dev/null +++ b/app/assets/javascripts/blob/pipeline_tour_success_modal.vue @@ -0,0 +1,78 @@ + + diff --git a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue new file mode 100644 index 0000000000..7f0c232eea --- /dev/null +++ b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue @@ -0,0 +1,121 @@ + + + diff --git a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js new file mode 100644 index 0000000000..3b67b3dd25 --- /dev/null +++ b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/index.js @@ -0,0 +1,17 @@ +import Vue from 'vue'; +import Popover from './components/popover.vue'; + +export default el => + new Vue({ + el, + render(createElement) { + return createElement(Popover, { + props: { + target: el.dataset.target, + trackLabel: el.dataset.trackLabel, + dismissKey: el.dataset.dismissKey, + humanAccess: el.dataset.humanAccess, + }, + }); + }, + }); diff --git a/app/assets/javascripts/blob/template_selector.js b/app/assets/javascripts/blob/template_selector.js index b0de4dc862..2427e25a17 100644 --- a/app/assets/javascripts/blob/template_selector.js +++ b/app/assets/javascripts/blob/template_selector.js @@ -92,10 +92,10 @@ export default class TemplateSelector { } startLoadingSpinner() { - this.$dropdownIcon.addClass('fa-spinner fa-spin').removeClass('fa-chevron-down'); + this.$dropdownIcon.addClass('spinner').removeClass('fa-chevron-down'); } stopLoadingSpinner() { - this.$dropdownIcon.addClass('fa-chevron-down').removeClass('fa-spinner fa-spin'); + this.$dropdownIcon.addClass('fa-chevron-down').removeClass('spinner'); } } diff --git a/app/assets/javascripts/blob/utils.js b/app/assets/javascripts/blob/utils.js new file mode 100644 index 0000000000..dc2ec642e5 --- /dev/null +++ b/app/assets/javascripts/blob/utils.js @@ -0,0 +1,24 @@ +/* global ace */ +import Editor from '~/editor/editor_lite'; + +export function initEditorLite({ el, blobPath, blobContent }) { + if (!el) { + throw new Error(`"el" parameter is required to initialize Editor`); + } + let editor; + + if (window?.gon?.features?.monacoSnippets) { + editor = new Editor(); + editor.createInstance({ + el, + blobPath, + blobContent, + }); + } else { + editor = ace.edit(el); + } + + return editor; +} + +export default () => ({}); diff --git a/app/assets/javascripts/blob/viewer/index.js b/app/assets/javascripts/blob/viewer/index.js index 742404da46..3ac419557e 100644 --- a/app/assets/javascripts/blob/viewer/index.js +++ b/app/assets/javascripts/blob/viewer/index.js @@ -5,10 +5,43 @@ import { handleLocationHash } from '../../lib/utils/common_utils'; import axios from '../../lib/utils/axios_utils'; import { __ } from '~/locale'; +const loadRichBlobViewer = type => { + switch (type) { + case 'balsamiq': + return import(/* webpackChunkName: 'balsamiq_viewer' */ '../balsamiq_viewer'); + case 'notebook': + return import(/* webpackChunkName: 'notebook_viewer' */ '../notebook_viewer'); + case 'openapi': + return import(/* webpackChunkName: 'openapi_viewer' */ '../openapi_viewer'); + case 'pdf': + return import(/* webpackChunkName: 'pdf_viewer' */ '../pdf_viewer'); + case 'sketch': + return import(/* webpackChunkName: 'sketch_viewer' */ '../sketch_viewer'); + case 'stl': + return import(/* webpackChunkName: 'stl_viewer' */ '../stl_viewer'); + default: + return Promise.resolve(); + } +}; + +export const handleBlobRichViewer = (viewer, type) => { + if (!viewer || !type) return; + + loadRichBlobViewer(type) + .then(module => module?.default(viewer)) + .catch(error => { + Flash(__('Error loading file viewer.')); + throw error; + }); +}; + export default class BlobViewer { constructor() { + const viewer = document.querySelector('.blob-viewer[data-type="rich"]'); + const type = viewer?.dataset?.richType; BlobViewer.initAuxiliaryViewer(); - BlobViewer.initRichViewer(); + + handleBlobRichViewer(viewer, type); this.initMainViewers(); } @@ -20,42 +53,6 @@ export default class BlobViewer { BlobViewer.loadViewer(auxiliaryViewer); } - static initRichViewer() { - const viewer = document.querySelector('.blob-viewer[data-type="rich"]'); - if (!viewer || !viewer.dataset.richType) return; - - const initViewer = promise => - promise - .then(module => module.default(viewer)) - .catch(error => { - Flash(__('Error loading file viewer.')); - throw error; - }); - - switch (viewer.dataset.richType) { - case 'balsamiq': - initViewer(import(/* webpackChunkName: 'balsamiq_viewer' */ '../balsamiq_viewer')); - break; - case 'notebook': - initViewer(import(/* webpackChunkName: 'notebook_viewer' */ '../notebook_viewer')); - break; - case 'openapi': - initViewer(import(/* webpackChunkName: 'openapi_viewer' */ '../openapi_viewer')); - break; - case 'pdf': - initViewer(import(/* webpackChunkName: 'pdf_viewer' */ '../pdf_viewer')); - break; - case 'sketch': - initViewer(import(/* webpackChunkName: 'sketch_viewer' */ '../sketch_viewer')); - break; - case 'stl': - initViewer(import(/* webpackChunkName: 'stl_viewer' */ '../stl_viewer')); - break; - default: - break; - } - } - initMainViewers() { this.$fileHolder = $('.file-holder'); if (!this.$fileHolder.length) return; diff --git a/app/assets/javascripts/blob_edit/blob_bundle.js b/app/assets/javascripts/blob_edit/blob_bundle.js index 6aaf5bf729..f4ce98037c 100644 --- a/app/assets/javascripts/blob_edit/blob_bundle.js +++ b/app/assets/javascripts/blob_edit/blob_bundle.js @@ -4,11 +4,13 @@ import $ from 'jquery'; import NewCommitForm from '../new_commit_form'; import EditBlob from './edit_blob'; import BlobFileDropzone from '../blob/blob_file_dropzone'; +import initPopover from '~/blob/suggest_gitlab_ci_yml'; export default () => { const editBlobForm = $('.js-edit-blob-form'); const uploadBlobForm = $('.js-upload-blob-form'); const deleteBlobForm = $('.js-delete-blob-form'); + const suggestEl = document.querySelector('.js-suggest-gitlab-ci-yml'); if (editBlobForm.length) { const urlRoot = editBlobForm.data('relativeUrlRoot'); @@ -56,4 +58,8 @@ export default () => { if (deleteBlobForm.length) { new NewCommitForm(deleteBlobForm); } + + if (suggestEl) { + initPopover(suggestEl); + } }; diff --git a/app/assets/javascripts/boards/components/board.js b/app/assets/javascripts/boards/components/board.js index a6deb656b3..67046715e9 100644 --- a/app/assets/javascripts/boards/components/board.js +++ b/app/assets/javascripts/boards/components/board.js @@ -1,7 +1,7 @@ import $ from 'jquery'; import Sortable from 'sortablejs'; import Vue from 'vue'; -import { GlButtonGroup, GlButton, GlTooltip } from '@gitlab/ui'; +import { GlButtonGroup, GlButton, GlLabel, GlTooltip } from '@gitlab/ui'; import isWipLimitsOn from 'ee_else_ce/boards/mixins/is_wip_limits'; import { s__, __, sprintf } from '~/locale'; import Icon from '~/vue_shared/components/icon.vue'; @@ -14,6 +14,7 @@ import IssueCount from './issue_count.vue'; import boardsStore from '../stores/boards_store'; import { getBoardSortableDefaultOptions, sortableEnd } from '../mixins/sortable_default_options'; import { ListType } from '../constants'; +import { isScopedLabel } from '~/lib/utils/common_utils'; export default Vue.extend({ components: { @@ -24,6 +25,7 @@ export default Vue.extend({ GlButtonGroup, IssueCount, GlButton, + GlLabel, GlTooltip, }, directives: { @@ -95,6 +97,9 @@ export default Vue.extend({ // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings return `boards.${this.boardId}.${this.list.type}.${this.list.id}`; }, + helpLink() { + return boardsStore.scopedLabels.helpLink; + }, }, watch: { filter: { @@ -145,6 +150,10 @@ export default Vue.extend({ } }, methods: { + showScopedLabels(label) { + return boardsStore.scopedLabels.enabled && isScopedLabel(label); + }, + showNewIssueForm() { this.$refs['board-list'].showIssueForm = !this.$refs['board-list'].showIssueForm; }, diff --git a/app/assets/javascripts/boards/components/board_card.vue b/app/assets/javascripts/boards/components/board_card.vue index 12d6825659..0fc60528eb 100644 --- a/app/assets/javascripts/boards/components/board_card.vue +++ b/app/assets/javascripts/boards/components/board_card.vue @@ -65,11 +65,12 @@ export default { }, showIssue(e) { if (e.target.classList.contains('js-no-trigger')) return; - if (this.showDetail) { - this.showDetail = false; - // If CMD or CTRL is clicked - const isMultiSelect = this.canMultiSelect && (e.ctrlKey || e.metaKey); + // If CMD or CTRL is clicked + const isMultiSelect = this.canMultiSelect && (e.ctrlKey || e.metaKey); + + if (this.showDetail || isMultiSelect) { + this.showDetail = false; if (boardsStore.detail.issue && boardsStore.detail.issue.id === this.issue.id) { eventHub.$emit('clearDetailIssue', isMultiSelect); diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue index 4a64d9e04f..c4e2c398d4 100644 --- a/app/assets/javascripts/boards/components/board_list.vue +++ b/app/assets/javascripts/boards/components/board_list.vue @@ -1,7 +1,6 @@ - - diff --git a/app/assets/javascripts/boards/components/issue_due_date.vue b/app/assets/javascripts/boards/components/issue_due_date.vue index a32ebdab5e..1d70c635c1 100644 --- a/app/assets/javascripts/boards/components/issue_due_date.vue +++ b/app/assets/javascripts/boards/components/issue_due_date.vue @@ -16,6 +16,11 @@ export default { GlTooltip, }, props: { + closed: { + type: Boolean, + required: false, + default: false, + }, date: { type: String, required: true, @@ -66,7 +71,7 @@ export default { return getDayDifference(today, this.issueDueDate); }, isPastDue() { - if (this.timeDifference >= 0) return false; + if (this.timeDifference >= 0 || this.closed) return false; return true; }, standardDateFormat() { @@ -92,7 +97,8 @@ export default { }} - {{ __('Due date') }}
+ {{ __('Due date') }} +
{{ title }}
diff --git a/app/assets/javascripts/boards/components/project_select.vue b/app/assets/javascripts/boards/components/project_select.vue index 4a50b1e2ef..30f1e843e7 100644 --- a/app/assets/javascripts/boards/components/project_select.vue +++ b/app/assets/javascripts/boards/components/project_select.vue @@ -1,6 +1,6 @@ + + diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue new file mode 100644 index 0000000000..c4b1bc18f5 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_popover.vue @@ -0,0 +1,55 @@ + + + diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue new file mode 100644 index 0000000000..ed1240c247 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_settings.vue @@ -0,0 +1,32 @@ + + + diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue new file mode 100644 index 0000000000..3f2f89ada6 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_table.vue @@ -0,0 +1,184 @@ + + + diff --git a/app/assets/javascripts/ci_variable_list/constants.js b/app/assets/javascripts/ci_variable_list/constants.js new file mode 100644 index 0000000000..b2fa980c54 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/constants.js @@ -0,0 +1,16 @@ +import { __ } from '~/locale'; + +// eslint-disable import/prefer-default-export +export const ADD_CI_VARIABLE_MODAL_ID = 'add-ci-variable'; + +export const displayText = { + variableText: __('Var'), + fileText: __('File'), + allEnvironmentsText: __('All'), +}; + +export const types = { + variableType: 'env_var', + fileType: 'file', + allEnvironmentsType: '*', +}; diff --git a/app/assets/javascripts/ci_variable_list/index.js b/app/assets/javascripts/ci_variable_list/index.js new file mode 100644 index 0000000000..58501b216c --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/index.js @@ -0,0 +1,25 @@ +import Vue from 'vue'; +import CiVariableSettings from './components/ci_variable_settings.vue'; +import createStore from './store'; +import { parseBoolean } from '~/lib/utils/common_utils'; + +export default () => { + const el = document.getElementById('js-ci-project-variables'); + const { endpoint, projectId, group, maskableRegex } = el.dataset; + const isGroup = parseBoolean(group); + + const store = createStore({ + endpoint, + projectId, + isGroup, + maskableRegex, + }); + + return new Vue({ + el, + store, + render(createElement) { + return createElement(CiVariableSettings); + }, + }); +}; diff --git a/app/assets/javascripts/ci_variable_list/store/actions.js b/app/assets/javascripts/ci_variable_list/store/actions.js new file mode 100644 index 0000000000..f3a629b84e --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/store/actions.js @@ -0,0 +1,155 @@ +import * as types from './mutation_types'; +import axios from '~/lib/utils/axios_utils'; +import Api from '~/api'; +import createFlash from '~/flash'; +import { __ } from '~/locale'; +import { prepareDataForApi, prepareDataForDisplay, prepareEnvironments } from './utils'; + +export const toggleValues = ({ commit }, valueState) => { + commit(types.TOGGLE_VALUES, valueState); +}; + +export const clearModal = ({ commit }) => { + commit(types.CLEAR_MODAL); +}; + +export const resetEditing = ({ commit, dispatch }) => { + // fetch variables again if modal is being edited and then hidden + // without saving changes, to cover use case of reactivity in the table + dispatch('fetchVariables'); + commit(types.RESET_EDITING); +}; + +export const requestAddVariable = ({ commit }) => { + commit(types.REQUEST_ADD_VARIABLE); +}; + +export const receiveAddVariableSuccess = ({ commit }) => { + commit(types.RECEIVE_ADD_VARIABLE_SUCCESS); +}; + +export const receiveAddVariableError = ({ commit }, error) => { + commit(types.RECEIVE_ADD_VARIABLE_ERROR, error); +}; + +export const addVariable = ({ state, dispatch }) => { + dispatch('requestAddVariable'); + + return axios + .patch(state.endpoint, { + variables_attributes: [prepareDataForApi(state.variable)], + }) + .then(() => { + dispatch('receiveAddVariableSuccess'); + dispatch('fetchVariables'); + }) + .catch(error => { + createFlash(error.response.data[0]); + dispatch('receiveAddVariableError', error); + }); +}; + +export const requestUpdateVariable = ({ commit }) => { + commit(types.REQUEST_UPDATE_VARIABLE); +}; + +export const receiveUpdateVariableSuccess = ({ commit }) => { + commit(types.RECEIVE_UPDATE_VARIABLE_SUCCESS); +}; + +export const receiveUpdateVariableError = ({ commit }, error) => { + commit(types.RECEIVE_UPDATE_VARIABLE_ERROR, error); +}; + +export const updateVariable = ({ state, dispatch }, variable) => { + dispatch('requestUpdateVariable'); + + const updatedVariable = prepareDataForApi(variable); + updatedVariable.secrect_value = updateVariable.value; + + return axios + .patch(state.endpoint, { variables_attributes: [updatedVariable] }) + .then(() => { + dispatch('receiveUpdateVariableSuccess'); + dispatch('fetchVariables'); + }) + .catch(error => { + createFlash(error.response.data[0]); + dispatch('receiveUpdateVariableError', error); + }); +}; + +export const editVariable = ({ commit }, variable) => { + const variableToEdit = variable; + variableToEdit.secret_value = variableToEdit.value; + commit(types.VARIABLE_BEING_EDITED, variableToEdit); +}; + +export const requestVariables = ({ commit }) => { + commit(types.REQUEST_VARIABLES); +}; +export const receiveVariablesSuccess = ({ commit }, variables) => { + commit(types.RECEIVE_VARIABLES_SUCCESS, variables); +}; + +export const fetchVariables = ({ dispatch, state }) => { + dispatch('requestVariables'); + + return axios + .get(state.endpoint) + .then(({ data }) => { + dispatch('receiveVariablesSuccess', prepareDataForDisplay(data.variables)); + }) + .catch(() => { + createFlash(__('There was an error fetching the variables.')); + }); +}; + +export const requestDeleteVariable = ({ commit }) => { + commit(types.REQUEST_DELETE_VARIABLE); +}; + +export const receiveDeleteVariableSuccess = ({ commit }) => { + commit(types.RECEIVE_DELETE_VARIABLE_SUCCESS); +}; + +export const receiveDeleteVariableError = ({ commit }, error) => { + commit(types.RECEIVE_DELETE_VARIABLE_ERROR, error); +}; + +export const deleteVariable = ({ dispatch, state }, variable) => { + dispatch('requestDeleteVariable'); + + const destroy = true; + + return axios + .patch(state.endpoint, { variables_attributes: [prepareDataForApi(variable, destroy)] }) + .then(() => { + dispatch('receiveDeleteVariableSuccess'); + dispatch('fetchVariables'); + }) + .catch(error => { + createFlash(error.response.data[0]); + dispatch('receiveDeleteVariableError', error); + }); +}; + +export const requestEnvironments = ({ commit }) => { + commit(types.REQUEST_ENVIRONMENTS); +}; + +export const receiveEnvironmentsSuccess = ({ commit }, environments) => { + commit(types.RECEIVE_ENVIRONMENTS_SUCCESS, environments); +}; + +export const fetchEnvironments = ({ dispatch, state }) => { + dispatch('requestEnvironments'); + + return Api.environments(state.projectId) + .then(res => { + dispatch('receiveEnvironmentsSuccess', prepareEnvironments(res.data)); + }) + .catch(() => { + createFlash(__('There was an error fetching the environments information.')); + }); +}; diff --git a/app/assets/javascripts/ci_variable_list/store/index.js b/app/assets/javascripts/ci_variable_list/store/index.js new file mode 100644 index 0000000000..db4ba95b3c --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/store/index.js @@ -0,0 +1,17 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import * as actions from './actions'; +import mutations from './mutations'; +import state from './state'; + +Vue.use(Vuex); + +export default (initialState = {}) => + new Vuex.Store({ + actions, + mutations, + state: { + ...state(), + ...initialState, + }, + }); diff --git a/app/assets/javascripts/ci_variable_list/store/mutation_types.js b/app/assets/javascripts/ci_variable_list/store/mutation_types.js new file mode 100644 index 0000000000..240066d0f2 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/store/mutation_types.js @@ -0,0 +1,22 @@ +export const TOGGLE_VALUES = 'TOGGLE_VALUES'; +export const VARIABLE_BEING_EDITED = 'VARIABLE_BEING_EDITED'; +export const RESET_EDITING = 'RESET_EDITING'; +export const CLEAR_MODAL = 'CLEAR_MODAL'; + +export const REQUEST_VARIABLES = 'REQUEST_VARIABLES'; +export const RECEIVE_VARIABLES_SUCCESS = 'RECEIVE_VARIABLES_SUCCESS'; + +export const REQUEST_DELETE_VARIABLE = 'REQUEST_DELETE_VARIABLE'; +export const RECEIVE_DELETE_VARIABLE_SUCCESS = 'RECEIVE_DELETE_VARIABLE_SUCCESS'; +export const RECEIVE_DELETE_VARIABLE_ERROR = 'RECEIVE_DELETE_VARIABLE_ERROR'; + +export const REQUEST_ADD_VARIABLE = 'REQUEST_ADD_VARIABLE'; +export const RECEIVE_ADD_VARIABLE_SUCCESS = 'RECEIVE_ADD_VARIABLE_SUCCESS'; +export const RECEIVE_ADD_VARIABLE_ERROR = 'RECEIVE_ADD_VARIABLE_ERROR'; + +export const REQUEST_UPDATE_VARIABLE = 'REQUEST_UPDATE_VARIABLE'; +export const RECEIVE_UPDATE_VARIABLE_SUCCESS = 'RECEIVE_UPDATE_VARIABLE_SUCCESS'; +export const RECEIVE_UPDATE_VARIABLE_ERROR = 'RECEIVE_UPDATE_VARIABLE_ERROR'; + +export const REQUEST_ENVIRONMENTS = 'REQUEST_ENVIRONMENTS'; +export const RECEIVE_ENVIRONMENTS_SUCCESS = 'RECEIVE_ENVIRONMENTS_SUCCESS'; diff --git a/app/assets/javascripts/ci_variable_list/store/mutations.js b/app/assets/javascripts/ci_variable_list/store/mutations.js new file mode 100644 index 0000000000..c75eb4a91f --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/store/mutations.js @@ -0,0 +1,86 @@ +import * as types from './mutation_types'; +import { displayText } from '../constants'; + +export default { + [types.REQUEST_VARIABLES](state) { + state.isLoading = true; + }, + + [types.RECEIVE_VARIABLES_SUCCESS](state, variables) { + state.isLoading = false; + state.variables = variables; + }, + + [types.REQUEST_DELETE_VARIABLE](state) { + state.isDeleting = true; + }, + + [types.RECEIVE_DELETE_VARIABLE_SUCCESS](state) { + state.isDeleting = false; + }, + + [types.RECEIVE_DELETE_VARIABLE_ERROR](state, error) { + state.isDeleting = false; + state.error = error; + }, + + [types.REQUEST_ADD_VARIABLE](state) { + state.isLoading = true; + }, + + [types.RECEIVE_ADD_VARIABLE_SUCCESS](state) { + state.isLoading = false; + }, + + [types.RECEIVE_ADD_VARIABLE_ERROR](state, error) { + state.isLoading = false; + state.error = error; + }, + + [types.REQUEST_UPDATE_VARIABLE](state) { + state.isLoading = true; + }, + + [types.RECEIVE_UPDATE_VARIABLE_SUCCESS](state) { + state.isLoading = false; + }, + + [types.RECEIVE_UPDATE_VARIABLE_ERROR](state, error) { + state.isLoading = false; + state.error = error; + }, + + [types.TOGGLE_VALUES](state, valueState) { + state.valuesHidden = valueState; + }, + + [types.REQUEST_ENVIRONMENTS](state) { + state.isLoading = true; + }, + + [types.RECEIVE_ENVIRONMENTS_SUCCESS](state, environments) { + state.isLoading = false; + state.environments = environments; + state.environments.unshift(displayText.allEnvironmentsText); + }, + + [types.VARIABLE_BEING_EDITED](state, variable) { + state.variableBeingEdited = variable; + }, + + [types.CLEAR_MODAL](state) { + state.variable = { + variable_type: displayText.variableText, + key: '', + secret_value: '', + protected: false, + masked: false, + environment_scope: displayText.allEnvironmentsText, + }; + }, + + [types.RESET_EDITING](state) { + state.variableBeingEdited = null; + state.showInputValue = false; + }, +}; diff --git a/app/assets/javascripts/ci_variable_list/store/state.js b/app/assets/javascripts/ci_variable_list/store/state.js new file mode 100644 index 0000000000..5166321d6a --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/store/state.js @@ -0,0 +1,24 @@ +import { displayText } from '../constants'; + +export default () => ({ + endpoint: null, + projectId: null, + isGroup: null, + maskableRegex: null, + isLoading: false, + isDeleting: false, + variable: { + variable_type: displayText.variableText, + key: '', + secret_value: '', + protected: false, + masked: false, + environment_scope: displayText.allEnvironmentsText, + }, + variables: null, + valuesHidden: true, + error: null, + environments: [], + typeOptions: [displayText.variableText, displayText.fileText], + variableBeingEdited: null, +}); diff --git a/app/assets/javascripts/ci_variable_list/store/utils.js b/app/assets/javascripts/ci_variable_list/store/utils.js new file mode 100644 index 0000000000..3cd8c85024 --- /dev/null +++ b/app/assets/javascripts/ci_variable_list/store/utils.js @@ -0,0 +1,43 @@ +import { cloneDeep } from 'lodash'; +import { displayText, types } from '../constants'; + +const variableTypeHandler = type => + type === displayText.variableText ? types.variableType : types.fileType; + +export const prepareDataForDisplay = variables => { + const variablesToDisplay = []; + variables.forEach(variable => { + const variableCopy = variable; + if (variableCopy.variable_type === types.variableType) { + variableCopy.variable_type = displayText.variableText; + } else { + variableCopy.variable_type = displayText.fileText; + } + variableCopy.secret_value = variableCopy.value; + + if (variableCopy.environment_scope === types.allEnvironmentsType) { + variableCopy.environment_scope = displayText.allEnvironmentsText; + } + variablesToDisplay.push(variableCopy); + }); + return variablesToDisplay; +}; + +export const prepareDataForApi = (variable, destroy = false) => { + const variableCopy = cloneDeep(variable); + variableCopy.protected = variableCopy.protected.toString(); + variableCopy.masked = variableCopy.masked.toString(); + variableCopy.variable_type = variableTypeHandler(variableCopy.variable_type); + if (variableCopy.environment_scope === displayText.allEnvironmentsText) { + variableCopy.environment_scope = types.allEnvironmentsType; + } + + if (destroy) { + // eslint-disable-next-line + variableCopy._destroy = destroy; + } + + return variableCopy; +}; + +export const prepareEnvironments = environments => environments.map(e => e.name); diff --git a/app/assets/javascripts/clusters/clusters_bundle.js b/app/assets/javascripts/clusters/clusters_bundle.js index b764348eb3..e20c87ed8a 100644 --- a/app/assets/javascripts/clusters/clusters_bundle.js +++ b/app/assets/javascripts/clusters/clusters_bundle.js @@ -255,6 +255,8 @@ export default class Clusters { eventHub.$on('setKnativeHostname', data => this.setKnativeHostname(data)); eventHub.$on('uninstallApplication', data => this.uninstallApplication(data)); eventHub.$on('setCrossplaneProviderStack', data => this.setCrossplaneProviderStack(data)); + eventHub.$on('setIngressModSecurityEnabled', data => this.setIngressModSecurityEnabled(data)); + eventHub.$on('resetIngressModSecurityEnabled', id => this.resetIngressModSecurityEnabled(id)); // Add event listener to all the banner close buttons this.addBannerCloseHandler(this.unreachableContainer, 'unreachable'); this.addBannerCloseHandler(this.authenticationFailureContainer, 'authentication_failure'); @@ -268,6 +270,8 @@ export default class Clusters { eventHub.$off('setKnativeHostname'); eventHub.$off('setCrossplaneProviderStack'); eventHub.$off('uninstallApplication'); + eventHub.$off('setIngressModSecurityEnabled'); + eventHub.$off('resetIngressModSecurityEnabled'); } initPolling(method, successCallback, errorCallback) { @@ -313,10 +317,13 @@ export default class Clusters { this.checkForNewInstalls(prevApplicationMap, this.store.state.applications); this.updateContainer(prevStatus, this.store.state.status, this.store.state.statusReason); - this.toggleIngressDomainHelpText( - prevApplicationMap[INGRESS], - this.store.state.applications[INGRESS], - ); + + if (this.ingressDomainHelpText) { + this.toggleIngressDomainHelpText( + prevApplicationMap[INGRESS], + this.store.state.applications[INGRESS], + ); + } } showToken() { @@ -513,6 +520,15 @@ export default class Clusters { this.store.updateAppProperty(appId, 'validationError', null); } + setIngressModSecurityEnabled({ id, modSecurityEnabled }) { + this.store.updateAppProperty(id, 'isEditingModSecurityEnabled', true); + this.store.updateAppProperty(id, 'modsecurity_enabled', modSecurityEnabled); + } + + resetIngressModSecurityEnabled(id) { + this.store.updateAppProperty(id, 'isEditingModSecurityEnabled', false); + } + destroy() { this.destroyed = true; diff --git a/app/assets/javascripts/clusters/components/applications.vue b/app/assets/javascripts/clusters/components/applications.vue index fe2ad562ad..87d190e51c 100644 --- a/app/assets/javascripts/clusters/components/applications.vue +++ b/app/assets/javascripts/clusters/components/applications.vue @@ -21,6 +21,7 @@ import KnativeDomainEditor from './knative_domain_editor.vue'; import { CLUSTER_TYPE, PROVIDER_TYPE, APPLICATION_STATUS, INGRESS } from '../constants'; import eventHub from '~/clusters/event_hub'; import CrossplaneProviderStack from './crossplane_provider_stack.vue'; +import IngressModsecuritySettings from './ingress_modsecurity_settings.vue'; export default { components: { @@ -29,6 +30,7 @@ export default { GlLoadingIcon, KnativeDomainEditor, CrossplaneProviderStack, + IngressModsecuritySettings, }, props: { type: { @@ -117,9 +119,6 @@ export default { ingressInstalled() { return this.applications.ingress.status === APPLICATION_STATUS.INSTALLED; }, - ingressEnableModsecurity() { - return this.applications.ingress.modsecurity_enabled; - }, ingressExternalEndpoint() { return this.applications.ingress.externalIp || this.applications.ingress.externalHostname; }, @@ -129,18 +128,6 @@ export default { crossplaneInstalled() { return this.applications.crossplane.status === APPLICATION_STATUS.INSTALLED; }, - ingressModSecurityDescription() { - const escapedUrl = _.escape(this.ingressModSecurityHelpPath); - - return sprintf( - s__('ClusterIntegration|Learn more about %{startLink}ModSecurity%{endLink}'), - { - startLink: ``, - endLink: '', - }, - false, - ); - }, ingressDescription() { return sprintf( _.escape( @@ -241,6 +228,9 @@ Crossplane runs inside your Kubernetes cluster and supports secure connectivity } return null; }, + ingress() { + return this.applications.ingress; + }, }, created() { this.helmInstallIllustration = helmInstallIllustration; @@ -270,7 +260,6 @@ Crossplane runs inside your Kubernetes cluster and supports secure connectivity