From d85b82979f0c4c2c16b5d8e62a3ebb491c5ebb6c Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Wed, 22 Apr 2020 19:07:51 +0530 Subject: [PATCH] New upstream version 12.10.0 --- .codeclimate.yml | 1 + .eslintrc.yml | 9 +- .gitignore | 1 + .gitlab-ci.yml | 9 +- .gitlab/ci/dev-fixtures.gitlab-ci.yml | 8 +- .gitlab/ci/docs.gitlab-ci.yml | 4 +- .gitlab/ci/frontend.gitlab-ci.yml | 55 +- .gitlab/ci/global.gitlab-ci.yml | 44 +- .gitlab/ci/memory.gitlab-ci.yml | 12 +- .gitlab/ci/pages.gitlab-ci.yml | 1 - .gitlab/ci/qa.gitlab-ci.yml | 6 +- .gitlab/ci/rails.gitlab-ci.yml | 269 +- .gitlab/ci/reports.gitlab-ci.yml | 80 +- .gitlab/ci/review.gitlab-ci.yml | 99 +- .gitlab/ci/rules.gitlab-ci.yml | 120 +- .gitlab/ci/setup.gitlab-ci.yml | 15 +- .gitlab/issue_templates/Bug.md | 1 + .../issue_templates/Feature Flag Roll Out.md | 2 +- .gitlab/issue_templates/Feature proposal.md | 22 +- .gitlab/issue_templates/Migrations.md | 67 + .../Productivity Improvement.md | 7 - .gitlab/issue_templates/QA failure.md | 9 + .../Security developer workflow.md | 2 +- .gitlab/issue_templates/Solution_validation | 32 + .../New static analysis check.md | 2 +- .../Security Release.md | 2 +- .haml-lint_todo.yml | 1 - .markdownlint.json | 9 +- .overcommit.yml.example | 8 +- .rubocop.yml | 42 +- .rubocop_todo.yml | 19 - CHANGELOG-EE.md | 34 + CHANGELOG.md | 472 + GITALY_SERVER_VERSION | 2 +- GITLAB_ELASTICSEARCH_INDEXER_VERSION | 2 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 16 +- Gemfile.lock | 58 +- Procfile | 6 - VERSION | 2 +- .../setup_metrics_and_profiling.js | 8 + .../components/alerts_service_form.vue | 18 +- app/assets/javascripts/api.js | 46 +- app/assets/javascripts/awards_handler.js | 2 +- .../javascripts/badges/components/badge.vue | 2 +- .../badges/components/badge_list.vue | 2 +- .../behaviors/markdown/nodes/playable.js | 2 +- .../behaviors/markdown/render_metrics.js | 36 +- .../javascripts/blob/blob_file_dropzone.js | 4 + .../blob/components/blob_edit_content.vue | 19 +- .../blob/components/blob_embeddable.vue | 8 +- .../blob_header_default_actions.vue | 16 +- .../blob_header_viewer_switcher.vue | 12 +- .../blob/pipeline_tour_success_modal.vue | 36 +- .../components/popover.vue | 38 +- .../javascripts/blob_edit/blob_bundle.js | 21 + .../javascripts/boards/components/board.js | 22 +- .../boards/components/board_card.vue | 13 + .../boards/components/board_column.vue | 384 + .../boards/components/board_delete.js | 1 + .../boards/components/board_new_issue.vue | 18 +- .../boards/components/board_sidebar.js | 3 + .../boards/components/boards_selector.vue | 1 + .../boards/components/modal/header.vue | 2 +- .../boards/components/modal/tabs.vue | 2 +- .../boards/components/project_select.vue | 1 + app/assets/javascripts/boards/index.js | 11 +- .../javascripts/boards/stores/actions.js | 2 +- .../javascripts/boards/stores/mutations.js | 2 +- .../components/ci_environments_dropdown.vue | 93 + .../components/ci_key_field.vue | 169 + .../ci_variable_autocomplete_tokens.js | 29 + .../components/ci_variable_modal.vue | 145 +- .../components/ci_variable_popover.vue | 8 +- .../components/ci_variable_table.vue | 24 +- .../javascripts/ci_variable_list/constants.js | 7 +- .../ci_variable_list/store/actions.js | 19 + .../ci_variable_list/store/getters.js | 9 + .../ci_variable_list/store/index.js | 2 + .../ci_variable_list/store/mutation_types.js | 4 + .../ci_variable_list/store/mutations.js | 21 + .../ci_variable_list/store/state.js | 1 + .../javascripts/clusters/clusters_bundle.js | 39 +- .../clusters/components/application_row.vue | 3 +- .../clusters/components/applications.vue | 49 +- .../ingress_modsecurity_settings.vue | 138 +- .../components/knative_domain_editor.vue | 106 +- .../remove_cluster_confirmation.vue | 29 +- app/assets/javascripts/clusters/constants.js | 3 + .../services/application_state_machine.js | 3 +- .../clusters/stores/clusters_store.js | 16 +- .../code_navigation/components/app.vue | 19 +- .../code_navigation/components/popover.vue | 19 +- .../javascripts/code_navigation/index.js | 4 +- .../code_navigation/store/actions.js | 55 +- .../code_navigation/store/mutations.js | 11 +- .../code_navigation/store/state.js | 4 +- .../code_navigation/utils/index.js | 33 +- .../commit/pipelines/pipelines_table.vue | 10 +- app/assets/javascripts/contextual_sidebar.js | 4 +- .../contributors/components/contributors.vue | 2 +- .../javascripts/create_item_dropdown.js | 8 +- .../create_merge_request_dropdown.js | 4 +- .../components/custom_metrics_form.vue | 96 + .../components/custom_metrics_form_fields.vue | 294 + .../components/delete_custom_metric_modal.vue | 54 + .../javascripts/custom_metrics/constants.js | 12 + .../javascripts/custom_metrics/index.js | 47 + .../components/stage_code_component.vue | 2 + .../components/stage_component.vue | 2 + .../components/stage_review_component.vue | 2 + .../components/stage_staging_component.vue | 2 + .../components/stage_test_component.vue | 2 + .../cycle_analytics/cycle_analytics_bundle.js | 6 - .../deploy_keys/components/app.vue | 2 +- .../javascripts/diffs/components/app.vue | 13 - .../diffs/components/commit_item.vue | 2 +- .../components/compare_dropdown_layout.vue | 78 + .../diffs/components/compare_versions.vue | 55 +- .../components/compare_versions_dropdown.vue | 162 - .../diffs/components/diff_content.vue | 8 + .../diffs/components/diff_file.vue | 1 + .../diffs/components/diff_file_header.vue | 17 +- .../diffs/components/diff_table_cell.vue | 8 +- .../diffs/components/edit_button.vue | 8 +- .../diffs/components/hidden_files_warning.vue | 2 +- .../diffs/components/no_changes.vue | 8 +- .../diffs/components/settings_dropdown.vue | 20 +- app/assets/javascripts/diffs/constants.js | 3 + app/assets/javascripts/diffs/store/actions.js | 12 + app/assets/javascripts/diffs/store/getters.js | 2 + .../diffs/store/getters_versions_dropdowns.js | 57 + .../diffs/store/modules/diff_state.js | 2 +- .../javascripts/diffs/store/mutation_types.js | 3 + .../javascripts/diffs/store/mutations.js | 30 +- app/assets/javascripts/diffs/store/utils.js | 10 +- .../dirty_submit/dirty_submit_form.js | 6 +- app/assets/javascripts/droplab/utils.js | 2 +- app/assets/javascripts/dropzone_input.js | 16 +- .../components/confirm_rollback_modal.vue | 10 +- .../components/delete_environment_modal.vue | 66 + .../components/enable_review_app_button.vue | 8 +- .../components/environment_delete.vue | 70 + .../components/environment_item.vue | 56 +- .../components/environment_monitoring.vue | 8 +- .../components/environment_pin.vue | 13 +- .../components/environment_rollback.vue | 14 +- .../components/environments_app.vue | 11 +- .../components/environments_table.vue | 32 +- .../components/stop_environment_modal.vue | 9 +- .../folder/environments_folder_view.vue | 3 + .../environments/mixins/environments_mixin.js | 98 +- .../javascripts/environments/mount_show.js | 32 + .../services/environments_service.js | 5 + .../components/error_details.vue | 24 +- .../components/error_tracking_actions.vue | 80 + .../components/error_tracking_list.vue | 74 +- .../javascripts/error_tracking/utils.js | 2 +- .../components/app.vue | 8 +- .../components/error_tracking_form.vue | 4 +- app/assets/javascripts/filterable_list.js | 4 +- .../filtered_search/dropdown_operator.js | 6 +- .../filtered_search_manager.js | 43 +- .../frequent_items/components/app.vue | 2 +- app/assets/javascripts/gfm_auto_complete.js | 7 +- app/assets/javascripts/gl_form.js | 2 +- .../components/grafana_integration.vue | 10 +- .../groups/components/group_folder.vue | 2 +- .../javascripts/groups/components/groups.vue | 2 +- app/assets/javascripts/groups/constants.js | 2 +- app/assets/javascripts/header.js | 19 + .../javascripts/helpers/monitor_helper.js | 80 +- .../ide/components/branches/item.vue | 2 +- .../ide/components/branches/search_list.vue | 6 +- .../ide/components/commit_sidebar/actions.vue | 39 +- .../components/commit_sidebar/list_item.vue | 2 +- .../ide/components/external_link.vue | 34 - .../components/file_templates/dropdown.vue | 2 +- app/assets/javascripts/ide/components/ide.vue | 8 +- .../ide/components/ide_status_bar.vue | 2 +- .../ide/components/jobs/detail.vue | 4 +- .../javascripts/ide/components/jobs/list.vue | 2 +- .../ide/components/merge_requests/list.vue | 6 +- .../components/panes/collapsible_sidebar.vue | 5 +- .../ide/components/pipelines/list.vue | 6 +- .../ide/components/preview/clientside.vue | 8 +- .../ide/components/repo_commit_section.vue | 2 +- .../ide/components/repo_editor.vue | 7 +- app/assets/javascripts/ide/constants.js | 1 + app/assets/javascripts/ide/index.js | 4 +- .../javascripts/ide/lib/diff/controller.js | 2 +- app/assets/javascripts/ide/lib/editor.js | 4 +- .../queries/getUserPermissions.query.graphql | 3 +- app/assets/javascripts/ide/services/index.js | 2 +- app/assets/javascripts/ide/stores/actions.js | 4 +- .../javascripts/ide/stores/actions/project.js | 68 +- .../javascripts/ide/stores/actions/tree.js | 4 +- app/assets/javascripts/ide/stores/getters.js | 9 +- .../ide/stores/modules/commit/actions.js | 15 +- .../ide/stores/modules/commit/getters.js | 2 +- .../ide/stores/modules/commit/state.js | 2 +- .../edit/components/active_toggle.vue | 53 + .../integrations/edit/event_hub.js | 3 + .../javascripts/integrations/edit/index.js | 30 + .../integrations/integration_settings_form.js | 29 +- .../issuable_suggestions/components/item.vue | 2 +- .../issue_show/components/edit_actions.vue | 2 +- .../issue_show/components/edited.vue | 2 +- .../fields/description_template.vue | 2 +- .../components/jira_import_app.vue | 153 + .../components/jira_import_form.vue | 136 + .../components/jira_import_progress.vue | 66 + .../components/jira_import_setup.vue | 26 + app/assets/javascripts/jira_import/index.js | 37 + .../get_jira_import_details.query.graphql | 12 + .../initiate_jira_import.mutation.graphql | 11 + .../queries/jira_import.fragment.graphql | 7 + app/assets/javascripts/jira_import/utils.js | 10 + .../jobs/components/commit_block.vue | 2 +- .../jobs/components/job_log_controllers.vue | 10 +- .../jobs/components/manual_variables_form.vue | 15 +- .../javascripts/jobs/components/sidebar.vue | 8 +- .../jobs/components/trigger_block.vue | 8 +- app/assets/javascripts/lazy_loader.js | 8 +- app/assets/javascripts/lib/utils/autosave.js | 2 +- .../javascripts/lib/utils/common_utils.js | 23 + .../javascripts/lib/utils/datetime_range.js | 4 +- .../javascripts/lib/utils/file_upload.js | 11 + .../javascripts/lib/utils/icon_utils.js | 4 +- app/assets/javascripts/lib/utils/keycodes.js | 7 +- app/assets/javascripts/lib/utils/notify.js | 4 +- .../javascripts/lib/utils/text_utility.js | 8 + .../utils/unit_format/formatter_factory.js | 6 +- .../lib/utils/unit_format/index.js | 19 +- .../javascripts/lib/utils/url_utility.js | 8 + .../logs/components/environment_logs.vue | 213 +- .../logs/components/log_advanced_filters.vue | 98 + .../logs/components/log_control_buttons.vue | 16 +- .../logs/components/log_simple_filters.vue | 73 + .../tokens/token_with_loading_state.vue | 30 + app/assets/javascripts/logs/constants.js | 3 + app/assets/javascripts/logs/stores/actions.js | 74 +- app/assets/javascripts/logs/stores/getters.js | 12 +- .../javascripts/logs/stores/mutation_types.js | 7 +- .../javascripts/logs/stores/mutations.js | 25 +- app/assets/javascripts/logs/stores/state.js | 5 + app/assets/javascripts/logs/utils.js | 3 +- app/assets/javascripts/main.js | 14 +- .../components/app.vue | 44 + .../maintenance_mode_settings/index.js | 20 + .../javascripts/mirrors/mirror_repos.js | 13 + app/assets/javascripts/mirrors/ssh_mirror.js | 1 - .../components/charts/annotations.js | 133 + .../monitoring/components/charts/bar.vue | 97 + .../monitoring/components/charts/column.vue | 2 +- .../components/charts/empty_chart.vue | 6 - .../monitoring/components/charts/options.js | 6 +- .../components/charts/single_stat.vue | 18 +- .../components/charts/stacked_column.vue | 2 +- .../components/charts/time_series.vue | 148 +- .../monitoring/components/dashboard.vue | 347 +- .../components/duplicate_dashboard_form.vue | 11 +- .../monitoring/components/embed.vue | 99 - .../components/embeds/embed_group.vue | 101 + .../components/embeds/metric_embed.vue | 125 + .../monitoring/components/panel_type.vue | 98 +- .../javascripts/monitoring/constants.js | 76 +- .../queries/getAnnotations.query.graphql | 26 + .../queries/getEnvironments.query.graphql | 4 +- .../javascripts/monitoring/stores/actions.js | 257 +- .../monitoring/stores/embed_group/actions.js | 5 + .../monitoring/stores/embed_group/getters.js | 4 + .../monitoring/stores/embed_group/index.js | 24 + .../stores/embed_group/mutation_types.js | 3 + .../stores/embed_group/mutations.js | 7 + .../monitoring/stores/embed_group/state.js | 3 + .../javascripts/monitoring/stores/getters.js | 25 + .../javascripts/monitoring/stores/index.js | 16 +- .../monitoring/stores/mutation_types.js | 16 +- .../monitoring/stores/mutations.js | 90 +- .../javascripts/monitoring/stores/state.js | 1 + .../javascripts/monitoring/stores/utils.js | 88 +- app/assets/javascripts/monitoring/utils.js | 61 +- app/assets/javascripts/mr_notes/index.js | 2 + .../mr_popover/components/mr_popover.vue | 8 +- .../mr_tabs_popover/components/popover.vue | 8 +- app/assets/javascripts/new_branch_form.js | 2 +- .../javascripts/notebook/cells/code.vue | 4 +- .../javascripts/notebook/cells/code/index.vue | 1 + .../javascripts/notebook/cells/markdown.vue | 2 +- .../notebook/cells/output/image.vue | 2 +- .../notebook/cells/output/index.vue | 1 + app/assets/javascripts/notebook/index.vue | 2 +- .../notes/components/diff_with_note.vue | 5 +- .../notes/components/discussion_counter.vue | 37 +- .../components/discussion_filter_note.vue | 12 +- .../discussion_resolve_with_issue_button.vue | 8 +- .../components/note_actions/reply_button.vue | 8 +- .../notes/components/note_awards_list.vue | 177 +- .../notes/components/note_edited_text.vue | 2 +- .../notes/components/note_header.vue | 52 +- .../notes/components/notes_app.vue | 93 +- .../notes/components/sort_discussion.vue | 78 + app/assets/javascripts/notes/constants.js | 2 + app/assets/javascripts/notes/index.js | 2 + .../javascripts/notes/sort_discussions.js | 16 + .../javascripts/notes/stores/actions.js | 9 + .../javascripts/notes/stores/getters.js | 19 +- .../javascripts/notes/stores/modules/index.js | 2 + .../notes/stores/mutation_types.js | 2 + .../javascripts/notes/stores/mutations.js | 15 +- .../components/external_dashboard.vue | 14 +- .../pages/admin/application_settings/index.js | 2 + .../integrations/index.js | 6 + .../metrics_and_profiling/index.js | 9 +- ...e_ping_payload.js => payload_previewer.js} | 4 +- .../broadcast_messages/broadcast_message.js | 43 +- .../users/components/delete_user_modal.vue | 16 +- .../javascripts/pages/admin/users/index.js | 2 +- .../groups/registry/repositories/index.js | 11 +- .../settings/integrations/edit/index.js | 16 + .../pages/projects/blob/show/index.js | 13 +- .../pages/projects/commits/show/index.js | 3 + .../pages/projects/environments/show/index.js | 3 + .../pages/projects/import/jira/index.js | 3 + .../labels/components/promote_label_modal.vue | 3 +- .../projects/prometheus/metrics/edit/index.js | 3 + .../projects/prometheus/metrics/new/index.js | 3 + .../projects/registry/repositories/index.js | 3 - .../pages/projects/serverless/index.js | 2 + .../pages/projects/services/edit/index.js | 11 +- .../permissions/components/settings_panel.vue | 75 +- .../javascripts/pages/projects/show/index.js | 1 + .../pages/projects/snippets/edit/index.js | 9 +- .../pages/projects/snippets/new/index.js | 9 +- .../pages/projects/snippets/show/index.js | 20 +- .../projects/static_site_editor/show/index.js | 5 + .../show/highlight_blob_search_result.js | 15 + .../javascripts/pages/search/show/search.js | 2 + .../javascripts/pages/snippets/edit/index.js | 8 +- .../javascripts/pages/snippets/new/index.js | 8 +- .../javascripts/pages/snippets/show/index.js | 20 +- .../javascripts/performance_bar/index.js | 2 +- .../pipelines/components/empty_state.vue | 12 +- .../components/graph/action_component.vue | 8 +- .../components/graph/graph_component.vue | 26 +- .../components/graph/linked_pipeline.vue | 8 +- .../pipelines/components/header_component.vue | 2 +- .../pipelines/components/nav_controls.vue | 12 +- .../pipelines/components/pipeline_url.vue | 6 +- .../pipelines/components/pipelines.vue | 2 +- .../components/pipelines_actions.vue | 8 +- .../components/pipelines_artifacts.vue | 2 +- .../test_reports/test_suite_table.vue | 2 +- .../components/test_reports/test_summary.vue | 8 +- .../mixins/graph_pipeline_bundle_mixin.js | 25 +- .../pipelines/pipeline_details_bundle.js | 8 +- .../pipelines/stores/pipeline_store.js | 12 +- app/assets/javascripts/project_select.js | 1 + .../commits/components/author_select.vue | 141 + .../javascripts/projects/commits/index.js | 26 + .../projects/commits/store/actions.js | 31 + .../projects/commits/store/index.js | 15 + .../projects/commits/store/mutation_types.js | 2 + .../projects/commits/store/mutations.js | 10 + .../projects/commits/store/state.js | 5 + .../projects/default_project_templates.js | 92 + .../javascripts/projects/project_new.js | 86 +- .../commit_pipeline_status_component.vue | 2 +- .../components/reset_key.vue | 130 + .../javascripts/prometheus_alerts/index.js | 27 + .../prometheus_metrics/constants.js | 1 + .../prometheus_metrics/custom_metrics.js | 163 + .../prometheus_metrics/prometheus_metrics.js | 4 + .../components/project_empty_state.vue | 63 +- .../components/project_policy_alert.vue | 1 - .../components/quickstart_dropdown.vue | 103 + .../components/registry_breadcrumb.vue | 8 +- .../registry/explorer/constants.js | 55 +- .../javascripts/registry/explorer/index.js | 2 + .../registry/explorer/pages/details.vue | 46 +- .../registry/explorer/pages/index.vue | 41 +- .../registry/explorer/pages/list.vue | 189 +- .../javascripts/registry/explorer/router.js | 4 +- .../registry/explorer/stores/actions.js | 25 +- .../registry/explorer/stores/getters.js | 20 +- .../explorer/stores/mutation_types.js | 2 + .../registry/explorer/stores/mutations.js | 18 +- .../registry/explorer/stores/state.js | 1 + .../registry/list/components/app.vue | 153 - .../list/components/collapsible_container.vue | 155 - .../list/components/group_empty_state.vue | 46 - .../list/components/project_empty_state.vue | 133 - .../list/components/table_registry.vue | 289 - .../javascripts/registry/list/constants.js | 8 - app/assets/javascripts/registry/list/index.js | 44 - .../registry/list/stores/actions.js | 46 - .../registry/list/stores/getters.js | 6 - .../registry/list/stores/mutation_types.js | 8 - .../registry/list/stores/mutations.js | 57 - .../javascripts/registry/list/stores/state.js | 27 - .../components/registry_settings_app.vue | 49 +- .../settings/components/settings_form.vue | 12 +- .../registry/settings/store/actions.js | 6 +- .../registry/settings/store/getters.js | 4 + .../registry/settings/store/mutation_types.js | 1 - .../registry/settings/store/mutations.js | 11 +- .../registry/settings/store/state.js | 16 +- .../releases/components/app_edit.vue | 29 +- .../releases/components/app_index.vue | 2 +- .../releases/components/asset_links_form.vue | 194 + .../releases/components/evidence_block.vue | 102 +- .../releases/components/release_block.vue | 12 +- .../release_block_milestone_info.vue | 12 +- app/assets/javascripts/releases/mount_edit.js | 6 +- app/assets/javascripts/releases/mount_show.js | 5 +- .../releases/stores/modules/detail/actions.js | 77 +- .../releases/stores/modules/detail/getters.js | 92 + .../releases/stores/modules/detail/index.js | 10 +- .../stores/modules/detail/mutation_types.js | 7 +- .../stores/modules/detail/mutations.js | 34 +- .../releases/stores/modules/detail/state.js | 31 +- .../components/accessibility_issue_body.vue | 62 + .../reports/components/issue_body.js | 3 + .../reports/components/report_link.vue | 2 +- .../reports/components/summary_row.vue | 16 +- .../repository/components/breadcrumbs.vue | 12 +- .../repository/components/last_commit.vue | 8 +- .../repository/components/preview/index.vue | 2 +- .../components/table/parent_row.vue | 5 +- .../repository/components/table/row.vue | 68 +- app/assets/javascripts/repository/graphql.js | 6 +- app/assets/javascripts/repository/index.js | 4 +- app/assets/javascripts/repository/log_tree.js | 6 +- app/assets/javascripts/repository/router.js | 2 +- .../javascripts/repository/utils/title.js | 2 +- app/assets/javascripts/search_autocomplete.js | 4 +- .../components/self_monitor_form.vue | 6 +- .../components/sentry_error_stack_trace.vue | 2 +- .../serverless/components/functions.vue | 4 +- .../components/missing_prometheus.vue | 8 +- .../javascripts/serverless/survey_banner.js | 36 + .../javascripts/serverless/survey_banner.vue | 52 + .../components/assignees/assignees.vue | 2 +- .../components/lock/lock_issue_sidebar.vue | 6 +- .../components/participants/participants.vue | 2 +- .../components/time_tracking/time_tracker.vue | 1 + .../queries/updateStatus.mutation.graphql | 5 +- app/assets/javascripts/smart_interval.js | 27 +- .../javascripts/snippet/snippet_edit.js | 32 + .../javascripts/snippet/snippet_show.js | 19 + .../javascripts/snippets/components/edit.vue | 211 + .../snippets/components/{app.vue => show.vue} | 33 +- .../snippets/components/snippet_blob_edit.vue | 37 +- .../snippets/components/snippet_blob_view.vue | 55 +- .../components/snippet_description_edit.vue | 24 +- .../snippets/components/snippet_header.vue | 33 +- .../components/snippet_visibility_edit.vue | 60 +- app/assets/javascripts/snippets/constants.js | 9 +- .../fragments/snippetBase.fragment.graphql | 19 +- app/assets/javascripts/snippets/index.js | 22 +- .../javascripts/snippets/mixins/snippets.js | 39 + .../mutations/createSnippet.mutation.graphql | 8 + .../mutations/updateSnippet.mutation.graphql | 8 + .../queries/snippet.blob.query.graphql | 24 - .../components/edit_area.vue | 18 + .../components/edit_header.vue | 23 + .../components/invalid_content_message.vue | 29 + .../components/publish_toolbar.vue | 40 + .../components/saved_changes_message.vue | 78 + .../components/static_site_editor.vue | 95 + .../components/submit_changes_error.vue | 24 + .../static_site_editor/constants.js | 14 + .../javascripts/static_site_editor/index.js | 31 + .../services/generate_branch_name.js | 8 + .../services/load_source_content.js | 15 + .../services/submit_content_changes.js | 76 + .../static_site_editor/store/actions.js | 37 + .../static_site_editor/store/getters.js | 2 + .../store}/index.js | 24 +- .../store/mutation_types.js | 8 + .../static_site_editor/store/mutations.js | 36 + .../static_site_editor/store/state.js | 23 + app/assets/javascripts/tracking.js | 2 +- app/assets/javascripts/user_popovers.js | 5 +- .../components/deployment/deployment.vue | 2 +- .../deployment/deployment_action_button.vue | 8 +- .../components/mr_collapsible_extension.vue | 12 +- .../components/mr_widget_terraform_plan.vue | 152 + .../components/states/commits_header.vue | 12 +- .../components/states/mr_widget_merged.vue | 4 +- .../states/mr_widget_pipeline_tour.vue | 12 +- .../components/states/ready_to_merge.vue | 8 +- .../components/states/work_in_progress.vue | 8 +- .../mr_widget_options.vue | 23 +- .../stores/mr_widget_store.js | 1 + .../vue_shared/components/awards_list.vue | 178 + .../components/changed_file_icon.vue | 2 +- .../components/clipboard_button.vue | 8 +- .../vue_shared/components/clone_dropdown.vue | 89 + .../vue_shared/components/commit.vue | 4 +- .../content_viewer/content_viewer.vue | 1 + .../content_viewer/viewers/image_viewer.vue | 5 +- .../date_time_picker/date_time_picker.vue | 12 +- .../viewers/image_diff/swipe_viewer.vue | 4 +- .../components/droplab_dropdown_button.vue | 16 +- .../vue_shared/components/expand_button.vue | 12 +- .../vue_shared/components/file_icon.vue | 24 +- .../components/file_icon/file_icon_map.js | 2 +- .../vue_shared/components/file_row.vue | 7 +- .../vue_shared/components/file_row_header.vue | 2 +- .../components/filtered_search_dropdown.vue | 8 +- .../components/form/form_footer_actions.vue | 7 + .../vue_shared/components/form/title.vue | 15 + .../components/header_ci_component.vue | 8 +- .../components/issue/issue_warning.vue | 4 +- .../vue_shared/components/loading_button.vue | 2 +- .../components/local_storage_sync.vue | 39 + .../vue_shared/components/markdown/field.vue | 4 +- .../vue_shared/components/markdown/header.vue | 14 +- .../markdown/suggestion_diff_header.vue | 8 +- .../components/markdown/toolbar.vue | 2 +- .../components/modal_copy_button.vue | 8 +- .../components/notes/system_note.vue | 8 +- .../vue_shared/components/ordered_layout.vue | 12 + .../components/project_avatar/default.vue | 1 + .../project_selector/project_list_item.vue | 12 +- .../project_selector/project_selector.vue | 8 +- .../vue_shared/components/select2_select.vue | 2 +- .../components/sidebar/labels_select/base.vue | 4 +- .../sidebar/labels_select/dropdown_button.vue | 4 +- .../labels_select_vue/dropdown_button.vue | 8 +- .../dropdown_contents_create_view.vue | 27 +- .../dropdown_contents_labels_view.vue | 14 +- .../labels_select_vue/dropdown_title.vue | 8 +- .../labels_select_vue/labels_select_root.vue | 8 + .../labels_select_vue/store/actions.js | 2 +- .../components/sidebar/toggle_sidebar.vue | 2 +- .../components/smart_virtual_list.vue | 6 +- .../vue_shared/components/split_button.vue | 5 +- .../components/stacked_progress_bar.vue | 26 +- .../badges/gitlab_team_member_badge.vue | 27 + .../user_avatar/user_avatar_list.vue | 12 +- .../components/user_popover/user_popover.vue | 40 +- .../mixins/related_issuable_mixin.js | 4 +- .../stylesheets/bootstrap_migration.scss | 18 +- .../components/collapsible_card.scss | 9 + .../components/dashboard_skeleton.scss | 2 + .../stylesheets/components/popover.scss | 8 +- .../components/related_items_list.scss | 148 +- app/assets/stylesheets/framework/awards.scss | 4 +- app/assets/stylesheets/framework/blocks.scss | 10 +- .../framework/broadcast_messages.scss | 2 +- app/assets/stylesheets/framework/buttons.scss | 35 +- .../stylesheets/framework/calendar.scss | 2 +- app/assets/stylesheets/framework/common.scss | 46 +- .../framework/contextual_sidebar.scss | 6 +- .../stylesheets/framework/dropdowns.scss | 25 +- app/assets/stylesheets/framework/files.scss | 24 +- app/assets/stylesheets/framework/filters.scss | 18 +- app/assets/stylesheets/framework/forms.scss | 4 +- app/assets/stylesheets/framework/gfm.scss | 2 +- .../stylesheets/framework/gitlab_theme.scss | 43 +- app/assets/stylesheets/framework/header.scss | 31 +- .../stylesheets/framework/issue_box.scss | 2 +- app/assets/stylesheets/framework/job_log.scss | 2 +- app/assets/stylesheets/framework/layout.scss | 2 +- .../stylesheets/framework/markdown_area.scss | 2 +- .../stylesheets/framework/memory_graph.scss | 2 +- app/assets/stylesheets/framework/mixins.scss | 10 +- .../secondary_navigation_elements.scss | 12 +- app/assets/stylesheets/framework/selects.scss | 6 +- app/assets/stylesheets/framework/sidebar.scss | 21 +- .../framework/stacked_progress_bar.scss | 2 +- app/assets/stylesheets/framework/tables.scss | 6 +- app/assets/stylesheets/framework/tabs.scss | 2 +- .../stylesheets/framework/timeline.scss | 2 +- app/assets/stylesheets/framework/toggle.scss | 2 +- .../stylesheets/framework/typography.scss | 18 +- .../stylesheets/framework/variables.scss | 79 +- .../framework/variables_overrides.scss | 2 + app/assets/stylesheets/framework/zen.scss | 2 +- .../stylesheets/highlight/themes/none.scss | 14 +- .../stylesheets/highlight/white_base.scss | 2 +- .../mailers/highlighted_diff_email.scss | 2 +- app/assets/stylesheets/notify.scss | 8 +- .../page_bundles/_ide_monaco_overrides.scss | 4 +- app/assets/stylesheets/page_bundles/ide.scss | 24 +- .../stylesheets/page_bundles/xterm.scss | 6 +- app/assets/stylesheets/pages/boards.scss | 10 +- app/assets/stylesheets/pages/builds.scss | 62 +- app/assets/stylesheets/pages/clusters.scss | 6 +- app/assets/stylesheets/pages/commits.scss | 8 +- .../stylesheets/pages/cycle_analytics.scss | 4 - app/assets/stylesheets/pages/detail_page.scss | 4 + .../stylesheets/pages/dev_ops_score.scss | 2 +- app/assets/stylesheets/pages/diff.scss | 32 +- app/assets/stylesheets/pages/editor.scss | 4 + .../stylesheets/pages/environment_logs.scss | 58 + .../stylesheets/pages/environments.scss | 4 +- app/assets/stylesheets/pages/error_list.scss | 13 +- .../pages/experimental_separate_sign_up.scss | 4 +- app/assets/stylesheets/pages/graph.scss | 2 +- app/assets/stylesheets/pages/groups.scss | 37 +- app/assets/stylesheets/pages/issuable.scss | 20 +- app/assets/stylesheets/pages/issues.scss | 4 +- app/assets/stylesheets/pages/labels.scss | 6 +- app/assets/stylesheets/pages/login.scss | 4 +- .../stylesheets/pages/merge_conflicts.scss | 4 +- .../stylesheets/pages/merge_requests.scss | 8 +- app/assets/stylesheets/pages/milestone.scss | 4 +- app/assets/stylesheets/pages/note_form.scss | 12 +- app/assets/stylesheets/pages/notes.scss | 38 +- app/assets/stylesheets/pages/pipelines.scss | 12 +- app/assets/stylesheets/pages/profile.scss | 2 +- app/assets/stylesheets/pages/projects.scss | 12 +- app/assets/stylesheets/pages/prometheus.scss | 22 +- app/assets/stylesheets/pages/reports.scss | 9 - app/assets/stylesheets/pages/runners.scss | 2 +- app/assets/stylesheets/pages/search.scss | 2 +- app/assets/stylesheets/pages/settings.scss | 10 +- app/assets/stylesheets/pages/todos.scss | 2 +- app/assets/stylesheets/pages/tree.scss | 13 +- app/assets/stylesheets/pages/wiki.scss | 1 - app/assets/stylesheets/performance_bar.scss | 2 +- app/assets/stylesheets/snippets.scss | 4 +- app/assets/stylesheets/utilities.scss | 33 +- app/assets/stylesheets/vendors/atwho.scss | 2 +- app/assets/stylesheets/vendors/tribute.scss | 4 +- .../admin/application_settings_controller.rb | 14 +- .../authenticates_2fa_for_admin_mode.rb | 2 +- app/controllers/admin/dashboard_controller.rb | 4 + .../admin/integrations_controller.rb | 66 +- app/controllers/admin/projects_controller.rb | 5 + app/controllers/admin/runners_controller.rb | 10 +- .../admin/serverless/domains_controller.rb | 4 +- app/controllers/admin/services_controller.rb | 18 +- app/controllers/admin/sessions_controller.rb | 6 +- app/controllers/application_controller.rb | 6 +- app/controllers/boards/issues_controller.rb | 17 +- app/controllers/ci/lints_controller.rb | 10 - .../clusters/applications_controller.rb | 2 +- app/controllers/clusters/base_controller.rb | 4 + .../enforces_two_factor_authentication.rb | 8 +- .../concerns/integrations_actions.rb | 65 + app/controllers/concerns/sends_blob.rb | 14 +- app/controllers/concerns/snippets_actions.rb | 56 +- .../dashboard/projects_controller.rb | 16 +- .../explore/application_controller.rb | 2 +- .../explore/projects_controller.rb | 17 +- app/controllers/groups/boards_controller.rb | 1 + .../groups/group_members_controller.rb | 2 +- .../groups/milestones_controller.rb | 3 + .../registry/repositories_controller.rb | 15 +- .../groups/settings/ci_cd_controller.rb | 30 +- .../settings/integrations_controller.rb | 31 + app/controllers/groups_controller.rb | 40 +- app/controllers/help_controller.rb | 2 +- app/controllers/ide_controller.rb | 4 + app/controllers/import/gitea_controller.rb | 18 +- app/controllers/import/github_controller.rb | 10 +- .../import/gitlab_projects_controller.rb | 13 +- .../alerting/notifications_controller.rb | 8 +- .../projects/avatars_controller.rb | 2 +- app/controllers/projects/blob_controller.rb | 1 + app/controllers/projects/boards_controller.rb | 1 + .../projects/environments_controller.rb | 6 +- app/controllers/projects/forks_controller.rb | 19 +- .../projects/grafana_api_controller.rb | 13 +- .../projects/import/jira_controller.rb | 47 +- app/controllers/projects/issues_controller.rb | 34 +- app/controllers/projects/logs_controller.rb | 2 +- .../merge_requests/diffs_controller.rb | 8 +- .../projects/merge_requests_controller.rb | 9 +- .../projects/milestones_controller.rb | 3 + .../projects/mirrors_controller.rb | 1 + app/controllers/projects/pages_controller.rb | 2 +- .../projects/pages_domains_controller.rb | 8 +- .../projects/pipelines_controller.rb | 13 +- .../projects/prometheus/alerts_controller.rb | 145 + .../projects/prometheus/metrics_controller.rb | 97 +- app/controllers/projects/raw_controller.rb | 2 +- .../registry/repositories_controller.rb | 7 +- .../projects/releases/evidences_controller.rb | 38 + .../projects/releases_controller.rb | 15 +- .../projects/settings/ci_cd_controller.rb | 31 +- .../settings/integrations_controller.rb | 13 +- .../settings/operations_controller.rb | 19 + .../projects/snippets_controller.rb | 10 - .../projects/static_site_editor_controller.rb | 24 + app/controllers/projects/wikis_controller.rb | 2 +- app/controllers/projects_controller.rb | 4 + .../repositories/git_http_controller.rb | 18 +- app/controllers/snippets_controller.rb | 10 - app/controllers/users_controller.rb | 7 +- .../autocomplete/move_to_project_finder.rb | 5 +- app/finders/autocomplete/routes_finder.rb | 47 + app/finders/environments_finder.rb | 28 + app/finders/events_finder.rb | 9 +- app/finders/group_members_finder.rb | 18 +- app/finders/issuable_finder.rb | 381 +- app/finders/issuable_finder/params.rb | 287 + app/finders/issues_finder.rb | 86 +- app/finders/issues_finder/params.rb | 53 + app/finders/keys_finder.rb | 2 +- app/finders/license_template_finder.rb | 4 +- app/finders/merge_requests_finder.rb | 1 + .../metrics/dashboards/annotations_finder.rb | 42 + app/finders/projects_finder.rb | 31 +- app/finders/releases_finder.rb | 3 +- app/finders/template_finder.rb | 4 +- app/finders/users_finder.rb | 8 + app/graphql/gitlab_schema.rb | 16 +- .../concerns/mutations/resolves_issuable.rb | 10 +- app/graphql/mutations/jira_import/start.rb | 58 + .../resolvers/environments_resolver.rb | 6 + .../sentry_detailed_error_resolver.rb | 2 +- .../sentry_error_stack_trace_resolver.rb | 2 +- app/graphql/resolvers/issues_resolver.rb | 11 +- .../resolvers/merge_requests_resolver.rb | 20 +- .../resolvers/metrics/dashboard_resolver.rb | 21 + .../metrics/dashboards/annotation_resolver.rb | 28 + .../projects/jira_imports_resolver.rb | 23 + .../resolvers/projects/services_resolver.rb | 39 + app/graphql/types/base_field.rb | 31 +- app/graphql/types/commit_type.rb | 4 +- app/graphql/types/environment_type.rb | 7 + app/graphql/types/grafana_integration_type.rb | 4 +- app/graphql/types/group_type.rb | 6 + app/graphql/types/jira_import_type.rb | 19 + app/graphql/types/merge_request_type.rb | 7 +- app/graphql/types/metrics/dashboard_type.rb | 20 + .../metrics/dashboards/annotation_type.rb | 31 + app/graphql/types/mutation_type.rb | 1 + app/graphql/types/notes/note_type.rb | 3 + app/graphql/types/project_statistics_type.rb | 14 +- app/graphql/types/project_type.rb | 25 +- app/graphql/types/projects/service_type.rb | 29 + .../types/projects/service_type_enum.rb | 13 + .../projects/services/base_service_type.rb | 15 + .../projects/services/jira_service_type.rb | 18 + .../types/root_storage_statistics_type.rb | 12 +- app/graphql/types/snippet_type.rb | 10 + app/helpers/application_helper.rb | 1 + app/helpers/application_settings_helper.rb | 9 +- app/helpers/auth_helper.rb | 3 +- app/helpers/broadcast_messages_helper.rb | 4 +- app/helpers/ci_variables_helper.rb | 4 +- app/helpers/clusters_helper.rb | 17 + .../container_expiration_policies_helper.rb | 2 +- app/helpers/custom_metrics_helper.rb | 20 + app/helpers/environments_helper.rb | 14 +- app/helpers/events_helper.rb | 21 +- app/helpers/explore_helper.rb | 4 + app/helpers/gitlab_routing_helper.rb | 5 + app/helpers/groups_helper.rb | 18 +- app/helpers/issuables_helper.rb | 23 + app/helpers/milestones_helper.rb | 23 +- app/helpers/notifications_helper.rb | 4 + app/helpers/preferences_helper.rb | 34 +- app/helpers/projects_helper.rb | 6 +- app/helpers/releases_helper.rb | 7 +- app/helpers/services_helper.rb | 40 + app/helpers/snippets_helper.rb | 10 + app/helpers/submodule_helper.rb | 2 +- app/helpers/system_note_helper.rb | 3 +- app/helpers/user_callouts_helper.rb | 5 + app/mailers/emails/issues.rb | 14 + app/mailers/emails/pages_domains.rb | 11 + app/mailers/emails/projects.rb | 13 + app/mailers/previews/notify_preview.rb | 4 + .../alerting/project_alerting_setting.rb | 28 + app/models/application_setting.rb | 20 +- .../application_setting_implementation.rb | 3 + app/models/audit_event.rb | 27 +- app/models/award_emoji.rb | 2 +- app/models/blob.rb | 2 - app/models/ci/bridge.rb | 1 - app/models/ci/build.rb | 85 +- app/models/ci/build_dependencies.rb | 84 + app/models/ci/daily_report_result.rb | 22 + app/models/ci/group.rb | 11 +- app/models/ci/group_variable.rb | 4 +- app/models/ci/job_artifact.rb | 10 +- app/models/ci/job_variable.rb | 2 +- app/models/ci/legacy_stage.rb | 4 +- app/models/ci/pipeline.rb | 37 +- app/models/ci/pipeline_schedule_variable.rb | 2 +- app/models/ci/pipeline_variable.rb | 2 +- app/models/ci/processable.rb | 8 +- app/models/ci/runner.rb | 16 + app/models/ci/stage.rb | 4 +- app/models/ci/variable.rb | 4 +- app/models/clusters/applications/fluentd.rb | 101 + app/models/clusters/applications/ingress.rb | 31 +- .../clusters/applications/prometheus.rb | 12 +- app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/cluster.rb | 6 +- app/models/commit_status.rb | 17 +- app/models/concerns/alert_event_lifecycle.rb | 50 + app/models/concerns/bulk_insert_safe.rb | 39 +- app/models/concerns/ci/has_ref.rb | 2 +- app/models/concerns/ci/has_variable.rb | 36 + app/models/concerns/ci/maskable.rb | 25 + app/models/concerns/ci/new_has_variable.rb | 16 + app/models/concerns/ci/pipeline_delegator.rb | 20 - app/models/concerns/has_repository.rb | 31 +- app/models/concerns/has_status.rb | 4 +- .../concerns/has_unique_internal_users.rb | 51 + app/models/concerns/has_variable.rb | 34 - .../import_state/sidekiq_job_tracker.rb | 23 + app/models/concerns/issuable.rb | 21 +- app/models/concerns/maskable.rb | 23 - app/models/concerns/milestoneish.rb | 28 +- app/models/concerns/new_has_variable.rb | 14 - app/models/concerns/noteable.rb | 6 + .../concerns/notification_branch_selection.rb | 14 +- app/models/concerns/optionally_search.rb | 6 +- .../project_features_compatibility.rb | 4 + app/models/concerns/prometheus_adapter.rb | 2 - app/models/concerns/protected_ref_access.rb | 1 - .../select_for_project_authorization.rb | 3 - app/models/concerns/services/data_fields.rb | 26 + app/models/concerns/spammable.rb | 24 +- app/models/concerns/update_highest_role.rb | 38 + app/models/concerns/versioned_description.rb | 1 - app/models/concerns/where_composite.rb | 81 + app/models/container_expiration_policy.rb | 1 + app/models/container_registry/event.rb | 69 + app/models/container_repository.rb | 9 + app/models/deploy_token.rb | 4 +- app/models/deployment.rb | 25 +- app/models/diff_discussion.rb | 1 + app/models/diff_note_position.rb | 49 + app/models/environment.rb | 12 +- app/models/event.rb | 36 +- app/models/event_collection.rb | 9 +- app/models/global_milestone.rb | 2 +- app/models/group.rb | 22 +- app/models/group_group_link.rb | 2 + app/models/import_failure.rb | 7 + app/models/issue.rb | 24 +- app/models/jira_import_data.rb | 19 - app/models/jira_import_state.rb | 100 + app/models/label.rb | 7 +- app/models/label_note.rb | 29 +- app/models/lfs_objects_project.rb | 2 + app/models/member.rb | 19 +- app/models/members/group_member.rb | 1 + app/models/merge_request.rb | 60 +- app/models/merge_request_diff.rb | 61 +- app/models/metrics/dashboard/annotation.rb | 38 + app/models/milestone_note.rb | 34 +- app/models/namespace.rb | 7 +- app/models/note.rb | 3 +- app/models/notification_recipient.rb | 8 +- app/models/pages_domain.rb | 8 + .../prometheus_dashboard.rb | 32 +- .../prometheus_panel.rb | 6 +- app/models/personal_snippet.rb | 4 - app/models/project.rb | 113 +- app/models/project_feature.rb | 17 +- app/models/project_group_link.rb | 10 +- app/models/project_import_state.rb | 27 +- app/models/project_services/alerts_service.rb | 2 + app/models/project_services/bamboo_service.rb | 41 +- .../project_services/buildkite_service.rb | 8 +- .../chat_message/pipeline_message.rb | 15 +- .../chat_notification_service.rb | 15 +- app/models/project_services/data_fields.rb | 1 + .../project_services/discord_service.rb | 9 +- .../project_services/drone_ci_service.rb | 8 +- .../emails_on_push_service.rb | 2 +- .../project_services/hangouts_chat_service.rb | 2 +- .../project_services/issue_tracker_data.rb | 15 +- .../project_services/issue_tracker_service.rb | 2 +- app/models/project_services/jira_service.rb | 4 +- .../project_services/jira_tracker_data.rb | 15 +- .../microsoft_teams_service.rb | 2 +- .../project_services/open_project_service.rb | 18 + .../open_project_tracker_data.rb | 16 + .../pipelines_email_service.rb | 4 +- .../project_services/prometheus_service.rb | 29 +- .../project_services/teamcity_service.rb | 8 +- .../project_services/unify_circuit_service.rb | 2 +- app/models/project_setting.rb | 2 + app/models/project_snippet.rb | 4 - app/models/project_team.rb | 9 - app/models/project_wiki.rb | 20 +- app/models/prometheus_alert.rb | 4 +- app/models/prometheus_alert_event.rb | 43 + app/models/release.rb | 20 +- app/models/{ => releases}/evidence.rb | 6 +- app/models/remote_mirror.rb | 2 + app/models/resource_label_event.rb | 2 +- app/models/resource_milestone_event.rb | 10 +- app/models/route.rb | 4 +- .../self_managed_prometheus_alert_event.rb | 24 + app/models/service.rb | 107 +- app/models/snippet.rb | 34 +- app/models/snippet_repository.rb | 22 +- app/models/synthetic_note.rb | 50 + app/models/system_note_metadata.rb | 4 +- app/models/terraform.rb | 7 + app/models/terraform/state.rb | 38 + app/models/user.rb | 175 +- app/models/user_bot_type_enums.rb | 11 - app/models/user_callout_enums.rb | 3 +- app/models/user_canonical_email.rb | 8 + app/models/user_highest_role.rb | 2 + app/models/user_type_enums.rb | 6 +- app/models/users_statistics.rb | 78 +- app/models/wiki_page.rb | 60 +- app/models/wiki_page/meta.rb | 136 + app/models/wiki_page/slug.rb | 26 + app/models/x509_issuer.rb | 2 +- app/policies/base_policy.rb | 3 +- .../crud_policy_helpers.rb} | 6 +- app/policies/environment_policy.rb | 6 + app/policies/global_policy.rb | 7 + app/policies/group_policy.rb | 39 +- app/policies/issue_policy.rb | 2 +- .../metrics/dashboard/annotation_policy.rb | 9 + app/policies/note_policy.rb | 2 +- app/policies/project_policy.rb | 9 +- app/policies/release_policy.rb | 27 - app/policies/releases/evidence_policy.rb | 34 + app/policies/snippet_policy.rb | 4 - app/policies/wiki_page/meta_policy.rb | 5 + app/presenters/ci/pipeline_presenter.rb | 14 +- app/presenters/clusters/cluster_presenter.rb | 2 + app/presenters/commit_presenter.rb | 2 +- app/presenters/commit_status_presenter.rb | 4 +- app/presenters/issue_presenter.rb | 10 +- app/presenters/milestone_presenter.rb | 8 +- app/presenters/pages_domain_presenter.rb | 18 + app/presenters/project_presenter.rb | 12 + .../projects/prometheus/alert_presenter.rb | 2 +- app/presenters/release_presenter.rb | 5 +- app/presenters/releases/evidence_presenter.rb | 16 + app/presenters/snippet_presenter.rb | 8 + app/serializers/analytics_summary_entity.rb | 9 + app/serializers/build_details_entity.rb | 4 +- app/serializers/cluster_application_entity.rb | 4 + app/serializers/commit_entity.rb | 47 +- .../container_repository_entity.rb | 2 +- app/serializers/diff_file_entity.rb | 4 + app/serializers/diffs_entity.rb | 44 +- app/serializers/discussion_entity.rb | 16 + app/serializers/environment_entity.rb | 8 + app/serializers/issue_entity.rb | 3 +- app/serializers/merge_request_basic_entity.rb | 2 +- ...merge_request_poll_cached_widget_entity.rb | 2 +- app/serializers/merge_request_serializer.rb | 4 + .../merge_request_widget_entity.rb | 2 +- app/serializers/note_user_entity.rb | 2 + app/serializers/paginated_diff_entity.rb | 6 +- app/serializers/project_mirror_entity.rb | 4 +- app/serializers/prometheus_alert_entity.rb | 26 + .../prometheus_alert_serializer.rb | 5 + app/serializers/prometheus_metric_entity.rb | 16 + .../prometheus_metric_serializer.rb | 5 + app/serializers/route_entity.rb | 8 + app/serializers/route_serializer.rb | 5 + app/serializers/test_case_entity.rb | 13 + app/serializers/user_entity.rb | 8 +- app/services/audit_event_service.rb | 10 +- ...ntainer_registry_authentication_service.rb | 9 +- app/services/auto_merge/base_service.rb | 8 + .../merge_when_pipeline_succeeds_service.rb | 4 +- app/services/auto_merge_service.rb | 37 +- app/services/award_emojis/add_service.rb | 11 +- app/services/award_emojis/destroy_service.rb | 8 + app/services/boards/issues/list_service.rb | 2 +- .../ci/compare_reports_base_service.rb | 9 +- .../create_cross_project_pipeline_service.rb | 2 - .../ci/create_job_artifacts_service.rb | 1 + .../ci/daily_report_result_service.rb | 39 + .../create_pipeline_service.rb | 31 + .../atomic_processing_service.rb | 2 +- .../legacy_processing_service.rb | 13 +- .../clusters/applications/base_service.rb | 16 + .../check_upgrade_progress_service.rb | 71 + .../applications/prometheus_config_service.rb | 155 + .../prometheus_health_check_service.rb | 85 + .../applications/prometheus_update_service.rb | 35 + .../applications/schedule_update_service.rb | 38 + app/services/clusters/create_service.rb | 7 + .../management/create_project_service.rb | 87 + ..._management_project_permissions_service.rb | 54 + app/services/clusters/update_service.rb | 41 +- app/services/concerns/deploy_token_methods.rb | 14 + .../capture_diff_note_position_service.rb | 65 + .../capture_diff_note_positions_service.rb | 34 + app/services/emails/destroy_service.rb | 2 +- .../environments/auto_stop_service.rb | 2 +- app/services/event_create_service.rb | 15 + .../create_pipeline_service.rb | 29 - app/services/git/branch_push_service.rb | 2 + .../git/process_ref_changes_service.rb | 8 + .../groups/deploy_tokens/create_service.rb | 4 +- .../groups/deploy_tokens/destroy_service.rb | 13 + .../groups/import_export/export_service.rb | 20 +- .../groups/import_export/import_service.rb | 10 +- app/services/groups/transfer_service.rb | 22 +- app/services/issuable/bulk_update_service.rb | 2 +- .../issuable/clone/attributes_rewriter.rb | 2 +- app/services/issuable_base_service.rb | 4 +- app/services/issues/close_service.rb | 2 - app/services/issues/export_csv_service.rb | 77 + .../jira_import/start_import_service.rb | 81 + app/services/labels/promote_service.rb | 21 +- .../merge_requests/after_create_service.rb | 7 +- app/services/merge_requests/build_service.rb | 2 +- app/services/merge_requests/create_service.rb | 6 - .../merge_orchestration_service.rb | 40 + .../mergeability_check_service.rb | 7 + .../merge_requests/pushed_branches_service.rb | 32 + app/services/merge_requests/update_service.rb | 19 +- .../dashboard/annotations/create_service.rb | 80 + .../dashboard/annotations/delete_service.rb | 43 + .../metrics/dashboard/base_service.rb | 53 +- .../dashboard/clone_dashboard_service.rb | 109 +- ...service.rb => custom_dashboard_service.rb} | 2 +- .../dashboard/custom_metric_embed_service.rb | 47 +- .../dashboard/gitlab_alert_embed_service.rb | 75 + .../dashboard/grafana_metric_embed_service.rb | 3 +- .../dashboard/predefined_dashboard_service.rb | 1 + .../self_monitoring_dashboard_service.rb | 3 +- .../dashboard/system_dashboard_service.rb | 10 +- .../dashboard/transient_embed_service.rb | 40 + .../dashboard/update_dashboard_service.rb | 24 +- app/services/milestones/transfer_service.rb | 4 +- app/services/notes/create_service.rb | 99 +- app/services/notes/update_service.rb | 4 + .../notification_recipients/builder/base.rb | 7 +- .../builder/new_note.rb | 4 + app/services/notification_service.rb | 24 + ...obtain_lets_encrypt_certificate_service.rb | 29 +- .../pages_domains/retry_acme_order_service.rb | 21 + .../personal_access_tokens/create_service.rb | 31 + app/services/pod_logs/base_service.rb | 58 +- .../pod_logs/elasticsearch_service.rb | 36 +- app/services/pod_logs/kubernetes_service.rb | 59 +- .../projects/alerting/notify_service.rb | 6 +- .../cleanup_tags_service.rb | 40 +- .../container_repository/destroy_service.rb | 2 +- .../projects/deploy_tokens/create_service.rb | 4 +- .../projects/deploy_tokens/destroy_service.rb | 13 + .../hashed_storage/base_repository_service.rb | 8 +- .../hashed_storage/rollback_service.rb | 6 + .../projects/import_export/export_service.rb | 7 +- .../projects/lfs_pointers/lfs_list_service.rb | 4 +- .../projects/operations/update_service.rb | 18 + .../prometheus/alerts/alert_params.rb | 17 + .../alerts/create_events_service.rb | 75 + .../prometheus/alerts/create_service.rb | 15 + .../prometheus/alerts/destroy_service.rb | 13 + .../prometheus/alerts/notify_service.rb | 136 + .../prometheus/alerts/update_service.rb | 15 + .../prometheus/metrics/base_service.rb | 48 + .../prometheus/metrics/destroy_service.rb | 14 + .../prometheus/metrics/update_service.rb | 29 + .../update_repository_storage_service.rb | 7 + .../create_default_alerts_service.rb | 93 + app/services/prometheus/proxy_service.rb | 12 + .../proxy_variable_substitution_service.rb | 11 + ...nthetic_milestone_notes_builder_service.rb | 6 - .../resources/create_access_token_service.rb | 111 + app/services/search_service.rb | 26 +- app/services/snippets/create_service.rb | 67 +- app/services/snippets/update_service.rb | 62 +- app/services/tags/create_service.rb | 6 +- .../terraform/remote_state_handler.rb | 77 + app/services/users/build_service.rb | 14 +- .../users/update_canonical_email_service.rb | 56 + .../update_highest_member_role_service.rb | 29 + app/services/users/update_service.rb | 13 +- app/services/wiki_pages/base_service.rb | 52 +- app/services/wiki_pages/create_service.rb | 14 +- app/services/wiki_pages/destroy_service.rb | 14 +- app/services/wiki_pages/update_service.rb | 21 +- app/uploaders/file_uploader.rb | 2 +- app/uploaders/import_export_uploader.rb | 8 + app/uploaders/object_storage.rb | 4 +- app/uploaders/terraform/state_uploader.rb | 44 + app/validators/untrusted_regexp_validator.rb | 12 + .../_account_and_limit.html.haml | 9 + .../_issue_limits.html.haml | 9 + .../_protected_paths.html.haml | 2 +- .../application_settings/_registry.html.haml | 9 + .../_repository_storage.html.haml | 6 +- .../application_settings/general.html.haml | 21 + .../integrations.html.haml | 38 +- .../application_settings/network.html.haml | 13 +- app/views/admin/dashboard/index.html.haml | 2 +- app/views/admin/dashboard/stats.html.haml | 75 + app/views/admin/deploy_keys/index.html.haml | 2 +- app/views/admin/groups/_form.html.haml | 2 +- app/views/admin/groups/_group.html.haml | 4 +- app/views/admin/groups/index.html.haml | 2 +- app/views/admin/groups/show.html.haml | 11 +- app/views/admin/integrations/_form.html.haml | 12 - app/views/admin/integrations/edit.html.haml | 5 - app/views/admin/projects/show.html.haml | 2 +- app/views/admin/runners/show.html.haml | 2 +- .../admin/serverless/domains/_form.html.haml | 31 + app/views/admin/services/index.html.haml | 4 +- app/views/admin/users/_user.html.haml | 95 +- app/views/ci/lints/show.html.haml | 9 - app/views/ci/variables/_index.html.haml | 2 +- app/views/clusters/clusters/show.html.haml | 13 +- app/views/events/_event.html.haml | 4 +- app/views/events/event/_wiki.html.haml | 10 + app/views/groups/_activities.html.haml | 4 +- .../groups/_group_admin_settings.html.haml | 2 +- .../groups/_subgroups_and_projects.html.haml | 2 +- .../registry/repositories/index.html.haml | 29 +- app/views/groups/settings/_lfs.html.haml | 2 +- .../groups/settings/_permissions.html.haml | 1 + .../settings/integrations/index.html.haml | 9 + app/views/kaminari/gitlab/_gap.html.haml | 2 +- app/views/layouts/_head.html.haml | 2 +- app/views/layouts/_page.html.haml | 3 +- app/views/layouts/devise.html.haml | 6 +- app/views/layouts/devise_empty.html.haml | 5 +- .../header/_current_user_dropdown.html.haml | 1 + app/views/layouts/header/_default.html.haml | 3 +- app/views/layouts/nav/_breadcrumbs.html.haml | 2 +- app/views/layouts/nav/_dashboard.html.haml | 4 +- .../layouts/nav/sidebar/_admin.html.haml | 6 +- .../nav/sidebar/_analytics_links.html.haml | 7 +- .../layouts/nav/sidebar/_group.html.haml | 9 +- .../layouts/nav/sidebar/_profile.html.haml | 5 +- app/views/layouts/terms.html.haml | 2 +- app/views/notify/issues_csv_email.html.haml | 9 + app/views/notify/issues_csv_email.text.erb | 5 + ...ges_domain_auto_ssl_failed_email.html.haml | 11 + ...ges_domain_auto_ssl_failed_email.text.haml | 7 + .../prometheus_alert_fired_email.html.haml | 28 + .../prometheus_alert_fired_email.text.erb | 21 + app/views/profiles/emails/index.html.haml | 2 +- app/views/profiles/show.html.haml | 2 +- app/views/projects/_flash_messages.html.haml | 2 + app/views/projects/_home_panel.html.haml | 1 + app/views/projects/blob/_blob.html.haml | 4 +- app/views/projects/blob/_editor.html.haml | 2 +- .../blob/_pipeline_tour_success.html.haml | 4 +- app/views/projects/blob/new.html.haml | 2 +- app/views/projects/commits/_commits.html.haml | 9 +- app/views/projects/commits/show.html.haml | 3 +- .../projects/cycle_analytics/show.html.haml | 40 +- .../projects/deploy_keys/_index.html.haml | 2 +- .../projects/environments/show.html.haml | 141 +- app/views/projects/graphs/charts.html.haml | 2 +- app/views/projects/import/jira/show.html.haml | 52 +- app/views/projects/imports/show.html.haml | 2 +- app/views/projects/issues/_issue.html.haml | 1 + app/views/projects/issues/_nav_btns.html.haml | 7 +- .../issues/_related_branches.html.haml | 2 +- .../issues/export_csv/_button.html.haml | 4 + .../issues/export_csv/_modal.html.haml | 22 + .../issues/import_csv/_button.html.haml | 29 +- app/views/projects/issues/show.html.haml | 3 +- .../merge_requests/_awards_block.html.haml | 1 + .../merge_requests/_merge_request.html.haml | 5 +- .../projects/merge_requests/show.html.haml | 2 + .../mirrors/_authentication_method.html.haml | 2 - .../mirrors/_mirror_repos_push.html.haml | 7 + .../projects/mirrors/_ssh_host_keys.html.haml | 2 +- app/views/projects/network/show.html.haml | 3 +- app/views/projects/pages/_list.html.haml | 15 +- .../pages_domains/_certificate.html.haml | 2 +- .../_lets_encrypt_callout.html.haml | 23 +- .../prometheus/metrics/_form.html.haml | 4 + .../prometheus/metrics/edit.html.haml | 6 + .../projects/prometheus/metrics/new.html.haml | 6 + .../registry/repositories/index.html.haml | 37 +- .../projects/registry/settings/_index.haml | 5 +- .../serverless/functions/index.html.haml | 2 + app/views/projects/services/_form.html.haml | 11 +- app/views/projects/services/_index.html.haml | 2 +- .../projects/services/alerts/_help.html.haml | 4 +- app/views/projects/services/edit.html.haml | 2 +- .../_detailed_help.html.haml | 10 +- .../prometheus/_custom_metrics.html.haml | 30 + .../prometheus/_external_alerts.html.haml | 8 + .../services/prometheus/_help.html.haml | 6 +- .../services/prometheus/_metrics.html.haml | 2 + .../services/prometheus/_show.html.haml | 2 +- .../slack_slash_commands/_help.html.haml | 10 +- .../projects/settings/_general.html.haml | 2 + .../projects/settings/ci_cd/show.html.haml | 2 +- .../settings/operations/_prometheus.html.haml | 6 +- .../static_site_editor/show.html.haml | 1 + app/views/projects/wikis/_sidebar.html.haml | 5 +- app/views/shared/_event_filter.html.haml | 2 + app/views/shared/_file_highlight.html.haml | 2 +- .../_merge_request_pipeline_status.html.haml | 3 + .../_personal_access_tokens_form.html.haml | 6 +- app/views/shared/_service_settings.html.haml | 6 +- app/views/shared/boards/_show.html.haml | 6 + .../shared/boards/components/_board.html.haml | 5 +- .../shared/deploy_tokens/_form.html.haml | 7 +- .../shared/empty_states/_issues.html.haml | 6 +- app/views/shared/groups/_group.html.haml | 2 +- .../shared/icons/_dev_ops_score_no_data.svg | 1 - .../shared/icons/_dev_ops_score_no_index.svg | 3 - app/views/shared/integrations/_form.html.haml | 14 + .../integrations/_integrations.html.haml | 26 + app/views/shared/integrations/edit.html.haml | 5 + app/views/shared/issuable/_sidebar.html.haml | 2 +- .../shared/issuable/_sort_dropdown.html.haml | 3 +- .../issuable/form/_branch_chooser.html.haml | 2 +- .../shared/milestones/_issues_tab.html.haml | 5 + .../shared/milestones/_labels_tab.html.haml | 6 +- .../shared/milestones/_sidebar.html.haml | 8 +- app/views/shared/notes/_hints.html.haml | 2 +- .../_custom_notifications.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 4 + app/views/shared/runners/_form.html.haml | 11 + app/views/shared/snippets/_form.html.haml | 95 +- app/views/shared/snippets/_snippet.html.haml | 5 +- app/views/shared/snippets/show.js.haml | 4 +- app/views/shared/web_hooks/_index.html.haml | 2 +- app/views/users/show.html.haml | 2 +- app/views/users/terms/index.html.haml | 4 +- app/workers/all_queues.yml | 133 +- app/workers/background_migration_worker.rb | 3 +- app/workers/ci/daily_report_results_worker.rb | 16 + app/workers/cluster_update_app_worker.rb | 50 + .../cluster_wait_for_app_update_worker.rb | 16 + app/workers/concerns/cronjob_queue.rb | 10 + .../gitlab/jira_import/import_worker.rb | 35 + .../gitlab/jira_import/queue_options.rb | 16 + .../concerns/project_import_options.rb | 7 +- app/workers/concerns/waitable_worker.rb | 7 + app/workers/create_commit_signature_worker.rb | 13 +- app/workers/create_evidence_worker.rb | 2 +- app/workers/emails_on_push_worker.rb | 2 +- .../environments/auto_stop_cron_worker.rb | 2 - .../error_tracking_issue_link_worker.rb | 4 + app/workers/expire_pipeline_cache_worker.rb | 4 +- app/workers/export_csv_worker.rb | 21 + .../github_import/advance_stage_worker.rb | 8 +- app/workers/gitlab/import/advance_stage.rb | 2 +- .../jira_import/advance_stage_worker.rb | 30 + .../gitlab/jira_import/import_issue_worker.rb | 58 + .../jira_import/stage/finish_import_worker.rb | 18 + .../stage/import_attachments_worker.rb | 22 + .../jira_import/stage/import_issues_worker.rb | 29 + .../jira_import/stage/import_labels_worker.rb | 18 + .../jira_import/stage/import_notes_worker.rb | 22 + .../jira_import/stage/start_import_worker.rb | 44 + .../process_prometheus_alert_worker.rb | 88 + app/workers/irker_worker.rb | 2 +- .../namespaces/root_statistics_worker.rb | 3 +- .../namespaces/schedule_aggregation_worker.rb | 3 +- .../pages_domain_ssl_renewal_cron_worker.rb | 5 + app/workers/pipeline_success_worker.rb | 13 - app/workers/post_receive.rb | 6 +- .../project_daily_statistics_worker.rb | 1 + app/workers/project_export_worker.rb | 1 + .../create_default_alerts_worker.rb | 27 + app/workers/reactive_caching_worker.rb | 5 + app/workers/repository_check/batch_worker.rb | 4 +- .../single_repository_worker.rb | 4 +- .../update_external_pull_requests_worker.rb | 2 +- app/workers/update_highest_role_worker.rb | 25 + app/workers/users/create_statistics_worker.rb | 19 + bin/background_jobs | 2 +- bin/background_jobs_sk | 2 +- bin/background_jobs_sk_cluster | 2 +- bin/secpick | 43 +- config/application.rb | 16 +- config/feature_categories.yml | 15 +- config/gitlab.yml.example | 31 + config/initializers/1_settings.rb | 33 +- config/initializers/7_prometheus_metrics.rb | 4 + .../active_record_fix_insert_all.rb | 26 + .../active_record_schema_versions.rb | 5 + config/initializers/fill_shards.rb | 9 +- config/initializers/grape_validators.rb | 9 + config/initializers/lograge.rb | 4 + .../initializers/rails_host_authorization.rb | 5 + config/initializers/sidekiq_cluster.rb | 10 + config/locales/doorkeeper.en.yml | 2 + config/prometheus/common_metrics.yml | 10 + config/pseudonymizer.yml | 2 +- config/routes.rb | 63 +- config/routes/admin.rb | 4 +- config/routes/ci.rb | 5 - config/routes/group.rb | 9 + config/routes/issues.rb | 1 + config/routes/project.rb | 25 +- config/routes/repository.rb | 3 + config/routes/repository_scoped.rb | 6 + config/routes/sidekiq.rb | 3 +- config/sidekiq_queues.yml | 16 +- danger/changelog/Dangerfile | 34 +- danger/commit_messages/Dangerfile | 73 +- danger/database/Dangerfile | 4 +- danger/karma/Dangerfile | 1 + danger/roulette/Dangerfile | 45 +- danger/telemetry/Dangerfile | 27 +- db/fixtures/development/17_cycle_analytics.rb | 342 +- db/migrate/20171230123729_init_schema.rb | 1 + ...220145_add_pages_https_only_to_projects.rb | 2 +- .../20180116193854_create_lfs_file_locks.rb | 2 +- ..._include_private_contributions_to_users.rb | 2 +- ...d_pages_access_level_to_project_feature.rb | 4 + .../20180503131624_create_remote_mirrors.rb | 6 +- ...mirror_available_overridden_to_projects.rb | 2 +- ...0722103201_add_private_profile_to_users.rb | 2 +- ...0180814153625_add_commit_email_to_users.rb | 6 +- ...924190739_add_scheduled_at_to_ci_builds.rb | 2 +- ...0181016141739_add_status_to_deployments.rb | 6 +- .../20181019032408_add_repositories_table.rb | 2 +- ...add_encrypted_runners_token_to_projects.rb | 6 +- ...104854_add_token_encrypted_to_ci_builds.rb | 6 +- ...02526_add_project_bfg_object_map_column.rb | 6 +- ...tected_repository_languages_to_projects.rb | 2 +- ...d_merge_train_enabled_to_ci_cd_settings.rb | 2 + ..._variable_type_to_ci_pipeline_variables.rb | 6 +- ...1952_add_bridged_pipeline_id_to_bridges.rb | 2 +- ...80107_add_deployment_events_to_services.rb | 4 + ...90715215532_add_project_emails_disabled.rb | 2 +- ...104947_add_static_object_token_to_users.rb | 2 +- ...90820163320_add_first_last_name_to_user.rb | 2 + ...90911115056_add_projects_max_pages_size.rb | 2 +- ...1115207_add_projects_max_artifacts_size.rb | 2 +- .../20190912223232_add_role_to_users.rb | 2 +- ...d_pull_mirror_branch_prefix_to_projects.rb | 2 +- ...61031_add_mark_for_deletion_to_projects.rb | 2 + ...e_source_branch_after_merge_to_projects.rb | 2 +- ...3093207_add_comment_actions_to_services.rb | 4 + ...191115114032_add_processed_to_ci_builds.rb | 2 +- ...4630_add_resource_group_id_to_ci_builds.rb | 2 + ...d_suggestion_commit_message_to_projects.rb | 2 +- ...124940_add_scheduling_type_to_ci_builds.rb | 2 +- ...autoclose_referenced_issues_to_projects.rb | 2 +- ...00204131831_create_daily_report_results.rb | 22 + ...30_add_verification_columns_to_packages.rb | 13 + .../20200214025454_add_canonical_emails.rb | 26 + ...0215222507_drop_forked_project_links_fk.rb | 4 + ...5225103_drop_forked_project_links_table.rb | 2 + ...219135440_add_limit_metric_type_to_list.rb | 9 + db/migrate/20200302152516_add_wiki_slug.rb | 22 + ...thy_to_clusters_applications_prometheus.rb | 15 + db/migrate/20200304085423_add_user_type.rb | 4 +- ...add_unlock_membership_to_ldap_of_groups.rb | 19 + .../20200305200641_create_terraform_states.rb | 14 + ...20200310132654_add_instance_to_services.rb | 4 + ...311074438_migrate_bot_type_to_user_type.rb | 13 + .../20200311082301_add_user_state_index.rb | 21 + ...0311154110_create_vulnerability_exports.rb | 24 + ...modsecurity_mode_to_ingress_application.rb | 19 + ...0200312053852_populate_canonical_emails.rb | 35 + ...nd_template_and_type_and_id_to_services.rb | 18 + ..._add_index_on_mirror_and_id_to_projects.rb | 21 + .../20200313101649_fill_ghost_user_type.rb | 13 + ...rce_type_ldap_and_created_at_to_members.rb | 2 +- ...13202430_add_index_chat_name_service_id.rb | 17 + ...d_foreign_key_from_chat_name_to_service.rb | 16 + ...canned_resources_count_to_security_scan.rb | 16 + ...59_add_index_on_id_and_ldap_key_to_keys.rb | 18 + ...ndex_on_namespace_id_and_id_to_projects.rb | 19 + ...ulnerability_export_project_foreign_key.rb | 19 + ...user_highest_roles_table_index_to_users.rb | 24 + ...d_vulnerability_export_user_foreign_key.rb | 19 + ...0400_create_vulnerability_user_mentions.rb | 19 + ...0318152134_adds_sha256_to_package_files.rb | 9 + ...162148_add_external_key_to_issues_table.rb | 19 + ...d_index_on_external_key_to_issues_table.rb | 17 + ...8164448_add_external_key_to_epics_table.rb | 19 + ...dd_index_on_external_key_to_epics_table.rb | 17 + ...archived_and_pending_delete_to_projects.rb | 18 + ...0318183553_create_pypi_package_metadata.rb | 14 + ...00319123041_update_plan_limits_defaults.rb | 19 + ...27_create_metrics_dashboard_annotations.rb | 24 + ...9203901_add_index_on_users_unlock_token.rb | 18 + ...55_add_cost_factor_fileds_to_ci_runners.rb | 19 + ...add_letsencrypt_errors_to_pages_domains.rb | 20 + .../20200323071918_add_bio_to_user_details.rb | 17 + ...00323074147_add_temp_index_on_users_bio.rb | 18 + ...nal_access_token_lifetime_to_namespaces.rb | 19 + ...dex_on_user_and_created_at_to_ci_builds.rb | 19 + ...9_add_api_indexes_for_archived_projects.rb | 27 + ...tor_id_and_created_at_to_projects_table.rb | 18 + ...rage_size_limit_to_application_settings.rb | 16 + ...5_add_push_rules_id_to_project_settings.rb | 19 + ...h_rules_foreign_key_to_project_settings.rb | 18 + ...d_push_rules_id_to_application_settings.rb | 19 + ...les_foreign_key_to_application_settings.rb | 18 + ...es_create_limit_to_application_settings.rb | 9 + ...x_on_name_type_eq_ci_build_to_ci_builds.rb | 21 + ...636_add_api_index_for_internal_projects.rb | 21 + ...0200326114443_create_jira_imports_table.rb | 29 + ...200326122700_create_diff_note_positions.rb | 31 + ...3_add_projects_fk_to_jira_imports_table.rb | 19 + ...4443_add_users_fk_to_jira_imports_table.rb | 19 + ...dd_users_fk_index_on_jira_imports_table.rb | 17 + ...443_add_labels_fk_to_jira_imports_table.rb | 19 + ...d_labels_fk_index_on_jira_imports_table.rb | 17 + ...4719_add_index_for_group_vsm_usage_ping.rb | 18 + ...000_add_confidential_attribute_to_epics.rb | 17 + ...lds_on_name_for_security_reports_values.rb | 22 + ...uthor_id_and_created_at_and_id_to_notes.rb | 19 + ...ect_compliance_framework_settings_table.rb | 22 + ...istoric_entries_to_application_settings.rb | 22 + ...ontainer_expiration_policies_by_default.rb | 19 + ...5430_add_jsonb_to_geo_node_status_table.rb | 14 + ...0401211005_create_operations_user_lists.rb | 18 + ...02123926_add_line_metrics_to_mr_metrics.rb | 21 + ..._correlation_id_to_project_import_state.rb | 19 + ...d_delete_status_to_container_repository.rb | 13 + ...44_create_clusters_applications_fluentd.rb | 18 + ...partial_index_on_id_to_ci_job_artifacts.rb | 18 + ..._add_partial_index_on_id_to_lfs_objects.rb | 18 + ...5422_add_partial_index_on_id_to_uploads.rb | 18 + ...eployments_where_cluster_id_is_not_null.rb | 17 + ...created_at_on_resource_milestone_events.rb | 19 + ...059_add_write_registry_to_deploy_tokens.rb | 17 + ...200407120000_add_push_rule_id_to_groups.rb | 19 + ...321_add_push_rule_foreign_key_to_groups.rb | 18 + ...reate_access_levels_user_id_foreign_key.rb | 34 + ...reate_access_levels_user_id_foreign_key.rb | 16 + ...8133211_add_index_on_route_path_trigram.rb | 18 + ..._index_on_creator_id_and_id_on_projects.rb | 17 + ...merge_access_levels_user_id_foreign_key.rb | 34 + ...merge_access_levels_user_id_foreign_key.rb | 16 + ...4411_add_path_locks_user_id_foreign_key.rb | 34 + ...validate_path_locks_user_id_foreign_key.rb | 16 + ..._push_access_levels_user_id_foreign_key.rb | 34 + ..._push_access_levels_user_id_foreign_key.rb | 16 + ...d_u2f_registrations_user_id_foreign_key.rb | 34 + ...e_u2f_registrations_user_id_foreign_key.rb | 16 + ...ator_id_created_at_id_to_projects_table.rb | 17 + ...status_page_url_to_status_page_settings.rb | 18 + ...al_index_on_import_failures_retry_count.rb | 17 + ...shboard_access_level_to_project_feature.rb | 19 + ...anch_protection_to_application_settings.rb | 19 + ...creator_id_and_created_at_from_projects.rb | 18 + ..._remove_not_null_lfs_objects_constraint.rb | 19 + ...ve_not_null_ci_job_artifacts_constraint.rb | 19 + ...1206_remove_not_null_uploads_constraint.rb | 19 + ...x_keep_to_container_expiration_policies.rb | 21 + ...16120128_add_columns_to_terraform_state.rb | 17 + ..._user_id_foreign_key_to_terraform_state.rb | 19 + .../20190424134256_drop_projects_ci_id.rb | 2 +- ...0190511144331_remove_users_support_type.rb | 2 +- ...quire_code_owner_approval_from_projects.rb | 2 +- ...52620_readd_template_column_to_services.rb | 2 + ...fix_projects_without_prometheus_service.rb | 27 + ...6124757_remove_health_status_from_epics.rb | 19 + ...edule_populate_user_highest_roles_table.rb | 37 + ...200313203550_remove_orphaned_chat_names.rb | 13 + ...e_foreign_key_from_chat_name_to_service.rb | 14 + ...emaining_link_lfs_objects_projects_jobs.rb | 15 + ...3011225_complete_migrate_security_scans.rb | 13 + ...55_remove_index_used_for_scan_migration.rb | 24 + ...gger_background_migration_for_users_bio.rb | 31 + ...dule_backfill_push_rules_id_in_projects.rb | 39 + ...ll_deployment_clusters_from_deployments.rb | 34 + ...93427_add_index_to_issues_health_status.rb | 23 + ...94005_drop_vulnerability_severity_index.rb | 18 + ...923_drop_vulnerabilities_severity_index.rb | 18 + ...dd_nginx_five_hundred_percentage_metric.rb | 13 + ...200409211607_migrate_legacy_attachments.rb | 30 + db/schema.rb | 5207 +--- db/structure.sql | 13217 ++++++++ .../.github/workflows/check_changelog.yml | 10 - derailed-benchmarks/.gitignore | 8 - derailed-benchmarks/.gitlab-ci.yml | 56 - derailed-benchmarks/.travis.yml | 18 - derailed-benchmarks/Appraisals | 26 - derailed-benchmarks/CHANGELOG.md | 105 - derailed-benchmarks/Gemfile | 9 - derailed-benchmarks/README.md | 692 - derailed-benchmarks/Rakefile | 29 - derailed-benchmarks/bin/derailed | 93 - .../derailed_benchmarks.gemspec | 39 - derailed-benchmarks/gemfiles/.bundle/config | 2 - .../gemfiles/rails_5_1.gemfile | 15 - .../gemfiles/rails_5_2.gemfile | 15 - .../gemfiles/rails_6_0.gemfile | 15 - .../gemfiles/rails_git.gemfile | 19 - .../lib/derailed_benchmarks.rb | 51 - .../lib/derailed_benchmarks/auth_helper.rb | 34 - .../auth_helpers/devise.rb | 41 - .../core_ext/kernel_require.rb | 88 - .../lib/derailed_benchmarks/load_tasks.rb | 145 - .../lib/derailed_benchmarks/require_tree.rb | 65 - .../lib/derailed_benchmarks/stats_from_dir.rb | 128 - .../lib/derailed_benchmarks/stats_in_file.rb | 60 - .../lib/derailed_benchmarks/tasks.rb | 292 - .../lib/derailed_benchmarks/version.rb | 5 - .../core_ext/kernel_require_test.rb | 33 - .../derailed_benchmarks/require_tree_test.rb | 95 - .../stats_from_dir_test.rb | 125 - derailed-benchmarks/test/derailed_test.rb | 14 - .../test/fixtures/require/child_one.rb | 4 - .../test/fixtures/require/child_two.rb | 9 - .../test/fixtures/require/parent_one.rb | 8 - .../test/fixtures/require/raise_child.rb | 6 - .../test/fixtures/require/relative_child.rb | 4 - .../fixtures/require/relative_child_two.rb | 4 - .../stats/significant/loser.bench.txt | 100 - .../stats/significant/winner.bench.txt | 100 - .../test/integration/tasks_test.rb | 132 - derailed-benchmarks/test/rails_app/Rakefile | 9 - .../rails_app/app/assets/config/manifest.js | 0 .../app/assets/javascripts/authenticated.js | 2 - .../app/assets/stylesheets/authenticated.css | 4 - .../app/controllers/application_controller.rb | 17 - .../controllers/authenticated_controller.rb | 8 - .../app/controllers/pages_controller.rb | 14 - .../app/helpers/application_helper.rb | 4 - .../app/helpers/authenticated_helper.rb | 4 - .../test/rails_app/app/models/user.rb | 13 - .../app/views/authenticated/index.html.erb | 1 - .../app/views/layouts/application.html.erb | 14 - .../rails_app/app/views/pages/index.html.erb | 1 - derailed-benchmarks/test/rails_app/config.ru | 6 - .../test/rails_app/config/application.rb | 52 - .../test/rails_app/config/boot.rb | 12 - .../test/rails_app/config/database.yml | 22 - .../test/rails_app/config/environment.rb | 11 - .../config/environments/development.rb | 27 - .../config/environments/production.rb | 51 - .../rails_app/config/environments/test.rb | 37 - .../initializers/backtrace_silencers.rb | 9 - .../rails_app/config/initializers/devise.rb | 258 - .../config/initializers/inflections.rb | 12 - .../config/initializers/mime_types.rb | 7 - .../config/initializers/secret_token.rb | 13 - .../config/initializers/session_store.rb | 10 - .../rails_app/config/locales/devise.en.yml | 59 - .../test/rails_app/config/locales/en.yml | 9 - .../test/rails_app/config/locales/es.yml | 10 - .../test/rails_app/config/routes.rb | 67 - .../20141210070547_devise_create_users.rb | 45 - .../test/rails_app/db/schema.rb | 35 - derailed-benchmarks/test/rails_app/perf.rake | 10 - .../test/rails_app/public/404.html | 26 - .../test/rails_app/public/422.html | 26 - .../test/rails_app/public/500.html | 26 - .../test/rails_app/public/favicon.ico | 0 .../public/javascripts/application.js | 2 - .../rails_app/public/javascripts/controls.js | 965 - .../rails_app/public/javascripts/dragdrop.js | 974 - .../rails_app/public/javascripts/effects.js | 1123 - .../rails_app/public/javascripts/prototype.js | 6001 ---- .../rails_app/public/javascripts/rails.js | 202 - .../rails_app/public/stylesheets/.gitkeep | 0 .../test/rails_app/script/rails | 8 - .../test/support/integration_case.rb | 7 - derailed-benchmarks/test/test_helper.rb | 65 - doc/.vale/gitlab/Repetition.yml | 9 + doc/.vale/gitlab/Spelling.yml | 14 + doc/.vale/gitlab/Substitutions.yml | 5 +- doc/.vale/gitlab/VersionText.yml | 21 + doc/.vale/gitlab/spelling-exceptions.txt | 396 + doc/README.md | 11 +- doc/administration/audit_events.md | 3 +- doc/administration/auth/cognito.md | 8 +- .../how_to_configure_ldap_gitlab_ce/index.md | 2 +- .../how_to_configure_ldap_gitlab_ee/index.md | 2 +- doc/administration/auth/ldap-ee.md | 218 +- .../auth/ldap-troubleshooting.md | 651 + doc/administration/auth/ldap.md | 74 +- doc/administration/auth/oidc.md | 2 +- doc/administration/auth/smartcard.md | 29 +- doc/administration/availability/index.md | 139 + doc/administration/file_hooks.md | 26 +- .../background_verification.md | 14 +- .../disaster_recovery/bring_primary_back.md | 17 +- .../geo/disaster_recovery/index.md | 29 +- .../geo/disaster_recovery/planned_failover.md | 32 +- .../geo/replication/configuration.md | 28 +- .../geo/replication/database.md | 13 +- .../geo/replication/datatypes.md | 113 +- .../geo/replication/docker_registry.md | 6 +- .../geo/replication/external_database.md | 43 +- .../geo/replication/high_availability.md | 19 +- .../replication/img/geo_node_dashboard.png | Bin 26266 -> 48528 bytes doc/administration/geo/replication/index.md | 3 +- .../geo/replication/object_storage.md | 4 +- .../geo/replication/security_review.md | 2 +- .../geo/replication/troubleshooting.md | 51 +- .../geo/replication/using_a_geo_server.md | 4 +- .../replication/version_specific_updates.md | 15 +- doc/administration/git_annex.md | 2 +- .../img/praefect_architecture_v12_10.png | Bin 0 -> 29067 bytes .../img/praefect_architecture_v12_9.png | Bin 44098 -> 0 bytes .../gitaly/img/praefect_storage_v12_10.png | Bin 0 -> 59531 bytes doc/administration/gitaly/index.md | 11 +- doc/administration/gitaly/praefect.md | 283 +- .../high_availability/README.md | 292 +- .../high_availability/database.md | 67 +- .../high_availability/gitaly.md | 4 +- .../high_availability/gitlab.md | 16 +- .../high_availability/monitoring_node.md | 2 +- doc/administration/high_availability/nfs.md | 119 +- .../nfs_host_client_setup.md | 3 +- .../high_availability/object_storage.md | 31 +- .../high_availability/pgbouncer.md | 10 +- doc/administration/high_availability/redis.md | 64 +- .../high_availability/redis_source.md | 16 +- .../high_availability/sidekiq.md | 186 + .../img/repository_storages_admin_ui.png | Bin 20897 -> 0 bytes .../repository_storages_admin_ui_v12_10.png | Bin 0 -> 23718 bytes doc/administration/index.md | 7 +- doc/administration/instance_limits.md | 95 +- doc/administration/integration/plantuml.md | 10 +- doc/administration/integration/terminal.md | 15 +- doc/administration/job_artifacts.md | 113 +- doc/administration/job_logs.md | 2 +- doc/administration/lfs/index.md | 275 + doc/administration/lfs/lfs_administration.md | 272 +- .../lfs/manage_large_binaries_with_git_lfs.md | 265 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 255 +- doc/administration/logs.md | 90 +- doc/administration/merge_request_diffs.md | 4 +- .../monitoring/github_imports.md | 4 +- .../gitlab_self_monitoring_project/index.md | 5 +- doc/administration/monitoring/ip_whitelist.md | 15 +- .../performance/grafana_configuration.md | 22 +- .../monitoring/performance/index.md | 5 +- .../performance/influxdb_configuration.md | 35 +- .../monitoring/performance/performance_bar.md | 9 +- .../monitoring/prometheus/gitlab_metrics.md | 42 +- .../monitoring/prometheus/index.md | 51 +- .../monitoring/prometheus/node_exporter.md | 12 +- .../prometheus/pgbouncer_exporter.md | 18 +- .../monitoring/prometheus/redis_exporter.md | 20 +- doc/administration/object_storage.md | 150 + .../operations/extra_sidekiq_processes.md | 64 +- .../operations/fast_ssh_key_lookup.md | 19 +- doc/administration/operations/index.md | 2 +- .../operations/moving_repositories.md | 2 +- doc/administration/operations/puma.md | 2 +- .../operations/ssh_certificates.md | 2 +- doc/administration/operations/unicorn.md | 2 +- .../packages/container_registry.md | 73 +- .../packages/dependency_proxy.md | 6 +- doc/administration/packages/index.md | 10 +- doc/administration/pages/index.md | 61 +- doc/administration/pages/source.md | 40 +- doc/administration/pseudonymizer.md | 2 + doc/administration/raketasks/check.md | 4 +- doc/administration/raketasks/geo.md | 2 +- doc/administration/raketasks/github_import.md | 2 +- doc/administration/raketasks/ldap.md | 2 +- doc/administration/raketasks/maintenance.md | 9 +- doc/administration/raketasks/praefect.md | 22 + doc/administration/raketasks/storage.md | 4 +- .../raketasks/uploads/migrate.md | 42 +- .../raketasks/uploads/sanitize.md | 6 +- .../reply_by_email_postfix_setup.md | 4 +- doc/administration/repository_checks.md | 6 +- .../repository_storage_paths.md | 18 +- .../repository_storage_types.md | 60 +- doc/administration/restart_gitlab.md | 6 +- doc/administration/scaling/index.md | 256 + doc/administration/server_hooks.md | 4 + doc/administration/terraform_state.md | 137 + doc/administration/timezone.md | 2 +- doc/administration/troubleshooting/debug.md | 119 +- .../troubleshooting/diagnostics_tools.md | 4 +- .../troubleshooting/elasticsearch.md | 8 +- .../gitlab_rails_cheat_sheet.md | 239 +- .../troubleshooting/group_saml_scim.md | 18 + .../img/AzureAD-scim_attribute_mapping.png | Bin 34642 -> 11981 bytes .../troubleshooting/img/Okta-SAMLsetup.png | Bin 0 -> 18920 bytes .../img/Okta-advancedsettings.png | Bin 0 -> 15614 bytes .../troubleshooting/img/Okta-attributes.png | Bin 0 -> 5540 bytes .../troubleshooting/img/Okta-linkscert.png | Bin 0 -> 58832 bytes .../troubleshooting/kubernetes_cheat_sheet.md | 8 +- .../troubleshooting/linux_cheat_sheet.md | 8 +- .../troubleshooting/log_parsing.md | 152 + .../navigating_gitlab_via_rails_console.md | 469 + .../troubleshooting/postgresql.md | 8 +- doc/administration/troubleshooting/sidekiq.md | 42 +- doc/administration/troubleshooting/ssl.md | 39 +- doc/administration/uploads.md | 10 +- doc/api/README.md | 27 +- doc/api/access_requests.md | 1 + doc/api/api_resources.md | 11 +- doc/api/commits.md | 28 +- doc/api/container_registry.md | 4 +- doc/api/dependency_proxy.md | 21 + doc/api/deploy_tokens.md | 16 +- doc/api/deployments.md | 2 + doc/api/discussions.md | 51 +- doc/api/epic_links.md | 10 +- doc/api/epics.md | 21 +- doc/api/graphql/getting_started.md | 2 +- doc/api/graphql/index.md | 12 +- .../graphql/reference/gitlab_schema.graphql | 1107 +- doc/api/graphql/reference/gitlab_schema.json | 3162 +- doc/api/graphql/reference/index.md | 201 +- doc/api/group_activity_analytics.md | 32 +- doc/api/group_badges.md | 5 +- doc/api/group_clusters.md | 4 +- doc/api/group_import_export.md | 2 + doc/api/group_labels.md | 4 +- doc/api/group_level_variables.md | 4 +- doc/api/groups.md | 85 +- doc/api/issues.md | 73 +- doc/api/issues_statistics.md | 6 +- doc/api/jobs.md | 16 +- doc/api/labels.md | 6 +- doc/api/markdown.md | 4 +- doc/api/merge_request_approvals.md | 16 +- doc/api/merge_request_context_commits.md | 4 +- doc/api/merge_requests.md | 31 +- doc/api/metrics_dashboard_annotations.md | 51 + doc/api/notes.md | 12 +- doc/api/oauth2.md | 6 +- doc/api/packages.md | 74 +- doc/api/pages.md | 2 +- doc/api/pages_domains.md | 2 +- doc/api/pipelines.md | 17 +- doc/api/project_badges.md | 3 +- doc/api/project_clusters.md | 1 + doc/api/project_import_export.md | 30 +- doc/api/project_snippets.md | 4 +- doc/api/project_templates.md | 2 +- doc/api/project_vulnerabilities.md | 215 + doc/api/projects.md | 60 +- doc/api/releases/index.md | 27 + doc/api/releases/links.md | 2 +- doc/api/repository_files.md | 2 +- doc/api/runners.md | 78 +- doc/api/search.md | 17 +- doc/api/services.md | 4 +- doc/api/settings.md | 8 +- doc/api/templates/dockerfiles.md | 4 + doc/api/templates/gitlab_ci_ymls.md | 8 +- doc/api/todos.md | 4 +- doc/api/users.md | 5 +- doc/api/v3_to_v4.md | 6 +- doc/api/vulnerabilities.md | 223 +- doc/api/vulnerability_exports.md | 138 + doc/ci/README.md | 9 +- doc/ci/autodeploy/index.md | 4 +- doc/ci/autodeploy/quick_start_guide.md | 4 +- doc/ci/caching/index.md | 36 +- .../bitbucket_integration.md | 4 +- doc/ci/ci_cd_for_external_repos/index.md | 15 +- doc/ci/cloud_deployment/index.md | 16 +- doc/ci/directed_acyclic_graph/index.md | 2 +- doc/ci/docker/using_docker_build.md | 77 +- doc/ci/docker/using_docker_images.md | 52 +- doc/ci/docker/using_kaniko.md | 3 +- doc/ci/enable_or_disable_ci.md | 2 +- doc/ci/environments.md | 27 + doc/ci/examples/README.md | 39 +- .../examples/artifactory_and_gitlab/index.md | 6 +- .../img/vault-read-secrets-production.png | Bin 0 -> 326852 bytes .../img/vault-read-secrets-staging.png | Bin 0 -> 400945 bytes .../index.md | 215 + doc/ci/examples/deployment/README.md | 2 +- .../deployment/composer-npm-deploy.md | 2 +- .../end_to_end_testing_webdriverio/index.md | 2 +- .../laravel_with_gitlab_and_envoy/index.md | 6 +- doc/ci/examples/php.md | 13 +- ...t-and-deploy-ruby-application-to-heroku.md | 2 +- doc/ci/examples/test-scala-application.md | 2 +- .../index.md | 4 +- doc/ci/git_submodules.md | 12 +- doc/ci/img/ecs_dashboard_v12_9.png | Bin 109395 -> 39298 bytes doc/ci/introduction/index.md | 2 +- doc/ci/jenkins/index.md | 6 +- doc/ci/junit_test_reports.md | 36 +- doc/ci/merge_request_pipelines/index.md | 144 +- .../img/merged_result_pipeline_v12_3.png | Bin 7734 -> 0 bytes .../pipelines_for_merged_results/index.md | 93 +- ...ediate_merge_confirmation_dialog_v12_6.png | Bin 23747 -> 0 bytes .../img/merge_train_immediate_merge_v12_6.png | Bin 24056 -> 18607 bytes .../merge_trains/index.md | 195 +- doc/ci/metrics_reports.md | 3 +- doc/ci/multi_project_pipelines.md | 8 +- doc/ci/parent_child_pipelines.md | 9 +- doc/ci/pipelines/img/job_group_v12_10.png | Bin 0 -> 5436 bytes doc/ci/pipelines/index.md | 768 +- doc/ci/pipelines/job_artifacts.md | 12 +- doc/ci/pipelines/pipeline_architectures.md | 4 +- doc/ci/pipelines/schedules.md | 2 +- doc/ci/pipelines/settings.md | 6 +- doc/ci/quick_start/README.md | 15 +- doc/ci/review_apps/index.md | 16 +- doc/ci/runners/README.md | 33 +- doc/ci/services/docker-services.md | 2 + doc/ci/services/postgres.md | 9 +- doc/ci/ssh_keys/README.md | 8 +- doc/ci/triggers/README.md | 39 +- doc/ci/variables/README.md | 118 +- doc/ci/variables/predefined_variables.md | 65 +- doc/ci/yaml/README.md | 122 +- doc/development/README.md | 16 +- doc/development/api_graphql_styleguide.md | 164 +- doc/development/api_styleguide.md | 74 +- doc/development/application_limits.md | 59 +- doc/development/architecture.md | 546 +- doc/development/auto_devops.md | 6 +- doc/development/changelog.md | 34 +- doc/development/chatops_on_gitlabcom.md | 4 +- doc/development/code_review.md | 109 +- .../contributing/issue_workflow.md | 76 +- .../contributing/merge_request_workflow.md | 26 +- doc/development/contributing/style_guides.md | 2 +- doc/development/dangerbot.md | 4 +- doc/development/database_debugging.md | 4 +- doc/development/database_review.md | 17 +- doc/development/diffs.md | 2 +- doc/development/distributed_tracing.md | 34 +- doc/development/documentation/index.md | 66 +- .../site_architecture/global_nav.md | 2 +- .../documentation/site_architecture/index.md | 48 +- .../site_architecture/release_process.md | 18 +- doc/development/documentation/structure.md | 12 +- doc/development/documentation/styleguide.md | 272 +- doc/development/documentation/workflow.md | 16 +- doc/development/ee_features.md | 17 +- doc/development/elasticsearch.md | 27 +- doc/development/emails.md | 2 +- doc/development/experiment_guide/index.md | 6 +- .../fe_guide/development_process.md | 4 +- doc/development/fe_guide/droplab/droplab.md | 6 +- doc/development/fe_guide/frontend_faq.md | 2 +- doc/development/fe_guide/graphql.md | 54 +- doc/development/fe_guide/index.md | 2 +- doc/development/fe_guide/style/index.md | 2 +- doc/development/fe_guide/style/scss.md | 4 +- doc/development/fe_guide/style/vue.md | 22 +- doc/development/fe_guide/tooling.md | 16 +- doc/development/fe_guide/vue.md | 2 +- doc/development/fe_guide/vuex.md | 95 +- doc/development/feature_flags/controls.md | 24 +- doc/development/feature_flags/development.md | 12 +- doc/development/file_storage.md | 17 +- doc/development/filtering_by_label.md | 2 +- doc/development/foreign_keys.md | 10 + doc/development/geo.md | 12 +- doc/development/geo/framework.md | 2 +- doc/development/gitaly.md | 18 +- doc/development/go_guide/index.md | 39 +- doc/development/gotchas.md | 2 +- doc/development/i18n/externalization.md | 73 +- doc/development/i18n/index.md | 4 +- doc/development/i18n/merging_translations.md | 22 +- doc/development/i18n/proofreader.md | 87 +- doc/development/i18n/translation.md | 14 +- .../img/architecture_simplified.png | Bin 36325 -> 21239 bytes doc/development/import_export.md | 4 +- doc/development/import_project.md | 10 +- .../insert_into_tables_in_batches.md | 7 +- doc/development/instrumentation.md | 2 +- doc/development/integrations/jenkins.md | 94 + doc/development/integrations/jira_connect.md | 2 +- doc/development/integrations/secure.md | 41 +- .../secure_partner_integration.md | 36 +- doc/development/interacting_components.md | 4 +- doc/development/internal_api.md | 36 +- doc/development/lfs.md | 15 +- doc/development/licensing.md | 56 +- doc/development/logging.md | 8 + .../merge_request_performance_guidelines.md | 8 +- doc/development/migration_style_guide.md | 89 +- .../new_fe_guide/development/accessibility.md | 2 +- .../new_fe_guide/development/components.md | 2 +- doc/development/new_fe_guide/tips.md | 4 +- doc/development/omnibus.md | 2 +- doc/development/packages.md | 2 + doc/development/performance.md | 85 +- doc/development/pipelines.md | 33 +- doc/development/prometheus.md | 43 + doc/development/rake_tasks.md | 18 +- doc/development/refactoring_guide/index.md | 77 + doc/development/reusing_abstractions.md | 2 + doc/development/routing.md | 10 +- doc/development/scalability.md | 4 +- doc/development/secure_coding_guidelines.md | 306 + doc/development/shell_commands.md | 10 +- doc/development/sidekiq_style_guide.md | 6 +- .../testing_guide/best_practices.md | 33 +- doc/development/testing_guide/ci.md | 11 +- .../end_to_end/best_practices.md | 116 +- .../testing_guide/end_to_end/feature_flags.md | 6 +- .../testing_guide/end_to_end/index.md | 70 +- .../end_to_end/quick_start_guide.md | 21 +- .../end_to_end/rspec_metadata_tests.md | 1 + doc/development/testing_guide/flaky_tests.md | 11 +- .../testing_guide/frontend_testing.md | 58 +- doc/development/testing_guide/review_apps.md | 98 +- .../understanding_explain_plans.md | 20 +- doc/development/uploads.md | 4 +- doc/development/what_requires_downtime.md | 2 +- doc/downgrade_ee_to_ce/README.md | 4 +- doc/gitlab-basics/command-line-commands.md | 12 +- doc/gitlab-basics/create-project.md | 21 +- doc/install/README.md | 8 +- .../aws/img/associate_subnet_gateway.png | Bin 16522 -> 0 bytes .../aws/img/associate_subnet_gateway_2.png | Bin 10616 -> 0 bytes .../aws/img/aws_ha_architecture_diagram.png | Bin 40323 -> 42452 bytes doc/install/aws/img/choose_ami.png | Bin 4888 -> 0 bytes doc/install/aws/img/create_security_group.png | Bin 12594 -> 0 bytes doc/install/aws/index.md | 608 +- doc/install/azure/index.md | 6 +- doc/install/google_cloud_platform/index.md | 6 +- doc/install/installation.md | 46 +- doc/install/openshift_and_gitlab/index.md | 26 +- doc/install/requirements.md | 8 +- doc/integration/README.md | 4 +- doc/integration/auth0.md | 5 +- doc/integration/azure.md | 7 +- doc/integration/bitbucket.md | 14 +- doc/integration/cas.md | 10 +- doc/integration/elasticsearch.md | 60 +- doc/integration/external-issue-tracker.md | 6 +- doc/integration/facebook.md | 7 +- doc/integration/github.md | 10 +- doc/integration/gitlab.md | 9 +- .../gmail_action_buttons_for_gitlab.md | 12 +- doc/integration/google.md | 7 +- doc/integration/jenkins.md | 12 +- doc/integration/jira_development_panel.md | 16 +- doc/integration/kerberos.md | 36 +- doc/integration/oauth2_generic.md | 6 +- doc/integration/openid_connect_provider.md | 7 +- doc/integration/recaptcha.md | 2 +- doc/integration/salesforce.md | 4 +- doc/integration/saml.md | 32 +- doc/integration/shibboleth.md | 6 +- doc/integration/slash_commands.md | 2 +- doc/integration/sourcegraph.md | 24 +- doc/integration/trello_power_up.md | 4 +- doc/integration/twitter.md | 5 +- doc/integration/ultra_auth.md | 4 +- doc/integration/vault.md | 8 +- doc/intro/README.md | 2 +- doc/migrate_ci_to_ce/README.md | 6 +- doc/policy/maintenance.md | 37 +- doc/project_services/project_services.md | 4 +- doc/public_access/public_access.md | 10 + doc/push_rules/push_rules.md | 2 +- doc/raketasks/README.md | 47 +- doc/raketasks/backup_restore.md | 130 +- doc/raketasks/cleanup.md | 62 +- doc/raketasks/import.md | 2 +- doc/raketasks/user_management.md | 2 +- doc/raketasks/x509_signatures.md | 22 + doc/security/README.md | 1 + doc/security/cicd_environment_variables.md | 11 + doc/security/crime_vulnerability.md | 3 +- doc/security/password_storage.md | 2 +- doc/security/rack_attack.md | 4 +- doc/security/rate_limits.md | 4 +- doc/security/two_factor_authentication.md | 2 +- doc/security/unlock_user.md | 2 +- doc/ssh/README.md | 311 +- doc/subscriptions/index.md | 91 +- doc/topics/airgap/index.md | 69 +- doc/topics/airgap/quick_start_guide.md | 157 + .../application_development_platform/index.md | 12 +- doc/topics/authentication/index.md | 2 +- doc/topics/autodevops/customize.md | 617 + .../img/guide_environments_metrics_v12_3.png | Bin 60723 -> 0 bytes .../img/guide_project_landing_page_v12_10.png | Bin 0 -> 21320 bytes .../img/guide_project_landing_page_v12_3.png | Bin 67451 -> 0 bytes doc/topics/autodevops/index.md | 1217 +- doc/topics/autodevops/quick_start_guide.md | 342 +- doc/topics/autodevops/stages.md | 551 + doc/topics/autodevops/upgrading_postgresql.md | 7 +- doc/topics/git/index.md | 9 +- doc/topics/git/lfs/img/git-annex-branches.png | Bin 0 -> 32164 bytes .../git}/lfs/img/lfs-icon.png | Bin doc/topics/git/lfs/index.md | 273 + .../lfs/migrate_from_git_annex_to_git_lfs.md | 253 + doc/topics/git/lfs/migrate_to_git_lfs.md | 174 + doc/topics/git/migrate_to_git_lfs/index.md | 173 +- .../index.md | 35 +- doc/topics/git/partial_clone.md | 141 +- doc/topics/git/troubleshooting_git.md | 7 +- doc/topics/git/useful_git_commands.md | 2 +- doc/topics/gitlab_flow.md | 2 +- doc/topics/index.md | 2 +- .../guide_waf_ingress_installation_v12_10.png | Bin 0 -> 44243 bytes .../guide_waf_ingress_installation_v12_9.png | Bin 24830 -> 0 bytes .../guide_waf_ingress_save_changes_v12_10.png | Bin 0 -> 54688 bytes .../guide_waf_ingress_save_changes_v12_9.png | Bin 37120 -> 0 bytes doc/topics/web_application_firewall/index.md | 16 +- .../quick_start_guide.md | 15 +- doc/university/README.md | 12 +- doc/university/process/README.md | 4 +- doc/university/support/README.md | 8 +- doc/university/training/user_training.md | 2 +- doc/update/README.md | 9 +- doc/update/patch_versions.md | 2 +- doc/update/restore_after_failure.md | 6 +- doc/update/upgrading_from_source.md | 4 +- .../upgrading_postgresql_using_slony.md | 4 +- .../activating_deactivating_users.md | 2 +- doc/user/admin_area/broadcast_messages.md | 36 +- .../admin_area/img/broadcast_messages.png | Bin 21458 -> 0 bytes .../img/broadcast_messages_banner_v12_10.png | Bin 0 -> 9740 bytes ...broadcast_messages_notification_v12_10.png | Bin 0 -> 23154 bytes doc/user/admin_area/index.md | 18 +- .../admin_area/merge_requests_approvals.md | 16 +- .../settings/account_and_limit_settings.md | 18 +- .../settings/continuous_integration.md | 5 +- .../settings/external_authorization.md | 6 +- .../img/rate_limit_on_issues_creation.png | Bin 0 -> 11476 bytes doc/user/admin_area/settings/index.md | 130 +- .../settings/instance_template_repository.md | 3 +- .../admin_area/settings/protected_paths.md | 6 +- .../settings/rate_limit_on_issues_creation.md | 25 + .../admin_area/settings/usage_statistics.md | 23 +- .../visibility_and_access_controls.md | 2 +- .../img/label_based_stage_vsm_v12_9.png | Bin 26700 -> 10989 bytes .../analytics/img/vsm_stage_list_v12_9.png | Bin 28784 -> 10977 bytes doc/user/analytics/index.md | 37 +- doc/user/analytics/value_stream_analytics.md | 112 +- .../img/container_scanning_v12_9.png | Bin 73869 -> 23030 bytes .../container_scanning/index.md | 118 +- .../dast/img/dast_all_v12_9.png | Bin 39268 -> 12130 bytes .../dast/img/dast_urls_scanned_v12_10.png | Bin 0 -> 21864 bytes doc/user/application_security/dast/index.md | 177 +- .../img/dependency_list_v12_10.png | Bin 0 -> 76835 bytes .../dependency_list/index.md | 21 +- .../dependency_scanning/analyzers.md | 31 +- .../dependency_scanning/index.md | 277 +- .../img/multi_select_v12_9.png | Bin 32804 -> 10825 bytes doc/user/application_security/index.md | 41 +- .../offline_deployments/index.md | 68 +- .../application_security/sast/analyzers.md | 30 +- .../sast/img/sast_v12_9.png | Bin 40172 -> 13983 bytes doc/user/application_security/sast/index.md | 123 +- ...t_security_dashboard_export_csv_v12.10.png | Bin 0 -> 9766 bytes .../security_dashboard/index.md | 25 +- .../threat_monitoring/index.md | 76 + .../standalone_vulnerability_page_v12_10.png | Bin 0 -> 26548 bytes .../vulnerabilities/index.md | 69 + doc/user/asciidoc.md | 13 +- doc/user/clusters/applications.md | 265 +- doc/user/clusters/crossplane.md | 10 +- doc/user/clusters/img/fluentd_v12_10.png | Bin 0 -> 26438 bytes doc/user/clusters/management_project.md | 6 +- .../img/compliance_dashboard_v12_10.png | Bin 0 -> 98355 bytes .../img/compliance_dashboard_v12_8.png | Bin 66215 -> 0 bytes .../compliance/compliance_dashboard/index.md | 3 +- .../license_compliance_add_license_v12_3.png | Bin 14046 -> 28440 bytes .../img/policies_maintainer_add_v12_9.png | Bin 22423 -> 6745 bytes .../img/policies_maintainer_edit_v12_9.png | Bin 35281 -> 10751 bytes .../license_compliance/img/policies_v12_9.png | Bin 66698 -> 18966 bytes .../compliance/license_compliance/index.md | 145 +- doc/user/discussions/index.md | 45 +- doc/user/gitlab_com/index.md | 18 +- doc/user/group/epics/index.md | 21 +- .../img/group_activity_analytics_v12_10.png | Bin 0 -> 56709 bytes doc/user/group/index.md | 44 +- .../roadmap/img/epics_state_dropdown.png | Bin 3702 -> 0 bytes .../img/epics_state_dropdown_v12_10.png | Bin 0 -> 8092 bytes .../group/roadmap/img/roadmap_view_v12_10.png | Bin 0 -> 46736 bytes .../group/roadmap/img/roadmap_view_v12_9.png | Bin 118218 -> 0 bytes doc/user/group/roadmap/index.md | 60 +- doc/user/group/saml_sso/img/scim_advanced.png | Bin 6920 -> 0 bytes .../saml_sso/img/scim_attribute_mapping.png | Bin 34642 -> 0 bytes doc/user/group/saml_sso/index.md | 139 +- doc/user/group/saml_sso/scim_setup.md | 53 +- doc/user/img/markdown_toc_preview_v12_9.png | Bin 0 -> 10993 bytes ...w_personal_snippet_from_project_v12_10.png | Bin 0 -> 77106 bytes doc/user/img/new_personal_snippet_v12_10.png | Bin 0 -> 39878 bytes ...ew_project_snippet_from_project_v12_10.png | Bin 0 -> 73848 bytes doc/user/incident_management/index.md | 10 +- doc/user/index.md | 6 +- doc/user/instance_statistics/dev_ops_score.md | 4 +- doc/user/instance_statistics/index.md | 3 +- doc/user/instance_statistics/user_cohorts.md | 3 +- doc/user/markdown.md | 176 +- doc/user/packages/conan_repository/index.md | 8 +- ...ner_registry_group_repositories_v12_10.png | Bin 0 -> 48791 bytes ...container_registry_repositories_v12_10.png | Bin 0 -> 24128 bytes ...ry_repositories_with_quickstart_v12_10.png | Bin 0 -> 61732 bytes ...ner_registry_repository_details_v12.10.png | Bin 0 -> 47218 bytes .../img/container_registry_tags_v12_10.png | Bin 0 -> 37743 bytes doc/user/packages/container_registry/index.md | 236 +- doc/user/packages/dependency_proxy/index.md | 9 +- .../img/group_packages_list_v12_10.png | Bin 0 -> 41637 bytes .../packages/img/package_activity_v12_10.png | Bin 0 -> 14515 bytes .../packages/img/package_detail_v12_10.png | Bin 0 -> 63529 bytes .../img/project_packages_list_v12_10.png | Bin 0 -> 39163 bytes doc/user/packages/index.md | 79 + doc/user/packages/maven_repository/index.md | 7 +- doc/user/packages/npm_registry/index.md | 14 +- doc/user/packages/nuget_repository/index.md | 15 +- doc/user/packages/pypi_repository/index.md | 84 + doc/user/permissions.md | 31 +- doc/user/profile/account/delete_account.md | 28 +- .../account/two_factor_authentication.md | 4 +- doc/user/profile/index.md | 2 +- doc/user/profile/notifications.md | 2 +- doc/user/profile/personal_access_tokens.md | 18 +- doc/user/project/badges.md | 11 +- doc/user/project/canary_deployments.md | 19 +- doc/user/project/clusters/add_eks_clusters.md | 307 + doc/user/project/clusters/add_gke_clusters.md | 83 + .../project/clusters/add_remove_clusters.md | 403 +- .../project/clusters/eks_and_gitlab/index.md | 4 +- .../img/kubernetes_pod_logs_v12_10.png | Bin 0 -> 143236 bytes .../img/kubernetes_pod_logs_v12_9.png | Bin 117938 -> 0 bytes .../img/sidebar_menu_pod_logs_v12_10.png | Bin 0 -> 14897 bytes .../img/sidebar_menu_pod_logs_v12_5.png | Bin 13681 -> 0 bytes doc/user/project/clusters/index.md | 6 +- .../project/clusters/kubernetes_pod_logs.md | 8 +- doc/user/project/clusters/runbooks/index.md | 8 +- doc/user/project/clusters/serverless/aws.md | 16 +- doc/user/project/clusters/serverless/index.md | 6 +- doc/user/project/code_owners.md | 4 +- doc/user/project/deploy_boards.md | 66 +- .../deploy_tokens/img/deploy_tokens.png | Bin 62979 -> 49460 bytes doc/user/project/deploy_tokens/index.md | 32 +- doc/user/project/description_templates.md | 48 +- doc/user/project/highlighting.md | 2 +- .../img/issue_boards_blocked_icon_v12_8.png | Bin 31841 -> 15487 bytes .../project/img/status_page_detail_v12_10.png | Bin 0 -> 37911 bytes .../img/status_page_incidents_v12_10.png | Bin 0 -> 16149 bytes doc/user/project/import/bitbucket_server.md | 3 +- doc/user/project/import/github.md | 4 +- .../import_issues_from_jira_button_v12_10.png | Bin 0 -> 8504 bytes .../import_issues_from_jira_form_v12_10.png | Bin 0 -> 116641 bytes ...mport_issues_from_jira_projects_v12_10.png | Bin 0 -> 521845 bytes doc/user/project/import/index.md | 1 + doc/user/project/import/jira.md | 57 + doc/user/project/import/phabricator.md | 3 +- doc/user/project/import/svn.md | 3 - doc/user/project/index.md | 15 +- doc/user/project/integrations/bamboo.md | 6 +- doc/user/project/integrations/bugzilla.md | 4 +- .../integrations/custom_issue_tracker.md | 11 +- .../integrations/discord_notifications.md | 6 +- .../project/integrations/emails_on_push.md | 2 +- .../project/integrations/generic_alerts.md | 2 +- doc/user/project/integrations/github.md | 4 +- .../integrations/gitlab_slack_application.md | 7 +- .../project/integrations/hangouts_chat.md | 6 +- doc/user/project/integrations/hipchat.md | 4 +- .../img/copy_link_to_chart_v12_10.png | Bin 0 -> 21559 bytes .../integrations/img/embed_metrics.png | Bin 102552 -> 0 bytes .../img/generate_link_to_chart.png | Bin 35573 -> 0 bytes .../img/hide_embedded_metrics_v12_10.png | Bin 0 -> 21312 bytes .../img/panel_context_menu_v12_10.png | Bin 0 -> 21057 bytes .../img/panel_context_menu_v12_8.png | Bin 25884 -> 0 bytes ..._dashboard_bar_chart_panel_type_v12.10.png | Bin 0 -> 4761 bytes .../img/view_embedded_metrics_v12_10.png | Bin 0 -> 36717 bytes doc/user/project/integrations/index.md | 10 +- doc/user/project/integrations/irker.md | 6 +- doc/user/project/integrations/jira.md | 10 +- doc/user/project/integrations/mattermost.md | 2 +- .../integrations/mattermost_slash_commands.md | 16 +- .../project/integrations/microsoft_teams.md | 4 +- doc/user/project/integrations/overview.md | 108 + .../project/integrations/project_services.md | 109 +- doc/user/project/integrations/prometheus.md | 150 +- .../integrations/prometheus_library/nginx.md | 1 + .../prometheus_library/nginx_ingress.md | 2 +- .../prometheus_library/nginx_ingress_vts.md | 2 +- doc/user/project/integrations/redmine.md | 2 +- doc/user/project/integrations/slack.md | 6 +- .../integrations/slack_slash_commands.md | 6 +- .../project/integrations/unify_circuit.md | 6 +- doc/user/project/integrations/webhooks.md | 52 +- doc/user/project/integrations/youtrack.md | 2 +- doc/user/project/issue_board.md | 48 +- .../project/issues/crosslinking_issues.md | 2 +- doc/user/project/issues/csv_export.md | 9 +- doc/user/project/issues/design_management.md | 46 +- .../project/issues/img/csv_export_button.png | Bin 7383 -> 0 bytes .../issues/img/csv_export_button_v12_9.png | Bin 0 -> 12951 bytes .../design_drag_and_drop_uploads_v12_9.png | Bin 402118 -> 245564 bytes .../img/epic_tree_health_status_v12_10.png | Bin 0 -> 116773 bytes .../img/issue_activity_sort_order_v12_10.png | Bin 0 -> 11646 bytes .../issue_health_status_dropdown_v12_10.png | Bin 0 -> 13926 bytes .../issues/img/issue_health_status_v12_10.png | Bin 0 -> 12185 bytes doc/user/project/issues/index.md | 39 +- .../project/issues/issue_data_and_actions.md | 111 +- doc/user/project/issues/managing_issues.md | 2 +- .../issues/multiple_assignees_for_issues.md | 4 +- doc/user/project/labels.md | 13 +- .../merge_requests/accessibility_testing.md | 3 + .../project/merge_requests/code_quality.md | 10 +- .../merge_requests/creating_merge_requests.md | 22 +- .../img/test_coverage_visualization_v12_9.png | Bin 55119 -> 17559 bytes .../img/versions_compare_head_v12_10.png | Bin 0 -> 30717 bytes doc/user/project/merge_requests/index.md | 8 +- .../merge_requests/merge_request_approvals.md | 2 +- .../merge_when_pipeline_succeeds.md | 2 +- .../reviewing_and_managing_merge_requests.md | 4 +- .../test_coverage_visualization.md | 6 +- doc/user/project/merge_requests/versions.md | 21 + doc/user/project/milestones/index.md | 2 +- .../project/new_ci_build_permissions_model.md | 39 +- doc/user/project/operations/error_tracking.md | 2 +- doc/user/project/operations/feature_flags.md | 8 +- .../dns_concepts.md | 4 +- .../lets_encrypt_integration.md | 34 +- .../getting_started/fork_sample_project.md | 12 +- .../getting_started/pages_bundled_template.md | 3 +- .../pages/getting_started_part_four.md | 18 +- .../project/pages/img/change_path_v12_10.png | Bin 0 -> 29490 bytes doc/user/project/pages/index.md | 2 +- doc/user/project/pages/introduction.md | 21 +- doc/user/project/protected_branches.md | 2 +- doc/user/project/quick_actions.md | 2 +- .../releases/img/edit_release_page_v12_10.png | Bin 0 -> 85295 bytes doc/user/project/releases/index.md | 75 +- .../project/repository/forking_workflow.md | 9 + .../img/file_ext_icons_repo_v12_10.png | Bin 0 -> 187696 bytes doc/user/project/repository/index.md | 8 +- .../repository/repository_mirroring.md | 7 +- doc/user/project/repository/web_editor.md | 6 +- .../img/requirement_archive_view_v12_10.png | Bin 0 -> 112233 bytes .../img/requirement_create_view_v12_10.png | Bin 0 -> 124402 bytes .../img/requirement_edit_save_v12_10.png | Bin 0 -> 123899 bytes .../img/requirement_edit_view_v12_10.png | Bin 0 -> 118066 bytes ...requirements_archived_list_view_v12_10.png | Bin 0 -> 68623 bytes .../img/requirements_list_view_v12_10.png | Bin 0 -> 117250 bytes doc/user/project/requirements/index.md | 67 + doc/user/project/service_desk.md | 2 +- doc/user/project/settings/import_export.md | 6 +- doc/user/project/settings/index.md | 2 +- .../img/edit_this_page_button_v12_10.png | Bin 0 -> 28949 bytes .../img/static_site_editor_v12_10.png | Bin 0 -> 50679 bytes doc/user/project/static_site_editor/index.md | 89 + doc/user/project/status_page/index.md | 102 + .../web_ide/img/commit_changes_v12_9.png | Bin 681399 -> 239448 bytes doc/user/project/web_ide/index.md | 15 +- doc/user/project/wiki/index.md | 42 + doc/user/reserved_names.md | 1 - doc/user/search/advanced_global_search.md | 18 +- doc/user/search/advanced_search_syntax.md | 7 +- doc/user/search/img/issue_search_by_id.png | Bin 0 -> 20577 bytes doc/user/search/index.md | 14 +- doc/user/shortcuts.md | 9 + doc/user/snippets.md | 27 + doc/user/todos.md | 25 +- doc/workflow/git_lfs.md | 4 +- doc/workflow/lfs/lfs_administration.md | 4 +- .../lfs/manage_large_binaries_with_git_lfs.md | 4 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 4 +- file_hooks/.gitignore | 5 + .../examples/save_to_file.clj | 0 .../examples/save_to_file.rb | 0 lib/api/api.rb | 6 +- lib/api/api_guard.rb | 4 + lib/api/commits.rb | 8 +- lib/api/container_registry_event.rb | 43 + lib/api/deploy_tokens.rb | 49 +- lib/api/discussions.rb | 16 +- lib/api/entities/commit_signature.rb | 12 +- lib/api/entities/commit_with_link.rb | 61 + .../entities/container_expiration_policy.rb | 1 + lib/api/entities/discussion.rb | 2 +- lib/api/entities/event.rb | 1 + lib/api/entities/gpg_commit_signature.rb | 12 + lib/api/entities/group.rb | 1 + lib/api/entities/merge_request.rb | 10 + lib/api/entities/merge_request_basic.rb | 2 +- .../entities/metrics/dashboard/annotation.rb | 19 + lib/api/entities/note.rb | 10 + .../note_with_gitlab_employee_badge.rb | 10 - lib/api/entities/project.rb | 1 + .../project_import_failed_relation.rb | 11 + lib/api/entities/project_import_status.rb | 7 + lib/api/entities/release.rb | 2 + lib/api/entities/releases/evidence.rb | 15 + lib/api/entities/runner_details.rb | 4 + lib/api/entities/snippet.rb | 1 + lib/api/entities/user.rb | 4 + lib/api/entities/user_path.rb | 14 + .../user_with_gitlab_employee_badge.rb | 9 - lib/api/entities/x509_certificate.rb | 15 + lib/api/entities/x509_issuer.rb | 12 + lib/api/entities/x509_signature.rb | 10 + lib/api/environments.rb | 4 +- lib/api/group_clusters.rb | 1 + lib/api/group_export.rb | 8 +- lib/api/helpers.rb | 27 +- lib/api/helpers/custom_validators.rb | 67 - lib/api/helpers/internal_helpers.rb | 19 +- lib/api/helpers/merge_requests_helpers.rb | 5 +- lib/api/helpers/notes_helpers.rb | 5 + lib/api/helpers/presentable.rb | 3 +- lib/api/helpers/projects_helpers.rb | 4 + lib/api/helpers/rate_limiter.rb | 28 + lib/api/internal/base.rb | 18 +- lib/api/internal/pages.rb | 8 +- lib/api/issues.rb | 5 +- lib/api/merge_requests.rb | 3 +- lib/api/metrics/dashboard/annotations.rb | 41 + lib/api/notes.rb | 6 +- lib/api/project_clusters.rb | 1 + lib/api/project_export.rb | 17 +- lib/api/project_import.rb | 17 +- lib/api/project_statistics.rb | 1 - lib/api/projects.rb | 3 + lib/api/releases.rb | 4 + lib/api/runner.rb | 5 +- lib/api/runners.rb | 39 +- lib/api/services.rb | 4 +- lib/api/terraform/state.rb | 120 + lib/api/users.rb | 7 +- lib/api/validations/check_assignees_count.rb | 34 - lib/api/validations/validators/absence.rb | 15 + .../validations/validators/array_none_any.rb | 19 + .../validators/check_assignees_count.rb | 36 + lib/api/validations/validators/file_path.rb | 18 + lib/api/validations/validators/git_ref.rb | 36 + lib/api/validations/validators/git_sha.rb | 18 + .../validators/integer_none_any.rb | 19 + lib/api/validations/validators/limit.rb | 19 + lib/banzai.rb | 4 + lib/banzai/filter/epic_reference_filter.rb | 4 +- lib/banzai/filter/front_matter_filter.rb | 25 +- lib/banzai/issuable_extractor.rb | 4 +- lib/banzai/pipeline.rb | 28 +- lib/banzai/pipeline/gfm_pipeline.rb | 4 +- lib/banzai/pipeline/post_process_pipeline.rb | 4 +- lib/banzai/pipeline/single_line_pipeline.rb | 4 +- lib/banzai/reference_parser/epic_parser.rb | 4 +- lib/constraints/admin_constrainer.rb | 25 + lib/container_registry/client.rb | 10 +- lib/csv_builder.rb | 112 + lib/event_filter.rb | 19 +- lib/gitlab/access.rb | 2 - lib/gitlab/alerting/alert.rb | 29 +- .../analytics/cycle_analytics/stage_events.rb | 12 + .../stage_events/production_stage_end.rb | 2 +- lib/gitlab/application_context.rb | 10 +- lib/gitlab/application_rate_limiter.rb | 9 +- lib/gitlab/asciidoc.rb | 16 +- lib/gitlab/auth.rb | 12 +- lib/gitlab/auth/auth_finders.rb | 8 + lib/gitlab/auth/current_user_mode.rb | 15 +- lib/gitlab/auth/ldap/config.rb | 2 +- ...ll_deployment_clusters_from_deployments.rb | 19 + .../backfill_push_rules_id_in_projects.rb | 27 + ...fix_projects_without_prometheus_service.rb | 197 + .../background_migration/link_lfs_objects.rb | 31 - .../migrate_users_bio_to_user_details.rb | 34 + .../populate_canonical_emails.rb | 28 + .../populate_user_highest_roles_table.rb | 56 + .../user_mentions/models/note.rb | 2 +- lib/gitlab/bitbucket_import/importer.rb | 114 +- lib/gitlab/bitbucket_import/metrics.rb | 41 + lib/gitlab/cache/import/caching.rb | 15 + lib/gitlab/checks/diff_check.rb | 2 +- lib/gitlab/ci/config/entry/include.rb | 8 + lib/gitlab/ci/config/entry/reports.rb | 3 +- lib/gitlab/ci/jwt.rb | 95 + lib/gitlab/ci/parsers/test/junit.rb | 16 +- .../ci/pipeline/chain/config/content.rb | 18 +- .../chain/config/content/auto_devops.rb | 10 +- .../config/content/legacy_auto_devops.rb | 42 - .../chain/config/content/legacy_repository.rb | 31 - .../ci/pipeline/chain/validate/external.rb | 7 +- lib/gitlab/ci/pipeline/seed/build/cache.rb | 2 - lib/gitlab/ci/reports/test_case.rb | 32 +- lib/gitlab/ci/reports/test_reports.rb | 8 + lib/gitlab/ci/reports/test_suite.rb | 10 + lib/gitlab/ci/status/bridge/factory.rb | 4 + lib/gitlab/ci/status/bridge/failed.rb | 12 + .../ci/templates/Auto-DevOps.gitlab-ci.yml | 77 + .../templates/Beta/Auto-DevOps.gitlab-ci.yml | 163 - .../ci/templates/Deploy-ECS.gitlab-ci.yml | 2 +- .../Browser-Performance-Testing.gitlab-ci.yml | 4 +- .../ci/templates/Jobs/Build.gitlab-ci.yml | 4 +- .../templates/Jobs/Code-Quality.gitlab-ci.yml | 4 +- .../ci/templates/Jobs/Deploy.gitlab-ci.yml | 2 +- ...Managed-Cluster-Applications.gitlab-ci.yml | 4 +- .../ci/templates/Security/DAST.gitlab-ci.yml | 21 +- .../Dependency-Scanning.gitlab-ci.yml | 5 +- .../ci/templates/Security/SAST.gitlab-ci.yml | 24 +- .../ci/templates/Terraform.gitlab-ci.yml | 7 +- lib/gitlab/ci/variables/collection/item.rb | 2 +- lib/gitlab/ci/yaml_processor.rb | 54 +- .../cleanup/orphan_job_artifact_files.rb | 2 +- .../cleanup/orphan_lfs_file_references.rb | 69 + lib/gitlab/code_navigation_path.rb | 37 + lib/gitlab/current_settings.rb | 2 +- .../cycle_analytics/group_stage_summary.rb | 36 +- lib/gitlab/cycle_analytics/stage_summary.rb | 23 +- .../summary/deployment_frequency.rb | 30 + .../summary/group/deployment_frequency.rb | 33 + lib/gitlab/cycle_analytics/summary_helper.rb | 18 + lib/gitlab/danger/changelog.rb | 10 +- lib/gitlab/danger/commit_linter.rb | 2 +- lib/gitlab/danger/helper.rb | 12 +- lib/gitlab/data_builder/pipeline.rb | 2 +- lib/gitlab/database/batch_count.rb | 49 +- lib/gitlab/database/migration_helpers.rb | 198 +- .../schema_versions_copy_mixin.rb | 28 + .../v1/rename_namespaces.rb | 2 +- .../v1/rename_projects.rb | 2 +- lib/gitlab/database/schema_cleaner.rb | 43 + lib/gitlab/diff/formatters/text_formatter.rb | 4 +- lib/gitlab/diff/highlight_cache.rb | 43 +- lib/gitlab/elasticsearch/logs.rb | 150 - lib/gitlab/elasticsearch/logs/lines.rb | 156 + lib/gitlab/elasticsearch/logs/pods.rb | 70 + lib/gitlab/email/attachment_uploader.rb | 15 +- lib/gitlab/emoji.rb | 5 +- lib/gitlab/error_tracking.rb | 38 +- lib/gitlab/experimentation.rb | 14 +- lib/gitlab/fake_application_settings.rb | 2 +- lib/gitlab/file_detector.rb | 2 +- lib/gitlab/file_hook.rb | 9 +- lib/gitlab/front_matter.rb | 24 + lib/gitlab/git/blob.rb | 8 +- lib/gitlab/git/commit.rb | 3 + lib/gitlab/git/diff_stats_collection.rb | 9 + lib/gitlab/git/hook_env.rb | 11 +- lib/gitlab/git/lfs_changes.rb | 4 +- lib/gitlab/git/remote_mirror.rb | 8 +- lib/gitlab/git/repository.rb | 10 + lib/gitlab/git_access.rb | 69 +- lib/gitlab/git_access_result/custom_action.rb | 2 +- lib/gitlab/git_access_snippet.rb | 11 +- lib/gitlab/git_access_wiki.rb | 8 +- lib/gitlab/gitaly_client.rb | 4 - lib/gitlab/gitaly_client/blob_service.rb | 7 +- .../gitaly_client/praefect_info_service.rb | 19 + lib/gitlab/gitaly_client/remote_service.rb | 3 +- lib/gitlab/github_import/parallel_importer.rb | 2 +- lib/gitlab/grafana_embed_usage_data.rb | 16 - .../formatters/lograge_with_timestamp.rb | 6 +- .../grape_logging/loggers/perf_logger.rb | 27 +- .../loggers/queue_duration_logger.rb | 4 +- lib/gitlab/graphql/connections.rb | 26 - lib/gitlab/graphql/pagination/connections.rb | 23 + .../externally_paginated_array_connection.rb | 14 +- .../filterable_array_connection.rb | 8 +- .../keyset/conditions/base_condition.rb | 2 +- .../keyset/conditions/not_null_condition.rb | 2 +- .../keyset/conditions/null_condition.rb | 2 +- .../keyset/connection.rb | 32 +- .../keyset/order_info.rb | 2 +- .../keyset/query_builder.rb | 2 +- ...ffset_active_record_relation_connection.rb | 2 +- .../offset_active_record_relation.rb | 12 - lib/gitlab/graphql/present.rb | 2 +- lib/gitlab/hook_data/issue_builder.rb | 1 + lib/gitlab/hook_data/wiki_page_builder.rb | 4 + lib/gitlab/http.rb | 12 + lib/gitlab/http_io.rb | 2 +- lib/gitlab/import/metrics.rb | 60 + lib/gitlab/import/set_async_jid.rb | 11 +- lib/gitlab/import_export/attributes_finder.rb | 2 +- .../import_export/base/object_builder.rb | 2 +- .../import_export/fast_hash_serializer.rb | 9 +- .../import_export/group/import_export.yml | 7 + ...ee_restorer.rb => legacy_tree_restorer.rb} | 61 +- .../{tree_saver.rb => legacy_tree_saver.rb} | 2 +- .../import_export/json/legacy_reader.rb | 81 +- .../import_export/json/legacy_writer.rb | 63 +- .../import_export/json/ndjson_reader.rb | 61 + .../import_export/json/ndjson_writer.rb | 59 + .../json/streaming_serializer.rb | 33 +- .../legacy_relation_tree_saver.rb | 10 +- lib/gitlab/import_export/members_mapper.rb | 43 +- .../import_export/project/import_export.yml | 6 + .../project/legacy_tree_saver.rb | 68 - .../import_export/project/relation_factory.rb | 3 +- .../import_export/project/tree_restorer.rb | 50 +- .../import_export/project/tree_saver.rb | 23 +- .../import_export/relation_tree_restorer.rb | 44 +- .../import_export/snippet_repo_restorer.rb | 2 +- lib/gitlab/import_formatter.rb | 5 + lib/gitlab/instrumentation/redis.rb | 66 + lib/gitlab/instrumentation_helper.rb | 15 +- lib/gitlab/jira_import.rb | 74 + lib/gitlab/jira_import/base_importer.rb | 35 + lib/gitlab/jira_import/issue_serializer.rb | 100 + lib/gitlab/jira_import/issues_importer.rb | 81 + lib/gitlab/jira_import/labels_importer.rb | 33 + lib/gitlab/json.rb | 33 + lib/gitlab/kubernetes/helm/base_command.rb | 22 +- lib/gitlab/kubernetes/helm/init_command.rb | 26 - lib/gitlab/kubernetes/helm/install_command.rb | 5 + lib/gitlab/legacy_github_import/client.rb | 7 +- .../legacy_github_import/user_formatter.rb | 5 +- lib/gitlab/lets_encrypt/challenge.rb | 2 +- lib/gitlab/lets_encrypt/order.rb | 9 +- lib/gitlab/lograge/custom_options.rb | 4 +- lib/gitlab/metrics/dashboard/finder.rb | 2 +- .../metrics/dashboard/service_selector.rb | 4 +- .../dashboard/stages/alerts_inserter.rb | 41 + .../metrics/dashboard/stages/base_stage.rb | 20 +- ....rb => custom_metrics_details_inserter.rb} | 2 +- ...inserter.rb => custom_metrics_inserter.rb} | 3 +- .../dashboard/stages/panel_ids_inserter.rb | 61 + .../metrics/requests_rack_middleware.rb | 19 +- lib/gitlab/middleware/rails_queue_duration.rb | 7 +- lib/gitlab/middleware/same_site_cookies.rb | 63 + lib/gitlab/path_regex.rb | 9 +- lib/gitlab/phabricator_import/importer.rb | 2 +- lib/gitlab/polling_interval.rb | 18 +- lib/gitlab/profiler.rb | 4 +- .../profiler/total_time_flat_printer.rb | 42 - lib/gitlab/project_template.rb | 52 +- .../prometheus/queries/deployment_query.rb | 4 +- .../prometheus/queries/environment_query.rb | 4 +- .../queries/knative_invocation_query.rb | 2 +- .../queries/matched_metric_query.rb | 2 +- .../queries/query_additional_metrics.rb | 2 +- .../prometheus/queries/validate_query.rb | 21 + lib/gitlab/prometheus_client.rb | 48 +- .../quick_actions/merge_request_actions.rb | 55 +- lib/gitlab/redis/wrapper.rb | 5 +- lib/gitlab/repository_size_checker.rb | 46 + lib/gitlab/repository_size_error_message.rb | 48 + lib/gitlab/repository_url_builder.rb | 33 + lib/gitlab/search_results.rb | 2 + lib/gitlab/set_cache.rb | 4 +- lib/gitlab/setup_helper.rb | 149 +- lib/gitlab/shell.rb | 8 - lib/gitlab/sidekiq_cluster.rb | 23 +- lib/gitlab/sidekiq_cluster/cli.rb | 38 +- lib/gitlab/sidekiq_logging/json_formatter.rb | 5 + lib/gitlab/sidekiq_logging/logs_jobs.rb | 2 +- .../sidekiq_logging/structured_logger.rb | 12 +- lib/gitlab/sidekiq_middleware.rb | 6 +- .../sidekiq_middleware/duplicate_jobs.rb | 13 - .../duplicate_jobs/client.rb | 3 + .../duplicate_jobs/duplicate_job.rb | 2 +- lib/gitlab/sidekiq_middleware/metrics.rb | 8 +- .../sidekiq_middleware/server_metrics.rb | 2 +- lib/gitlab/signed_commit.rb | 2 + lib/gitlab/slash_commands/presenters/base.rb | 2 +- lib/gitlab/static_site_editor/config.rb | 52 + lib/gitlab/tracking.rb | 7 + lib/gitlab/url_blocker.rb | 4 +- lib/gitlab/url_builder.rb | 118 +- lib/gitlab/usage_data.rb | 139 +- .../usage_data_counters/base_counter.rb | 4 +- lib/gitlab/utils.rb | 4 + lib/gitlab/utils/measuring.rb | 20 +- lib/gitlab/view/presenter/base.rb | 4 + lib/gitlab/wiki_pages.rb | 15 + lib/gitlab/wiki_pages/front_matter_parser.rb | 120 + lib/gitlab/workhorse.rb | 4 +- lib/gitlab/x509/commit.rb | 166 +- lib/gitlab/x509/signature.rb | 198 + lib/peek/views/detailed_view.rb | 2 +- lib/peek/views/redis_detailed.rb | 38 - lib/quality/helm3_client.rb | 113 + lib/sentry/client.rb | 1 - lib/sentry/client/issue.rb | 1 + lib/support/init.d/gitlab | 13 +- lib/system_check/app/git_config_check.rb | 2 +- .../app/gitlab_config_exists_check.rb | 2 +- .../app/gitlab_config_up_to_date_check.rb | 2 +- .../app/init_script_exists_check.rb | 2 +- .../app/init_script_up_to_date_check.rb | 2 +- lib/system_check/app/log_writable_check.rb | 2 +- lib/system_check/app/redis_version_check.rb | 33 +- lib/system_check/app/tmp_writable_check.rb | 2 +- .../app/uploads_directory_exists_check.rb | 2 +- .../app/uploads_path_permission_check.rb | 2 +- .../app/uploads_path_tmp_permission_check.rb | 2 +- lib/tasks/file_hooks.rake | 4 +- lib/tasks/gitlab/assets.rake | 75 +- lib/tasks/gitlab/cleanup.rake | 42 + lib/tasks/gitlab/db.rake | 20 +- lib/tasks/gitlab/gitaly.rake | 2 +- lib/tasks/gitlab/praefect.rake | 54 + lib/tasks/gitlab/uploads/legacy.rake | 27 - lib/tasks/gitlab/x509/update.rake | 27 + locale/am_ET/gitlab.po | 25318 +++++++++++++++ locale/ar_SA/gitlab.po | 3606 ++- locale/bg/gitlab.po | 3552 ++- locale/bn_BD/gitlab.po | 3546 ++- locale/bn_IN/gitlab.po | 3546 ++- locale/bs_BA/gitlab.po | 25453 +++++++++++++++ locale/ca_ES/gitlab.po | 3558 ++- locale/cs_CZ/gitlab.po | 3586 ++- locale/cy_GB/gitlab.po | 3606 ++- locale/da_DK/gitlab.po | 3554 ++- locale/de/gitlab.po | 3748 ++- locale/el_GR/gitlab.po | 3546 ++- locale/eo/gitlab.po | 3552 ++- locale/es/gitlab.po | 4240 ++- locale/et_EE/gitlab.po | 3546 ++- locale/fa_IR/gitlab.po | 3546 ++- locale/fi_FI/gitlab.po | 25318 +++++++++++++++ locale/fil_PH/gitlab.po | 3546 ++- locale/fr/gitlab.po | 3626 ++- locale/gitlab.pot | 1465 +- locale/gl_ES/gitlab.po | 3546 ++- locale/he_IL/gitlab.po | 3576 ++- locale/hi_IN/gitlab.po | 3546 ++- locale/hr_HR/gitlab.po | 3587 ++- locale/hu_HU/gitlab.po | 3546 ++- locale/id_ID/gitlab.po | 3531 ++- locale/it/gitlab.po | 3578 ++- locale/ja/gitlab.po | 3769 ++- locale/ka_GE/gitlab.po | 3546 ++- locale/ko/gitlab.po | 3675 ++- locale/ku_TR/gitlab.po | 3546 ++- locale/ml_IN/gitlab.po | 3449 ++- locale/mn_MN/gitlab.po | 3546 ++- locale/nb_NO/gitlab.po | 3546 ++- locale/nl_NL/gitlab.po | 3556 ++- locale/pa_IN/gitlab.po | 3546 ++- locale/pl_PL/gitlab.po | 3578 ++- locale/pt_BR/gitlab.po | 3656 ++- locale/pt_PT/gitlab.po | 3580 ++- locale/ro_RO/gitlab.po | 3561 ++- locale/ru/gitlab.po | 3880 ++- locale/sk_SK/gitlab.po | 3576 ++- locale/sl_SI/gitlab.po | 25588 ++++++++++++++++ locale/sq_AL/gitlab.po | 3546 ++- locale/sr_CS/gitlab.po | 3561 ++- locale/sr_SP/gitlab.po | 3561 ++- locale/sv_SE/gitlab.po | 3546 ++- locale/sw_KE/gitlab.po | 3546 ++- locale/tr_TR/gitlab.po | 4550 ++- locale/uk/gitlab.po | 4118 ++- locale/ur_PK/gitlab.po | 3546 ++- locale/uz_UZ/gitlab.po | 3546 ++- locale/vi_VN/gitlab.po | 3531 ++- locale/zh_CN/gitlab.po | 4363 ++- locale/zh_HK/gitlab.po | 3545 ++- locale/zh_TW/gitlab.po | 3673 ++- package.json | 17 +- qa/qa.rb | 23 +- .../monitored_auto_devops/.gitlab-ci.yml | 2 +- qa/qa/flow/login.rb | 3 +- qa/qa/page/admin/menu.rb | 10 +- qa/qa/page/admin/overview/groups/edit.rb | 23 + qa/qa/page/admin/overview/groups/index.rb | 32 + qa/qa/page/admin/overview/groups/show.rb | 21 + qa/qa/page/base.rb | 47 + qa/qa/page/component/breadcrumbs.rb | 19 + qa/qa/page/component/ci_badge_link.rb | 4 + qa/qa/page/main/login.rb | 16 +- qa/qa/page/main/menu.rb | 2 + qa/qa/page/main/terms.rb | 21 + qa/qa/page/profile/personal_access_tokens.rb | 10 + qa/qa/page/project/operations/metrics/show.rb | 37 + qa/qa/page/project/pipeline/index.rb | 8 +- qa/qa/page/project/settings/ci_cd.rb | 10 + qa/qa/page/project/settings/ci_variables.rb | 78 +- qa/qa/page/project/settings/members.rb | 4 +- qa/qa/page/project/settings/repository.rb | 10 - qa/qa/page/project/show.rb | 11 +- qa/qa/page/project/web_ide/edit.rb | 2 + qa/qa/page/validatable.rb | 4 +- qa/qa/resource/ci_variable.rb | 3 +- qa/qa/resource/deploy_key.rb | 2 +- qa/qa/resource/personal_access_token.rb | 4 + qa/qa/resource/project.rb | 3 + qa/qa/runtime/browser.rb | 4 +- qa/qa/runtime/env.rb | 15 +- qa/qa/runtime/project.rb | 35 + qa/qa/runtime/search.rb | 16 + qa/qa/scenario/test/integration/oauth.rb | 13 - .../1_manage/group/transfer_project_spec.rb | 4 +- .../1_manage/login/login_via_oauth_spec.rb | 19 - .../1_manage/project/dashboard_images_spec.rb | 2 +- .../2_plan/issue/create_issue_spec.rb | 2 +- .../2_plan/issue/export_as_csv_spec.rb | 40 + .../rebase_merge_request_spec.rb | 2 +- .../repository/protocol_v2_push_ssh_spec.rb | 12 +- .../push_http_private_token_spec.rb | 6 +- .../repository/push_over_http_spec.rb | 26 +- .../3_create/snippet/create_snippet_spec.rb | 2 +- .../web_ide/review_merge_request_spec.rb | 3 +- .../add_remove_ci_variable_spec.rb | 15 +- .../create_and_process_pipeline_spec.rb | 6 +- .../4_verify/runner/register_runner_spec.rb | 13 +- .../deploy_key/add_deploy_key_spec.rb | 2 +- .../deploy_key/clone_using_deploy_key_spec.rb | 8 +- .../deploy_token/add_deploy_token_spec.rb | 2 +- ...d_pipelines_dependent_relationship_spec.rb | 122 + ...pipelines_independent_relationship_spec.rb | 121 + .../kubernetes/kubernetes_integration_spec.rb | 4 +- .../8_monitor/apm/dashboards_spec.rb | 97 + qa/qa/tools/generate_perf_testdata.rb | 9 +- qa/qa/vendor/github/page/base.rb | 14 - qa/qa/vendor/github/page/login.rb | 38 - qa/qa/vendor/jenkins/page/configure_job.rb | 7 + qa/qa/vendor/jenkins/page/job.rb | 23 - qa/qa/vendor/jenkins/page/last_job_console.rb | 32 + qa/qa/vendor/one_password/cli.rb | 63 - qa/spec/page/base_spec.rb | 76 +- qa/spec/runtime/env_spec.rb | 20 + .../scenario/test/integration/oauth_spec.rb | 9 - qa/spec/spec_helper.rb | 3 +- rubocop/cop/filename_length.rb | 25 + rubocop/cop/gitlab/duplicate_spec_location.rb | 66 + rubocop/cop/migration/add_column.rb | 5 - .../cop/migration/add_column_with_default.rb | 32 - .../migration/add_columns_to_wide_tables.rb | 47 + rubocop/cop/migration/datetime.rb | 2 +- rubocop/cop/migration/safer_boolean_column.rb | 6 +- rubocop/cop/migration/update_large_table.rb | 22 +- ...th_lock_retries_without_ddl_transaction.rb | 36 + rubocop/cop/performance/ar_count_each.rb | 45 + rubocop/cop/performance/readlines_each.rb | 32 + rubocop/cop/rspec/have_gitlab_http_status.rb | 86 +- .../cop/rspec/modify_sidekiq_middleware.rb | 50 + rubocop/cop/static_translation_definition.rb | 43 + rubocop/migration_helpers.rb | 53 + scripts/frontend/prettier.js | 9 +- scripts/gitaly-test-build | 7 +- scripts/gitaly-test-spawn | 5 +- scripts/gitaly_test.rb | 37 +- scripts/review_apps/automated_cleanup.rb | 25 +- scripts/review_apps/base-config.yaml | 8 +- scripts/review_apps/gcp_cleanup.sh | 153 + scripts/review_apps/review-apps.sh | 87 +- scripts/schema_changed.sh | 8 +- scripts/trigger-build-docs | 20 +- scripts/utils.sh | 53 +- spec/bin/sidekiq_cluster_spec.rb | 13 +- .../application_settings_controller_spec.rb | 26 +- .../admin/clusters_controller_spec.rb | 8 +- .../admin/integrations_controller_spec.rb | 31 +- .../admin/projects_controller_spec.rb | 12 + .../admin/runners_controller_spec.rb | 24 + .../admin/services_controller_spec.rb | 19 +- .../admin/sessions_controller_spec.rb | 42 + .../admin/users_controller_spec.rb | 11 + .../application_controller_spec.rb | 2 +- .../autocomplete_controller_spec.rb | 6 +- .../boards/issues_controller_spec.rb | 19 +- .../boards/lists_controller_spec.rb | 4 +- ...er_with_cross_project_access_check_spec.rb | 1 + .../enforces_admin_authentication_spec.rb | 2 +- spec/controllers/concerns/lfs_request_spec.rb | 6 +- .../dashboard/todos_controller_spec.rb | 4 +- spec/controllers/dashboard_controller_spec.rb | 4 +- .../explore/groups_controller_spec.rb | 14 + .../explore/projects_controller_spec.rb | 12 + spec/controllers/graphql_controller_spec.rb | 3 +- .../groups/boards_controller_spec.rb | 4 + .../groups/clusters_controller_spec.rb | 8 +- .../registry/repositories_controller_spec.rb | 141 +- .../groups/settings/ci_cd_controller_spec.rb | 134 +- .../settings/integrations_controller_spec.rb | 112 + .../groups/shared_projects_controller_spec.rb | 2 +- spec/controllers/groups_controller_spec.rb | 134 +- spec/controllers/help_controller_spec.rb | 14 + .../import/gitea_controller_spec.rb | 2 +- .../import/gitlab_projects_controller_spec.rb | 100 - spec/controllers/metrics_controller_spec.rb | 6 +- .../notification_settings_controller_spec.rb | 12 +- .../oauth/token_info_controller_spec.rb | 10 +- .../omniauth_callbacks_controller_spec.rb | 4 +- spec/controllers/profiles_controller_spec.rb | 20 +- .../alerting/notifications_controller_spec.rb | 2 +- .../projects/avatars_controller_spec.rb | 15 +- .../projects/blob_controller_spec.rb | 11 +- .../projects/boards_controller_spec.rb | 4 + .../clusters/applications_controller_spec.rb | 7 +- .../projects/clusters_controller_spec.rb | 85 +- .../projects/deploy_keys_controller_spec.rb | 18 +- .../projects/environments_controller_spec.rb | 2 +- .../stack_traces_controller_spec.rb | 2 +- .../error_tracking_controller_spec.rb | 6 +- .../projects/grafana_api_controller_spec.rb | 9 +- .../projects/group_links_controller_spec.rb | 4 +- .../projects/import/jira_controller_spec.rb | 160 +- .../projects/issues_controller_spec.rb | 206 +- .../projects/jobs_controller_spec.rb | 24 +- .../merge_requests/diffs_controller_spec.rb | 18 +- .../merge_requests_controller_spec.rb | 16 +- .../projects/mirrors_controller_spec.rb | 22 +- .../projects/notes_controller_spec.rb | 2 +- .../projects/pages_domains_controller_spec.rb | 18 + .../pipeline_schedules_controller_spec.rb | 28 +- .../projects/pipelines_controller_spec.rb | 119 +- .../project_members_controller_spec.rb | 2 +- .../prometheus/alerts_controller_spec.rb | 397 + .../prometheus/metrics_controller_spec.rb | 106 +- .../protected_branches_controller_spec.rb | 2 +- .../projects/raw_controller_spec.rb | 19 +- .../registry/repositories_controller_spec.rb | 17 +- .../releases/evidences_controller_spec.rb | 165 + .../projects/releases_controller_spec.rb | 151 +- .../settings/ci_cd_controller_spec.rb | 107 +- .../settings/operations_controller_spec.rb | 88 + .../projects/snippets_controller_spec.rb | 126 +- .../static_site_editor_controller_spec.rb | 72 + .../projects/templates_controller_spec.rb | 12 +- .../projects/wikis_controller_spec.rb | 14 +- spec/controllers/projects_controller_spec.rb | 12 +- .../registrations_controller_spec.rb | 4 +- .../repositories/git_http_controller_spec.rb | 62 +- .../sent_notifications_controller_spec.rb | 2 +- spec/controllers/sessions_controller_spec.rb | 2 +- spec/controllers/snippets_controller_spec.rb | 105 +- spec/controllers/uploads_controller_spec.rb | 2 +- spec/db/schema_spec.rb | 3 +- spec/factories/application_settings.rb | 1 + spec/factories/ci/bridge.rb | 16 +- spec/factories/ci/builds.rb | 15 +- spec/factories/ci/daily_report_results.rb | 13 + spec/factories/ci/job_artifacts.rb | 10 + spec/factories/ci/pipelines.rb | 34 +- spec/factories/ci/test_case.rb | 12 +- spec/factories/clusters/applications/helm.rb | 9 + spec/factories/deploy_tokens.rb | 1 + spec/factories/diff_note_positions.rb | 10 + spec/factories/diff_position.rb | 10 + spec/factories/environments.rb | 8 + spec/factories/events.rb | 10 + spec/factories/evidences.rb | 2 +- spec/factories/group_group_links.rb | 8 +- spec/factories/import_failures.rb | 23 + spec/factories/internal_ids.rb | 6 + spec/factories/issues.rb | 2 +- spec/factories/jira_import_states.rb | 28 + spec/factories/lists.rb | 1 + spec/factories/merge_requests.rb | 24 +- .../metrics/dashboard/annotations.rb | 15 + spec/factories/milestones.rb | 12 +- spec/factories/notes.rb | 14 +- spec/factories/project_alerting_settings.rb | 8 + spec/factories/project_group_links.rb | 5 + spec/factories/projects.rb | 8 + spec/factories/prometheus_alert_event.rb | 22 + .../self_managed_prometheus_alert_event.rb | 23 + spec/factories/sequences.rb | 1 + spec/factories/services.rb | 20 + spec/factories/services_data.rb | 8 + spec/factories/snippets.rb | 2 +- spec/factories/terraform/state.rb | 13 + spec/factories/usage_data.rb | 69 + spec/factories/user_canonical_emails.rb | 8 + spec/factories/user_highest_roles.rb | 7 + spec/factories/users.rb | 11 +- spec/factories/users_statistics.rb | 14 + spec/factories/wiki_pages.rb | 56 +- .../features/admin/admin_mode/workers_spec.rb | 8 - .../admin/admin_serverless_domains_spec.rb | 28 + spec/features/admin/admin_settings_spec.rb | 36 +- spec/features/admin/dashboard_spec.rb | 26 +- spec/features/broadcast_messages_spec.rb | 42 +- .../clusters/cluster_detail_page_spec.rb | 18 +- ...installing_applications_shared_examples.rb | 84 +- spec/features/cycle_analytics_spec.rb | 12 +- spec/features/dashboard/groups_list_spec.rb | 2 +- spec/features/dashboard/projects_spec.rb | 12 +- spec/features/dashboard/shortcuts_spec.rb | 8 + spec/features/dashboard/snippets_spec.rb | 52 +- spec/features/explore/groups_list_spec.rb | 8 +- spec/features/explore/groups_spec.rb | 12 + .../explore/user_explores_projects_spec.rb | 11 + spec/features/groups/issues_spec.rb | 2 + spec/features/groups/navbar_spec.rb | 85 +- .../features/ide/user_commits_changes_spec.rb | 33 + .../markdown_references/jira_spec.rb | 4 +- spec/features/issues/csv_spec.rb | 100 + .../filtered_search/filter_issues_spec.rb | 8 - .../filtered_search/visual_tokens_spec.rb | 13 + spec/features/issues/gfm_autocomplete_spec.rb | 20 +- spec/features/issues/spam_issues_spec.rb | 4 +- .../issues/user_filters_issues_spec.rb | 2 +- .../issues/user_sorts_issue_comments_spec.rb | 45 + spec/features/markdown/metrics_spec.rb | 58 + .../user_posts_diff_notes_spec.rb | 7 +- .../user_resolves_wip_mr_spec.rb | 48 + .../user_lists_merge_requests_spec.rb | 2 +- .../milestones/user_views_milestone_spec.rb | 31 + ...ser_follows_pipeline_suggest_nudge_spec.rb | 8 + spec/features/projects/clusters/gcp_spec.rb | 1 + .../projects/container_registry_spec.rb | 183 +- .../environments/environments_spec.rb | 14 +- .../projects/environments_pod_logs_spec.rb | 65 + .../files/template_type_dropdown_spec.rb | 4 - .../projects/files/user_browses_files_spec.rb | 28 + .../projects/files/user_uploads_files_spec.rb | 86 +- .../import_export/export_file_spec.rb | 105 +- spec/features/projects/navbar_spec.rb | 150 +- .../projects/pages_lets_encrypt_spec.rb | 16 + .../projects/pipelines/pipeline_spec.rb | 11 +- .../releases/user_views_edit_release_spec.rb | 2 +- .../releases/user_views_releases_spec.rb | 122 +- .../prometheus_external_alerts_spec.rb | 48 + .../services/user_activates_asana_spec.rb | 19 +- .../services/user_activates_assembla_spec.rb | 17 +- ...user_activates_atlassian_bamboo_ci_spec.rb | 19 +- .../user_activates_emails_on_push_spec.rb | 19 +- .../services/user_activates_flowdock_spec.rb | 23 +- .../services/user_activates_hipchat_spec.rb | 32 +- .../services/user_activates_irker_spec.rb | 19 +- .../user_activates_issue_tracker_spec.rb | 2 +- ...er_activates_jetbrains_teamcity_ci_spec.rb | 17 +- .../services/user_activates_jira_spec.rb | 3 +- ...activates_mattermost_slash_command_spec.rb | 7 +- .../services/user_activates_packagist_spec.rb | 17 +- .../user_activates_pivotaltracker_spec.rb | 17 +- .../user_activates_prometheus_spec.rb | 14 +- .../services/user_activates_pushover_spec.rb | 17 +- ...user_activates_slack_notifications_spec.rb | 22 +- ...user_activates_slack_slash_command_spec.rb | 9 +- .../services/user_activates_youtrack_spec.rb | 2 +- .../services/user_views_services_spec.rb | 12 +- .../projects/settings/ci_cd_settings_spec.rb | 1 + .../settings/registry_settings_spec.rb | 1 - .../settings/repository_settings_spec.rb | 29 + ...ser_sees_revoke_deploy_token_modal_spec.rb | 1 + .../projects/show/user_uploads_files_spec.rb | 36 + .../projects/snippets/create_snippet_spec.rb | 1 + .../snippets/user_comments_on_snippet_spec.rb | 6 +- .../snippets/user_updates_snippet_spec.rb | 32 +- .../wiki/user_creates_wiki_page_spec.rb | 16 +- spec/features/snippets/spam_snippets_spec.rb | 5 +- .../snippets/user_creates_snippet_spec.rb | 6 + .../snippets/user_edits_snippet_spec.rb | 36 +- spec/features/static_site_editor_spec.rb | 19 + .../move_to_project_finder_spec.rb | 26 +- .../finder_with_cross_project_access_spec.rb | 2 +- spec/finders/environments_finder_spec.rb | 70 +- spec/finders/events_finder_spec.rb | 30 +- spec/finders/group_descendants_finder_spec.rb | 2 +- spec/finders/group_members_finder_spec.rb | 10 +- spec/finders/issues_finder_spec.rb | 10 +- .../dashboards/annotations_finder_spec.rb | 107 + spec/finders/projects_finder_spec.rb | 58 +- .../finders/protected_branches_finder_spec.rb | 2 +- spec/finders/releases_finder_spec.rb | 12 + spec/finders/sentry_issue_finder_spec.rb | 2 +- spec/finders/snippets_finder_spec.rb | 4 +- spec/fixtures/api/schemas/cluster_status.json | 4 + .../api/schemas/entities/discussion.json | 6 +- .../api/schemas/entities/test_case.json | 3 +- spec/fixtures/api/schemas/entities/user.json | 3 +- spec/fixtures/api/schemas/environment.json | 5 +- spec/fixtures/api/schemas/list.json | 3 +- .../api/schemas/prometheus/metrics.json | 28 + .../api/schemas/public_api/v4/notes.json | 4 +- .../api/schemas/public_api/v4/release.json | 4 + .../public_api/v4/release/evidence.json | 14 + .../api/schemas/registry/repository.json | 6 + ...ply_signed_smime_mixed_protocol_prefix.eml | 294 + .../gitlab/database/structure_example.sql | 96 + .../database/structure_example_cleaned.sql | 44 + spec/fixtures/group.json | 1 + spec/fixtures/group_export.tar.gz | Bin 2795 -> 3546 bytes .../group_export_invalid_subrelations.tar.gz | Bin 3036 -> 3602 bytes .../junit/junit_with_attachment.xml.gz | Bin 0 -> 929 bytes .../lib/elasticsearch/logs_response.json | 28 +- .../lib/elasticsearch/pods_query.json | 28 + .../lib/elasticsearch/pods_response.json | 75 + spec/fixtures/lib/elasticsearch/query.json | 3 +- .../elasticsearch/query_with_container.json | 3 +- .../lib/elasticsearch/query_with_cursor.json | 3 +- .../elasticsearch/query_with_end_time.json | 3 +- .../lib/elasticsearch/query_with_search.json | 3 +- .../elasticsearch/query_with_start_time.json | 3 +- .../lib/elasticsearch/query_with_times.json | 3 +- .../gitlab/import_export/complex/project.json | 88 +- .../gitlab/import_export/complex/tree.tar.gz | Bin 0 -> 32595 bytes .../gitlab/import_export/group/tree.tar.gz | Bin 0 -> 1246 bytes .../group_exports/complex/group.json | 21 +- .../group_exports/no_children/group.json | 3 - .../visibility_levels/internal/group.json | 12 - .../visibility_levels/private/group.json | 12 - .../visibility_levels/public/group.json | 12 - .../import_export/invalid_json/tree.tar.gz | Bin 0 -> 191 bytes .../gitlab/import_export/light/project.json | 66 +- .../gitlab/import_export/light/tree.tar.gz | Bin 0 -> 1435 bytes .../import_export/milestone-iid/project.json | 2 +- .../import_export/milestone-iid/tree.tar.gz | Bin 0 -> 714 bytes .../tree.tar.gz | Bin 0 -> 1172 bytes .../with_invalid_records/project.json | 2 +- .../with_invalid_records/tree.tar.gz | Bin 0 -> 513 bytes .../metrics/dashboard/sample_dashboard.yml | 1 + .../metrics/dashboard/schemas/panels.json | 2 + spec/fixtures/terraform/terraform.tfstate | 8 + spec/frontend/__mocks__/@gitlab/ui.js | 17 + spec/frontend/__mocks__/lodash/debounce.js | 11 + spec/frontend/__mocks__/sortablejs/index.js | 5 + spec/frontend/api_spec.js | 121 + .../behaviors/markdown/render_metrics_spec.js | 56 +- spec/frontend/blob/blob_file_dropzone_spec.js | 7 +- .../blob/components/blob_edit_content_spec.js | 13 +- .../blob_header_default_actions_spec.js | 6 +- .../blob_header_viewer_switcher_spec.js | 6 +- .../blob/pipeline_tour_success_mock_data.js | 7 + .../blob/pipeline_tour_success_modal_spec.js | 66 + .../blob/pipeline_tour_success_spec.js | 40 - .../components/popover_spec.js | 32 +- spec/frontend/blob_edit/blob_bundle_spec.js | 67 +- .../boards/board_blank_state_spec.js | 22 +- spec/frontend/boards/board_card_spec.js | 238 + .../boards/board_list_spec.js | 186 +- .../boards/board_new_issue_spec.js | 133 +- .../boards/components/board_column_spec.js | 172 + .../boards/components/board_form_spec.js | 47 + .../boards/issue_spec.js | 4 +- .../boards/list_spec.js | 76 +- spec/frontend/boards/mock_data.js | 57 +- .../ci_enviroments_dropdown_spec.js | 103 + .../components/ci_key_field_spec.js | 244 + .../components/ci_variable_modal_spec.js | 159 +- .../components/ci_variable_popover_spec.js | 4 +- .../ci_variable_list/services/mock_data.js | 69 +- .../ci_variable_list/store/getters_spec.js | 21 + .../ci_variable_list/store/mutations_spec.js | 58 +- .../clusters/components/applications_spec.js | 60 +- .../ingress_modsecurity_settings_spec.js | 73 +- .../components/knative_domain_editor_spec.js | 36 +- .../application_state_machine_spec.js | 16 + .../clusters/stores/clusters_store_spec.js | 4 +- .../__snapshots__/popover_spec.js.snap | 4 +- .../code_navigation/components/app_spec.js | 1 + .../components/popover_spec.js | 16 +- .../code_navigation/store/actions_spec.js | 94 +- .../code_navigation/store/mutations_spec.js | 14 +- .../code_navigation/utils/index_spec.js | 4 +- .../commit/pipelines/pipelines_spec.js | 40 +- .../__snapshots__/contributors_spec.js.snap | 2 + .../gke_cluster/stores/actions_spec.js | 70 +- .../gke_cluster/stores/mutations_spec.js | 91 +- .../custom_metrics_form_fields_spec.js | 334 + .../components/custom_metrics_form_spec.js | 48 + .../cycle_analytics/banner_spec.js | 4 +- .../total_time_component_spec.js | 2 +- spec/frontend/diffs/components/app_spec.js | 6 - .../diffs/components/commit_item_spec.js | 25 +- .../diffs/components/commit_widget_spec.js | 19 + .../compare_dropdown_layout_spec.js | 91 + .../compare_versions_dropdown_spec.js | 179 - .../diffs/components/compare_versions_spec.js | 25 +- .../diffs/components/diff_discussions_spec.js | 4 +- .../components/diff_expansion_cell_spec.js | 4 +- .../diffs/components/diff_file_spec.js | 12 +- .../components/diff_line_note_form_spec.js | 76 +- .../diffs/components/diff_table_cell_spec.js | 15 +- .../diffs/components/file_row_stats_spec.js | 2 +- .../components/image_diff_overlay_spec.js | 140 + .../inline_diff_expansion_row_spec.js | 2 +- .../components/inline_diff_table_row_spec.js | 2 +- .../diffs/components/inline_diff_view_spec.js | 2 +- .../parallel_diff_expansion_row_spec.js | 2 +- .../parallel_diff_table_row_spec.js | 2 +- .../components/parallel_diff_view_spec.js | 2 +- .../diffs/mock_data/diff_file_unreadable.js | 244 + .../diffs/store/actions_spec.js | 163 +- .../diffs/store/getters_spec.js | 0 .../store/getters_versions_dropdowns_spec.js | 149 + .../diffs/store/mutations_spec.js | 104 +- .../diffs/store/utils_spec.js | 2 +- .../environments/environment_delete_spec.js | 38 + .../environments/environment_item_spec.js | 25 +- .../environments/environment_pin_spec.js | 4 +- .../environments/environment_rollback_spec.js | 4 +- .../components/error_details_spec.js | 6 +- .../components/error_tracking_actions_spec.js | 93 + .../components/error_tracking_list_spec.js | 34 +- .../error_tracking/components/list_mock.json | 9 +- .../frontend/fixtures/autocomplete_sources.rb | 8 +- spec/frontend/fixtures/commit.rb | 6 +- spec/frontend/fixtures/merge_requests.rb | 2 +- .../frontend/fixtures/merge_requests_diffs.rb | 7 +- spec/frontend/fixtures/search.rb | 15 + spec/frontend/fixtures/snippet.rb | 2 +- .../grafana_integration_spec.js.snap | 8 +- .../components/grafana_integration_spec.js | 7 +- spec/frontend/header_spec.js | 110 +- spec/frontend/helpers/dom_events_helper.js | 10 + .../helpers/dom_shims/element_scroll_by.js | 1 + spec/frontend/helpers/dom_shims/index.js | 1 + spec/frontend/helpers/jquery.js | 12 + spec/frontend/helpers/monitor_helper_spec.js | 26 + .../frontend/helpers/user_mock_data_helper.js | 28 +- .../components/commit_sidebar/actions_spec.js | 161 + .../commit_sidebar/empty_state_spec.js | 0 .../components/commit_sidebar/form_spec.js | 16 +- .../commit_sidebar/list_collapsed_spec.js | 2 +- .../commit_sidebar/list_item_spec.js | 18 +- .../components/commit_sidebar/list_spec.js | 2 +- .../new_merge_request_option_spec.js | 10 +- .../commit_sidebar/success_message_spec.js | 0 .../components/merge_requests/list_spec.js | 2 - .../components/repo_commit_section_spec.js | 134 + spec/frontend/ide/services/index_spec.js | 81 + spec/frontend/ide/stores/actions/file_spec.js | 2 +- spec/frontend/ide/stores/getters_spec.js | 49 +- .../ide/stores/modules/commit/getters_spec.js | 11 + .../edit/components/active_toggle_spec.js | 65 + .../components/jira_import_app_spec.js | 213 + .../components/jira_import_form_spec.js | 126 + .../components/jira_import_progress_spec.js | 70 + .../components/jira_import_setup_spec.js | 35 + spec/frontend/jira_import/utils_spec.js | 27 + .../frontend/jobs/components/log/mock_data.js | 2 +- spec/frontend/lib/utils/common_utils_spec.js | 35 +- spec/frontend/lib/utils/file_upload_spec.js | 14 +- spec/frontend/lib/utils/text_utility_spec.js | 14 + spec/frontend/lib/utils/url_utility_spec.js | 26 + .../locale/index_spec.js | 12 +- .../logs/components/environment_logs_spec.js | 128 +- .../components/log_advanced_filters_spec.js | 176 + .../components/log_control_buttons_spec.js | 8 +- .../components/log_simple_filters_spec.js | 138 + .../tokens/token_with_loading_state_spec.js | 68 + spec/frontend/logs/mock_data.js | 30 +- spec/frontend/logs/stores/actions_spec.js | 131 +- spec/frontend/logs/stores/getters_spec.js | 45 +- spec/frontend/logs/stores/mutations_spec.js | 20 +- .../components/app_spec.js | 42 + spec/frontend/mocks/mocks_helper.js | 1 - spec/frontend/mocks/mocks_helper_spec.js | 23 +- spec/frontend/mocks/node/jquery.js | 15 - .../dashboard_template_spec.js.snap | 176 +- .../components/charts/annotations_spec.js | 95 + .../monitoring/components/charts/bar_spec.js | 54 + .../components/charts/options_spec.js | 29 +- .../components/charts/single_stat_spec.js | 12 +- .../components/charts/time_series_spec.js | 249 +- .../monitoring/components/dashboard_spec.js | 152 +- .../components/dashboard_template_spec.js | 2 +- .../components/dashboard_url_time_spec.js | 30 +- .../components/embeds/embed_group_spec.js | 163 + .../embeds/metric_embed_spec.js} | 9 +- .../{embed => components/embeds}/mock_data.js | 33 + .../monitoring/components/panel_type_spec.js | 174 +- spec/frontend/monitoring/fixture_data.js | 49 + spec/frontend/monitoring/init_utils.js | 57 - spec/frontend/monitoring/mock_data.js | 426 +- .../frontend/monitoring/store/actions_spec.js | 473 +- .../store/embed_group/actions_spec.js | 16 + .../store/embed_group/getters_spec.js | 19 + .../store/embed_group/mutations_spec.js | 16 + .../frontend/monitoring/store/getters_spec.js | 167 +- .../monitoring/store/mutations_spec.js | 88 +- spec/frontend/monitoring/store/utils_spec.js | 84 +- spec/frontend/monitoring/store_utils.js | 34 + spec/frontend/monitoring/utils_spec.js | 75 +- .../components/diff_discussion_header_spec.js | 2 +- .../notes/components/diff_with_note_spec.js | 86 + .../components/discussion_counter_spec.js | 59 +- .../components/discussion_filter_spec.js | 219 + ...scussion_resolve_with_issue_button_spec.js | 4 +- .../note_actions/reply_button_spec.js | 0 .../notes/components/note_actions_spec.js | 0 .../notes/components/note_awards_list_spec.js | 19 +- .../notes/components/note_body_spec.js | 0 .../notes/components/note_form_spec.js | 101 +- .../notes/components/note_header_spec.js | 77 +- .../components/note_signed_out_widget_spec.js | 0 .../components/noteable_discussion_spec.js | 32 +- .../notes/components/noteable_note_spec.js | 6 +- .../{note_app_spec.js => notes_app_spec.js} | 65 +- .../notes/components/sort_discussion_spec.js | 99 + .../components/toggle_replies_widget_spec.js | 6 +- spec/frontend/notes/stores/actions_spec.js | 13 + .../notes/stores/collapse_utils_spec.js | 0 spec/frontend/notes/stores/getters_spec.js | 8 + spec/frontend/notes/stores/mutation_spec.js | 71 +- .../components/external_dashboard_spec.js | 7 +- .../delete_user_modal_spec.js.snap | 12 +- .../components/delete_user_modal_spec.js | 4 +- .../components/settings_panel_spec.js | 93 +- .../show/highlight_blob_search_result_spec.js | 15 + .../pipelines/graph/action_component_spec.js | 9 +- .../pipelines/graph/graph_component_spec.js | 305 + .../graph/job_group_dropdown_spec.js | 19 +- .../frontend/pipelines/graph/job_item_spec.js | 8 +- .../graph/job_name_component_spec.js | 36 + .../pipelines/graph/linked_pipeline_spec.js | 24 +- .../graph/linked_pipelines_column_spec.js | 38 + .../graph/linked_pipelines_mock_data.js | 4120 ++- .../pipelines/graph/mock_data.js | 0 .../graph/stage_column_component_spec.js | 136 + .../components/delete_account_modal_spec.js | 13 +- .../components/update_username_spec.js | 9 +- .../commits/components/author_select_spec.js | 216 + .../projects/commits/store/actions_spec.js | 69 + .../projects/commits/store/mutations_spec.js | 43 + .../pipelines_area_chart_spec.js.snap | 1 + .../components/reset_key_spec.js | 105 + .../prometheus_metrics/custom_metrics_spec.js | 122 + spec/frontend/prometheus_metrics/mock_data.js | 22 + .../components/project_empty_state_spec.js | 2 + .../components/quickstart_dropdown_spec.js | 120 + .../components/registry_breadcrumb_spec.js | 12 +- .../registry/explorer/pages/details_spec.js | 129 +- .../registry/explorer/pages/index_spec.js | 62 + .../registry/explorer/pages/list_spec.js | 116 +- .../registry/explorer/stores/actions_spec.js | 82 +- .../registry/explorer/stores/getters_spec.js | 36 + .../explorer/stores/mutations_spec.js | 38 +- .../group_empty_state_spec.js.snap | 61 - .../project_empty_state_spec.js.snap | 186 - .../registry/list/components/app_spec.js | 149 - .../components/collapsible_container_spec.js | 176 - .../list/components/group_empty_state_spec.js | 23 - .../components/project_empty_state_spec.js | 27 - .../list/components/table_registry_spec.js | 373 - spec/frontend/registry/list/mock_data.js | 134 - .../registry/list/stores/actions_spec.js | 203 - .../registry/list/stores/getters_spec.js | 52 - .../registry/list/stores/mutations_spec.js | 94 - .../components/registry_settings_app_spec.js | 50 +- .../registry/settings/store/actions_spec.js | 11 +- .../registry/settings/store/getters_spec.js | 16 +- .../registry/settings/store/mutations_spec.js | 34 +- spec/frontend/registry/shared/mocks.js | 4 + .../releases/components/app_edit_spec.js | 112 +- .../components/asset_links_form_spec.js | 229 + .../components/evidence_block_spec.js | 15 +- .../release_block_milestone_info_spec.js | 4 +- .../releases/components/release_block_spec.js | 8 + spec/frontend/releases/mock_data.js | 23 +- .../stores/modules/detail/actions_spec.js | 124 +- .../stores/modules/detail/getters_spec.js | 213 + .../stores/modules/detail/mutations_spec.js | 145 +- .../accessibility_issue_body_spec.js | 112 + .../preview/__snapshots__/index_spec.js.snap | 1 + .../table/__snapshots__/row_spec.js.snap | 60 +- .../components/table/parent_row_spec.js | 9 +- .../repository/components/table/row_spec.js | 70 +- spec/frontend/repository/router_spec.js | 17 +- spec/frontend/search_spec.js | 46 +- .../self_monitor_form_spec.js.snap | 4 +- .../components/self_monitor_form_spec.js | 4 +- .../components/missing_prometheus_spec.js | 4 +- .../frontend/serverless/survey_banner_spec.js | 51 + spec/frontend/sidebar/assignees_spec.js | 6 +- .../sidebar/sidebar_assignees_spec.js | 74 + spec/frontend/smart_interval_spec.js | 197 + spec/frontend/snippet/snippet_edit_spec.js | 45 + .../snippet_description_edit_spec.js.snap | 1 - .../snippet_visibility_edit_spec.js.snap | 14 +- .../frontend/snippets/components/edit_spec.js | 279 + .../components/{app_spec.js => show_spec.js} | 2 +- .../components/snippet_blob_edit_spec.js | 52 +- .../components/snippet_blob_view_spec.js | 39 +- .../snippet_description_edit_spec.js | 15 +- .../components/snippet_header_spec.js | 4 +- .../snippet_visibility_edit_spec.js | 124 +- .../components/edit_header_spec.js | 38 + .../invalid_content_message_spec.js | 23 + .../components/publish_toolbar_spec.js | 84 + .../components/saved_changes_message_spec.js | 59 + .../components/static_site_editor_spec.js | 247 + .../components/submit_changes_error_spec.js | 48 + spec/frontend/static_site_editor/mock_data.js | 44 + .../services/generate_branch_name_spec.js | 22 + .../services/load_source_content_spec.js | 31 + .../services/submit_content_changes_spec.js | 131 + .../static_site_editor/store/actions_spec.js | 152 + .../static_site_editor/store/getters_spec.js | 19 + .../store/mutations_spec.js | 54 + spec/frontend/test_setup.js | 11 +- .../u2f/authenticate_spec.js | 59 +- .../u2f/mock_u2f_device.js | 0 .../u2f/register_spec.js | 48 +- .../mr_widget_terraform_plan_spec.js | 89 + .../deployment_action_button_spec.js | 10 +- .../vue_mr_widget/mr_widget_options_spec.js | 19 - .../__snapshots__/awards_list_spec.js.snap | 287 + .../__snapshots__/clone_dropdown_spec.js.snap | 115 + .../file_row_header_spec.js.snap | 3 + .../vue_shared/components/awards_list_spec.js | 213 + .../components/clipboard_button_spec.js | 4 +- .../components/clone_dropdown_spec.js | 74 + .../vue_shared/components/file_icon_spec.js | 5 +- .../vue_shared/components/file_row_spec.js | 29 + .../form_footer_actions_spec.js.snap | 19 + .../form/__snapshots__/title_spec.js.snap | 10 + .../form/form_footer_actions_spec.js | 29 + .../vue_shared/components/form/title_spec.js | 22 + .../components/local_storage_sync_spec.js | 128 + .../components/ordered_layout_spec.js | 63 + .../labels_select_vue/dropdown_button_spec.js | 2 +- .../dropdown_contents_create_view_spec.js | 10 +- .../dropdown_contents_labels_view_spec.js | 6 +- .../labels_select_vue/dropdown_title_spec.js | 4 +- .../user_avatar/user_avatar_list_spec.js | 6 +- .../user_popover/user_popover_spec.js | 73 +- spec/graphql/features/authorization_spec.rb | 4 +- spec/graphql/features/feature_flag_spec.rb | 2 +- spec/graphql/gitlab_schema_spec.rb | 34 +- .../mutations/resolves_issuable_spec.rb | 67 +- spec/graphql/mutations/issues/update_spec.rb | 2 +- .../resolvers/environments_resolver_spec.rb | 67 + .../sentry_detailed_error_resolver_spec.rb | 24 +- .../graphql/resolvers/issues_resolver_spec.rb | 39 +- .../merge_request_pipelines_resolver_spec.rb | 2 +- .../resolvers/merge_requests_resolver_spec.rb | 6 + .../metrics/dashboard_resolver_spec.rb | 44 + .../dashboards/annotation_resolver_spec.rb | 60 + .../projects/jira_imports_resolver_spec.rb | 79 + .../projects/services_resolver_spec.rb | 72 + .../award_emojis/award_emoji_type_spec.rb | 2 +- spec/graphql/types/base_field_spec.rb | 118 +- spec/graphql/types/board_type_spec.rb | 2 +- spec/graphql/types/diff_refs_type_spec.rb | 2 +- spec/graphql/types/environment_type_spec.rb | 6 +- .../sentry_detailed_error_type_spec.rb | 2 +- .../sentry_error_collection_type_spec.rb | 2 +- ...entry_error_stack_trace_entry_type_spec.rb | 2 +- .../sentry_error_stack_trace_type_spec.rb | 2 +- .../error_tracking/sentry_error_type_spec.rb | 2 +- .../types/grafana_integration_type_spec.rb | 2 +- spec/graphql/types/group_type_spec.rb | 2 +- spec/graphql/types/issue_type_spec.rb | 2 +- spec/graphql/types/jira_import_type_spec.rb | 11 + spec/graphql/types/label_type_spec.rb | 4 +- spec/graphql/types/merge_request_type_spec.rb | 4 +- spec/graphql/types/metadata_type_spec.rb | 2 +- .../types/metrics/dashboard_type_spec.rb | 22 + .../dashboards/annotation_type_spec.rb | 17 + spec/graphql/types/namespace_type_spec.rb | 4 +- .../types/notes/diff_position_type_spec.rb | 2 +- .../types/notes/discussion_type_spec.rb | 4 +- spec/graphql/types/notes/note_type_spec.rb | 8 +- .../graphql/types/notes/noteable_type_spec.rb | 2 +- .../base_permission_type_spec.rb | 6 +- .../types/permission_types/note_spec.rb | 2 +- .../types/project_statistics_type_spec.rb | 2 +- spec/graphql/types/project_type_spec.rb | 16 +- .../types/projects/base_service_type_spec.rb | 13 + .../types/projects/jira_service_type_spec.rb | 13 + .../types/projects/service_type_spec.rb | 16 + .../types/projects/services_enum_spec.rb | 15 + spec/graphql/types/repository_type_spec.rb | 4 +- .../root_storage_statistics_type_spec.rb | 4 +- spec/graphql/types/snippet_type_spec.rb | 72 +- spec/graphql/types/snippets/blob_type_spec.rb | 2 +- .../types/snippets/blob_viewer_type_spec.rb | 2 +- spec/graphql/types/todo_type_spec.rb | 2 +- spec/graphql/types/user_type_spec.rb | 2 +- spec/helpers/clusters_helper_spec.rb | 35 + ...ntainer_expiration_policies_helper_spec.rb | 4 +- spec/helpers/emoji_helper_spec.rb | 33 + spec/helpers/environments_helper_spec.rb | 34 +- spec/helpers/events_helper_spec.rb | 81 +- spec/helpers/issuables_helper_spec.rb | 44 +- spec/helpers/releases_helper_spec.rb | 3 +- spec/helpers/snippets_helper_spec.rb | 31 + spec/helpers/user_callouts_helper_spec.rb | 20 + spec/helpers/users_helper_spec.rb | 4 +- spec/initializers/lograge_spec.rb | 4 +- spec/javascripts/boards/board_card_spec.js | 215 - .../boards/components/board_form_spec.js | 56 - spec/javascripts/boards/mock_data.js | 54 - .../ajax_variable_list_spec.js | 2 +- .../ci_variable_list/ci_variable_list_spec.js | 2 +- .../diffs/components/commit_widget_spec.js | 24 - .../components/image_diff_overlay_spec.js | 146 - spec/javascripts/diffs/create_diffs_store.js | 4 + .../diffs/mock_data/diff_discussions.js | 537 +- .../diffs/mock_data/diff_file_unreadable.js | 249 +- .../dirty_submit/dirty_submit_form_spec.js | 1 + .../filtered_search_manager_spec.js | 102 +- .../helpers/init_vue_mr_page_helper.js | 2 +- .../components/commit_sidebar/actions_spec.js | 228 - .../ide/components/external_link_spec.js | 35 - .../components/repo_commit_section_spec.js | 113 - .../ide/stores/actions/project_spec.js | 112 +- .../integration_settings_form_spec.js | 21 +- .../components/manual_variables_form_spec.js | 4 +- .../components/dashboard_resize_spec.js | 61 +- spec/javascripts/monitoring/fixture_data.js | 1 + spec/javascripts/monitoring/store_utils.js | 1 + spec/javascripts/notebook/cells/code_spec.js | 43 +- .../notes/components/diff_with_note_spec.js | 89 - .../components/discussion_filter_spec.js | 187 - spec/javascripts/notes/helpers.js | 1 - spec/javascripts/notes/mock_data.js | 1 - .../pipelines/graph/graph_component_spec.js | 276 - .../graph/job_name_component_spec.js | 27 - .../graph/linked_pipelines_column_spec.js | 43 - .../graph/linked_pipelines_mock_data.js | 3 - .../graph/stage_column_component_spec.js | 122 - .../sidebar/sidebar_assignees_spec.js | 64 - spec/javascripts/smart_interval_spec.js | 234 - .../project_selector/project_selector_spec.js | 1 + .../components/stacked_progress_bar_spec.js | 16 +- .../project_import_failed_relation_spec.rb | 23 + .../entities/project_import_status_spec.rb | 49 + spec/lib/api/entities/release_spec.rb | 34 +- spec/lib/api/entities/user_spec.rb | 26 + .../lib/api/helpers/custom_validators_spec.rb | 152 - spec/lib/api/helpers_spec.rb | 4 +- .../validations/validators/absence_spec.rb | 23 + .../validators/array_none_any_spec.rb | 28 + .../validations/validators/file_path_spec.rb | 36 + .../validations/validators/git_ref_spec.rb | 46 + .../validations/validators/git_sha_spec.rb | 37 + .../validators/integer_none_any_spec.rb | 28 + .../api/validations/validators/limit_spec.rb | 25 + .../lib/banzai/filter/autolink_filter_spec.rb | 5 - .../filter/issuable_state_filter_spec.rb | 14 - .../filter/reference_redactor_filter_spec.rb | 2 +- spec/lib/banzai/pipeline_spec.rb | 64 + .../lib/constraints/admin_constrainer_spec.rb | 69 + spec/lib/container_registry/client_spec.rb | 67 +- spec/lib/csv_builder_spec.rb | 109 + spec/lib/event_filter_spec.rb | 50 + spec/lib/gitlab/alerting/alert_spec.rb | 56 +- spec/lib/gitlab/application_context_spec.rb | 18 +- .../gitlab/asciidoc/include_processor_spec.rb | 2 +- spec/lib/gitlab/asciidoc_spec.rb | 21 + spec/lib/gitlab/auth/auth_finders_spec.rb | 48 + .../lib/gitlab/auth/current_user_mode_spec.rb | 6 +- spec/lib/gitlab/auth/ldap/config_spec.rb | 14 + spec/lib/gitlab/auth_spec.rb | 141 +- ...ployment_clusters_from_deployments_spec.rb | 44 + ...ll_project_fullpath_in_repo_config_spec.rb | 2 +- .../backfill_project_repositories_spec.rb | 2 +- ...backfill_push_rules_id_in_projects_spec.rb | 32 + ...rojects_without_prometheus_service_spec.rb | 234 + .../migrate_users_bio_to_user_details_spec.rb | 102 + .../populate_canonical_emails_spec.rb | 94 + .../populate_user_highest_roles_table_spec.rb | 71 + .../prepare_untracked_uploads_spec.rb | 2 +- ...recalculate_project_authorizations_spec.rb | 4 +- .../create_resource_user_mention_spec.rb | 12 +- .../gitlab/bitbucket_import/importer_spec.rb | 68 + .../ci/build/artifacts/metadata/entry_spec.rb | 8 +- spec/lib/gitlab/ci/build/image_spec.rb | 2 +- spec/lib/gitlab/ci/config/entry/image_spec.rb | 16 +- .../gitlab/ci/config/entry/include_spec.rb | 72 + .../gitlab/ci/config/entry/reports_spec.rb | 1 + spec/lib/gitlab/ci/config/entry/root_spec.rb | 14 +- .../ci/config/external/file/project_spec.rb | 4 +- .../gitlab/ci/config/external/mapper_spec.rb | 26 +- .../ci/config/external/processor_spec.rb | 20 +- spec/lib/gitlab/ci/config_spec.rb | 26 +- spec/lib/gitlab/ci/jwt_spec.rb | 124 + spec/lib/gitlab/ci/parsers/test/junit_spec.rb | 25 +- .../ci/pipeline/chain/config/content_spec.rb | 201 +- .../pipeline/chain/validate/external_spec.rb | 12 + .../ci/pipeline/seed/build/cache_spec.rb | 10 - spec/lib/gitlab/ci/reports/test_case_spec.rb | 78 +- .../gitlab/ci/reports/test_reports_spec.rb | 32 + spec/lib/gitlab/ci/reports/test_suite_spec.rb | 29 + .../gitlab/ci/status/bridge/factory_spec.rb | 72 + spec/lib/gitlab/ci/status/composite_spec.rb | 2 +- .../auto_devops_gitlab_ci_yaml_spec.rb | 2 - spec/lib/gitlab/ci/yaml_processor_spec.rb | 68 +- .../cleanup/orphan_job_artifact_files_spec.rb | 6 + .../gitlab/closing_issue_extractor_spec.rb | 4 +- spec/lib/gitlab/code_navigation_path_spec.rb | 31 + spec/lib/gitlab/config/loader/yaml_spec.rb | 4 +- spec/lib/gitlab/current_settings_spec.rb | 27 +- .../code_event_fetcher_spec.rb | 1 - .../gitlab/cycle_analytics/code_stage_spec.rb | 1 - .../group_stage_summary_spec.rb | 66 +- .../issue_event_fetcher_spec.rb | 1 - .../cycle_analytics/issue_stage_spec.rb | 1 - .../plan_event_fetcher_spec.rb | 1 - .../gitlab/cycle_analytics/plan_stage_spec.rb | 1 - .../production_event_fetcher_spec.rb | 1 - .../cycle_analytics/production_stage_spec.rb | 1 - .../review_event_fetcher_spec.rb | 1 - .../cycle_analytics/review_stage_spec.rb | 1 - .../cycle_analytics/stage_summary_spec.rb | 90 +- .../staging_event_fetcher_spec.rb | 1 - .../cycle_analytics/staging_stage_spec.rb | 1 - .../test_event_fetcher_spec.rb | 1 - .../gitlab/cycle_analytics/test_stage_spec.rb | 1 - spec/lib/gitlab/danger/changelog_spec.rb | 68 +- spec/lib/gitlab/danger/commit_linter_spec.rb | 1 + spec/lib/gitlab/danger/helper_spec.rb | 12 +- spec/lib/gitlab/data_builder/pipeline_spec.rb | 2 +- spec/lib/gitlab/database/batch_count_spec.rb | 70 +- .../gitlab/database/migration_helpers_spec.rb | 403 +- .../schema_versions_copy_mixin_spec.rb | 42 + .../gitlab/database/schema_cleaner_spec.rb | 31 + .../diff/formatters/text_formatter_spec.rb | 3 +- spec/lib/gitlab/diff/highlight_cache_spec.rb | 52 +- spec/lib/gitlab/diff/position_spec.rb | 1 + .../{logs_spec.rb => logs/lines_spec.rb} | 24 +- .../gitlab/elasticsearch/logs/pods_spec.rb | 35 + .../gitlab/email/attachment_uploader_spec.rb | 15 + .../email/message/repository_push_spec.rb | 2 +- spec/lib/gitlab/file_detector_spec.rb | 15 +- spec/lib/gitlab/file_hook_spec.rb | 2 +- .../lib/gitlab/gfm/reference_rewriter_spec.rb | 8 +- spec/lib/gitlab/gfm/uploads_rewriter_spec.rb | 2 +- spec/lib/gitlab/git/blob_spec.rb | 66 +- .../gitlab/git/diff_stats_collection_spec.rb | 12 + spec/lib/gitlab/git/remote_mirror_spec.rb | 4 +- spec/lib/gitlab/git/repository_spec.rb | 9 + spec/lib/gitlab/git/tree_spec.rb | 9 + spec/lib/gitlab/git_access_snippet_spec.rb | 79 + .../gitlab/gitaly_client/blob_service_spec.rb | 6 +- .../praefect_info_service_spec.rb | 20 + .../gitaly_client/remote_service_spec.rb | 2 +- spec/lib/gitlab/gitaly_client_spec.rb | 9 + .../github_import/parallel_importer_spec.rb | 2 +- .../gitlab/grafana_embed_usage_data_spec.rb | 70 - .../grape_logging/loggers/perf_logger_spec.rb | 28 + .../loggers/queue_duration_logger_spec.rb | 4 +- spec/lib/gitlab/graphql/docs/renderer_spec.rb | 12 +- ...ernally_paginated_array_connection_spec.rb | 18 +- .../filterable_array_connection_spec.rb | 12 +- .../conditions/not_null_condition_spec.rb | 4 +- .../keyset/conditions/null_condition_spec.rb | 4 +- .../keyset/connection_spec.rb | 19 +- .../keyset/order_info_spec.rb | 2 +- .../keyset/query_builder_spec.rb | 4 +- ..._active_record_relation_connection_spec.rb | 2 +- .../gitlab/hook_data/issue_builder_spec.rb | 1 + spec/lib/gitlab/http_io_spec.rb | 8 + spec/lib/gitlab/http_spec.rb | 123 + spec/lib/gitlab/import/metrics_spec.rb | 56 + spec/lib/gitlab/import/set_async_jid_spec.rb | 8 +- spec/lib/gitlab/import_export/all_models.yml | 17 +- spec/lib/gitlab/import_export/fork_spec.rb | 2 + ...r_spec.rb => legacy_tree_restorer_spec.rb} | 4 +- ...aver_spec.rb => legacy_tree_saver_spec.rb} | 48 +- .../import_export_equivalence_spec.rb | 4 + .../json/legacy_reader/file_spec.rb | 32 + .../json/legacy_reader/hash_spec.rb | 35 + .../json/legacy_reader/shared_example.rb | 102 + .../import_export/json/legacy_reader_spec.rb | 149 - .../import_export/json/legacy_writer_spec.rb | 102 +- .../import_export/json/ndjson_reader_spec.rb | 113 + .../import_export/json/ndjson_writer_spec.rb | 63 + .../json/streaming_serializer_spec.rb | 98 + .../legacy_relation_tree_saver_spec.rb | 34 +- .../import_export/members_mapper_spec.rb | 60 + .../import_export/project/import_task_spec.rb | 2 +- .../project/legacy_tree_saver_spec.rb | 397 - .../project/relation_factory_spec.rb | 2 +- .../project/tree_restorer_spec.rb | 1675 +- .../import_export/project/tree_saver_spec.rb | 581 +- .../relation_tree_restorer_spec.rb | 121 +- .../import_export/safe_model_attributes.yml | 24 +- .../snippet_repo_restorer_spec.rb | 13 +- spec/lib/gitlab/import_formatter_spec.rb | 35 + .../lib/gitlab/instrumentation_helper_spec.rb | 48 +- .../gitlab/jira_import/base_importer_spec.rb | 85 + .../jira_import/issue_serializer_spec.rb | 160 + .../jira_import/issues_importer_spec.rb | 106 + .../jira_import/labels_importer_spec.rb | 38 + spec/lib/gitlab/jira_import_spec.rb | 67 + spec/lib/gitlab/json_spec.rb | 91 + .../kubernetes/helm/base_command_spec.rb | 52 + .../kubernetes/helm/init_command_spec.rb | 52 - .../kubernetes/helm/install_command_spec.rb | 30 +- .../kubernetes/helm/patch_command_spec.rb | 16 - .../legacy_github_import/client_spec.rb | 24 +- spec/lib/gitlab/lets_encrypt/order_spec.rb | 19 + .../metrics/dashboard/processor_spec.rb | 81 +- .../dashboard/service_selector_spec.rb | 13 +- .../stages/panel_ids_inserter_spec.rb | 86 + .../metrics/requests_rack_middleware_spec.rb | 68 + .../middleware/rails_queue_duration_spec.rb | 9 +- .../middleware/same_site_cookies_spec.rb | 107 + spec/lib/gitlab/object_hierarchy_spec.rb | 4 +- spec/lib/gitlab/polling_interval_spec.rb | 32 + .../lib/gitlab/project_authorizations_spec.rb | 2 +- spec/lib/gitlab/project_template_spec.rb | 4 +- spec/lib/gitlab/prometheus/adapter_spec.rb | 8 + ...dditional_metrics_deployment_query_spec.rb | 4 +- ...ditional_metrics_environment_query_spec.rb | 6 +- .../queries/deployment_query_spec.rb | 10 +- .../queries/knative_invocation_query_spec.rb | 2 +- .../prometheus/queries/validate_query_spec.rb | 62 + spec/lib/gitlab/prometheus_client_spec.rb | 28 +- spec/lib/gitlab/reference_extractor_spec.rb | 10 +- spec/lib/gitlab/repository_set_cache_spec.rb | 6 + .../gitlab/repository_size_checker_spec.rb | 93 + .../repository_size_error_message_spec.rb | 55 + .../lib/gitlab/repository_url_builder_spec.rb | 56 + spec/lib/gitlab/shell_spec.rb | 8 - spec/lib/gitlab/sidekiq_cluster/cli_spec.rb | 29 +- spec/lib/gitlab/sidekiq_cluster_spec.rb | 8 +- .../sidekiq_logging/json_formatter_spec.rb | 44 +- .../sidekiq_logging/structured_logger_spec.rb | 49 +- .../sidekiq_middleware/client_metrics_spec.rb | 9 +- .../duplicate_jobs/client_spec.rb | 10 + .../duplicate_jobs/duplicate_job_spec.rb | 19 +- .../duplicate_jobs/server_spec.rb | 13 +- .../sidekiq_middleware/server_metrics_spec.rb | 9 +- .../worker_context/server_spec.rb | 13 +- spec/lib/gitlab/sidekiq_middleware_spec.rb | 55 +- .../presenters/issue_show_spec.rb | 4 +- .../gitlab/static_site_editor/config_spec.rb | 61 + spec/lib/gitlab/url_builder_spec.rb | 234 +- spec/lib/gitlab/usage_data_spec.rb | 554 +- spec/lib/gitlab/utils_spec.rb | 18 +- .../wiki_pages/front_matter_parser_spec.rb | 274 + spec/lib/gitlab/x509/commit_spec.rb | 244 +- spec/lib/gitlab/x509/signature_spec.rb | 232 + spec/lib/marginalia_spec.rb | 30 +- spec/lib/quality/helm3_client_spec.rb | 133 + spec/mailers/emails/issues_spec.rb | 49 + spec/mailers/emails/pages_domains_spec.rb | 31 +- spec/mailers/emails/projects_spec.rb | 136 + spec/mailers/notify_spec.rb | 8 +- ...3203550_remove_orphaned_chat_names_spec.rb | 27 + ...ployment_clusters_from_deployments_spec.rb | 50 + spec/migrations/active_record/schema_spec.rb | 20 +- ...cleanup_empty_commit_user_mentions_spec.rb | 2 +- ...ojects_without_prometheus_services_spec.rb | 42 + .../generate_missing_routes_spec.rb | 4 +- ...o_dev_ops_domain_to_cluster_domain_spec.rb | 4 +- .../migrate_bot_type_to_user_type_spec.rb | 20 + ...igrate_commit_notes_mentions_to_db_spec.rb | 2 +- spec/migrations/nullify_users_role_spec.rb | 6 +- ...backfill_push_rules_id_in_projects_spec.rb | 49 + ..._populate_user_highest_roles_table_spec.rb | 46 + .../schedule_to_archive_legacy_traces_spec.rb | 6 +- spec/models/ability_spec.rb | 6 - spec/models/active_session_spec.rb | 4 +- .../alerting/project_alerting_setting_spec.rb | 40 + spec/models/application_setting_spec.rb | 19 +- spec/models/award_emoji_spec.rb | 16 + spec/models/chat_name_spec.rb | 6 + spec/models/ci/bridge_spec.rb | 2 - spec/models/ci/build_dependencies_spec.rb | 165 + spec/models/ci/build_spec.rb | 259 +- spec/models/ci/daily_report_result_spec.rb | 62 + spec/models/ci/group_spec.rb | 12 +- spec/models/ci/group_variable_spec.rb | 2 +- spec/models/ci/job_artifact_spec.rb | 12 + spec/models/ci/pipeline_spec.rb | 66 +- spec/models/ci/processable_spec.rb | 92 +- spec/models/ci/runner_spec.rb | 71 +- spec/models/ci/variable_spec.rb | 2 +- .../clusters/applications/fluentd_spec.rb | 50 + .../clusters/applications/ingress_spec.rb | 90 +- .../clusters/applications/prometheus_spec.rb | 45 + spec/models/clusters/cluster_spec.rb | 20 +- spec/models/commit_status_spec.rb | 19 +- spec/models/concerns/bulk_insert_safe_spec.rb | 37 +- .../concerns/{ => ci}/has_variable_spec.rb | 2 +- .../models/concerns/{ => ci}/maskable_spec.rb | 10 +- spec/models/concerns/has_status_spec.rb | 2 +- spec/models/concerns/issuable_spec.rb | 37 +- spec/models/concerns/milestoneish_spec.rb | 64 +- spec/models/concerns/noteable_spec.rb | 15 + .../models/concerns/optionally_search_spec.rb | 42 +- .../concerns/prometheus_adapter_spec.rb | 24 +- spec/models/concerns/where_composite_spec.rb | 184 + spec/models/container_registry/event_spec.rb | 92 + spec/models/container_repository_spec.rb | 12 + .../cycle_analytics/group_level_spec.rb | 2 +- spec/models/deploy_token_spec.rb | 4 +- spec/models/deployment_spec.rb | 22 + spec/models/diff_note_position_spec.rb | 50 + spec/models/environment_spec.rb | 10 + spec/models/event_collection_spec.rb | 81 +- spec/models/event_spec.rb | 367 +- spec/models/group_group_link_spec.rb | 16 + spec/models/import_failure_spec.rb | 23 +- spec/models/issue_spec.rb | 31 +- spec/models/jira_import_state_spec.rb | 165 + spec/models/member_spec.rb | 63 +- spec/models/merge_request_diff_spec.rb | 74 + spec/models/merge_request_spec.rb | 105 +- .../metrics/dashboard/annotation_spec.rb | 79 + spec/models/namespace_spec.rb | 2 +- spec/models/pages_domain_spec.rb | 18 + spec/models/personal_snippet_spec.rb | 2 - spec/models/project_feature_spec.rb | 4 +- spec/models/project_group_link_spec.rb | 17 + spec/models/project_import_state_spec.rb | 33 +- .../project_services/bamboo_service_spec.rb | 17 +- .../project_services/bugzilla_service_spec.rb | 2 - .../buildkite_service_spec.rb | 18 +- .../chat_message/pipeline_message_spec.rb | 59 +- .../chat_notification_service_spec.rb | 24 + .../project_services/discord_service_spec.rb | 18 + .../project_services/drone_ci_service_spec.rb | 4 + .../project_services/irker_service_spec.rb | 2 +- .../jira_tracker_data_spec.rb | 2 +- .../open_project_service_spec.rb | 35 + .../open_project_tracker_data_spec.rb | 19 + .../prometheus_service_spec.rb | 144 + .../project_services/teamcity_service_spec.rb | 22 +- spec/models/project_snippet_spec.rb | 2 - spec/models/project_spec.rb | 228 +- spec/models/project_wiki_spec.rb | 27 +- spec/models/prometheus_alert_event_spec.rb | 103 + spec/models/prometheus_alert_spec.rb | 3 +- spec/models/release_spec.rb | 10 +- spec/models/{ => releases}/evidence_spec.rb | 2 +- spec/models/remote_mirror_spec.rb | 20 + spec/models/resource_milestone_event_spec.rb | 26 + spec/models/service_spec.rb | 118 +- spec/models/snippet_repository_spec.rb | 37 +- spec/models/snippet_spec.rb | 97 +- spec/models/terraform/state_spec.rb | 63 + spec/models/user_canonical_email_spec.rb | 20 + spec/models/user_highest_role_spec.rb | 16 + spec/models/user_preference_spec.rb | 2 +- spec/models/user_spec.rb | 701 +- spec/models/user_type_enums_spec.rb | 13 + spec/models/users_statistics_spec.rb | 84 + spec/models/wiki_page/meta_spec.rb | 430 + spec/models/wiki_page/slug_spec.rb | 94 + spec/models/wiki_page_spec.rb | 234 +- spec/policies/base_policy_spec.rb | 12 + spec/policies/environment_policy_spec.rb | 44 + spec/policies/global_policy_spec.rb | 33 + spec/policies/group_policy_spec.rb | 22 + .../dashboard/annotation_policy_spec.rb | 73 + spec/policies/note_policy_spec.rb | 5 + spec/policies/project_policy_spec.rb | 194 +- spec/presenters/ci/pipeline_presenter_spec.rb | 121 +- .../presenters/pages_domain_presenter_spec.rb | 73 + spec/presenters/project_presenter_spec.rb | 20 + spec/presenters/release_presenter_spec.rb | 24 - spec/rake_helper.rb | 2 + .../api_guard/admin_mode_middleware_spec.rb | 2 +- spec/requests/api/api_spec.rb | 49 +- spec/requests/api/avatar_spec.rb | 10 +- spec/requests/api/award_emoji_spec.rb | 8 +- spec/requests/api/commit_statuses_spec.rb | 2 +- spec/requests/api/commits_spec.rb | 28 +- .../api/container_registry_event_spec.rb | 41 + spec/requests/api/deploy_keys_spec.rb | 6 +- spec/requests/api/deploy_tokens_spec.rb | 56 +- spec/requests/api/discussions_spec.rb | 2 +- spec/requests/api/environments_spec.rb | 22 +- spec/requests/api/events_spec.rb | 20 + spec/requests/api/graphql/group_query_spec.rb | 3 + .../metrics/dashboard/annotations_spec.rb | 109 + .../graphql/metrics/dashboard_query_spec.rb | 82 + .../mutations/jira_import/start_spec.rb | 135 + .../namespace/root_storage_statistics_spec.rb | 4 +- .../api/graphql/project/base_service_spec.rb | 47 + .../api/graphql/project/jira_import_spec.rb | 171 + .../api/graphql/project/jira_service_spec.rb | 44 + .../project/merge_request/diff_notes_spec.rb | 2 +- .../api/graphql/project/merge_request_spec.rb | 48 + .../project/project_statistics_spec.rb | 4 +- .../api/graphql/project_query_spec.rb | 22 +- spec/requests/api/graphql_spec.rb | 13 - spec/requests/api/group_clusters_spec.rb | 17 +- .../api/group_container_repositories_spec.rb | 2 +- spec/requests/api/group_export_spec.rb | 13 + spec/requests/api/group_import_spec.rb | 2 +- spec/requests/api/group_labels_spec.rb | 6 +- spec/requests/api/groups_spec.rb | 24 +- spec/requests/api/import_github_spec.rb | 4 +- spec/requests/api/internal/base_spec.rb | 162 +- spec/requests/api/internal/pages_spec.rb | 393 +- .../api/issues/get_group_issues_spec.rb | 8 +- .../api/issues/get_project_issues_spec.rb | 10 +- spec/requests/api/issues/issues_spec.rb | 10 +- .../api/issues/post_projects_issues_spec.rb | 20 +- .../api/issues/put_projects_issues_spec.rb | 2 +- spec/requests/api/jobs_spec.rb | 6 +- spec/requests/api/labels_spec.rb | 16 +- spec/requests/api/lint_spec.rb | 2 +- spec/requests/api/markdown_spec.rb | 2 - spec/requests/api/members_spec.rb | 8 +- spec/requests/api/merge_request_diffs_spec.rb | 6 +- spec/requests/api/merge_requests_spec.rb | 108 +- .../api/metrics/dashboard/annotations_spec.rb | 87 + spec/requests/api/notes_spec.rb | 52 +- .../api/pages/internal_access_spec.rb | 2 +- .../requests/api/pages/private_access_spec.rb | 2 +- spec/requests/api/pages/public_access_spec.rb | 2 +- spec/requests/api/pipeline_schedules_spec.rb | 2 +- spec/requests/api/pipelines_spec.rb | 20 +- spec/requests/api/project_clusters_spec.rb | 100 +- spec/requests/api/project_events_spec.rb | 2 +- spec/requests/api/project_hooks_spec.rb | 4 +- spec/requests/api/project_snippets_spec.rb | 22 +- spec/requests/api/project_statistics_spec.rb | 8 - spec/requests/api/project_templates_spec.rb | 6 +- spec/requests/api/projects_spec.rb | 47 +- spec/requests/api/releases_spec.rb | 49 +- spec/requests/api/repositories_spec.rb | 6 +- spec/requests/api/runner_spec.rb | 45 +- spec/requests/api/runners_spec.rb | 162 +- spec/requests/api/services_spec.rb | 6 +- spec/requests/api/snippets_spec.rb | 20 +- spec/requests/api/system_hooks_spec.rb | 2 +- spec/requests/api/terraform/state_spec.rb | 233 + spec/requests/api/todos_spec.rb | 70 +- spec/requests/api/user_counts_spec.rb | 6 +- spec/requests/api/users_spec.rb | 25 +- spec/requests/health_controller_spec.rb | 8 +- .../import/gitlab_projects_controller_spec.rb | 139 + spec/requests/lfs_http_spec.rb | 6 +- spec/requests/openid_connect_spec.rb | 2 +- .../merge_requests_discussions_spec.rb | 2 +- spec/routing/admin_routing_spec.rb | 4 - spec/routing/openid_connect_spec.rb | 5 + spec/routing/project_routing_spec.rb | 9 +- spec/routing/routing_spec.rb | 31 + spec/rubocop/cop/filename_length_spec.rb | 51 + .../gitlab/duplicate_spec_location_spec.rb | 105 + .../add_columns_to_wide_tables_spec.rb | 92 + spec/rubocop/cop/migration/datetime_spec.rb | 138 +- .../migration/safer_boolean_column_spec.rb | 8 +- .../cop/migration/update_large_table_spec.rb | 12 +- ...ck_retries_without_ddl_transaction_spec.rb | 46 + .../cop/performance/ar_count_each_spec.rb | 62 + .../cop/performance/readlines_each_spec.rb | 77 + .../cop/rspec/have_gitlab_http_status_spec.rb | 20 +- .../rspec/modify_sidekiq_middleware_spec.rb | 39 + .../cop/static_translation_definition_spec.rb | 109 + .../analytics_summary_serializer_spec.rb | 17 + spec/serializers/build_details_entity_spec.rb | 2 +- spec/serializers/diff_file_entity_spec.rb | 8 +- spec/serializers/diffs_entity_spec.rb | 44 +- .../serializers/diffs_metadata_entity_spec.rb | 4 +- spec/serializers/discussion_entity_spec.rb | 13 +- .../merge_request_basic_entity_spec.rb | 17 + ..._request_poll_cached_widget_entity_spec.rb | 6 + .../merge_request_poll_widget_entity_spec.rb | 4 + .../merge_request_serializer_spec.rb | 16 + .../merge_request_widget_entity_spec.rb | 22 +- .../prometheus_alert_entity_spec.rb | 26 + spec/serializers/test_case_entity_spec.rb | 44 + .../update_service_spec.rb | 16 + ...er_registry_authentication_service_spec.rb | 10 +- ...rge_when_pipeline_succeeds_service_spec.rb | 22 +- spec/services/auto_merge_service_spec.rb | 69 +- ...ate_cross_project_pipeline_service_spec.rb | 42 +- .../parent_child_pipeline_spec.rb | 200 +- .../ci/create_pipeline_service_spec.rb | 10 +- .../ci/daily_report_result_service_spec.rb | 161 + .../ci/expire_pipeline_cache_service_spec.rb | 10 +- .../create_pipeline_service_spec.rb | 2 +- .../generate_coverage_reports_service_spec.rb | 81 + .../shared_processing_service.rb | 77 +- spec/services/ci/retry_build_service_spec.rb | 1 + .../ci/retry_pipeline_service_spec.rb | 2 +- .../services/ci/update_runner_service_spec.rb | 13 + .../check_upgrade_progress_service_spec.rb | 94 + .../prometheus_config_service_spec.rb | 158 + .../prometheus_health_check_service_spec.rb | 113 + .../prometheus_update_service_spec.rb | 92 + .../schedule_update_service_spec.rb | 37 + spec/services/clusters/create_service_spec.rb | 88 + .../management/create_project_service_spec.rb | 126 + ...gement_project_permissions_service_spec.rb | 88 + ...capture_diff_note_position_service_spec.rb | 31 + ...apture_diff_note_positions_service_spec.rb | 67 + spec/services/emails/create_service_spec.rb | 2 +- spec/services/emails/destroy_service_spec.rb | 5 +- .../environments/auto_stop_service_spec.rb | 12 - .../issue_update_service_spec.rb | 2 +- spec/services/event_create_service_spec.rb | 40 + .../git/process_ref_changes_service_spec.rb | 43 + .../deploy_tokens/destroy_service_spec.rb | 11 + .../import_export/export_service_spec.rb | 51 +- .../import_export/import_service_spec.rb | 16 +- .../issuable/bulk_update_service_spec.rb | 8 +- .../clone/attributes_rewriter_spec.rb | 3 - spec/services/issues/close_service_spec.rb | 13 - spec/services/issues/create_service_spec.rb | 49 +- .../issues/export_csv_service_spec.rb | 170 + spec/services/issues/move_service_spec.rb | 2 +- spec/services/issues/update_service_spec.rb | 4 +- .../jira_import/start_import_service_spec.rb | 117 + .../labels/available_labels_service_spec.rb | 2 +- .../add_todo_when_build_fails_service_spec.rb | 15 +- .../after_create_service_spec.rb | 14 - .../merge_requests/create_service_spec.rb | 16 - .../merge_orchestration_service_spec.rb | 116 + .../mergeability_check_service_spec.rb | 18 + .../pushed_branches_service_spec.rb | 42 + .../merge_requests/update_service_spec.rb | 14 +- .../annotations/create_service_spec.rb | 160 + .../annotations/delete_service_spec.rb | 93 + .../dashboard/clone_dashboard_service_spec.rb | 16 +- ...ec.rb => custom_dashboard_service_spec.rb} | 15 +- .../custom_metric_embed_service_spec.rb | 25 +- .../gitlab_alert_embed_service_spec.rb | 96 + .../dashboard/pod_dashboard_service_spec.rb | 5 +- .../self_monitoring_dashboard_service_spec.rb | 5 +- .../system_dashboard_service_spec.rb | 5 +- .../dashboard/transient_embed_service_spec.rb | 92 + .../update_dashboard_service_spec.rb | 88 +- .../milestones/transfer_service_spec.rb | 10 + spec/services/notes/create_service_spec.rb | 15 +- .../builder/new_note_spec.rb | 64 + spec/services/notification_service_spec.rb | 54 +- ...n_lets_encrypt_certificate_service_spec.rb | 26 + .../retry_acme_order_service_spec.rb | 37 + .../create_service_spec.rb | 24 + spec/services/pod_logs/base_service_spec.rb | 138 +- .../pod_logs/elasticsearch_service_spec.rb | 85 +- .../pod_logs/kubernetes_service_spec.rb | 133 +- .../projects/alerting/notify_service_spec.rb | 14 +- .../cleanup_tags_service_spec.rb | 99 +- .../destroy_service_spec.rb | 10 + .../deploy_tokens/destroy_service_spec.rb | 11 + spec/services/projects/fork_service_spec.rb | 6 +- .../group_links/create_service_spec.rb | 2 +- .../hashed_storage/migration_service_spec.rb | 31 + .../hashed_storage/rollback_service_spec.rb | 26 + .../import_export/export_service_spec.rb | 24 +- spec/services/projects/import_service_spec.rb | 20 +- .../operations/update_service_spec.rb | 81 + .../projects/participants_service_spec.rb | 4 +- .../alerts/create_events_service_spec.rb | 312 + .../prometheus/alerts/create_service_spec.rb | 52 + .../prometheus/alerts/destroy_service_spec.rb | 21 + .../prometheus/alerts/notify_service_spec.rb | 344 + .../prometheus/alerts/update_service_spec.rb | 53 + .../metrics/destroy_service_spec.rb | 28 + .../prometheus/metrics/update_service_spec.rb | 44 + .../update_repository_storage_service_spec.rb | 15 +- .../create_default_alerts_service_spec.rb | 74 + .../quick_actions/interpret_service_spec.rb | 33 +- spec/services/releases/create_service_spec.rb | 2 +- ...epository_archive_clean_up_service_spec.rb | 6 +- ...ic_milestone_notes_builder_service_spec.rb | 25 + .../create_access_token_service_spec.rb | 163 + spec/services/search_service_spec.rb | 160 +- spec/services/snippets/create_service_spec.rb | 55 +- spec/services/snippets/update_service_spec.rb | 101 +- spec/services/spam/spam_check_service_spec.rb | 39 +- spec/services/tags/create_service_spec.rb | 24 +- .../terraform/remote_state_handler_spec.rb | 143 + .../destroy/entity_leave_service_spec.rb | 2 +- spec/services/users/activity_service_spec.rb | 4 +- spec/services/users/build_service_spec.rb | 28 + spec/services/users/create_service_spec.rb | 3 +- spec/services/users/destroy_service_spec.rb | 2 +- .../update_canonical_email_service_spec.rb | 116 + ...update_highest_member_role_service_spec.rb | 41 + spec/services/users/update_service_spec.rb | 35 +- spec/services/web_hook_service_spec.rb | 10 - spec/services/wiki_pages/base_service_spec.rb | 20 +- .../wiki_pages/create_service_spec.rb | 49 +- .../wiki_pages/destroy_service_spec.rb | 22 +- .../wiki_pages/update_service_spec.rb | 54 +- .../x509_certificate_revoke_service_spec.rb | 2 - spec/spec_helper.rb | 77 +- spec/support/database_cleaner.rb | 4 - spec/support/helpers/api_helpers.rb | 15 +- .../support/helpers/api_validators_helpers.rb | 23 + .../helpers/features/web_ide_spec_helpers.rb | 148 + spec/support/helpers/graphql_helpers.rb | 27 +- spec/support/helpers/lets_encrypt_helpers.rb | 10 +- spec/support/helpers/migrations_helpers.rb | 3 + .../helpers/navbar_structure_helper.rb | 21 + spec/support/helpers/prometheus_helpers.rb | 33 +- spec/support/helpers/repo_helpers.rb | 4 + spec/support/helpers/stub_experiments.rb | 4 + spec/support/helpers/stub_gitlab_calls.rb | 8 +- spec/support/helpers/stub_object_storage.rb | 7 + spec/support/helpers/test_env.rb | 67 +- spec/support/helpers/usage_data_helpers.rb | 157 + spec/support/helpers/x509_helpers.rb | 4 + spec/support/import_export/common_util.rb | 69 + .../import_export/configuration_helper.rb | 4 +- spec/support/matchers/exceed_query_limit.rb | 36 + spec/support/matchers/exclude_matcher.rb | 3 + spec/support/matchers/graphql_matchers.rb | 12 +- spec/support/non_existing_records_helper.rb | 12 + spec/support/praefect.rb | 11 + .../services/deploy_token_shared_examples.rb | 32 +- .../finders/issues_finder_shared_contexts.rb | 45 +- .../merge_requests_finder_shared_contexts.rb | 19 +- .../finders/users_finder_shared_contexts.rb | 8 +- .../mailers/notify_shared_context.rb | 9 +- .../navbar_structure_context.rb | 164 + .../policies/group_policy_shared_context.rb | 7 +- .../policies/project_policy_shared_context.rb | 12 +- .../project_service_shared_context.rb | 32 + ...and_project_boards_query_shared_context.rb | 4 +- .../binary_blob_shared_examples.rb | 60 + .../cache_control_shared_examples.rb | 37 + .../content_disposition_shared_examples.rb | 21 + .../deploy_token_shared_examples.rb | 14 +- ...ionless_auth_controller_shared_examples.rb | 4 +- ...update_invalid_issuable_shared_examples.rb | 2 +- .../uploads_actions_shared_examples.rb | 4 +- .../project_upload_files_shared_examples.rb | 84 + .../snippet_visibility_shared_examples.rb | 15 +- .../jira_import_resolver_shared_examples.rb | 15 + .../services_resolver_shared_examples.rb | 15 + .../resolves_issuable_shared_examples.rb | 55 + .../mentions_migration_shared_examples.rb | 8 - .../base_stage_shared_examples.rb} | 4 +- .../default_query_config_shared_examples.rb} | 0 .../event_shared_examples.rb} | 0 .../tree_restorer_shared_examples.rb} | 5 +- .../base_importer_shared_examples.rb | 5 + .../models/ci_variable_shared_examples.rb | 2 +- ...lob_replicator_strategy_shared_examples.rb | 40 + .../bulk_insert_safe_shared_examples.rb | 6 +- .../concerns/composite_id_shared_examples.rb | 47 + .../has_repository_shared_examples.rb | 104 +- .../diff_positionable_note_shared_examples.rb | 1 + .../jira_import_state_shared_examples.rb | 40 + .../models/mentionable_shared_examples.rb | 6 +- .../update_highest_role_shared_examples.rb | 52 + .../versioned_description_shared_examples.rb | 58 +- .../policies/wiki_policies_shared_examples.rb | 152 + .../issuable_quick_actions_shared_examples.rb | 4 +- .../merge_quick_action_shared_examples.rb | 19 +- .../requests/api/boards_shared_examples.rb | 2 +- .../api/diff_discussions_shared_examples.rb | 8 +- .../api/discussions_shared_examples.rb | 64 +- .../projects/services_shared_examples.rb | 21 + .../api/issuable_participants_examples.rb | 2 +- .../api/milestones_shared_examples.rb | 10 +- .../requests/api/notes_shared_examples.rb | 12 +- .../resolvable_discussions_shared_examples.rb | 2 +- ...source_label_events_api_shared_examples.rb | 4 +- .../response_status_shared_examples.rb | 9 + .../requests/snippet_shared_examples.rb | 7 + .../start_import_service_shared_examples.rb | 9 + .../metrics/dashboard_shared_examples.rb | 21 + ...ository_storage_service_shared_examples.rb | 11 +- .../spam_check_shared_examples.rb | 20 - .../measurable_shared_examples.rb | 2 +- .../jira_import_workers_shared_examples.rb | 41 + spec/support/sidekiq_middleware.rb | 16 +- spec/tasks/gitlab/backup_rake_spec.rb | 3 +- spec/tasks/gitlab/cleanup_rake_spec.rb | 65 + spec/tasks/gitlab/db_rake_spec.rb | 51 +- spec/tasks/gitlab/praefect_rake_spec.rb | 52 + spec/tasks/gitlab/storage_rake_spec.rb | 6 +- spec/tasks/gitlab/x509/update_rake_spec.rb | 42 + spec/uploaders/file_uploader_spec.rb | 36 +- spec/uploaders/object_storage_spec.rb | 24 +- .../terraform/state_uploader_spec.rb | 82 + .../general.html.haml_spec.rb | 64 + .../integrations.html.haml_spec.rb | 34 - .../views/admin/users/_user.html.haml_spec.rb | 41 + spec/views/layouts/_head.html.haml_spec.rb | 25 +- .../nav/sidebar/_admin.html.haml_spec.rb | 16 + spec/views/profiles/show.html.haml_spec.rb | 44 + .../artifacts/_artifact.html.haml_spec.rb | 2 +- .../projects/issues/show.html.haml_spec.rb | 16 +- .../merge_requests/show.html.haml_spec.rb | 14 + .../projects/pages/show.html.haml_spec.rb | 72 + .../pages_domains/show.html.haml_spec.rb | 2 +- .../projects/tree/_tree_row.html.haml_spec.rb | 4 + .../projects/_project.html.haml_spec.rb | 2 +- ...eate_cross_project_pipeline_worker_spec.rb | 2 +- .../ci/daily_report_results_worker_spec.rb | 34 + .../ci/pipeline_bridge_status_worker_spec.rb | 2 +- .../workers/cluster_update_app_worker_spec.rb | 101 + ...cluster_wait_for_app_update_worker_spec.rb | 27 + spec/workers/concerns/cronjob_queue_spec.rb | 22 + .../concerns/project_import_options_spec.rb | 11 + spec/workers/concerns/waitable_worker_spec.rb | 11 +- .../create_commit_signature_worker_spec.rb | 61 +- spec/workers/create_evidence_worker_spec.rb | 4 +- .../error_tracking_issue_link_worker_spec.rb | 14 + spec/workers/expire_job_cache_worker_spec.rb | 2 +- .../expire_pipeline_cache_worker_spec.rb | 8 +- spec/workers/export_csv_worker_spec.rb | 34 + .../jira_import/import_issue_worker_spec.rb | 61 + .../stage/finish_import_worker_spec.rb | 58 + .../stage/import_attachments_worker_spec.rb | 43 + .../stage/import_issues_worker_spec.rb | 75 + .../stage/import_labels_worker_spec.rb | 54 + .../stage/import_notes_worker_spec.rb | 43 + .../stage/start_import_worker_spec.rb | 92 + spec/workers/group_export_worker_spec.rb | 4 +- spec/workers/group_import_worker_spec.rb | 4 +- .../process_prometheus_alert_worker_spec.rb | 155 + ...mespaceless_project_destroy_worker_spec.rb | 2 +- .../namespaces/root_statistics_worker_spec.rb | 15 + .../schedule_aggregation_worker_spec.rb | 13 +- spec/workers/new_issue_worker_spec.rb | 4 +- spec/workers/new_merge_request_worker_spec.rb | 8 +- spec/workers/new_note_worker_spec.rb | 4 +- ...ges_domain_ssl_renewal_cron_worker_spec.rb | 7 +- .../pages_domain_ssl_renewal_worker_spec.rb | 2 + .../pipeline_notification_worker_spec.rb | 2 +- spec/workers/post_receive_spec.rb | 4 + spec/workers/project_export_worker_spec.rb | 4 +- ...t_update_repository_storage_worker_spec.rb | 1 + .../create_default_alerts_worker_spec.rb | 66 + spec/workers/reactive_caching_worker_spec.rb | 18 + .../remote_mirror_notification_worker_spec.rb | 2 +- ...date_external_pull_requests_worker_spec.rb | 6 +- .../update_highest_role_worker_spec.rb | 81 + spec/workers/upload_checksum_worker_spec.rb | 2 +- .../users/create_statistics_worker_spec.rb | 33 + tooling/overcommit/{gems.rb => Gemfile} | 2 +- .../overcommit/{gems.locked => Gemfile.lock} | 0 vendor/Dockerfile/Swift.Dockerfile | 13 + vendor/fluentd/values.yaml | 18 + .../cluster_management.tar.gz | Bin 0 -> 4051 bytes .../hipaa_audit_protocol.tar.gz | Bin 0 -> 114488 bytes vendor/project_templates/sse_middleman.tar.gz | Bin 0 -> 7099 bytes yarn.lock | 198 +- 4099 files changed, 371123 insertions(+), 87510 deletions(-) create mode 100644 .gitlab/issue_templates/Migrations.md create mode 100644 .gitlab/issue_templates/Solution_validation delete mode 100644 Procfile create mode 100644 app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js create mode 100644 app/assets/javascripts/boards/components/board_column.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_environments_dropdown.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_key_field.vue create mode 100644 app/assets/javascripts/ci_variable_list/components/ci_variable_autocomplete_tokens.js create mode 100644 app/assets/javascripts/ci_variable_list/store/getters.js create mode 100644 app/assets/javascripts/custom_metrics/components/custom_metrics_form.vue create mode 100644 app/assets/javascripts/custom_metrics/components/custom_metrics_form_fields.vue create mode 100644 app/assets/javascripts/custom_metrics/components/delete_custom_metric_modal.vue create mode 100644 app/assets/javascripts/custom_metrics/constants.js create mode 100644 app/assets/javascripts/custom_metrics/index.js create mode 100644 app/assets/javascripts/diffs/components/compare_dropdown_layout.vue delete mode 100644 app/assets/javascripts/diffs/components/compare_versions_dropdown.vue create mode 100644 app/assets/javascripts/diffs/store/getters_versions_dropdowns.js create mode 100644 app/assets/javascripts/environments/components/delete_environment_modal.vue create mode 100644 app/assets/javascripts/environments/components/environment_delete.vue create mode 100644 app/assets/javascripts/environments/mount_show.js create mode 100644 app/assets/javascripts/error_tracking/components/error_tracking_actions.vue delete mode 100644 app/assets/javascripts/ide/components/external_link.vue create mode 100644 app/assets/javascripts/integrations/edit/components/active_toggle.vue create mode 100644 app/assets/javascripts/integrations/edit/event_hub.js create mode 100644 app/assets/javascripts/integrations/edit/index.js create mode 100644 app/assets/javascripts/jira_import/components/jira_import_app.vue create mode 100644 app/assets/javascripts/jira_import/components/jira_import_form.vue create mode 100644 app/assets/javascripts/jira_import/components/jira_import_progress.vue create mode 100644 app/assets/javascripts/jira_import/components/jira_import_setup.vue create mode 100644 app/assets/javascripts/jira_import/index.js create mode 100644 app/assets/javascripts/jira_import/queries/get_jira_import_details.query.graphql create mode 100644 app/assets/javascripts/jira_import/queries/initiate_jira_import.mutation.graphql create mode 100644 app/assets/javascripts/jira_import/queries/jira_import.fragment.graphql create mode 100644 app/assets/javascripts/jira_import/utils.js create mode 100644 app/assets/javascripts/logs/components/log_advanced_filters.vue create mode 100644 app/assets/javascripts/logs/components/log_simple_filters.vue create mode 100644 app/assets/javascripts/logs/components/tokens/token_with_loading_state.vue create mode 100644 app/assets/javascripts/logs/constants.js create mode 100644 app/assets/javascripts/maintenance_mode_settings/components/app.vue create mode 100644 app/assets/javascripts/maintenance_mode_settings/index.js create mode 100644 app/assets/javascripts/monitoring/components/charts/annotations.js create mode 100644 app/assets/javascripts/monitoring/components/charts/bar.vue delete mode 100644 app/assets/javascripts/monitoring/components/embed.vue create mode 100644 app/assets/javascripts/monitoring/components/embeds/embed_group.vue create mode 100644 app/assets/javascripts/monitoring/components/embeds/metric_embed.vue create mode 100644 app/assets/javascripts/monitoring/queries/getAnnotations.query.graphql create mode 100644 app/assets/javascripts/monitoring/stores/embed_group/actions.js create mode 100644 app/assets/javascripts/monitoring/stores/embed_group/getters.js create mode 100644 app/assets/javascripts/monitoring/stores/embed_group/index.js create mode 100644 app/assets/javascripts/monitoring/stores/embed_group/mutation_types.js create mode 100644 app/assets/javascripts/monitoring/stores/embed_group/mutations.js create mode 100644 app/assets/javascripts/monitoring/stores/embed_group/state.js create mode 100644 app/assets/javascripts/notes/components/sort_discussion.vue create mode 100644 app/assets/javascripts/notes/sort_discussions.js create mode 100644 app/assets/javascripts/pages/admin/application_settings/integrations/index.js rename app/assets/javascripts/pages/admin/application_settings/{usage_ping_payload.js => payload_previewer.js} (93%) create mode 100644 app/assets/javascripts/pages/groups/settings/integrations/edit/index.js create mode 100644 app/assets/javascripts/pages/projects/environments/show/index.js create mode 100644 app/assets/javascripts/pages/projects/import/jira/index.js create mode 100644 app/assets/javascripts/pages/projects/prometheus/metrics/edit/index.js create mode 100644 app/assets/javascripts/pages/projects/prometheus/metrics/new/index.js create mode 100644 app/assets/javascripts/pages/projects/static_site_editor/show/index.js create mode 100644 app/assets/javascripts/pages/search/show/highlight_blob_search_result.js create mode 100644 app/assets/javascripts/projects/commits/components/author_select.vue create mode 100644 app/assets/javascripts/projects/commits/index.js create mode 100644 app/assets/javascripts/projects/commits/store/actions.js create mode 100644 app/assets/javascripts/projects/commits/store/index.js create mode 100644 app/assets/javascripts/projects/commits/store/mutation_types.js create mode 100644 app/assets/javascripts/projects/commits/store/mutations.js create mode 100644 app/assets/javascripts/projects/commits/store/state.js create mode 100644 app/assets/javascripts/projects/default_project_templates.js create mode 100644 app/assets/javascripts/prometheus_alerts/components/reset_key.vue create mode 100644 app/assets/javascripts/prometheus_alerts/index.js create mode 100644 app/assets/javascripts/prometheus_metrics/custom_metrics.js create mode 100644 app/assets/javascripts/registry/explorer/components/quickstart_dropdown.vue delete mode 100644 app/assets/javascripts/registry/list/components/app.vue delete mode 100644 app/assets/javascripts/registry/list/components/collapsible_container.vue delete mode 100644 app/assets/javascripts/registry/list/components/group_empty_state.vue delete mode 100644 app/assets/javascripts/registry/list/components/project_empty_state.vue delete mode 100644 app/assets/javascripts/registry/list/components/table_registry.vue delete mode 100644 app/assets/javascripts/registry/list/constants.js delete mode 100644 app/assets/javascripts/registry/list/index.js delete mode 100644 app/assets/javascripts/registry/list/stores/actions.js delete mode 100644 app/assets/javascripts/registry/list/stores/getters.js delete mode 100644 app/assets/javascripts/registry/list/stores/mutation_types.js delete mode 100644 app/assets/javascripts/registry/list/stores/mutations.js delete mode 100644 app/assets/javascripts/registry/list/stores/state.js create mode 100644 app/assets/javascripts/releases/components/asset_links_form.vue create mode 100644 app/assets/javascripts/releases/stores/modules/detail/getters.js create mode 100644 app/assets/javascripts/reports/accessibility_report/components/accessibility_issue_body.vue create mode 100644 app/assets/javascripts/serverless/survey_banner.js create mode 100644 app/assets/javascripts/serverless/survey_banner.vue create mode 100644 app/assets/javascripts/snippet/snippet_edit.js create mode 100644 app/assets/javascripts/snippet/snippet_show.js create mode 100644 app/assets/javascripts/snippets/components/edit.vue rename app/assets/javascripts/snippets/components/{app.vue => show.vue} (57%) create mode 100644 app/assets/javascripts/snippets/mixins/snippets.js create mode 100644 app/assets/javascripts/snippets/mutations/createSnippet.mutation.graphql create mode 100644 app/assets/javascripts/snippets/mutations/updateSnippet.mutation.graphql delete mode 100644 app/assets/javascripts/snippets/queries/snippet.blob.query.graphql create mode 100644 app/assets/javascripts/static_site_editor/components/edit_area.vue create mode 100644 app/assets/javascripts/static_site_editor/components/edit_header.vue create mode 100644 app/assets/javascripts/static_site_editor/components/invalid_content_message.vue create mode 100644 app/assets/javascripts/static_site_editor/components/publish_toolbar.vue create mode 100644 app/assets/javascripts/static_site_editor/components/saved_changes_message.vue create mode 100644 app/assets/javascripts/static_site_editor/components/static_site_editor.vue create mode 100644 app/assets/javascripts/static_site_editor/components/submit_changes_error.vue create mode 100644 app/assets/javascripts/static_site_editor/constants.js create mode 100644 app/assets/javascripts/static_site_editor/index.js create mode 100644 app/assets/javascripts/static_site_editor/services/generate_branch_name.js create mode 100644 app/assets/javascripts/static_site_editor/services/load_source_content.js create mode 100644 app/assets/javascripts/static_site_editor/services/submit_content_changes.js create mode 100644 app/assets/javascripts/static_site_editor/store/actions.js create mode 100644 app/assets/javascripts/static_site_editor/store/getters.js rename app/assets/javascripts/{registry/list/stores => static_site_editor/store}/index.js (52%) create mode 100644 app/assets/javascripts/static_site_editor/store/mutation_types.js create mode 100644 app/assets/javascripts/static_site_editor/store/mutations.js create mode 100644 app/assets/javascripts/static_site_editor/store/state.js create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/mr_widget_terraform_plan.vue create mode 100644 app/assets/javascripts/vue_shared/components/awards_list.vue create mode 100644 app/assets/javascripts/vue_shared/components/clone_dropdown.vue create mode 100644 app/assets/javascripts/vue_shared/components/form/form_footer_actions.vue create mode 100644 app/assets/javascripts/vue_shared/components/form/title.vue create mode 100644 app/assets/javascripts/vue_shared/components/local_storage_sync.vue create mode 100644 app/assets/javascripts/vue_shared/components/ordered_layout.vue create mode 100644 app/assets/javascripts/vue_shared/components/user_avatar/badges/gitlab_team_member_badge.vue create mode 100644 app/assets/stylesheets/components/collapsible_card.scss create mode 100644 app/assets/stylesheets/pages/environment_logs.scss delete mode 100644 app/controllers/ci/lints_controller.rb create mode 100644 app/controllers/concerns/integrations_actions.rb create mode 100644 app/controllers/groups/settings/integrations_controller.rb create mode 100644 app/controllers/projects/prometheus/alerts_controller.rb create mode 100644 app/controllers/projects/releases/evidences_controller.rb create mode 100644 app/controllers/projects/static_site_editor_controller.rb create mode 100644 app/finders/autocomplete/routes_finder.rb create mode 100644 app/finders/issuable_finder/params.rb create mode 100644 app/finders/issues_finder/params.rb create mode 100644 app/finders/metrics/dashboards/annotations_finder.rb create mode 100644 app/graphql/mutations/jira_import/start.rb create mode 100644 app/graphql/resolvers/metrics/dashboard_resolver.rb create mode 100644 app/graphql/resolvers/metrics/dashboards/annotation_resolver.rb create mode 100644 app/graphql/resolvers/projects/jira_imports_resolver.rb create mode 100644 app/graphql/resolvers/projects/services_resolver.rb create mode 100644 app/graphql/types/jira_import_type.rb create mode 100644 app/graphql/types/metrics/dashboard_type.rb create mode 100644 app/graphql/types/metrics/dashboards/annotation_type.rb create mode 100644 app/graphql/types/projects/service_type.rb create mode 100644 app/graphql/types/projects/service_type_enum.rb create mode 100644 app/graphql/types/projects/services/base_service_type.rb create mode 100644 app/graphql/types/projects/services/jira_service_type.rb create mode 100644 app/helpers/custom_metrics_helper.rb create mode 100644 app/models/alerting/project_alerting_setting.rb create mode 100644 app/models/ci/build_dependencies.rb create mode 100644 app/models/ci/daily_report_result.rb create mode 100644 app/models/clusters/applications/fluentd.rb create mode 100644 app/models/concerns/alert_event_lifecycle.rb create mode 100644 app/models/concerns/ci/has_variable.rb create mode 100644 app/models/concerns/ci/maskable.rb create mode 100644 app/models/concerns/ci/new_has_variable.rb delete mode 100644 app/models/concerns/ci/pipeline_delegator.rb create mode 100644 app/models/concerns/has_unique_internal_users.rb delete mode 100644 app/models/concerns/has_variable.rb create mode 100644 app/models/concerns/import_state/sidekiq_job_tracker.rb delete mode 100644 app/models/concerns/maskable.rb delete mode 100644 app/models/concerns/new_has_variable.rb create mode 100644 app/models/concerns/services/data_fields.rb create mode 100644 app/models/concerns/update_highest_role.rb create mode 100644 app/models/concerns/where_composite.rb create mode 100644 app/models/container_registry/event.rb create mode 100644 app/models/diff_note_position.rb delete mode 100644 app/models/jira_import_data.rb create mode 100644 app/models/jira_import_state.rb create mode 100644 app/models/metrics/dashboard/annotation.rb create mode 100644 app/models/project_services/open_project_service.rb create mode 100644 app/models/project_services/open_project_tracker_data.rb create mode 100644 app/models/prometheus_alert_event.rb rename app/models/{ => releases}/evidence.rb (85%) create mode 100644 app/models/self_managed_prometheus_alert_event.rb create mode 100644 app/models/synthetic_note.rb create mode 100644 app/models/terraform.rb create mode 100644 app/models/terraform/state.rb delete mode 100644 app/models/user_bot_type_enums.rb create mode 100644 app/models/user_canonical_email.rb create mode 100644 app/models/wiki_page/meta.rb create mode 100644 app/models/wiki_page/slug.rb rename app/policies/{project_policy/class_methods.rb => concerns/crud_policy_helpers.rb} (82%) create mode 100644 app/policies/metrics/dashboard/annotation_policy.rb create mode 100644 app/policies/releases/evidence_policy.rb delete mode 100644 app/policies/snippet_policy.rb create mode 100644 app/policies/wiki_page/meta_policy.rb create mode 100644 app/presenters/pages_domain_presenter.rb create mode 100644 app/presenters/releases/evidence_presenter.rb create mode 100644 app/serializers/prometheus_alert_entity.rb create mode 100644 app/serializers/prometheus_alert_serializer.rb create mode 100644 app/serializers/prometheus_metric_entity.rb create mode 100644 app/serializers/prometheus_metric_serializer.rb create mode 100644 app/serializers/route_entity.rb create mode 100644 app/serializers/route_serializer.rb create mode 100644 app/services/ci/daily_report_result_service.rb create mode 100644 app/services/ci/external_pull_requests/create_pipeline_service.rb create mode 100644 app/services/clusters/applications/check_upgrade_progress_service.rb create mode 100644 app/services/clusters/applications/prometheus_config_service.rb create mode 100644 app/services/clusters/applications/prometheus_health_check_service.rb create mode 100644 app/services/clusters/applications/prometheus_update_service.rb create mode 100644 app/services/clusters/applications/schedule_update_service.rb create mode 100644 app/services/clusters/management/create_project_service.rb create mode 100644 app/services/clusters/management/validate_management_project_permissions_service.rb create mode 100644 app/services/discussions/capture_diff_note_position_service.rb create mode 100644 app/services/discussions/capture_diff_note_positions_service.rb delete mode 100644 app/services/external_pull_requests/create_pipeline_service.rb create mode 100644 app/services/groups/deploy_tokens/destroy_service.rb create mode 100644 app/services/issues/export_csv_service.rb create mode 100644 app/services/jira_import/start_import_service.rb create mode 100644 app/services/merge_requests/merge_orchestration_service.rb create mode 100644 app/services/merge_requests/pushed_branches_service.rb create mode 100644 app/services/metrics/dashboard/annotations/create_service.rb create mode 100644 app/services/metrics/dashboard/annotations/delete_service.rb rename app/services/metrics/dashboard/{project_dashboard_service.rb => custom_dashboard_service.rb} (95%) create mode 100644 app/services/metrics/dashboard/gitlab_alert_embed_service.rb create mode 100644 app/services/metrics/dashboard/transient_embed_service.rb create mode 100644 app/services/pages_domains/retry_acme_order_service.rb create mode 100644 app/services/personal_access_tokens/create_service.rb create mode 100644 app/services/projects/deploy_tokens/destroy_service.rb create mode 100644 app/services/projects/prometheus/alerts/alert_params.rb create mode 100644 app/services/projects/prometheus/alerts/create_events_service.rb create mode 100644 app/services/projects/prometheus/alerts/create_service.rb create mode 100644 app/services/projects/prometheus/alerts/destroy_service.rb create mode 100644 app/services/projects/prometheus/alerts/notify_service.rb create mode 100644 app/services/projects/prometheus/alerts/update_service.rb create mode 100644 app/services/projects/prometheus/metrics/base_service.rb create mode 100644 app/services/projects/prometheus/metrics/destroy_service.rb create mode 100644 app/services/projects/prometheus/metrics/update_service.rb create mode 100644 app/services/prometheus/create_default_alerts_service.rb create mode 100644 app/services/resources/create_access_token_service.rb create mode 100644 app/services/terraform/remote_state_handler.rb create mode 100644 app/services/users/update_canonical_email_service.rb create mode 100644 app/services/users/update_highest_member_role_service.rb create mode 100644 app/uploaders/terraform/state_uploader.rb create mode 100644 app/validators/untrusted_regexp_validator.rb create mode 100644 app/views/admin/application_settings/_issue_limits.html.haml create mode 100644 app/views/admin/dashboard/stats.html.haml delete mode 100644 app/views/admin/integrations/_form.html.haml delete mode 100644 app/views/admin/integrations/edit.html.haml delete mode 100644 app/views/ci/lints/show.html.haml create mode 100644 app/views/events/event/_wiki.html.haml create mode 100644 app/views/groups/settings/integrations/index.html.haml create mode 100644 app/views/notify/issues_csv_email.html.haml create mode 100644 app/views/notify/issues_csv_email.text.erb create mode 100644 app/views/notify/pages_domain_auto_ssl_failed_email.html.haml create mode 100644 app/views/notify/pages_domain_auto_ssl_failed_email.text.haml create mode 100644 app/views/notify/prometheus_alert_fired_email.html.haml create mode 100644 app/views/notify/prometheus_alert_fired_email.text.erb create mode 100644 app/views/projects/issues/export_csv/_button.html.haml create mode 100644 app/views/projects/issues/export_csv/_modal.html.haml create mode 100644 app/views/projects/prometheus/metrics/_form.html.haml create mode 100644 app/views/projects/prometheus/metrics/edit.html.haml create mode 100644 app/views/projects/prometheus/metrics/new.html.haml create mode 100644 app/views/projects/services/prometheus/_custom_metrics.html.haml create mode 100644 app/views/projects/services/prometheus/_external_alerts.html.haml create mode 100644 app/views/projects/static_site_editor/show.html.haml create mode 100644 app/views/shared/_merge_request_pipeline_status.html.haml create mode 100644 app/views/shared/integrations/_form.html.haml create mode 100644 app/views/shared/integrations/_integrations.html.haml create mode 100644 app/views/shared/integrations/edit.html.haml create mode 100644 app/workers/ci/daily_report_results_worker.rb create mode 100644 app/workers/cluster_update_app_worker.rb create mode 100644 app/workers/cluster_wait_for_app_update_worker.rb create mode 100644 app/workers/concerns/gitlab/jira_import/import_worker.rb create mode 100644 app/workers/concerns/gitlab/jira_import/queue_options.rb create mode 100644 app/workers/export_csv_worker.rb create mode 100644 app/workers/gitlab/jira_import/advance_stage_worker.rb create mode 100644 app/workers/gitlab/jira_import/import_issue_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/finish_import_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_attachments_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_issues_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_labels_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_notes_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/start_import_worker.rb create mode 100644 app/workers/incident_management/process_prometheus_alert_worker.rb delete mode 100644 app/workers/pipeline_success_worker.rb create mode 100644 app/workers/prometheus/create_default_alerts_worker.rb create mode 100644 app/workers/update_highest_role_worker.rb create mode 100644 app/workers/users/create_statistics_worker.rb create mode 100644 config/initializers/active_record_fix_insert_all.rb create mode 100644 config/initializers/active_record_schema_versions.rb create mode 100644 config/initializers/grape_validators.rb delete mode 100644 config/routes/ci.rb create mode 100644 db/migrate/20200204131831_create_daily_report_results.rb create mode 100644 db/migrate/20200213100530_add_verification_columns_to_packages.rb create mode 100644 db/migrate/20200214025454_add_canonical_emails.rb create mode 100644 db/migrate/20200219135440_add_limit_metric_type_to_list.rb create mode 100644 db/migrate/20200302152516_add_wiki_slug.rb create mode 100644 db/migrate/20200303181648_add_healthy_to_clusters_applications_prometheus.rb create mode 100644 db/migrate/20200304124406_add_unlock_membership_to_ldap_of_groups.rb create mode 100644 db/migrate/20200305200641_create_terraform_states.rb create mode 100644 db/migrate/20200311074438_migrate_bot_type_to_user_type.rb create mode 100644 db/migrate/20200311082301_add_user_state_index.rb create mode 100644 db/migrate/20200311154110_create_vulnerability_exports.rb create mode 100644 db/migrate/20200311214912_add_modsecurity_mode_to_ingress_application.rb create mode 100644 db/migrate/20200312053852_populate_canonical_emails.rb create mode 100644 db/migrate/20200312125121_add_index_on_active_and_template_and_type_and_id_to_services.rb create mode 100644 db/migrate/20200312160532_add_index_on_mirror_and_id_to_projects.rb create mode 100644 db/migrate/20200313101649_fill_ghost_user_type.rb create mode 100644 db/migrate/20200313202430_add_index_chat_name_service_id.rb create mode 100644 db/migrate/20200313203525_add_invalid_foreign_key_from_chat_name_to_service.rb create mode 100644 db/migrate/20200314060834_add_scanned_resources_count_to_security_scan.rb create mode 100644 db/migrate/20200316111759_add_index_on_id_and_ldap_key_to_keys.rb create mode 100644 db/migrate/20200316162648_add_index_on_namespace_id_and_id_to_projects.rb create mode 100644 db/migrate/20200316173312_add_vulnerability_export_project_foreign_key.rb create mode 100644 db/migrate/20200317110602_add_migrating_user_highest_roles_table_index_to_users.rb create mode 100644 db/migrate/20200317142110_add_vulnerability_export_user_foreign_key.rb create mode 100644 db/migrate/20200318140400_create_vulnerability_user_mentions.rb create mode 100644 db/migrate/20200318152134_adds_sha256_to_package_files.rb create mode 100644 db/migrate/20200318162148_add_external_key_to_issues_table.rb create mode 100644 db/migrate/20200318163148_add_index_on_external_key_to_issues_table.rb create mode 100644 db/migrate/20200318164448_add_external_key_to_epics_table.rb create mode 100644 db/migrate/20200318165448_add_index_on_external_key_to_epics_table.rb create mode 100644 db/migrate/20200318175008_add_index_on_id_and_archived_and_pending_delete_to_projects.rb create mode 100644 db/migrate/20200318183553_create_pypi_package_metadata.rb create mode 100644 db/migrate/20200319123041_update_plan_limits_defaults.rb create mode 100644 db/migrate/20200319124127_create_metrics_dashboard_annotations.rb create mode 100644 db/migrate/20200319203901_add_index_on_users_unlock_token.rb create mode 100644 db/migrate/20200320112455_add_cost_factor_fileds_to_ci_runners.rb create mode 100644 db/migrate/20200320123839_add_letsencrypt_errors_to_pages_domains.rb create mode 100644 db/migrate/20200323071918_add_bio_to_user_details.rb create mode 100644 db/migrate/20200323074147_add_temp_index_on_users_bio.rb create mode 100644 db/migrate/20200323075043_add_max_personal_access_token_lifetime_to_namespaces.rb create mode 100644 db/migrate/20200323122201_add_index_on_user_and_created_at_to_ci_builds.rb create mode 100644 db/migrate/20200323134519_add_api_indexes_for_archived_projects.rb create mode 100644 db/migrate/20200324093258_add_index_on_id_creator_id_and_created_at_to_projects_table.rb create mode 100644 db/migrate/20200324115359_add_namespace_storage_size_limit_to_application_settings.rb create mode 100644 db/migrate/20200325104755_add_push_rules_id_to_project_settings.rb create mode 100644 db/migrate/20200325104756_add_push_rules_foreign_key_to_project_settings.rb create mode 100644 db/migrate/20200325104833_add_push_rules_id_to_application_settings.rb create mode 100644 db/migrate/20200325104834_add_push_rules_foreign_key_to_application_settings.rb create mode 100644 db/migrate/20200325111432_add_issues_create_limit_to_application_settings.rb create mode 100644 db/migrate/20200325160952_add_index_on_name_type_eq_ci_build_to_ci_builds.rb create mode 100644 db/migrate/20200325183636_add_api_index_for_internal_projects.rb create mode 100644 db/migrate/20200326114443_create_jira_imports_table.rb create mode 100644 db/migrate/20200326122700_create_diff_note_positions.rb create mode 100644 db/migrate/20200326124443_add_projects_fk_to_jira_imports_table.rb create mode 100644 db/migrate/20200326134443_add_users_fk_to_jira_imports_table.rb create mode 100644 db/migrate/20200326135443_add_users_fk_index_on_jira_imports_table.rb create mode 100644 db/migrate/20200326144443_add_labels_fk_to_jira_imports_table.rb create mode 100644 db/migrate/20200326145443_add_labels_fk_index_on_jira_imports_table.rb create mode 100644 db/migrate/20200330074719_add_index_for_group_vsm_usage_ping.rb create mode 100644 db/migrate/20200330121000_add_confidential_attribute_to_epics.rb create mode 100644 db/migrate/20200330123739_remove_index_ci_builds_on_name_for_security_reports_values.rb create mode 100644 db/migrate/20200330132913_add_index_on_author_id_and_created_at_and_id_to_notes.rb create mode 100644 db/migrate/20200331132103_add_project_compliance_framework_settings_table.rb create mode 100644 db/migrate/20200331195952_add_container_expiration_policies_enable_historic_entries_to_application_settings.rb create mode 100644 db/migrate/20200331220930_enable_container_expiration_policies_by_default.rb create mode 100644 db/migrate/20200401095430_add_jsonb_to_geo_node_status_table.rb create mode 100644 db/migrate/20200401211005_create_operations_user_lists.rb create mode 100644 db/migrate/20200402123926_add_line_metrics_to_mr_metrics.rb create mode 100644 db/migrate/20200402124802_add_correlation_id_to_project_import_state.rb create mode 100644 db/migrate/20200402135250_add_delete_status_to_container_repository.rb create mode 100644 db/migrate/20200402185044_create_clusters_applications_fluentd.rb create mode 100644 db/migrate/20200403184110_add_partial_index_on_id_to_ci_job_artifacts.rb create mode 100644 db/migrate/20200403185127_add_partial_index_on_id_to_lfs_objects.rb create mode 100644 db/migrate/20200403185422_add_partial_index_on_id_to_uploads.rb create mode 100644 db/migrate/20200406102111_add_index_to_deployments_where_cluster_id_is_not_null.rb create mode 100644 db/migrate/20200406135648_add_index_to_created_at_on_resource_milestone_events.rb create mode 100644 db/migrate/20200406192059_add_write_registry_to_deploy_tokens.rb create mode 100644 db/migrate/20200407120000_add_push_rule_id_to_groups.rb create mode 100644 db/migrate/20200407121321_add_push_rule_foreign_key_to_groups.rb create mode 100644 db/migrate/20200407171133_add_protected_tag_create_access_levels_user_id_foreign_key.rb create mode 100644 db/migrate/20200407171417_validate_protected_tag_create_access_levels_user_id_foreign_key.rb create mode 100644 db/migrate/20200408133211_add_index_on_route_path_trigram.rb create mode 100644 db/migrate/20200408153842_add_index_on_creator_id_and_id_on_projects.rb create mode 100644 db/migrate/20200408154331_add_protected_branch_merge_access_levels_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154349_validate_protected_branch_merge_access_levels_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154411_add_path_locks_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154428_validate_path_locks_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154455_add_protected_branch_push_access_levels_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154533_validate_protected_branch_push_access_levels_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154604_add_u2f_registrations_user_id_foreign_key.rb create mode 100644 db/migrate/20200408154624_validate_u2f_registrations_user_id_foreign_key.rb create mode 100644 db/migrate/20200408175424_add_index_on_creator_id_created_at_id_to_projects_table.rb create mode 100644 db/migrate/20200408212219_add_status_page_url_to_status_page_settings.rb create mode 100644 db/migrate/20200409085956_add_partial_index_on_import_failures_retry_count.rb create mode 100644 db/migrate/20200410232012_add_metrics_dashboard_access_level_to_project_feature.rb create mode 100644 db/migrate/20200413072059_add_group_owners_can_manage_default_branch_protection_to_application_settings.rb create mode 100644 db/migrate/20200414144547_remove_index_projects_on_creator_id_and_created_at_from_projects.rb create mode 100644 db/migrate/20200415160722_remove_not_null_lfs_objects_constraint.rb create mode 100644 db/migrate/20200415161021_remove_not_null_ci_job_artifacts_constraint.rb create mode 100644 db/migrate/20200415161206_remove_not_null_uploads_constraint.rb create mode 100644 db/migrate/20200415192656_add_name_regex_keep_to_container_expiration_policies.rb create mode 100644 db/migrate/20200416120128_add_columns_to_terraform_state.rb create mode 100644 db/migrate/20200416120354_add_locked_by_user_id_foreign_key_to_terraform_state.rb create mode 100644 db/post_migrate/20200220115023_fix_projects_without_prometheus_service.rb create mode 100644 db/post_migrate/20200226124757_remove_health_status_from_epics.rb create mode 100644 db/post_migrate/20200311130802_schedule_populate_user_highest_roles_table.rb create mode 100644 db/post_migrate/20200313203550_remove_orphaned_chat_names.rb create mode 100644 db/post_migrate/20200313204021_validate_foreign_key_from_chat_name_to_service.rb create mode 100644 db/post_migrate/20200319071702_consume_remaining_link_lfs_objects_projects_jobs.rb create mode 100644 db/post_migrate/20200323011225_complete_migrate_security_scans.rb create mode 100644 db/post_migrate/20200323011955_remove_index_used_for_scan_migration.rb create mode 100644 db/post_migrate/20200323080714_trigger_background_migration_for_users_bio.rb create mode 100644 db/post_migrate/20200325162730_schedule_backfill_push_rules_id_in_projects.rb create mode 100644 db/post_migrate/20200406102120_backfill_deployment_clusters_from_deployments.rb create mode 100644 db/post_migrate/20200406193427_add_index_to_issues_health_status.rb create mode 100644 db/post_migrate/20200407094005_drop_vulnerability_severity_index.rb create mode 100644 db/post_migrate/20200407094923_drop_vulnerabilities_severity_index.rb create mode 100644 db/post_migrate/20200408110856_add_nginx_five_hundred_percentage_metric.rb create mode 100644 db/post_migrate/20200409211607_migrate_legacy_attachments.rb create mode 100644 db/structure.sql delete mode 100644 derailed-benchmarks/.github/workflows/check_changelog.yml delete mode 100644 derailed-benchmarks/.gitignore delete mode 100644 derailed-benchmarks/.gitlab-ci.yml delete mode 100644 derailed-benchmarks/.travis.yml delete mode 100644 derailed-benchmarks/Appraisals delete mode 100644 derailed-benchmarks/CHANGELOG.md delete mode 100644 derailed-benchmarks/Gemfile delete mode 100644 derailed-benchmarks/README.md delete mode 100644 derailed-benchmarks/Rakefile delete mode 100755 derailed-benchmarks/bin/derailed delete mode 100644 derailed-benchmarks/derailed_benchmarks.gemspec delete mode 100644 derailed-benchmarks/gemfiles/.bundle/config delete mode 100644 derailed-benchmarks/gemfiles/rails_5_1.gemfile delete mode 100644 derailed-benchmarks/gemfiles/rails_5_2.gemfile delete mode 100644 derailed-benchmarks/gemfiles/rails_6_0.gemfile delete mode 100644 derailed-benchmarks/gemfiles/rails_git.gemfile delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/auth_helper.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/auth_helpers/devise.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/core_ext/kernel_require.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/load_tasks.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/require_tree.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/stats_from_dir.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/stats_in_file.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/tasks.rb delete mode 100644 derailed-benchmarks/lib/derailed_benchmarks/version.rb delete mode 100644 derailed-benchmarks/test/derailed_benchmarks/core_ext/kernel_require_test.rb delete mode 100644 derailed-benchmarks/test/derailed_benchmarks/require_tree_test.rb delete mode 100644 derailed-benchmarks/test/derailed_benchmarks/stats_from_dir_test.rb delete mode 100644 derailed-benchmarks/test/derailed_test.rb delete mode 100644 derailed-benchmarks/test/fixtures/require/child_one.rb delete mode 100644 derailed-benchmarks/test/fixtures/require/child_two.rb delete mode 100644 derailed-benchmarks/test/fixtures/require/parent_one.rb delete mode 100644 derailed-benchmarks/test/fixtures/require/raise_child.rb delete mode 100644 derailed-benchmarks/test/fixtures/require/relative_child.rb delete mode 100644 derailed-benchmarks/test/fixtures/require/relative_child_two.rb delete mode 100644 derailed-benchmarks/test/fixtures/stats/significant/loser.bench.txt delete mode 100644 derailed-benchmarks/test/fixtures/stats/significant/winner.bench.txt delete mode 100644 derailed-benchmarks/test/integration/tasks_test.rb delete mode 100644 derailed-benchmarks/test/rails_app/Rakefile delete mode 100644 derailed-benchmarks/test/rails_app/app/assets/config/manifest.js delete mode 100644 derailed-benchmarks/test/rails_app/app/assets/javascripts/authenticated.js delete mode 100644 derailed-benchmarks/test/rails_app/app/assets/stylesheets/authenticated.css delete mode 100644 derailed-benchmarks/test/rails_app/app/controllers/application_controller.rb delete mode 100644 derailed-benchmarks/test/rails_app/app/controllers/authenticated_controller.rb delete mode 100644 derailed-benchmarks/test/rails_app/app/controllers/pages_controller.rb delete mode 100644 derailed-benchmarks/test/rails_app/app/helpers/application_helper.rb delete mode 100644 derailed-benchmarks/test/rails_app/app/helpers/authenticated_helper.rb delete mode 100644 derailed-benchmarks/test/rails_app/app/models/user.rb delete mode 100644 derailed-benchmarks/test/rails_app/app/views/authenticated/index.html.erb delete mode 100644 derailed-benchmarks/test/rails_app/app/views/layouts/application.html.erb delete mode 100644 derailed-benchmarks/test/rails_app/app/views/pages/index.html.erb delete mode 100644 derailed-benchmarks/test/rails_app/config.ru delete mode 100644 derailed-benchmarks/test/rails_app/config/application.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/boot.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/database.yml delete mode 100644 derailed-benchmarks/test/rails_app/config/environment.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/environments/development.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/environments/production.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/environments/test.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/initializers/backtrace_silencers.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/initializers/devise.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/initializers/inflections.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/initializers/mime_types.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/initializers/secret_token.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/initializers/session_store.rb delete mode 100644 derailed-benchmarks/test/rails_app/config/locales/devise.en.yml delete mode 100644 derailed-benchmarks/test/rails_app/config/locales/en.yml delete mode 100644 derailed-benchmarks/test/rails_app/config/locales/es.yml delete mode 100644 derailed-benchmarks/test/rails_app/config/routes.rb delete mode 100644 derailed-benchmarks/test/rails_app/db/migrate/20141210070547_devise_create_users.rb delete mode 100644 derailed-benchmarks/test/rails_app/db/schema.rb delete mode 100644 derailed-benchmarks/test/rails_app/perf.rake delete mode 100644 derailed-benchmarks/test/rails_app/public/404.html delete mode 100644 derailed-benchmarks/test/rails_app/public/422.html delete mode 100644 derailed-benchmarks/test/rails_app/public/500.html delete mode 100644 derailed-benchmarks/test/rails_app/public/favicon.ico delete mode 100644 derailed-benchmarks/test/rails_app/public/javascripts/application.js delete mode 100644 derailed-benchmarks/test/rails_app/public/javascripts/controls.js delete mode 100644 derailed-benchmarks/test/rails_app/public/javascripts/dragdrop.js delete mode 100644 derailed-benchmarks/test/rails_app/public/javascripts/effects.js delete mode 100644 derailed-benchmarks/test/rails_app/public/javascripts/prototype.js delete mode 100644 derailed-benchmarks/test/rails_app/public/javascripts/rails.js delete mode 100644 derailed-benchmarks/test/rails_app/public/stylesheets/.gitkeep delete mode 100755 derailed-benchmarks/test/rails_app/script/rails delete mode 100644 derailed-benchmarks/test/support/integration_case.rb delete mode 100644 derailed-benchmarks/test/test_helper.rb create mode 100644 doc/.vale/gitlab/Repetition.yml create mode 100644 doc/.vale/gitlab/Spelling.yml create mode 100644 doc/.vale/gitlab/VersionText.yml create mode 100644 doc/.vale/gitlab/spelling-exceptions.txt create mode 100644 doc/administration/auth/ldap-troubleshooting.md create mode 100644 doc/administration/availability/index.md create mode 100644 doc/administration/gitaly/img/praefect_architecture_v12_10.png delete mode 100644 doc/administration/gitaly/img/praefect_architecture_v12_9.png create mode 100644 doc/administration/gitaly/img/praefect_storage_v12_10.png create mode 100644 doc/administration/high_availability/sidekiq.md delete mode 100644 doc/administration/img/repository_storages_admin_ui.png create mode 100644 doc/administration/img/repository_storages_admin_ui_v12_10.png create mode 100644 doc/administration/lfs/index.md create mode 100644 doc/administration/object_storage.md create mode 100644 doc/administration/raketasks/praefect.md create mode 100644 doc/administration/scaling/index.md create mode 100644 doc/administration/terraform_state.md create mode 100644 doc/administration/troubleshooting/img/Okta-SAMLsetup.png create mode 100644 doc/administration/troubleshooting/img/Okta-advancedsettings.png create mode 100644 doc/administration/troubleshooting/img/Okta-attributes.png create mode 100644 doc/administration/troubleshooting/img/Okta-linkscert.png create mode 100644 doc/administration/troubleshooting/log_parsing.md create mode 100644 doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md create mode 100644 doc/api/dependency_proxy.md create mode 100644 doc/api/metrics_dashboard_annotations.md create mode 100644 doc/api/project_vulnerabilities.md create mode 100644 doc/api/vulnerability_exports.md create mode 100644 doc/ci/examples/authenticating-with-hashicorp-vault/img/vault-read-secrets-production.png create mode 100644 doc/ci/examples/authenticating-with-hashicorp-vault/img/vault-read-secrets-staging.png create mode 100644 doc/ci/examples/authenticating-with-hashicorp-vault/index.md delete mode 100644 doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merged_result_pipeline_v12_3.png delete mode 100644 doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_immediate_merge_confirmation_dialog_v12_6.png create mode 100644 doc/ci/pipelines/img/job_group_v12_10.png create mode 100644 doc/development/integrations/jenkins.md create mode 100644 doc/development/prometheus.md create mode 100644 doc/development/refactoring_guide/index.md create mode 100644 doc/development/secure_coding_guidelines.md delete mode 100644 doc/install/aws/img/associate_subnet_gateway.png delete mode 100644 doc/install/aws/img/associate_subnet_gateway_2.png delete mode 100644 doc/install/aws/img/choose_ami.png delete mode 100644 doc/install/aws/img/create_security_group.png create mode 100644 doc/raketasks/x509_signatures.md create mode 100644 doc/security/cicd_environment_variables.md create mode 100644 doc/topics/airgap/quick_start_guide.md create mode 100644 doc/topics/autodevops/customize.md delete mode 100644 doc/topics/autodevops/img/guide_environments_metrics_v12_3.png create mode 100644 doc/topics/autodevops/img/guide_project_landing_page_v12_10.png delete mode 100644 doc/topics/autodevops/img/guide_project_landing_page_v12_3.png create mode 100644 doc/topics/autodevops/stages.md create mode 100644 doc/topics/git/lfs/img/git-annex-branches.png rename doc/{administration => topics/git}/lfs/img/lfs-icon.png (100%) create mode 100644 doc/topics/git/lfs/index.md create mode 100644 doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md create mode 100644 doc/topics/git/lfs/migrate_to_git_lfs.md create mode 100644 doc/topics/web_application_firewall/img/guide_waf_ingress_installation_v12_10.png delete 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_10.png delete mode 100644 doc/topics/web_application_firewall/img/guide_waf_ingress_save_changes_v12_9.png delete mode 100644 doc/user/admin_area/img/broadcast_messages.png create mode 100644 doc/user/admin_area/img/broadcast_messages_banner_v12_10.png create mode 100644 doc/user/admin_area/img/broadcast_messages_notification_v12_10.png create mode 100644 doc/user/admin_area/settings/img/rate_limit_on_issues_creation.png create mode 100644 doc/user/admin_area/settings/rate_limit_on_issues_creation.md create mode 100644 doc/user/application_security/dast/img/dast_urls_scanned_v12_10.png create mode 100644 doc/user/application_security/dependency_list/img/dependency_list_v12_10.png create mode 100644 doc/user/application_security/security_dashboard/img/project_security_dashboard_export_csv_v12.10.png create mode 100644 doc/user/application_security/threat_monitoring/index.md create mode 100644 doc/user/application_security/vulnerabilities/img/standalone_vulnerability_page_v12_10.png create mode 100644 doc/user/application_security/vulnerabilities/index.md create mode 100644 doc/user/clusters/img/fluentd_v12_10.png create mode 100644 doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v12_10.png delete mode 100644 doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v12_8.png create mode 100644 doc/user/group/img/group_activity_analytics_v12_10.png delete mode 100644 doc/user/group/roadmap/img/epics_state_dropdown.png create mode 100644 doc/user/group/roadmap/img/epics_state_dropdown_v12_10.png create mode 100644 doc/user/group/roadmap/img/roadmap_view_v12_10.png delete mode 100644 doc/user/group/roadmap/img/roadmap_view_v12_9.png delete mode 100644 doc/user/group/saml_sso/img/scim_advanced.png delete mode 100644 doc/user/group/saml_sso/img/scim_attribute_mapping.png create mode 100644 doc/user/img/markdown_toc_preview_v12_9.png create mode 100644 doc/user/img/new_personal_snippet_from_project_v12_10.png create mode 100644 doc/user/img/new_personal_snippet_v12_10.png create mode 100644 doc/user/img/new_project_snippet_from_project_v12_10.png create mode 100644 doc/user/packages/container_registry/img/container_registry_group_repositories_v12_10.png create mode 100644 doc/user/packages/container_registry/img/container_registry_repositories_v12_10.png create mode 100644 doc/user/packages/container_registry/img/container_registry_repositories_with_quickstart_v12_10.png create mode 100644 doc/user/packages/container_registry/img/container_registry_repository_details_v12.10.png create mode 100644 doc/user/packages/container_registry/img/container_registry_tags_v12_10.png create mode 100644 doc/user/packages/img/group_packages_list_v12_10.png create mode 100644 doc/user/packages/img/package_activity_v12_10.png create mode 100644 doc/user/packages/img/package_detail_v12_10.png create mode 100644 doc/user/packages/img/project_packages_list_v12_10.png create mode 100644 doc/user/packages/pypi_repository/index.md create mode 100644 doc/user/project/clusters/add_eks_clusters.md create mode 100644 doc/user/project/clusters/add_gke_clusters.md create mode 100644 doc/user/project/clusters/img/kubernetes_pod_logs_v12_10.png delete mode 100644 doc/user/project/clusters/img/kubernetes_pod_logs_v12_9.png create mode 100644 doc/user/project/clusters/img/sidebar_menu_pod_logs_v12_10.png delete mode 100644 doc/user/project/clusters/img/sidebar_menu_pod_logs_v12_5.png create mode 100644 doc/user/project/img/status_page_detail_v12_10.png create mode 100644 doc/user/project/img/status_page_incidents_v12_10.png create mode 100644 doc/user/project/import/img/jira/import_issues_from_jira_button_v12_10.png create mode 100644 doc/user/project/import/img/jira/import_issues_from_jira_form_v12_10.png create mode 100644 doc/user/project/import/img/jira/import_issues_from_jira_projects_v12_10.png create mode 100644 doc/user/project/import/jira.md create mode 100644 doc/user/project/integrations/img/copy_link_to_chart_v12_10.png delete mode 100644 doc/user/project/integrations/img/embed_metrics.png delete mode 100644 doc/user/project/integrations/img/generate_link_to_chart.png create mode 100644 doc/user/project/integrations/img/hide_embedded_metrics_v12_10.png create mode 100644 doc/user/project/integrations/img/panel_context_menu_v12_10.png delete mode 100644 doc/user/project/integrations/img/panel_context_menu_v12_8.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_bar_chart_panel_type_v12.10.png create mode 100644 doc/user/project/integrations/img/view_embedded_metrics_v12_10.png create mode 100644 doc/user/project/integrations/overview.md delete mode 100644 doc/user/project/issues/img/csv_export_button.png create mode 100644 doc/user/project/issues/img/csv_export_button_v12_9.png create mode 100644 doc/user/project/issues/img/epic_tree_health_status_v12_10.png create mode 100644 doc/user/project/issues/img/issue_activity_sort_order_v12_10.png create mode 100644 doc/user/project/issues/img/issue_health_status_dropdown_v12_10.png create mode 100644 doc/user/project/issues/img/issue_health_status_v12_10.png create mode 100644 doc/user/project/merge_requests/img/versions_compare_head_v12_10.png create mode 100644 doc/user/project/pages/img/change_path_v12_10.png create mode 100644 doc/user/project/releases/img/edit_release_page_v12_10.png create mode 100644 doc/user/project/repository/img/file_ext_icons_repo_v12_10.png create mode 100644 doc/user/project/requirements/img/requirement_archive_view_v12_10.png create mode 100644 doc/user/project/requirements/img/requirement_create_view_v12_10.png create mode 100644 doc/user/project/requirements/img/requirement_edit_save_v12_10.png create mode 100644 doc/user/project/requirements/img/requirement_edit_view_v12_10.png create mode 100644 doc/user/project/requirements/img/requirements_archived_list_view_v12_10.png create mode 100644 doc/user/project/requirements/img/requirements_list_view_v12_10.png create mode 100644 doc/user/project/requirements/index.md create mode 100644 doc/user/project/static_site_editor/img/edit_this_page_button_v12_10.png create mode 100644 doc/user/project/static_site_editor/img/static_site_editor_v12_10.png create mode 100644 doc/user/project/static_site_editor/index.md create mode 100644 doc/user/project/status_page/index.md create mode 100644 doc/user/search/img/issue_search_by_id.png create mode 100644 file_hooks/.gitignore rename {plugins => file_hooks}/examples/save_to_file.clj (100%) rename {plugins => file_hooks}/examples/save_to_file.rb (100%) create mode 100644 lib/api/container_registry_event.rb create mode 100644 lib/api/entities/commit_with_link.rb create mode 100644 lib/api/entities/gpg_commit_signature.rb create mode 100644 lib/api/entities/metrics/dashboard/annotation.rb delete mode 100644 lib/api/entities/note_with_gitlab_employee_badge.rb create mode 100644 lib/api/entities/project_import_failed_relation.rb create mode 100644 lib/api/entities/releases/evidence.rb create mode 100644 lib/api/entities/user_path.rb delete mode 100644 lib/api/entities/user_with_gitlab_employee_badge.rb create mode 100644 lib/api/entities/x509_certificate.rb create mode 100644 lib/api/entities/x509_issuer.rb create mode 100644 lib/api/entities/x509_signature.rb delete mode 100644 lib/api/helpers/custom_validators.rb create mode 100644 lib/api/helpers/rate_limiter.rb create mode 100644 lib/api/metrics/dashboard/annotations.rb create mode 100644 lib/api/terraform/state.rb delete mode 100644 lib/api/validations/check_assignees_count.rb create mode 100644 lib/api/validations/validators/absence.rb create mode 100644 lib/api/validations/validators/array_none_any.rb create mode 100644 lib/api/validations/validators/check_assignees_count.rb create mode 100644 lib/api/validations/validators/file_path.rb create mode 100644 lib/api/validations/validators/git_ref.rb create mode 100644 lib/api/validations/validators/git_sha.rb create mode 100644 lib/api/validations/validators/integer_none_any.rb create mode 100644 lib/api/validations/validators/limit.rb create mode 100644 lib/constraints/admin_constrainer.rb create mode 100644 lib/csv_builder.rb create mode 100644 lib/gitlab/background_migration/backfill_deployment_clusters_from_deployments.rb create mode 100644 lib/gitlab/background_migration/backfill_push_rules_id_in_projects.rb create mode 100644 lib/gitlab/background_migration/fix_projects_without_prometheus_service.rb delete mode 100644 lib/gitlab/background_migration/link_lfs_objects.rb create mode 100644 lib/gitlab/background_migration/migrate_users_bio_to_user_details.rb create mode 100644 lib/gitlab/background_migration/populate_canonical_emails.rb create mode 100644 lib/gitlab/background_migration/populate_user_highest_roles_table.rb create mode 100644 lib/gitlab/bitbucket_import/metrics.rb create mode 100644 lib/gitlab/ci/jwt.rb delete mode 100644 lib/gitlab/ci/pipeline/chain/config/content/legacy_auto_devops.rb delete mode 100644 lib/gitlab/ci/pipeline/chain/config/content/legacy_repository.rb create mode 100644 lib/gitlab/ci/status/bridge/failed.rb delete mode 100644 lib/gitlab/ci/templates/Beta/Auto-DevOps.gitlab-ci.yml create mode 100644 lib/gitlab/cleanup/orphan_lfs_file_references.rb create mode 100644 lib/gitlab/code_navigation_path.rb create mode 100644 lib/gitlab/cycle_analytics/summary/deployment_frequency.rb create mode 100644 lib/gitlab/cycle_analytics/summary/group/deployment_frequency.rb create mode 100644 lib/gitlab/cycle_analytics/summary_helper.rb create mode 100644 lib/gitlab/database/postgresql_adapter/schema_versions_copy_mixin.rb create mode 100644 lib/gitlab/database/schema_cleaner.rb delete mode 100644 lib/gitlab/elasticsearch/logs.rb create mode 100644 lib/gitlab/elasticsearch/logs/lines.rb create mode 100644 lib/gitlab/elasticsearch/logs/pods.rb create mode 100644 lib/gitlab/front_matter.rb create mode 100644 lib/gitlab/gitaly_client/praefect_info_service.rb delete mode 100644 lib/gitlab/grafana_embed_usage_data.rb delete mode 100644 lib/gitlab/graphql/connections.rb create mode 100644 lib/gitlab/graphql/pagination/connections.rb rename lib/gitlab/graphql/{connections => pagination}/externally_paginated_array_connection.rb (58%) rename lib/gitlab/graphql/{connections => pagination}/filterable_array_connection.rb (67%) rename lib/gitlab/graphql/{connections => pagination}/keyset/conditions/base_condition.rb (98%) rename lib/gitlab/graphql/{connections => pagination}/keyset/conditions/not_null_condition.rb (98%) rename lib/gitlab/graphql/{connections => pagination}/keyset/conditions/null_condition.rb (97%) rename lib/gitlab/graphql/{connections => pagination}/keyset/connection.rb (85%) rename lib/gitlab/graphql/{connections => pagination}/keyset/order_info.rb (99%) rename lib/gitlab/graphql/{connections => pagination}/keyset/query_builder.rb (99%) delete mode 100644 lib/gitlab/graphql/pagination/relations/offset_active_record_relation.rb create mode 100644 lib/gitlab/import/metrics.rb rename lib/gitlab/import_export/group/{tree_restorer.rb => legacy_tree_restorer.rb} (62%) rename lib/gitlab/import_export/group/{tree_saver.rb => legacy_tree_saver.rb} (98%) create mode 100644 lib/gitlab/import_export/json/ndjson_reader.rb create mode 100644 lib/gitlab/import_export/json/ndjson_writer.rb delete mode 100644 lib/gitlab/import_export/project/legacy_tree_saver.rb create mode 100644 lib/gitlab/instrumentation/redis.rb create mode 100644 lib/gitlab/jira_import.rb create mode 100644 lib/gitlab/jira_import/base_importer.rb create mode 100644 lib/gitlab/jira_import/issue_serializer.rb create mode 100644 lib/gitlab/jira_import/issues_importer.rb create mode 100644 lib/gitlab/jira_import/labels_importer.rb create mode 100644 lib/gitlab/json.rb create mode 100644 lib/gitlab/metrics/dashboard/stages/alerts_inserter.rb rename lib/gitlab/metrics/dashboard/stages/{project_metrics_details_inserter.rb => custom_metrics_details_inserter.rb} (95%) rename lib/gitlab/metrics/dashboard/stages/{project_metrics_inserter.rb => custom_metrics_inserter.rb} (97%) create mode 100644 lib/gitlab/metrics/dashboard/stages/panel_ids_inserter.rb create mode 100644 lib/gitlab/middleware/same_site_cookies.rb delete mode 100644 lib/gitlab/profiler/total_time_flat_printer.rb create mode 100644 lib/gitlab/prometheus/queries/validate_query.rb create mode 100644 lib/gitlab/repository_size_checker.rb create mode 100644 lib/gitlab/repository_size_error_message.rb create mode 100644 lib/gitlab/repository_url_builder.rb delete mode 100644 lib/gitlab/sidekiq_middleware/duplicate_jobs.rb create mode 100644 lib/gitlab/static_site_editor/config.rb create mode 100644 lib/gitlab/wiki_pages.rb create mode 100644 lib/gitlab/wiki_pages/front_matter_parser.rb create mode 100644 lib/gitlab/x509/signature.rb create mode 100644 lib/quality/helm3_client.rb create mode 100644 lib/tasks/gitlab/praefect.rake delete mode 100644 lib/tasks/gitlab/uploads/legacy.rake create mode 100644 lib/tasks/gitlab/x509/update.rake create mode 100644 locale/am_ET/gitlab.po create mode 100644 locale/bs_BA/gitlab.po create mode 100644 locale/fi_FI/gitlab.po create mode 100644 locale/sl_SI/gitlab.po create mode 100644 qa/qa/page/admin/overview/groups/edit.rb create mode 100644 qa/qa/page/admin/overview/groups/index.rb create mode 100644 qa/qa/page/admin/overview/groups/show.rb create mode 100644 qa/qa/page/component/breadcrumbs.rb create mode 100644 qa/qa/page/main/terms.rb create mode 100644 qa/qa/runtime/project.rb delete mode 100644 qa/qa/scenario/test/integration/oauth.rb delete mode 100644 qa/qa/specs/features/browser_ui/1_manage/login/login_via_oauth_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/6_release/pipeline/parent_child_pipelines_dependent_relationship_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/6_release/pipeline/parent_child_pipelines_independent_relationship_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/8_monitor/apm/dashboards_spec.rb delete mode 100644 qa/qa/vendor/github/page/base.rb delete mode 100644 qa/qa/vendor/github/page/login.rb delete mode 100644 qa/qa/vendor/jenkins/page/job.rb create mode 100644 qa/qa/vendor/jenkins/page/last_job_console.rb delete mode 100644 qa/qa/vendor/one_password/cli.rb delete mode 100644 qa/spec/scenario/test/integration/oauth_spec.rb create mode 100644 rubocop/cop/filename_length.rb create mode 100644 rubocop/cop/gitlab/duplicate_spec_location.rb create mode 100644 rubocop/cop/migration/add_columns_to_wide_tables.rb create mode 100644 rubocop/cop/migration/with_lock_retries_without_ddl_transaction.rb create mode 100644 rubocop/cop/performance/ar_count_each.rb create mode 100644 rubocop/cop/performance/readlines_each.rb create mode 100644 rubocop/cop/rspec/modify_sidekiq_middleware.rb create mode 100644 rubocop/cop/static_translation_definition.rb create mode 100755 scripts/review_apps/gcp_cleanup.sh create mode 100644 spec/controllers/groups/settings/integrations_controller_spec.rb delete mode 100644 spec/controllers/import/gitlab_projects_controller_spec.rb create mode 100644 spec/controllers/projects/prometheus/alerts_controller_spec.rb create mode 100644 spec/controllers/projects/releases/evidences_controller_spec.rb create mode 100644 spec/controllers/projects/static_site_editor_controller_spec.rb create mode 100644 spec/factories/ci/daily_report_results.rb create mode 100644 spec/factories/diff_note_positions.rb create mode 100644 spec/factories/import_failures.rb create mode 100644 spec/factories/jira_import_states.rb create mode 100644 spec/factories/metrics/dashboard/annotations.rb create mode 100644 spec/factories/project_alerting_settings.rb create mode 100644 spec/factories/prometheus_alert_event.rb create mode 100644 spec/factories/self_managed_prometheus_alert_event.rb create mode 100644 spec/factories/terraform/state.rb create mode 100644 spec/factories/usage_data.rb create mode 100644 spec/factories/user_canonical_emails.rb create mode 100644 spec/factories/users_statistics.rb create mode 100644 spec/features/ide/user_commits_changes_spec.rb create mode 100644 spec/features/issues/csv_spec.rb create mode 100644 spec/features/issues/user_sorts_issue_comments_spec.rb create mode 100644 spec/features/merge_request/user_resolves_wip_mr_spec.rb create mode 100644 spec/features/projects/environments_pod_logs_spec.rb create mode 100644 spec/features/projects/services/prometheus_external_alerts_spec.rb create mode 100644 spec/features/projects/show/user_uploads_files_spec.rb create mode 100644 spec/features/static_site_editor_spec.rb create mode 100644 spec/finders/metrics/dashboards/annotations_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/prometheus/metrics.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/release/evidence.json create mode 100644 spec/fixtures/emails/valid_reply_signed_smime_mixed_protocol_prefix.eml create mode 100644 spec/fixtures/gitlab/database/structure_example.sql create mode 100644 spec/fixtures/gitlab/database/structure_example_cleaned.sql create mode 100644 spec/fixtures/group.json create mode 100644 spec/fixtures/junit/junit_with_attachment.xml.gz create mode 100644 spec/fixtures/lib/elasticsearch/pods_query.json create mode 100644 spec/fixtures/lib/elasticsearch/pods_response.json create mode 100644 spec/fixtures/lib/gitlab/import_export/complex/tree.tar.gz create mode 100644 spec/fixtures/lib/gitlab/import_export/group/tree.tar.gz create mode 100644 spec/fixtures/lib/gitlab/import_export/invalid_json/tree.tar.gz create mode 100644 spec/fixtures/lib/gitlab/import_export/light/tree.tar.gz create mode 100644 spec/fixtures/lib/gitlab/import_export/milestone-iid/tree.tar.gz create mode 100644 spec/fixtures/lib/gitlab/import_export/multi_pipeline_ref_one_external_pr/tree.tar.gz create mode 100644 spec/fixtures/lib/gitlab/import_export/with_invalid_records/tree.tar.gz create mode 100644 spec/fixtures/terraform/terraform.tfstate create mode 100644 spec/frontend/__mocks__/lodash/debounce.js create mode 100644 spec/frontend/__mocks__/sortablejs/index.js create mode 100644 spec/frontend/blob/pipeline_tour_success_mock_data.js create mode 100644 spec/frontend/blob/pipeline_tour_success_modal_spec.js delete mode 100644 spec/frontend/blob/pipeline_tour_success_spec.js rename spec/{javascripts => frontend}/boards/board_blank_state_spec.js (79%) create mode 100644 spec/frontend/boards/board_card_spec.js rename spec/{javascripts => frontend}/boards/board_list_spec.js (53%) rename spec/{javascripts => frontend}/boards/board_new_issue_spec.js (57%) create mode 100644 spec/frontend/boards/components/board_column_spec.js create mode 100644 spec/frontend/boards/components/board_form_spec.js rename spec/{javascripts => frontend}/boards/issue_spec.js (96%) rename spec/{javascripts => frontend}/boards/list_spec.js (75%) create mode 100644 spec/frontend/ci_variable_list/components/ci_enviroments_dropdown_spec.js create mode 100644 spec/frontend/ci_variable_list/components/ci_key_field_spec.js create mode 100644 spec/frontend/ci_variable_list/store/getters_spec.js rename spec/{javascripts => frontend}/commit/pipelines/pipelines_spec.js (90%) create mode 100644 spec/frontend/custom_metrics/components/custom_metrics_form_fields_spec.js create mode 100644 spec/frontend/custom_metrics/components/custom_metrics_form_spec.js rename spec/{javascripts => frontend}/cycle_analytics/banner_spec.js (90%) rename spec/{javascripts => frontend}/cycle_analytics/total_time_component_spec.js (94%) create mode 100644 spec/frontend/diffs/components/commit_widget_spec.js create mode 100644 spec/frontend/diffs/components/compare_dropdown_layout_spec.js delete mode 100644 spec/frontend/diffs/components/compare_versions_dropdown_spec.js rename spec/{javascripts => frontend}/diffs/components/diff_discussions_spec.js (95%) rename spec/{javascripts => frontend}/diffs/components/diff_expansion_cell_spec.js (97%) rename spec/{javascripts => frontend}/diffs/components/diff_file_spec.js (94%) rename spec/{javascripts => frontend}/diffs/components/diff_line_note_form_spec.js (50%) rename spec/{javascripts => frontend}/diffs/components/file_row_stats_spec.js (90%) create mode 100644 spec/frontend/diffs/components/image_diff_overlay_spec.js rename spec/{javascripts => frontend}/diffs/components/inline_diff_expansion_row_spec.js (91%) rename spec/{javascripts => frontend}/diffs/components/inline_diff_table_row_spec.js (97%) rename spec/{javascripts => frontend}/diffs/components/inline_diff_view_spec.js (95%) rename spec/{javascripts => frontend}/diffs/components/parallel_diff_expansion_row_spec.js (92%) rename spec/{javascripts => frontend}/diffs/components/parallel_diff_table_row_spec.js (98%) rename spec/{javascripts => frontend}/diffs/components/parallel_diff_view_spec.js (92%) create mode 100644 spec/frontend/diffs/mock_data/diff_file_unreadable.js rename spec/{javascripts => frontend}/diffs/store/actions_spec.js (88%) rename spec/{javascripts => frontend}/diffs/store/getters_spec.js (100%) create mode 100644 spec/frontend/diffs/store/getters_versions_dropdowns_spec.js rename spec/{javascripts => frontend}/diffs/store/mutations_spec.js (90%) rename spec/{javascripts => frontend}/diffs/store/utils_spec.js (99%) create mode 100644 spec/frontend/environments/environment_delete_spec.js create mode 100644 spec/frontend/error_tracking/components/error_tracking_actions_spec.js create mode 100644 spec/frontend/helpers/dom_events_helper.js create mode 100644 spec/frontend/helpers/dom_shims/element_scroll_by.js create mode 100644 spec/frontend/ide/components/commit_sidebar/actions_spec.js rename spec/{javascripts => frontend}/ide/components/commit_sidebar/empty_state_spec.js (100%) rename spec/{javascripts => frontend}/ide/components/commit_sidebar/form_spec.js (92%) rename spec/{javascripts => frontend}/ide/components/commit_sidebar/list_collapsed_spec.js (95%) rename spec/{javascripts => frontend}/ide/components/commit_sidebar/list_item_spec.js (88%) rename spec/{javascripts => frontend}/ide/components/commit_sidebar/list_spec.js (93%) rename spec/{javascripts => frontend}/ide/components/commit_sidebar/new_merge_request_option_spec.js (93%) rename spec/{javascripts => frontend}/ide/components/commit_sidebar/success_message_spec.js (100%) create mode 100644 spec/frontend/ide/components/repo_commit_section_spec.js create mode 100644 spec/frontend/integrations/edit/components/active_toggle_spec.js create mode 100644 spec/frontend/jira_import/components/jira_import_app_spec.js create mode 100644 spec/frontend/jira_import/components/jira_import_form_spec.js create mode 100644 spec/frontend/jira_import/components/jira_import_progress_spec.js create mode 100644 spec/frontend/jira_import/components/jira_import_setup_spec.js create mode 100644 spec/frontend/jira_import/utils_spec.js rename spec/{javascripts => frontend}/locale/index_spec.js (71%) create mode 100644 spec/frontend/logs/components/log_advanced_filters_spec.js create mode 100644 spec/frontend/logs/components/log_simple_filters_spec.js create mode 100644 spec/frontend/logs/components/tokens/token_with_loading_state_spec.js create mode 100644 spec/frontend/maintenance_mode_settings/components/app_spec.js delete mode 100644 spec/frontend/mocks/node/jquery.js create mode 100644 spec/frontend/monitoring/components/charts/annotations_spec.js create mode 100644 spec/frontend/monitoring/components/charts/bar_spec.js create mode 100644 spec/frontend/monitoring/components/embeds/embed_group_spec.js rename spec/frontend/monitoring/{embed/embed_spec.js => components/embeds/metric_embed_spec.js} (93%) rename spec/frontend/monitoring/{embed => components/embeds}/mock_data.js (52%) create mode 100644 spec/frontend/monitoring/fixture_data.js delete mode 100644 spec/frontend/monitoring/init_utils.js create mode 100644 spec/frontend/monitoring/store/embed_group/actions_spec.js create mode 100644 spec/frontend/monitoring/store/embed_group/getters_spec.js create mode 100644 spec/frontend/monitoring/store/embed_group/mutations_spec.js create mode 100644 spec/frontend/monitoring/store_utils.js create mode 100644 spec/frontend/notes/components/diff_with_note_spec.js create mode 100644 spec/frontend/notes/components/discussion_filter_spec.js rename spec/{javascripts => frontend}/notes/components/discussion_resolve_with_issue_button_spec.js (87%) rename spec/{javascripts => frontend}/notes/components/note_actions/reply_button_spec.js (100%) rename spec/{javascripts => frontend}/notes/components/note_actions_spec.js (100%) rename spec/{javascripts => frontend}/notes/components/note_awards_list_spec.js (89%) rename spec/{javascripts => frontend}/notes/components/note_body_spec.js (100%) rename spec/{javascripts => frontend}/notes/components/note_form_spec.js (70%) rename spec/{javascripts => frontend}/notes/components/note_signed_out_widget_spec.js (100%) rename spec/{javascripts => frontend}/notes/components/noteable_discussion_spec.js (89%) rename spec/{javascripts => frontend}/notes/components/noteable_note_spec.js (98%) rename spec/frontend/notes/components/{note_app_spec.js => notes_app_spec.js} (86%) create mode 100644 spec/frontend/notes/components/sort_discussion_spec.js rename spec/{javascripts => frontend}/notes/components/toggle_replies_widget_spec.js (93%) rename spec/{javascripts => frontend}/notes/stores/collapse_utils_spec.js (100%) create mode 100644 spec/frontend/pages/search/show/highlight_blob_search_result_spec.js create mode 100644 spec/frontend/pipelines/graph/graph_component_spec.js rename spec/{javascripts => frontend}/pipelines/graph/job_group_dropdown_spec.js (78%) create mode 100644 spec/frontend/pipelines/graph/job_name_component_spec.js create mode 100644 spec/frontend/pipelines/graph/linked_pipelines_column_spec.js rename spec/{javascripts => frontend}/pipelines/graph/mock_data.js (100%) create mode 100644 spec/frontend/pipelines/graph/stage_column_component_spec.js rename spec/{javascripts => frontend}/profile/account/components/delete_account_modal_spec.js (88%) rename spec/{javascripts => frontend}/profile/account/components/update_username_spec.js (95%) create mode 100644 spec/frontend/projects/commits/components/author_select_spec.js create mode 100644 spec/frontend/projects/commits/store/actions_spec.js create mode 100644 spec/frontend/projects/commits/store/mutations_spec.js create mode 100644 spec/frontend/prometheus_alerts/components/reset_key_spec.js create mode 100644 spec/frontend/prometheus_metrics/custom_metrics_spec.js create mode 100644 spec/frontend/prometheus_metrics/mock_data.js create mode 100644 spec/frontend/registry/explorer/components/quickstart_dropdown_spec.js create mode 100644 spec/frontend/registry/explorer/pages/index_spec.js delete mode 100644 spec/frontend/registry/list/components/__snapshots__/group_empty_state_spec.js.snap delete mode 100644 spec/frontend/registry/list/components/__snapshots__/project_empty_state_spec.js.snap delete mode 100644 spec/frontend/registry/list/components/app_spec.js delete mode 100644 spec/frontend/registry/list/components/collapsible_container_spec.js delete mode 100644 spec/frontend/registry/list/components/group_empty_state_spec.js delete mode 100644 spec/frontend/registry/list/components/project_empty_state_spec.js delete mode 100644 spec/frontend/registry/list/components/table_registry_spec.js delete mode 100644 spec/frontend/registry/list/mock_data.js delete mode 100644 spec/frontend/registry/list/stores/actions_spec.js delete mode 100644 spec/frontend/registry/list/stores/getters_spec.js delete mode 100644 spec/frontend/registry/list/stores/mutations_spec.js create mode 100644 spec/frontend/registry/shared/mocks.js create mode 100644 spec/frontend/releases/components/asset_links_form_spec.js create mode 100644 spec/frontend/releases/stores/modules/detail/getters_spec.js create mode 100644 spec/frontend/reports/accessibility_report/components/accessibility_issue_body_spec.js create mode 100644 spec/frontend/serverless/survey_banner_spec.js create mode 100644 spec/frontend/sidebar/sidebar_assignees_spec.js create mode 100644 spec/frontend/smart_interval_spec.js create mode 100644 spec/frontend/snippet/snippet_edit_spec.js create mode 100644 spec/frontend/snippets/components/edit_spec.js rename spec/frontend/snippets/components/{app_spec.js => show_spec.js} (95%) create mode 100644 spec/frontend/static_site_editor/components/edit_header_spec.js create mode 100644 spec/frontend/static_site_editor/components/invalid_content_message_spec.js create mode 100644 spec/frontend/static_site_editor/components/publish_toolbar_spec.js create mode 100644 spec/frontend/static_site_editor/components/saved_changes_message_spec.js create mode 100644 spec/frontend/static_site_editor/components/static_site_editor_spec.js create mode 100644 spec/frontend/static_site_editor/components/submit_changes_error_spec.js create mode 100644 spec/frontend/static_site_editor/mock_data.js create mode 100644 spec/frontend/static_site_editor/services/generate_branch_name_spec.js create mode 100644 spec/frontend/static_site_editor/services/load_source_content_spec.js create mode 100644 spec/frontend/static_site_editor/services/submit_content_changes_spec.js create mode 100644 spec/frontend/static_site_editor/store/actions_spec.js create mode 100644 spec/frontend/static_site_editor/store/getters_spec.js create mode 100644 spec/frontend/static_site_editor/store/mutations_spec.js rename spec/{javascripts => frontend}/u2f/authenticate_spec.js (57%) rename spec/{javascripts => frontend}/u2f/mock_u2f_device.js (100%) rename spec/{javascripts => frontend}/u2f/register_spec.js (57%) create mode 100644 spec/frontend/vue_mr_widget/components/mr_widget_terraform_plan_spec.js create mode 100644 spec/frontend/vue_shared/components/__snapshots__/awards_list_spec.js.snap create mode 100644 spec/frontend/vue_shared/components/__snapshots__/clone_dropdown_spec.js.snap create mode 100644 spec/frontend/vue_shared/components/awards_list_spec.js create mode 100644 spec/frontend/vue_shared/components/clone_dropdown_spec.js create mode 100644 spec/frontend/vue_shared/components/form/__snapshots__/form_footer_actions_spec.js.snap create mode 100644 spec/frontend/vue_shared/components/form/__snapshots__/title_spec.js.snap create mode 100644 spec/frontend/vue_shared/components/form/form_footer_actions_spec.js create mode 100644 spec/frontend/vue_shared/components/form/title_spec.js create mode 100644 spec/frontend/vue_shared/components/local_storage_sync_spec.js create mode 100644 spec/frontend/vue_shared/components/ordered_layout_spec.js create mode 100644 spec/graphql/resolvers/environments_resolver_spec.rb create mode 100644 spec/graphql/resolvers/metrics/dashboard_resolver_spec.rb create mode 100644 spec/graphql/resolvers/metrics/dashboards/annotation_resolver_spec.rb create mode 100644 spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb create mode 100644 spec/graphql/resolvers/projects/services_resolver_spec.rb create mode 100644 spec/graphql/types/jira_import_type_spec.rb create mode 100644 spec/graphql/types/metrics/dashboard_type_spec.rb create mode 100644 spec/graphql/types/metrics/dashboards/annotation_type_spec.rb create mode 100644 spec/graphql/types/projects/base_service_type_spec.rb create mode 100644 spec/graphql/types/projects/jira_service_type_spec.rb create mode 100644 spec/graphql/types/projects/service_type_spec.rb create mode 100644 spec/graphql/types/projects/services_enum_spec.rb create mode 100644 spec/helpers/emoji_helper_spec.rb delete mode 100644 spec/javascripts/boards/board_card_spec.js delete mode 100644 spec/javascripts/boards/components/board_form_spec.js delete mode 100644 spec/javascripts/diffs/components/commit_widget_spec.js delete mode 100644 spec/javascripts/diffs/components/image_diff_overlay_spec.js delete mode 100644 spec/javascripts/ide/components/commit_sidebar/actions_spec.js delete mode 100644 spec/javascripts/ide/components/external_link_spec.js delete mode 100644 spec/javascripts/ide/components/repo_commit_section_spec.js create mode 100644 spec/javascripts/monitoring/fixture_data.js create mode 100644 spec/javascripts/monitoring/store_utils.js delete mode 100644 spec/javascripts/notes/components/diff_with_note_spec.js delete mode 100644 spec/javascripts/notes/components/discussion_filter_spec.js delete mode 100644 spec/javascripts/notes/helpers.js delete mode 100644 spec/javascripts/notes/mock_data.js delete mode 100644 spec/javascripts/pipelines/graph/graph_component_spec.js delete mode 100644 spec/javascripts/pipelines/graph/job_name_component_spec.js delete mode 100644 spec/javascripts/pipelines/graph/linked_pipelines_column_spec.js delete mode 100644 spec/javascripts/pipelines/graph/linked_pipelines_mock_data.js delete mode 100644 spec/javascripts/pipelines/graph/stage_column_component_spec.js delete mode 100644 spec/javascripts/sidebar/sidebar_assignees_spec.js delete mode 100644 spec/javascripts/smart_interval_spec.js create mode 100644 spec/lib/api/entities/project_import_failed_relation_spec.rb create mode 100644 spec/lib/api/entities/project_import_status_spec.rb create mode 100644 spec/lib/api/entities/user_spec.rb delete mode 100644 spec/lib/api/helpers/custom_validators_spec.rb create mode 100644 spec/lib/api/validations/validators/absence_spec.rb create mode 100644 spec/lib/api/validations/validators/array_none_any_spec.rb create mode 100644 spec/lib/api/validations/validators/file_path_spec.rb create mode 100644 spec/lib/api/validations/validators/git_ref_spec.rb create mode 100644 spec/lib/api/validations/validators/git_sha_spec.rb create mode 100644 spec/lib/api/validations/validators/integer_none_any_spec.rb create mode 100644 spec/lib/api/validations/validators/limit_spec.rb create mode 100644 spec/lib/banzai/pipeline_spec.rb create mode 100644 spec/lib/constraints/admin_constrainer_spec.rb create mode 100644 spec/lib/csv_builder_spec.rb create mode 100644 spec/lib/gitlab/background_migration/backfill_deployment_clusters_from_deployments_spec.rb create mode 100644 spec/lib/gitlab/background_migration/backfill_push_rules_id_in_projects_spec.rb create mode 100644 spec/lib/gitlab/background_migration/fix_projects_without_prometheus_service_spec.rb create mode 100644 spec/lib/gitlab/background_migration/migrate_users_bio_to_user_details_spec.rb create mode 100644 spec/lib/gitlab/background_migration/populate_canonical_emails_spec.rb create mode 100644 spec/lib/gitlab/background_migration/populate_user_highest_roles_table_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/include_spec.rb create mode 100644 spec/lib/gitlab/ci/jwt_spec.rb create mode 100644 spec/lib/gitlab/ci/status/bridge/factory_spec.rb create mode 100644 spec/lib/gitlab/code_navigation_path_spec.rb create mode 100644 spec/lib/gitlab/database/postgresql_adapter/schema_versions_copy_mixin_spec.rb create mode 100644 spec/lib/gitlab/database/schema_cleaner_spec.rb rename spec/lib/gitlab/elasticsearch/{logs_spec.rb => logs/lines_spec.rb} (77%) create mode 100644 spec/lib/gitlab/elasticsearch/logs/pods_spec.rb create mode 100644 spec/lib/gitlab/gitaly_client/praefect_info_service_spec.rb delete mode 100644 spec/lib/gitlab/grafana_embed_usage_data_spec.rb create mode 100644 spec/lib/gitlab/grape_logging/loggers/perf_logger_spec.rb rename spec/lib/gitlab/graphql/{connections => pagination}/externally_paginated_array_connection_spec.rb (78%) rename spec/lib/gitlab/graphql/{connections => pagination}/filterable_array_connection_spec.rb (57%) rename spec/lib/gitlab/graphql/{connections => pagination}/keyset/conditions/not_null_condition_spec.rb (94%) rename spec/lib/gitlab/graphql/{connections => pagination}/keyset/conditions/null_condition_spec.rb (93%) rename spec/lib/gitlab/graphql/{connections => pagination}/keyset/connection_spec.rb (93%) rename spec/lib/gitlab/graphql/{connections => pagination}/keyset/order_info_spec.rb (98%) rename spec/lib/gitlab/graphql/{connections => pagination}/keyset/query_builder_spec.rb (96%) create mode 100644 spec/lib/gitlab/import/metrics_spec.rb rename spec/lib/gitlab/import_export/group/{tree_restorer_spec.rb => legacy_tree_restorer_spec.rb} (98%) rename spec/lib/gitlab/import_export/group/{tree_saver_spec.rb => legacy_tree_saver_spec.rb} (74%) create mode 100644 spec/lib/gitlab/import_export/json/legacy_reader/file_spec.rb create mode 100644 spec/lib/gitlab/import_export/json/legacy_reader/hash_spec.rb create mode 100644 spec/lib/gitlab/import_export/json/legacy_reader/shared_example.rb delete mode 100644 spec/lib/gitlab/import_export/json/legacy_reader_spec.rb create mode 100644 spec/lib/gitlab/import_export/json/ndjson_reader_spec.rb create mode 100644 spec/lib/gitlab/import_export/json/ndjson_writer_spec.rb create mode 100644 spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb delete mode 100644 spec/lib/gitlab/import_export/project/legacy_tree_saver_spec.rb create mode 100644 spec/lib/gitlab/import_formatter_spec.rb create mode 100644 spec/lib/gitlab/jira_import/base_importer_spec.rb create mode 100644 spec/lib/gitlab/jira_import/issue_serializer_spec.rb create mode 100644 spec/lib/gitlab/jira_import/issues_importer_spec.rb create mode 100644 spec/lib/gitlab/jira_import/labels_importer_spec.rb create mode 100644 spec/lib/gitlab/jira_import_spec.rb create mode 100644 spec/lib/gitlab/json_spec.rb create mode 100644 spec/lib/gitlab/metrics/dashboard/stages/panel_ids_inserter_spec.rb create mode 100644 spec/lib/gitlab/middleware/same_site_cookies_spec.rb create mode 100644 spec/lib/gitlab/prometheus/queries/validate_query_spec.rb create mode 100644 spec/lib/gitlab/repository_size_checker_spec.rb create mode 100644 spec/lib/gitlab/repository_size_error_message_spec.rb create mode 100644 spec/lib/gitlab/repository_url_builder_spec.rb create mode 100644 spec/lib/gitlab/static_site_editor/config_spec.rb create mode 100644 spec/lib/gitlab/wiki_pages/front_matter_parser_spec.rb create mode 100644 spec/lib/gitlab/x509/signature_spec.rb create mode 100644 spec/lib/quality/helm3_client_spec.rb create mode 100644 spec/mailers/emails/projects_spec.rb create mode 100644 spec/migrations/20200313203550_remove_orphaned_chat_names_spec.rb create mode 100644 spec/migrations/20200406102120_backfill_deployment_clusters_from_deployments_spec.rb create mode 100644 spec/migrations/fix_projects_without_prometheus_services_spec.rb create mode 100644 spec/migrations/migrate_bot_type_to_user_type_spec.rb create mode 100644 spec/migrations/schedule_backfill_push_rules_id_in_projects_spec.rb create mode 100644 spec/migrations/schedule_populate_user_highest_roles_table_spec.rb create mode 100644 spec/models/alerting/project_alerting_setting_spec.rb create mode 100644 spec/models/ci/build_dependencies_spec.rb create mode 100644 spec/models/ci/daily_report_result_spec.rb create mode 100644 spec/models/clusters/applications/fluentd_spec.rb rename spec/models/concerns/{ => ci}/has_variable_spec.rb (98%) rename spec/models/concerns/{ => ci}/maskable_spec.rb (88%) create mode 100644 spec/models/concerns/where_composite_spec.rb create mode 100644 spec/models/container_registry/event_spec.rb create mode 100644 spec/models/diff_note_position_spec.rb create mode 100644 spec/models/jira_import_state_spec.rb create mode 100644 spec/models/metrics/dashboard/annotation_spec.rb create mode 100644 spec/models/project_services/open_project_service_spec.rb create mode 100644 spec/models/project_services/open_project_tracker_data_spec.rb create mode 100644 spec/models/prometheus_alert_event_spec.rb rename spec/models/{ => releases}/evidence_spec.rb (98%) create mode 100644 spec/models/terraform/state_spec.rb create mode 100644 spec/models/user_canonical_email_spec.rb create mode 100644 spec/models/user_type_enums_spec.rb create mode 100644 spec/models/users_statistics_spec.rb create mode 100644 spec/models/wiki_page/meta_spec.rb create mode 100644 spec/models/wiki_page/slug_spec.rb create mode 100644 spec/policies/metrics/dashboard/annotation_policy_spec.rb create mode 100644 spec/presenters/pages_domain_presenter_spec.rb create mode 100644 spec/requests/api/container_registry_event_spec.rb create mode 100644 spec/requests/api/graphql/metrics/dashboard/annotations_spec.rb create mode 100644 spec/requests/api/graphql/metrics/dashboard_query_spec.rb create mode 100644 spec/requests/api/graphql/mutations/jira_import/start_spec.rb create mode 100644 spec/requests/api/graphql/project/base_service_spec.rb create mode 100644 spec/requests/api/graphql/project/jira_import_spec.rb create mode 100644 spec/requests/api/graphql/project/jira_service_spec.rb create mode 100644 spec/requests/api/metrics/dashboard/annotations_spec.rb create mode 100644 spec/requests/api/terraform/state_spec.rb create mode 100644 spec/requests/import/gitlab_projects_controller_spec.rb create mode 100644 spec/rubocop/cop/filename_length_spec.rb create mode 100644 spec/rubocop/cop/gitlab/duplicate_spec_location_spec.rb create mode 100644 spec/rubocop/cop/migration/add_columns_to_wide_tables_spec.rb create mode 100644 spec/rubocop/cop/migration/with_lock_retries_without_ddl_transaction_spec.rb create mode 100644 spec/rubocop/cop/performance/ar_count_each_spec.rb create mode 100644 spec/rubocop/cop/performance/readlines_each_spec.rb create mode 100644 spec/rubocop/cop/rspec/modify_sidekiq_middleware_spec.rb create mode 100644 spec/rubocop/cop/static_translation_definition_spec.rb create mode 100644 spec/serializers/merge_request_basic_entity_spec.rb create mode 100644 spec/serializers/prometheus_alert_entity_spec.rb create mode 100644 spec/services/ci/daily_report_result_service_spec.rb rename spec/services/{ => ci}/external_pull_requests/create_pipeline_service_spec.rb (97%) create mode 100644 spec/services/ci/generate_coverage_reports_service_spec.rb create mode 100644 spec/services/clusters/applications/check_upgrade_progress_service_spec.rb create mode 100644 spec/services/clusters/applications/prometheus_config_service_spec.rb create mode 100644 spec/services/clusters/applications/prometheus_health_check_service_spec.rb create mode 100644 spec/services/clusters/applications/prometheus_update_service_spec.rb create mode 100644 spec/services/clusters/applications/schedule_update_service_spec.rb create mode 100644 spec/services/clusters/management/create_project_service_spec.rb create mode 100644 spec/services/clusters/management/validate_management_project_permissions_service_spec.rb create mode 100644 spec/services/discussions/capture_diff_note_position_service_spec.rb create mode 100644 spec/services/discussions/capture_diff_note_positions_service_spec.rb create mode 100644 spec/services/groups/deploy_tokens/destroy_service_spec.rb create mode 100644 spec/services/issues/export_csv_service_spec.rb create mode 100644 spec/services/jira_import/start_import_service_spec.rb create mode 100644 spec/services/merge_requests/merge_orchestration_service_spec.rb create mode 100644 spec/services/merge_requests/pushed_branches_service_spec.rb create mode 100644 spec/services/metrics/dashboard/annotations/create_service_spec.rb create mode 100644 spec/services/metrics/dashboard/annotations/delete_service_spec.rb rename spec/services/metrics/dashboard/{project_dashboard_service_spec.rb => custom_dashboard_service_spec.rb} (84%) create mode 100644 spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb create mode 100644 spec/services/metrics/dashboard/transient_embed_service_spec.rb create mode 100644 spec/services/notification_recipients/builder/new_note_spec.rb create mode 100644 spec/services/pages_domains/retry_acme_order_service_spec.rb create mode 100644 spec/services/personal_access_tokens/create_service_spec.rb create mode 100644 spec/services/projects/deploy_tokens/destroy_service_spec.rb create mode 100644 spec/services/projects/prometheus/alerts/create_events_service_spec.rb create mode 100644 spec/services/projects/prometheus/alerts/create_service_spec.rb create mode 100644 spec/services/projects/prometheus/alerts/destroy_service_spec.rb create mode 100644 spec/services/projects/prometheus/alerts/notify_service_spec.rb create mode 100644 spec/services/projects/prometheus/alerts/update_service_spec.rb create mode 100644 spec/services/projects/prometheus/metrics/destroy_service_spec.rb create mode 100644 spec/services/projects/prometheus/metrics/update_service_spec.rb create mode 100644 spec/services/prometheus/create_default_alerts_service_spec.rb create mode 100644 spec/services/resource_events/synthetic_milestone_notes_builder_service_spec.rb create mode 100644 spec/services/resources/create_access_token_service_spec.rb create mode 100644 spec/services/terraform/remote_state_handler_spec.rb create mode 100644 spec/services/users/update_canonical_email_service_spec.rb create mode 100644 spec/services/users/update_highest_member_role_service_spec.rb create mode 100644 spec/support/helpers/api_validators_helpers.rb create mode 100644 spec/support/helpers/features/web_ide_spec_helpers.rb create mode 100644 spec/support/helpers/navbar_structure_helper.rb create mode 100644 spec/support/helpers/usage_data_helpers.rb create mode 100644 spec/support/matchers/exclude_matcher.rb create mode 100644 spec/support/non_existing_records_helper.rb create mode 100644 spec/support/praefect.rb create mode 100644 spec/support/shared_contexts/navbar_structure_context.rb create mode 100644 spec/support/shared_contexts/project_service_shared_context.rb create mode 100644 spec/support/shared_examples/controllers/binary_blob_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/cache_control_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/content_disposition_shared_examples.rb create mode 100644 spec/support/shared_examples/features/project_upload_files_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/jira_import/jira_import_resolver_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/projects/services_resolver_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/resolves_issuable_shared_examples.rb rename spec/{lib/gitlab/cycle_analytics/shared_stage_spec.rb => support/shared_examples/lib/gitlab/cycle_analytics/base_stage_shared_examples.rb} (98%) rename spec/{lib/gitlab/cycle_analytics/shared_event_spec.rb => support/shared_examples/lib/gitlab/cycle_analytics/default_query_config_shared_examples.rb} (100%) rename spec/support/shared_examples/lib/gitlab/{cycle_analytics_event_shared_examples.rb => cycle_analytics/event_shared_examples.rb} (100%) rename spec/support/shared_examples/lib/gitlab/import_export/{project_tree_restorer_shared_examples.rb => project/tree_restorer_shared_examples.rb} (86%) create mode 100644 spec/support/shared_examples/lib/gitlab/jira_import/base_importer_shared_examples.rb create mode 100644 spec/support/shared_examples/models/concerns/composite_id_shared_examples.rb create mode 100644 spec/support/shared_examples/models/jira_import_state_shared_examples.rb create mode 100644 spec/support/shared_examples/models/update_highest_role_shared_examples.rb create mode 100644 spec/support/shared_examples/policies/wiki_policies_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/graphql/projects/services_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/response_status_shared_examples.rb create mode 100644 spec/support/shared_examples/services/jira_import/start_import_service_shared_examples.rb delete mode 100644 spec/support/shared_examples/spam_check_shared_examples.rb create mode 100644 spec/support/shared_examples/workers/gitlab/jira_import/jira_import_workers_shared_examples.rb create mode 100644 spec/tasks/gitlab/praefect_rake_spec.rb create mode 100644 spec/tasks/gitlab/x509/update_rake_spec.rb create mode 100644 spec/uploaders/terraform/state_uploader_spec.rb create mode 100644 spec/views/admin/application_settings/general.html.haml_spec.rb delete mode 100644 spec/views/admin/application_settings/integrations.html.haml_spec.rb create mode 100644 spec/views/admin/users/_user.html.haml_spec.rb create mode 100644 spec/views/projects/pages/show.html.haml_spec.rb create mode 100644 spec/workers/ci/daily_report_results_worker_spec.rb create mode 100644 spec/workers/cluster_update_app_worker_spec.rb create mode 100644 spec/workers/cluster_wait_for_app_update_worker_spec.rb create mode 100644 spec/workers/export_csv_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/import_issue_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stage/finish_import_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stage/import_attachments_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stage/import_issues_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stage/import_labels_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stage/import_notes_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb create mode 100644 spec/workers/incident_management/process_prometheus_alert_worker_spec.rb create mode 100644 spec/workers/prometheus/create_default_alerts_worker_spec.rb create mode 100644 spec/workers/update_highest_role_worker_spec.rb create mode 100644 spec/workers/users/create_statistics_worker_spec.rb rename tooling/overcommit/{gems.rb => Gemfile} (68%) rename tooling/overcommit/{gems.locked => Gemfile.lock} (100%) create mode 100644 vendor/Dockerfile/Swift.Dockerfile create mode 100644 vendor/fluentd/values.yaml create mode 100644 vendor/project_templates/cluster_management.tar.gz create mode 100644 vendor/project_templates/hipaa_audit_protocol.tar.gz create mode 100644 vendor/project_templates/sse_middleman.tar.gz diff --git a/.codeclimate.yml b/.codeclimate.yml index 2be8e63e84..ccc09fcc77 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -38,3 +38,4 @@ exclude_paths: - backups/ - coverage-javascript/ - plugins/ + - file_hooks/ diff --git a/.eslintrc.yml b/.eslintrc.yml index 8d34efc9a6..0639228fe5 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,6 +1,6 @@ extends: - - '@gitlab' - - plugin:promise/recommended + - plugin:@gitlab/default + - plugin:@gitlab/i18n - plugin:no-jquery/slim - plugin:no-jquery/deprecated-3.4 globals: @@ -16,9 +16,6 @@ settings: webpack: config: './config/webpack.config.js' rules: - "@gitlab/i18n/no-non-i18n-strings": error - "@gitlab/vue-i18n/no-bare-strings": error - "@gitlab/vue-i18n/no-bare-attribute-strings": error import/no-commonjs: error no-underscore-dangle: - error @@ -54,4 +51,4 @@ overrides: - files: - '**/spec/**/*' rules: - "@gitlab/i18n/no-non-i18n-strings": off + "@gitlab/require-i18n-strings": off diff --git a/.gitignore b/.gitignore index 4bebf3fd04..3120c1c1bd 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ eslint-report.html /config/database*.yml /config/gitlab.yml /config/gitlab_ci.yml +/config/Gitlab.gitlab-license /config/initializers/rack_attack.rb /config/initializers/smtp_settings.rb /config/initializers/relative_url.rb diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index be1818391c..9e808cc7a9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -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-9.6-graphicsmagick-1.3.34" +image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-10-graphicsmagick-1.3.34" stages: - sync @@ -12,10 +12,14 @@ stages: - post-qa - pages -# always use `gitlab-org` runners +# always use `gitlab-org` runners, however +# in cases where jobs require Docker-in-Docker, the job +# definition must be extended with `.use-docker-in-docker` default: tags: - gitlab-org + # All jobs are interruptible by default + interruptible: true workflow: rules: @@ -47,6 +51,7 @@ variables: BUILD_ASSETS_IMAGE: "false" ES_JAVA_OPTS: "-Xms256m -Xmx256m" ELASTIC_URL: "http://elastic:changeme@elasticsearch:9200" + DOCKER_VERSION: "19.03.0" include: - local: .gitlab/ci/cache-repo.gitlab-ci.yml diff --git a/.gitlab/ci/dev-fixtures.gitlab-ci.yml b/.gitlab/ci/dev-fixtures.gitlab-ci.yml index e77a75d282..27ceb6f37d 100644 --- a/.gitlab/ci/dev-fixtures.gitlab-ci.yml +++ b/.gitlab/ci/dev-fixtures.gitlab-ci.yml @@ -3,15 +3,15 @@ - .default-retry - .default-cache - .default-before_script - - .use-pg9 + - .use-pg11 stage: test - needs: ["setup-test-env"] + needs: ["setup-test-env pg11"] variables: FIXTURE_PATH: "db/fixtures/development" SEED_CYCLE_ANALYTICS: "true" SEED_PRODUCTIVITY_ANALYTICS: "true" CYCLE_ANALYTICS_ISSUE_COUNT: 1 - SIZE: 0 # number of external projects to fork, requires network connection + SIZE: 0 # number of external projects to fork, requires network connection # SEED_NESTED_GROUPS: "false" # requires network connection run-dev-fixtures: @@ -26,7 +26,7 @@ run-dev-fixtures-ee: extends: - .run-dev-fixtures - .dev-fixtures:rules:ee-only - - .use-pg9-ee + - .use-pg11-ee script: - scripts/gitaly-test-spawn - cp ee/db/fixtures/development/* $FIXTURE_PATH diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 946db0c4be..b8a66decbb 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -66,9 +66,9 @@ graphql-reference-verify: - .default-cache - .default-before_script - .docs:rules:graphql-reference-verify - - .use-pg9 + - .use-pg11 stage: test - needs: ["setup-test-env"] + needs: ["setup-test-env pg11"] script: - bundle exec rake gitlab:graphql:check_docs - bundle exec rake gitlab:graphql:check_schema diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 8685ccc543..2b22162b0c 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -2,6 +2,8 @@ cache: paths: - vendor/ruby/ + - public/assets/webpack/ + - assets-hash.txt - .yarn-cache/ - tmp/cache/assets/sprockets - tmp/cache/babel-loader @@ -13,10 +15,9 @@ - .default-retry - .default-before_script - .assets-compile-cache - image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-git-2.24-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-graphicsmagick-1.3.34-docker-19.03.1 + - .use-docker-in-docker + image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-graphicsmagick-1.3.34-docker-19.03.1 stage: prepare - services: - - docker:19.03.0-dind variables: NODE_ENV: "production" RAILS_ENV: "production" @@ -25,27 +26,30 @@ WEBPACK_REPORT: "true" # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 - DOCKER_DRIVER: overlay2 - DOCKER_HOST: tcp://docker:2375 cache: - key: "assets-compile:production:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:tmp_cache_webpack:v9" + key: "assets-compile:production:v1" artifacts: name: webpack-report expire_in: 31d paths: - webpack-report/ - - public/assets/ + - assets-compile.log + # We consume these files in GitLab UI for integration tests: + # https://gitlab.com/gitlab-org/gitlab-ui/-/blob/e88493b3c855aea30bf60baee692a64606b0eb1e/.storybook/preview-head.pug#L1 + - public/assets/application-*.css + - public/assets/application-*.css.gz + when: always script: - node --version - retry yarn install --frozen-lockfile --production --cache-folder .yarn-cache --prefer-offline - free -m - - retry bundle exec rake gitlab:assets:compile + - time bin/rake gitlab:assets:compile > assets-compile.log 2>&1 + # TODO: Change the image tag to be the MD5 of assets files and skip image building if the image exists + # We'll also need to pass GITLAB_ASSETS_TAG to the trigerred omnibus-gitlab pipeline similarly to how we do it for trigerred CNG pipelines + # https://gitlab.com/gitlab-org/gitlab/issues/208389 - time scripts/build_assets_image - scripts/clean-old-cached-assets - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here - tags: - - gitlab-org - - docker gitlab:assets:compile pull-push-cache: extends: @@ -71,7 +75,7 @@ gitlab:assets:compile pull-cache: - node --version - retry yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline - free -m - - retry bundle exec rake gitlab:assets:compile + - time bin/rake gitlab:assets:compile > assets-compile.log 2>&1 - scripts/clean-old-cached-assets variables: SETUP_DB: "false" @@ -79,12 +83,14 @@ gitlab:assets:compile pull-cache: NODE_OPTIONS: --max_old_space_size=3584 WEBPACK_VENDOR_DLL: "true" cache: - key: "assets-compile:v9" + key: "assets-compile:test:v1" artifacts: expire_in: 7d paths: - node_modules - public/assets + - assets-compile.log + when: always compile-assets pull-push-cache: extends: @@ -100,7 +106,7 @@ compile-assets pull-push-cache as-if-foss: - .as-if-foss cache: policy: pull-push - key: "assets-compile:v9:foss" + key: "assets-compile:test:as-if-foss:v1" compile-assets pull-cache: extends: @@ -116,20 +122,16 @@ compile-assets pull-cache as-if-foss: - .as-if-foss cache: policy: pull - key: "assets-compile:v9:foss" + key: "assets-compile:test:as-if-foss:v1" .frontend-fixtures-base: extends: - .default-retry - .default-cache - .default-before_script - - .use-pg9 + - .use-pg11 stage: fixtures - needs: - - job: "setup-test-env" - artifacts: true - - job: "compile-assets pull-cache" - artifacts: true + needs: ["setup-test-env pg11", "compile-assets pull-cache"] script: - date - scripts/gitaly-test-spawn @@ -152,7 +154,7 @@ frontend-fixtures: frontend-fixtures-as-if-foss: extends: - .frontend-fixtures-base - - .frontend:rules:default-frontend-jobs-as-if-foss + - .frontend:rules:default-frontend-jobs-no-foss - .as-if-foss .frontend-job-base: @@ -195,7 +197,7 @@ karma: karma-as-if-foss: extends: - .karma-base - - .frontend:rules:default-frontend-jobs-as-if-foss + - .frontend:rules:default-frontend-jobs-no-foss - .as-if-foss needs: ["frontend-fixtures-as-if-foss"] @@ -230,7 +232,7 @@ jest: jest-as-if-foss: extends: - .jest-base - - .frontend:rules:default-frontend-jobs-as-if-foss + - .frontend:rules:default-frontend-jobs-no-foss - .as-if-foss needs: ["frontend-fixtures-as-if-foss"] cache: @@ -239,7 +241,7 @@ jest-as-if-foss: coverage-frontend: extends: - .default-retry - - .frontend:rules:default-frontend-jobs + - .frontend:rules:default-frontend-jobs-no-foss needs: ["jest"] stage: post-test before_script: @@ -258,7 +260,6 @@ coverage-frontend: .qa-frontend-node: extends: - .default-retry - - .default-cache - .frontend:rules:qa-frontend-node stage: test dependencies: [] @@ -288,7 +289,7 @@ webpack-dev-server: - .default-cache - .frontend:rules:default-frontend-jobs stage: test - needs: ["setup-test-env", "compile-assets pull-cache"] + needs: ["setup-test-env pg11", "compile-assets pull-cache"] variables: WEBPACK_MEMORY_TEST: "true" WEBPACK_VENDOR_DLL: "true" diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index d5c89eacbb..66b7c47efc 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -21,7 +21,7 @@ # Jobs that only need to pull cache .default-cache: cache: - key: "debian-stretch-ruby-2.6.5-pg9.6-node-12.x" + key: "debian-stretch-ruby-2.6.5-pg11-node-12.x" paths: - .go/pkg/mod - vendor/ruby @@ -30,32 +30,40 @@ policy: pull .use-pg9: + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-9.6-graphicsmagick-1.3.34" services: - name: postgres:9.6.17 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:alpine variables: POSTGRES_HOST_AUTH_METHOD: trust + cache: + key: "debian-stretch-ruby-2.6.5-pg9-node-12.x" .use-pg10: - 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-10-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-10-graphicsmagick-1.3.34" services: - name: postgres:10.12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - name: redis:alpine variables: POSTGRES_HOST_AUTH_METHOD: trust + cache: + key: "debian-stretch-ruby-2.6.5-pg10-node-12.x" .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" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-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 + cache: + key: "debian-stretch-ruby-2.6.5-pg11-node-12.x" .use-pg9-ee: + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-9.6-graphicsmagick-1.3.34" services: - name: postgres:9.6.17 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -63,9 +71,11 @@ - name: elasticsearch:6.4.2 variables: POSTGRES_HOST_AUTH_METHOD: trust + cache: + key: "debian-stretch-ruby-2.6.5-pg9-node-12.x" .use-pg10-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-10-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-postgresql-10-graphicsmagick-1.3.34" services: - name: postgres:10.12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -73,9 +83,11 @@ - name: elasticsearch:6.4.2 variables: POSTGRES_HOST_AUTH_METHOD: trust + cache: + key: "debian-stretch-ruby-2.6.5-pg10-node-12.x" .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" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.5-golang-1.14-git-2.26-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"] @@ -83,7 +95,29 @@ - name: elasticsearch:6.4.2 variables: POSTGRES_HOST_AUTH_METHOD: trust + cache: + key: "debian-stretch-ruby-2.6.5-pg11-node-12.x" + +# Pin kaniko to v0.16.0 due to https://github.com/GoogleContainerTools/kaniko/issues/1162 +.use-kaniko: + image: + name: gcr.io/kaniko-project/executor:debug-v0.16.0 + entrypoint: [""] + before_script: + - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json .as-if-foss: variables: FOSS_ONLY: '1' + +.use-docker-in-docker: + image: docker:${DOCKER_VERSION} + services: + - docker:${DOCKER_VERSION}-dind + variables: + DOCKER_DRIVER: overlay2 + DOCKER_HOST: tcp://docker:2375 + DOCKER_TLS_CERTDIR: "" + tags: + # See https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/7019 for tag descriptions + - gitlab-org-docker diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index b2267b03c5..af75ff257e 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -8,9 +8,7 @@ memory-static: extends: .only-code-memory-job-base stage: test - needs: - - job: setup-test-env - artifacts: true + needs: ["setup-test-env pg11"] variables: SETUP_DB: "false" script: @@ -38,13 +36,9 @@ memory-static: memory-on-boot: extends: - .only-code-memory-job-base - - .use-pg10 + - .use-pg11 stage: test - needs: - - job: setup-test-env - artifacts: true - - job: compile-assets pull-cache - artifacts: true + needs: ["setup-test-env pg11", "compile-assets pull-cache"] variables: NODE_ENV: "production" RAILS_ENV: "production" diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index 983f675d1d..38d79ddb09 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -1,7 +1,6 @@ pages: extends: - .default-retry - - .default-cache - .pages:rules stage: pages dependencies: ["rspec:coverage", "karma", "gitlab:assets:compile pull-cache"] diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index b0713c0944..8a8f66a464 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -55,5 +55,9 @@ package-and-qa: extends: - .package-and-qa-base - .qa:rules:package-and-qa - needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] + needs: + - job: build-qa-image + artifacts: false + - job: gitlab:assets:compile pull-cache + artifacts: false allow_failure: true diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index f9074adeab..28ec96b838 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -1,9 +1,5 @@ .rails:needs:setup-and-assets: - needs: - - job: setup-test-env - artifacts: true - - job: compile-assets pull-cache - artifacts: true + needs: ["setup-test-env pg11", "compile-assets pull-cache"] .rails-job-base: extends: @@ -12,12 +8,10 @@ - .default-before_script #################### -# ee and foss jobs # -setup-test-env: +# EE and FOSS jobs # +.base-setup-test-env: extends: - .rails-job-base - - .rails:rules:default-refs-code-backstage-qa - - .use-pg9 stage: prepare script: - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' @@ -31,6 +25,24 @@ setup-test-env: cache: policy: pull-push +setup-test-env pg11: + extends: + - .base-setup-test-env + - .rails:rules:default-refs-code-backstage-qa + - .use-pg11 + +setup-test-env pg10: + extends: + - .base-setup-test-env + - .rails:rules:master-refs-code-backstage + - .use-pg10 + +setup-test-env pg9: + extends: + - .base-setup-test-env + - .rails:rules:nightly-master-refs-code-backstage + - .use-pg9 + static-analysis: extends: - .rails-job-base @@ -43,7 +55,7 @@ static-analysis: script: - scripts/static-analysis cache: - key: "debian-stretch-ruby-2.6-pg9.6-rubocop" + key: "ruby-2.6.5-pg11-rubocop" paths: - vendor/ruby - tmp/rubocop_cache @@ -63,13 +75,7 @@ downtime_check: .rspec-base: extends: .rails-job-base stage: test - needs: - - job: setup-test-env - artifacts: true - - job: retrieve-tests-metadata - artifacts: true - - job: compile-assets pull-cache - artifacts: true + needs: ["setup-test-env pg11", "retrieve-tests-metadata", "compile-assets pull-cache"] script: - source scripts/rspec_helpers.sh - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag ~level:migration" @@ -87,48 +93,37 @@ downtime_check: reports: junit: junit_rspec.xml -.rspec-base-quarantine: - extends: - - .rspec-base - - .use-pg9 - variables: - RSPEC_OPTS: "--tag quarantine -- spec/" - script: - - source scripts/rspec_helpers.sh - - rspec_simple_job "${RSPEC_OPTS}" - allow_failure: true - -.rspec-base-pg9: +.rspec-base-pg11: extends: - .rspec-base - .rails:rules:ee-and-foss - - .use-pg9 + - .use-pg11 .rspec-base-migration: script: - source scripts/rspec_helpers.sh - rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag level:migration" -rspec migration pg9: +rspec migration pg11: extends: - - .rspec-base-pg9 + - .rspec-base-pg11 - .rspec-base-migration parallel: 5 -rspec unit pg9: - extends: .rspec-base-pg9 +rspec unit pg11: + extends: .rspec-base-pg11 parallel: 20 -rspec integration pg9: - extends: .rspec-base-pg9 +rspec integration pg11: + extends: .rspec-base-pg11 parallel: 8 -rspec system pg9: - extends: .rspec-base-pg9 +rspec system pg11: + extends: .rspec-base-pg11 parallel: 24 rspec fast_spec_helper: - extends: .rspec-base-pg9 + extends: .rspec-base-pg11 script: - bin/rspec spec/fast_spec_helper.rb @@ -136,11 +131,9 @@ rspec fast_spec_helper: extends: - .rails-job-base - .rails:rules:ee-and-foss - - .use-pg9 + - .use-pg11 stage: test - needs: - - job: setup-test-env - artifacts: true + needs: ["setup-test-env pg11"] db:migrate:reset: extends: .db-job-base @@ -204,8 +197,25 @@ gitlab:setup: rspec:coverage: extends: - .rails-job-base - - .rails:rules:ee-and-foss + - .rails:rules:ee-only stage: post-test + # We cannot use needs since it would mean needing 84 jobs (since most are parallelized) + # so we use `dependencies` here. + dependencies: + - setup-test-env pg11 + - rspec migration pg11 + - rspec unit pg11 + - rspec integration pg11 + - rspec system pg11 + - rspec-ee migration pg11 + - rspec-ee unit pg11 + - rspec-ee integration pg11 + - rspec-ee system pg11 + - rspec-ee unit pg11 geo + - rspec-ee integration pg11 geo + - rspec-ee system pg11 geo + - memory-static + - memory-on-boot variables: SETUP_DB: "false" cache: @@ -221,27 +231,23 @@ rspec:coverage: - coverage/index.html - coverage/assets/ - tmp/memory_test/ -# ee and foss jobs # +# EE and FOSS jobs # #################### #################### # master-only jobs # -rspec quarantine pg9: - extends: - - .rspec-base-quarantine - - .rails:rules:master-refs-code-backstage - .rspec-base-pg10: extends: - .rspec-base - .rails:rules:master-refs-code-backstage - .use-pg10 + needs: ["setup-test-env pg10", "retrieve-tests-metadata", "compile-assets pull-cache"] rspec migration pg10: extends: - .rspec-base-pg10 - .rspec-base-migration - parallel: 2 + parallel: 5 rspec unit pg10: extends: .rspec-base-pg10 @@ -257,42 +263,42 @@ rspec system pg10: # master-only jobs # #################### -############################ -# nightly master-only jobs # -.rspec-base-pg11: +###################### +# nightly-only jobs # +.rspec-base-pg9: extends: - .rspec-base - .rails:rules:nightly-master-refs-code-backstage - - .use-pg11 + - .use-pg9 + needs: ["setup-test-env pg9", "retrieve-tests-metadata", "compile-assets pull-cache"] -rspec migration pg11: +rspec migration pg9: extends: - - .rspec-base-pg11 + - .rspec-base-pg9 - .rspec-base-migration - parallel: 2 + parallel: 5 -rspec unit pg11: - extends: .rspec-base-pg11 +rspec unit pg9: + extends: .rspec-base-pg9 parallel: 20 -rspec integration pg11: - extends: .rspec-base-pg11 +rspec integration pg9: + extends: .rspec-base-pg9 parallel: 8 -rspec system pg11: - extends: .rspec-base-pg11 +rspec system pg9: + extends: .rspec-base-pg9 parallel: 24 -# nightly master-only jobs # -############################ +# nightly-only jobs # +##################### -######################### -# ee + master-only jobs # -rspec-ee quarantine pg9: +####################### +# EE master-only jobs # +.rspec-ee-base-pg10: extends: - - .rspec-base-quarantine - - .rails:rules:master-refs-code-backstage-ee-only - variables: - RSPEC_OPTS: "--tag quarantine -- ee/spec/" + - .rspec-base-ee + - .use-pg10-ee + needs: ["setup-test-env pg10", "retrieve-tests-metadata", "compile-assets pull-cache"] rspec-ee migration pg10: extends: @@ -318,73 +324,62 @@ rspec-ee system pg10: - .rspec-ee-base-pg10 - .rails:rules:master-refs-code-backstage parallel: 6 -# ee + master-only jobs # -######################### +# EE master-only jobs # +####################### -################# -# ee-only jobs # +################ +# EE-only jobs # .rspec-base-ee: extends: - .rspec-base - .rails:rules:ee-only -.rspec-base-pg9-as-if-foss: +.rspec-base-pg11-as-if-foss: extends: - .rspec-base-ee - .as-if-foss - - .use-pg9 - needs: - - job: setup-test-env - artifacts: true - - job: retrieve-tests-metadata - artifacts: true - - job: compile-assets pull-cache as-if-foss - artifacts: true + - .use-pg11 + needs: ["setup-test-env pg11", "retrieve-tests-metadata", "compile-assets pull-cache as-if-foss"] -.rspec-ee-base-pg9: +.rspec-ee-base-pg11: extends: - .rspec-base-ee - - .use-pg9-ee + - .use-pg11-ee -.rspec-ee-base-pg10: +rspec migration pg11-as-if-foss: extends: - - .rspec-base-ee - - .use-pg10-ee - -rspec migration pg9-as-if-foss: - extends: - - .rspec-base-pg9-as-if-foss + - .rspec-base-pg11-as-if-foss - .rspec-base-migration parallel: 5 -rspec unit pg9-as-if-foss: - extends: .rspec-base-pg9-as-if-foss +rspec unit pg11-as-if-foss: + extends: .rspec-base-pg11-as-if-foss parallel: 20 -rspec integration pg9-as-if-foss: - extends: .rspec-base-pg9-as-if-foss +rspec integration pg11-as-if-foss: + extends: .rspec-base-pg11-as-if-foss parallel: 8 -rspec system pg9-as-if-foss: - extends: .rspec-base-pg9-as-if-foss +rspec system pg11-as-if-foss: + extends: .rspec-base-pg11-as-if-foss parallel: 24 -rspec-ee migration pg9: +rspec-ee migration pg11: extends: - - .rspec-ee-base-pg9 + - .rspec-ee-base-pg11 - .rspec-base-migration parallel: 2 -rspec-ee unit pg9: - extends: .rspec-ee-base-pg9 +rspec-ee unit pg11: + extends: .rspec-ee-base-pg11 parallel: 10 -rspec-ee integration pg9: - extends: .rspec-ee-base-pg9 +rspec-ee integration pg11: + extends: .rspec-ee-base-pg11 parallel: 4 -rspec-ee system pg9: - extends: .rspec-ee-base-pg9 +rspec-ee system pg11: + extends: .rspec-ee-base-pg11 parallel: 6 .rspec-ee-base-geo: @@ -394,15 +389,39 @@ rspec-ee system pg9: - scripts/prepare_postgres_fdw.sh - rspec_paralellized_job "--tag ~quarantine --tag geo" +.rspec-ee-base-geo-pg11: + extends: + - .rspec-ee-base-geo + - .use-pg11-ee + +rspec-ee unit pg11 geo: + extends: .rspec-ee-base-geo-pg11 + parallel: 2 + +rspec-ee integration pg11 geo: + extends: .rspec-ee-base-geo-pg11 + +rspec-ee system pg11 geo: + extends: .rspec-ee-base-geo-pg11 + +db:rollback geo: + extends: + - db:rollback + - .rails:rules:ee-only + script: + - bundle exec rake geo:db:migrate VERSION=20170627195211 + - bundle exec rake geo:db:migrate +# EE-only jobs # +################ + +######################## +# EE nightly-only jobs # .rspec-ee-base-geo-pg9: extends: - .rspec-ee-base-geo - .use-pg9-ee - -.rspec-ee-base-geo-pg10: - extends: - - .rspec-ee-base-geo - - .use-pg10-ee + - .rails:rules:nightly-master-refs-code-backstage-ee-only + needs: ["setup-test-env pg9", "retrieve-tests-metadata", "compile-assets pull-cache"] rspec-ee unit pg9 geo: extends: .rspec-ee-base-geo-pg9 @@ -413,23 +432,5 @@ rspec-ee integration pg9 geo: rspec-ee system pg9 geo: extends: .rspec-ee-base-geo-pg9 - -rspec-ee unit pg10 geo: - extends: .rspec-ee-base-geo-pg10 - parallel: 2 - -rspec-ee integration pg10 geo: - extends: .rspec-ee-base-geo-pg10 - -rspec-ee system pg10 geo: - extends: .rspec-ee-base-geo-pg10 - -db:rollback geo: - extends: - - db:rollback - - .rails:rules:ee-only - script: - - bundle exec rake geo:db:migrate VERSION=20170627195211 - - bundle exec rake geo:db:migrate -# ee-only jobs # -################ +# EE nightly-only jobs # +######################## diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index f381c423f5..61915aa798 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -11,15 +11,14 @@ code_quality: extends: - .default-retry - .reports:rules:code_quality + - .use-docker-in-docker stage: test needs: [] - image: docker:stable allow_failure: true - services: - - docker:stable-dind variables: - DOCKER_DRIVER: overlay2 - DOCKER_TLS_CERTDIR: "" + # emptying DOCKER_HOST so it can be detected properly on kubernetes executor + # with the script below + DOCKER_HOST: "" CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/ci-cd/codequality:0.85.9" script: - | @@ -44,43 +43,59 @@ code_quality: # We need to duplicate this job's definition because it seems it's impossible to # override an included `only.refs`. # See https://gitlab.com/gitlab-org/gitlab/issues/31371. -# Once https://gitlab.com/gitlab-org/gitlab/merge_requests/16487 will be deployed -# to GitLab.com, we should be able to use the template and set SAST_DISABLE_DIND: "true". -sast: +.sast: extends: - .default-retry - .reports:rules:sast + - .use-docker-in-docker stage: test - allow_failure: true + # `needs: []` starts the job immediately in the pipeline + # https://docs.gitlab.com/ee/ci/yaml/README.html#needs needs: [] + allow_failure: true artifacts: paths: - gl-sast-report.json # GitLab-specific reports: sast: gl-sast-report.json expire_in: 1 week # GitLab-specific - image: docker:stable variables: + # emptying DOCKER_HOST so it can be detected properly on kubernetes executor + # with the script below + DOCKER_HOST: "" DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" + SAST_ANALYZER_IMAGE_PREFIX: "registry.gitlab.com/gitlab-org/security-products/analyzers" + SAST_ANALYZER_IMAGE_TAG: 2 SAST_BRAKEMAN_LEVEL: 2 # GitLab-specific SAST_EXCLUDED_PATHS: qa,spec,doc,ee/spec # GitLab-specific - services: - - docker:stable-dind script: - - export SAST_VERSION=${SP_VERSION:-$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')} - - | - if ! docker info &>/dev/null; then - if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then - export DOCKER_HOST='tcp://localhost:2375' - fi - fi - - | - ENVS=`printenv | grep -vE '^(DOCKER_|CI|GITLAB_|FF_|HOME|PWD|OLDPWD|PATH|SHLVL|HOSTNAME)' | sed -n '/^[^\t]/s/=.*//p' | sed '/^$/d' | sed 's/^/-e /g' | tr '\n' ' '` - docker run "$ENVS" \ - --volume "$PWD:/code" \ - --volume /var/run/docker.sock:/var/run/docker.sock \ - "registry.gitlab.com/gitlab-org/security-products/sast:$SAST_VERSION" /app/bin/run /code + - /analyzer run + +brakeman-sast: + extends: .sast + image: + name: "$SAST_ANALYZER_IMAGE_PREFIX/brakeman:$SAST_ANALYZER_IMAGE_TAG" + +eslint-sast: + extends: .sast + image: + name: "$SAST_ANALYZER_IMAGE_PREFIX/eslint:$SAST_ANALYZER_IMAGE_TAG" + +kubesec-sast: + extends: .sast + image: + name: "$SAST_ANALYZER_IMAGE_PREFIX/kubesec:$SAST_ANALYZER_IMAGE_TAG" + +nodejs-scan-sast: + extends: .sast + image: + name: "$SAST_ANALYZER_IMAGE_PREFIX/nodejs-scan:$SAST_ANALYZER_IMAGE_TAG" + +secrets-sast: + extends: .sast + image: + name: "$SAST_ANALYZER_IMAGE_PREFIX/secrets:$SAST_ANALYZER_IMAGE_TAG" # We need to duplicate this job's definition because it seems it's impossible to # override an included `only.refs`. @@ -89,16 +104,15 @@ dependency_scanning: extends: - .default-retry - .reports:rules:dependency_scanning + - .use-docker-in-docker stage: test needs: [] - image: docker:stable variables: - DOCKER_DRIVER: overlay2 - DOCKER_TLS_CERTDIR: "" + # emptying DOCKER_HOST so it can be detected properly on kubernetes executor + # with the script below + DOCKER_HOST: "" DS_EXCLUDED_PATHS: "qa/qa/ee/fixtures/secure_premade_reports,spec,ee/spec" # GitLab-specific allow_failure: true - services: - - docker:stable-dind script: - export DS_VERSION=${SP_VERSION:-$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')} - | @@ -157,9 +171,9 @@ dast: extends: - .default-retry - .reports:rules:dast - needs: - - job: review-deploy - artifacts: true + # This is needed so that manual jobs with needs don't block the pipeline. + # See https://gitlab.com/gitlab-org/gitlab/-/issues/199979. + dependencies: ["review-deploy"] stage: qa # GitLab-specific image: name: "registry.gitlab.com/gitlab-org/security-products/dast:$DAST_VERSION" diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index 14b1561ec1..06710b3b9d 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -1,37 +1,27 @@ .review-docker: extends: - .default-retry + - .use-docker-in-docker image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine-ruby-2.6 - services: - - docker:19.03.0-dind - tags: - - gitlab-org - - docker variables: - DOCKER_DRIVER: overlay2 - DOCKER_HOST: tcp://docker:2375 GITLAB_EDITION: "ce" build-qa-image: extends: - - .review-docker - - .review:rules:mr-and-schedule + - .use-kaniko + - .default-retry + - .review:rules:mr-and-schedule-auto stage: prepare script: - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' - - export QA_MASTER_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/gitlab-${GITLAB_EDITION}-qa:master" - - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/gitlab-${GITLAB_EDITION}-qa:${CI_COMMIT_REF_SLUG}" - - echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - - time docker pull "${QA_MASTER_IMAGE}" - - time docker build --cache-from "${QA_MASTER_IMAGE}" --tag ${QA_IMAGE} --file ./qa/Dockerfile ./ - - time docker push ${QA_IMAGE} + - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-${GITLAB_EDITION}-qa:${CI_COMMIT_REF_SLUG}" + - /kaniko/executor --context=${CI_PROJECT_DIR} --dockerfile=${CI_PROJECT_DIR}/qa/Dockerfile --destination=${QA_IMAGE} --cache=true -review-cleanup: +.review-cleanup-base: extends: - .default-retry - .review:rules:review-cleanup stage: prepare - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base allow_failure: true environment: name: review/auto-cleanup @@ -42,10 +32,39 @@ review-cleanup: script: - ruby -rrubygems scripts/review_apps/automated_cleanup.rb +review-cleanup: + extends: + - .review-cleanup-base + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base + +review-cleanup-helm3: + extends: + - .review-cleanup-base + variables: + HELM_3: 1 + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-helm3-kubectl1.14 + +review-gcp-cleanup: + extends: + - .review:rules:review-gcp-cleanup + stage: prepare + image: gcr.io/google.com/cloudsdktool/cloud-sdk:latest + allow_failure: true + environment: + name: review/auto-gcp-cleanup + action: stop + before_script: + - gcloud auth activate-service-account --key-file=$REVIEW_APPS_GCP_CREDENTIALS + - gcloud config set project $REVIEW_APPS_GCP_PROJECT + - apt-get install -y jq + - source scripts/review_apps/gcp_cleanup.sh + script: + - gcp_cleanup + review-build-cng: extends: - .default-retry - - .review:rules:mr-and-schedule + - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise image: ruby:2.6-alpine stage: review-prepare before_script: @@ -57,15 +76,18 @@ review-build-cng: artifacts: false script: - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng + # When the job is manual, review-deploy is also manual and we don't want people + # to have to manually start the jobs in sequence, so we do it for them. + - '[ -z $CI_JOB_MANUAL ] || play_job "review-deploy"' .review-workflow-base: extends: - .default-retry - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base + image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-helm3-kubectl1.14 variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v2.6.8" + GITLAB_HELM_CHART_REF: "v3.2.2" GITLAB_EDITION: "ce" environment: name: review/${CI_COMMIT_REF_NAME} @@ -76,11 +98,9 @@ review-build-cng: review-deploy: extends: - .review-workflow-base - - .review:rules:mr-and-schedule + - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise stage: review - needs: - - job: review-build-cng - artifacts: false + dependencies: [] resource_group: "review/${CI_COMMIT_REF_NAME}" allow_failure: true before_script: @@ -95,11 +115,14 @@ review-deploy: script: - check_kube_domain - ensure_namespace - - install_tiller - install_external_dns - download_chart - date - deploy || (display_deployment_debug && exit 1) + # When the job is manual, review-qa-smoke is also manual and we don't want people + # to have to manually start the jobs in sequence, so we do it for them. + - '[ -z $CI_JOB_MANUAL ] || play_job "review-qa-smoke"' + - '[ -z $CI_JOB_MANUAL ] || play_job "review-performance"' artifacts: paths: [environment_url.txt] expire_in: 2 days @@ -127,6 +150,7 @@ review-stop-failed-deployment: stage: prepare script: - delete_failed_release + - delete_helm2_release review-stop: extends: @@ -140,9 +164,9 @@ review-stop: .review-qa-base: extends: .review-docker stage: qa - needs: - - job: review-deploy - artifacts: true + # This is needed so that manual jobs with needs don't block the pipeline. + # See https://gitlab.com/gitlab-org/gitlab/-/issues/199979. + dependencies: ["review-deploy"] allow_failure: true variables: QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa" @@ -156,7 +180,7 @@ review-stop: EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}" before_script: - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' - - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/gitlab-${GITLAB_EDITION}-qa:${CI_COMMIT_REF_SLUG}" + - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-${GITLAB_EDITION}-qa:${CI_COMMIT_REF_SLUG}" - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" - echo "${CI_ENVIRONMENT_URL}" - echo "${QA_IMAGE}" @@ -172,7 +196,7 @@ review-stop: review-qa-smoke: extends: - .review-qa-base - - .review:rules:mr-only-auto + - .review:rules:mr-only-auto-if-frontend-manual-otherwise script: - gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" @@ -188,12 +212,15 @@ review-qa-all: review-performance: extends: - - .review-docker - - .review:rules:mr-and-schedule + - .default-retry + - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise + image: + name: sitespeedio/sitespeed.io:6.3.1 + entrypoint: [""] stage: qa - needs: - - job: review-deploy - artifacts: true + # This is needed so that manual jobs with needs don't block the pipeline. + # See https://gitlab.com/gitlab-org/gitlab/-/issues/199979. + dependencies: ["review-deploy"] allow_failure: true before_script: - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" @@ -202,7 +229,7 @@ review-performance: - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js - mkdir -p sitespeed-results script: - - docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:6.3.1 --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}" + - /start.sh --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}" after_script: - mv sitespeed-results/data/performance.json performance.json artifacts: diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 3ef28e02e9..79ae782385 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -16,6 +16,9 @@ .if-master-refs: &if-master-refs if: '$CI_COMMIT_REF_NAME == "master"' +.if-auto-deploy-branches: &if-auto-deploy-branches + if: '$CI_COMMIT_BRANCH =~ /^\d+-\d+-auto-deploy-\d+$/' + .if-master-or-tag: &if-master-or-tag if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG' @@ -57,6 +60,17 @@ - "doc/**/*" - ".markdownlint.json" +.frontend-dependency-patterns: &frontend-dependency-patterns + - "{package.json,yarn.lock}" + +.frontend-patterns: &frontend-patterns + - "{package.json,yarn.lock}" + - "{babel.config,jest.config}.js" + - ".csscomb.json" + - "Dockerfile.assets" + - "vendor/assets/**/*" + - "{,ee/}{app/assets,app/helpers,app/presenters,app/views,locale,public,symbol}/**/*" + .backstage-patterns: &backstage-patterns - "Dangerfile" - "danger/**/*" @@ -66,39 +80,38 @@ - "doc/README.md" # Some RSpec test rely on this file .code-patterns: &code-patterns + - "{package.json,yarn.lock}" + - "{babel.config,jest.config}.js" + - ".csscomb.json" + - "Dockerfile.assets" + - "vendor/assets/**/*" - ".gitlab/ci/**/*" - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" - - ".csscomb.json" - - "Dockerfile.assets" - "*_VERSION" - "Gemfile{,.lock}" - "Rakefile" - - "{babel.config,jest.config}.js" - "config.ru" - - "{package.json,yarn.lock}" - "{,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/**/*" .code-backstage-patterns: &code-backstage-patterns + - "{package.json,yarn.lock}" + - "{babel.config,jest.config}.js" + - ".csscomb.json" + - "Dockerfile.assets" + - "vendor/assets/**/*" - ".gitlab/ci/**/*" - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" - - ".csscomb.json" - - "Dockerfile.assets" - "*_VERSION" - "Gemfile{,.lock}" - "Rakefile" - - "{babel.config,jest.config}.js" - "config.ru" - - "{package.json,yarn.lock}" - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "doc/api/graphql/reference/*" # Files in this folder are auto-generated # Backstage changes @@ -110,17 +123,18 @@ - "doc/README.md" # Some RSpec test rely on this file .code-qa-patterns: &code-qa-patterns + - "{package.json,yarn.lock}" + - "{babel.config,jest.config}.js" + - ".csscomb.json" + - "Dockerfile.assets" + - "vendor/assets/**/*" - ".gitlab/ci/**/*" - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" - - ".csscomb.json" - - "Dockerfile.assets" - "*_VERSION" - "Gemfile{,.lock}" - "Rakefile" - - "{babel.config,jest.config}.js" - "config.ru" - - "{package.json,yarn.lock}" - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "doc/api/graphql/reference/*" # Files in this folder are auto-generated # QA changes @@ -128,17 +142,18 @@ - "qa/**/*" .code-backstage-qa-patterns: &code-backstage-qa-patterns + - "{package.json,yarn.lock}" + - "{babel.config,jest.config}.js" + - ".csscomb.json" + - "Dockerfile.assets" + - "vendor/assets/**/*" - ".gitlab/ci/**/*" - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" - - ".csscomb.json" - - "Dockerfile.assets" - "*_VERSION" - "Gemfile{,.lock}" - "Rakefile" - - "{babel.config,jest.config}.js" - "config.ru" - - "{package.json,yarn.lock}" - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" - "doc/api/graphql/reference/*" # Files in this folder are auto-generated # Backstage changes @@ -261,7 +276,7 @@ changes: *code-backstage-patterns when: on_success -.frontend:rules:default-frontend-jobs-as-if-foss: +.frontend:rules:default-frontend-jobs-no-foss: rules: - <<: *if-not-ee when: never @@ -272,6 +287,7 @@ .frontend:rules:qa-frontend-node: rules: - <<: *if-master-refs + changes: *frontend-dependency-patterns when: on_success - <<: *if-merge-request changes: *frontend-dependency-patterns @@ -291,6 +307,8 @@ ############### .pages:rules: rules: + - <<: *if-not-ee + when: never - <<: *if-dot-com-gitlab-org-master changes: *code-backstage-qa-patterns when: on_success @@ -343,20 +361,23 @@ - <<: *if-master-refs changes: *code-backstage-patterns when: on_success - -.rails:rules:master-refs-code-backstage-ee-only: - rules: - - <<: *if-not-ee - when: never - - <<: *if-master-refs - changes: *code-backstage-patterns - when: on_success + - changes: [".gitlab/ci/rails.gitlab-ci.yml"] .rails:rules:nightly-master-refs-code-backstage: rules: - <<: *if-nightly-master-schedule changes: *code-backstage-patterns when: on_success + - changes: [".gitlab/ci/rails.gitlab-ci.yml"] + +.rails:rules:nightly-master-refs-code-backstage-ee-only: + rules: + - <<: *if-not-ee + when: never + - <<: *if-nightly-master-schedule + changes: *code-backstage-patterns + when: on_success + - changes: [".gitlab/ci/rails.gitlab-ci.yml"] .rails:rules:ee-only: rules: @@ -414,8 +435,12 @@ rules: - if: '$DAST_DISABLED || $GITLAB_FEATURES !~ /\bdast\b/' when: never + - <<: *if-dot-com-gitlab-org-merge-request + changes: *frontend-patterns + when: on_success - <<: *if-dot-com-gitlab-org-merge-request changes: *code-qa-patterns + when: manual .reports:schedule-dast: rules: @@ -426,7 +451,7 @@ ################ # Review rules # ################ -.review:rules:mr-and-schedule: +.review:rules:mr-and-schedule-auto: rules: - <<: *if-dot-com-gitlab-org-merge-request changes: *code-qa-patterns @@ -434,12 +459,33 @@ - <<: *if-dot-com-gitlab-org-schedule when: on_success +.review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise: + rules: + - <<: *if-dot-com-gitlab-org-merge-request + changes: *frontend-patterns + when: on_success + - <<: *if-dot-com-gitlab-org-merge-request + changes: *code-qa-patterns + when: manual + allow_failure: true + - <<: *if-dot-com-gitlab-org-schedule + when: on_success + .review:rules:mr-only-auto: rules: - <<: *if-dot-com-gitlab-org-merge-request changes: *code-qa-patterns when: on_success +.review:rules:mr-only-auto-if-frontend-manual-otherwise: + rules: + - <<: *if-dot-com-gitlab-org-merge-request + changes: *frontend-patterns + when: on_success + - <<: *if-dot-com-gitlab-org-merge-request + changes: *code-qa-patterns + when: manual + .review:rules:mr-only-manual: rules: - <<: *if-dot-com-gitlab-org-merge-request @@ -454,6 +500,14 @@ - <<: *if-dot-com-gitlab-org-schedule when: on_success +.review:rules:review-gcp-cleanup: + rules: + - <<: *if-dot-com-gitlab-org-merge-request + changes: *code-qa-patterns + when: manual + - <<: *if-dot-com-gitlab-org-schedule + when: on_success + .review:rules:danger: rules: - if: '$DANGER_GITLAB_API_TOKEN && $CI_MERGE_REQUEST_IID' @@ -470,6 +524,14 @@ changes: *code-backstage-qa-patterns when: on_success +.setup:rules:dont-interrupt-me: + rules: + - <<: *if-master-or-tag + when: on_success + - <<: *if-auto-deploy-branches + when: on_success + - when: manual + .setup:rules:gitlab_git_test: rules: - <<: *if-default-refs diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index b1918961f3..e79f3939bc 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -7,9 +7,7 @@ cache gems: - .default-before_script - .setup:rules:cache-gems stage: test - needs: - - job: setup-test-env - artifacts: true + needs: ["setup-test-env pg11"] variables: SETUP_DB: "false" script: @@ -23,6 +21,17 @@ cache gems: - .default-retry needs: [] +dont-interrupt-me: + extends: .setup:rules:dont-interrupt-me + stage: sync + image: alpine:edge + interruptible: false + allow_failure: true + variables: + GIT_STRATEGY: none + script: + - echo "This jobs makes sure this pipeline won't be interrupted! See https://docs.gitlab.com/ee/ci/yaml/#interruptible." + gitlab_git_test: extends: - .minimal-job diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md index 0d9990657e..037f83c93d 100644 --- a/.gitlab/issue_templates/Bug.md +++ b/.gitlab/issue_templates/Bug.md @@ -45,6 +45,7 @@ logs, and code as it's tough to read otherwise.)
Expand for output related to GitLab environment info +
 
 (For installations with omnibus-gitlab package run and paste the output of:
diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md
index e0de8fab4a..7cb8871f5b 100644
--- a/.gitlab/issue_templates/Feature Flag Roll Out.md	
+++ b/.gitlab/issue_templates/Feature Flag Roll Out.md	
@@ -37,7 +37,7 @@ If applicable, any groups/projects that are happy to have this feature turned on
 - [ ] Coordinate a time to enable the flag with `#production` and `#g_delivery` on slack.
 - [ ] Announce on the issue an estimated time this will be enabled on GitLab.com
 - [ ] Enable on GitLab.com by running chatops command in `#production`
-- [ ] Cross post chatops slack command to `#support_gitlab-com` and in your team channel
+- [ ] Cross post chatops slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel
 - [ ] Announce on the issue that the flag has been enabled
 - [ ] Remove feature flag and add changelog entry
 - [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel
diff --git a/.gitlab/issue_templates/Feature proposal.md b/.gitlab/issue_templates/Feature proposal.md
index 2bbef723b2..4b98b4e7ac 100644
--- a/.gitlab/issue_templates/Feature proposal.md	
+++ b/.gitlab/issue_templates/Feature proposal.md	
@@ -1,11 +1,15 @@
+
+
 ### Problem to solve
 
-
+
 
 ### Intended users
 
 
+* [Allison (Application Ops)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#allison-application-ops) -->
 
 ### Further details
 
-
+
 
 ### Proposal
 
@@ -35,14 +37,15 @@ Personas are described at https://about.gitlab.com/handbook/marketing/product-ma
 ### Documentation
 
 
+
+* Add all known Documentation Requirements in this section. See https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements
+* If this feature requires changing permissions, update the permissions document. See https://docs.gitlab.com/ee/user/permissions.html -->
 
 ### Availability & Testing
 
 
+
 
 ### Is this a cross-stage feature?
 
diff --git a/.gitlab/issue_templates/Migrations.md b/.gitlab/issue_templates/Migrations.md
new file mode 100644
index 0000000000..38fc7a31b2
--- /dev/null
+++ b/.gitlab/issue_templates/Migrations.md
@@ -0,0 +1,67 @@
+# Project Name | Migration Tracker
+
+
+## Background
+
+
+
+### Goals
+
+
+
+## Quick Facts
+
+
+
+ * **Timeline.** - 
+ * **Product.** - GitLab Gold/Ultimate or Commnunity Edition
+ * **Project's License.** What kind of OSI-approved license does your project use? 
+
+## Current Tooling and Replacements
+
+
+
+| Tool | Feature | GitLab feature | GitLab edition |
+| --- | --- | --- | --- |
+|  |  |  |  |
+
+## Collaborators
+
+
+
+## Related Issues
+
+
+
+### Blockers
+ * [ ] ADD_LINK_TO_ISSUE_HERE
+
+### Urgent
+ * [ ] 
+
+### Important but not urgent
+ * [ ] 
+
+### Nice to have
+ * [ ] 
+
+ 
+------
+
+/label ~"Open Source" ~movingtogitlab
+/cc @nuritzi 
\ No newline at end of file
diff --git a/.gitlab/issue_templates/Productivity Improvement.md b/.gitlab/issue_templates/Productivity Improvement.md
index 89505cd85b..79e1461392 100644
--- a/.gitlab/issue_templates/Productivity Improvement.md	
+++ b/.gitlab/issue_templates/Productivity Improvement.md	
@@ -25,13 +25,6 @@ Please provide pros/cons and a weight estimate for each solution.
 - [ ] All potential solutions are listed.
 - [ ] A solution has been chosen for the first iteration: `PUT THE CHOSEN SOLUTION HERE`
 
-## Who and when will the solution be implemented?
-
-
-
 ## Verify that the solution has improved the situation
 
 
 
 ### Possible fixes
diff --git a/.gitlab/issue_templates/Security developer workflow.md b/.gitlab/issue_templates/Security developer workflow.md
index 56be0453b3..2c80360d32 100644
--- a/.gitlab/issue_templates/Security developer workflow.md	
+++ b/.gitlab/issue_templates/Security developer workflow.md	
@@ -21,7 +21,7 @@ Set the title to: `Description of the original issue`
 - [ ] Create a merge request targeting `master` on `gitlab.com/gitlab-org/security` and use the [Security Release merge request template].
 - [ ] Follow the same [code review process]: Assign to a reviewer, then to a maintainer.
 
-After your merge request has being approved according to our [approval guidelines], you're ready to prepare the backports
+After your merge request has been approved according to our [approval guidelines], you're ready to prepare the backports
 
 ## Backports
 
diff --git a/.gitlab/issue_templates/Solution_validation b/.gitlab/issue_templates/Solution_validation
new file mode 100644
index 0000000000..27f97d8dd1
--- /dev/null
+++ b/.gitlab/issue_templates/Solution_validation
@@ -0,0 +1,32 @@
+
+
+#### What's this issue all about? (Background and context)
+
+#### What hypotheses and/or assumptions do you have?
+
+#### What questions are you trying to answer?
+
+#### What research methodology do you intend to use?
+
+
+
+#### What persona, persona segment, or customer type experiences the problem most acutely?
+
+#### What business decisions will be made based on this information?
+
+#### What, if any, relevant prior research already exists?
+
+
+
+#### Who will be leading the research?
+
+#### What timescales do you have in mind for the research?
+
+#### Relevant links (problem validation issue, design issue, script, prototype, notes, etc.)
+
+
+
+/label ~"workflow::solution validation"
\ No newline at end of file
diff --git a/.gitlab/merge_request_templates/New static analysis check.md b/.gitlab/merge_request_templates/New static analysis check.md
index b89b6f7dbc..8bbb3effb1 100644
--- a/.gitlab/merge_request_templates/New static analysis check.md	
+++ b/.gitlab/merge_request_templates/New static analysis check.md	
@@ -8,7 +8,6 @@ Please describe the proposal and add a link to the source (for example, http://w
 
 - [ ] Make sure this MR enables a static analysis check rule for new usage but
   ignores current offenses
-- [ ] Create a follow-up issue to fix the current offenses as a separate iteration: ISSUE_LINK
 - [ ] Mention this proposal in the relevant Slack channels (e.g. `#development`, `#backend`, `#frontend`)
 - [ ] If there is a choice to make between two potential styles, set up an emoji vote in the MR:
   - CHOICE_A: :a:
@@ -17,6 +16,7 @@ Please describe the proposal and add a link to the source (for example, http://w
 - [ ] The MR doesn't have significant objections, and is getting a majority of :+1: vs :-1: (remember that [we don't need to reach a consensus](https://about.gitlab.com/handbook/values/#collaboration-is-not-consensus))
 - [ ] (If applicable) One style is getting a majority of vote (compared to the other choice)
 - [ ] (If applicable) Update the MR with the chosen style
+- [ ] Create a follow-up issue to fix the current offenses as a separate iteration: ISSUE_LINK
 - [ ] Follow the [review process](https://docs.gitlab.com/ee/development/code_review.html) as usual
 - [ ] Once approved and merged by a maintainer, mention it again:
   - [ ] In the relevant Slack channels (e.g. `#development`, `#backend`, `#frontend`)
diff --git a/.gitlab/merge_request_templates/Security Release.md b/.gitlab/merge_request_templates/Security Release.md
index 24fe44200d..af3839a96a 100644
--- a/.gitlab/merge_request_templates/Security Release.md	
+++ b/.gitlab/merge_request_templates/Security Release.md	
@@ -27,7 +27,7 @@ See [the general developer security release guidelines](https://gitlab.com/gitla
 
 ## Maintainer checklist
 - [ ] Correct milestone is applied and the title is matching across all backports
-- [ ] Assigned to `@gitlab-release-tools-bot` with passing CI pipelines
+- [ ] Assigned to `@gitlab-release-tools-bot` with passing CI pipelines and **when all backports including the MR targeting master are ready.**
 
 /label ~security
 
diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml
index dd94d0b494..1417f37f76 100644
--- a/.haml-lint_todo.yml
+++ b/.haml-lint_todo.yml
@@ -409,7 +409,6 @@ linters:
       - 'ee/app/views/projects/push_rules/_index.html.haml'
       - 'ee/app/views/projects/services/gitlab_slack_application/_help.html.haml'
       - 'ee/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml'
-      - 'ee/app/views/projects/services/prometheus/_metrics.html.haml'
       - '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'
diff --git a/.markdownlint.json b/.markdownlint.json
index 4e2f74c610..ce319756c5 100644
--- a/.markdownlint.json
+++ b/.markdownlint.json
@@ -22,7 +22,6 @@
     "style": "---"
   },
   "no-emphasis-as-heading": false,
-  "fenced-code-language": false,
   "first-line-h1": false,
   "code-block-style": {
     "style": "fenced"
@@ -43,6 +42,7 @@
       "CentOS",
       "Consul",
       "Debian",
+      "DevOps",
       "Elasticsearch",
       "Facebook",
       "Git LFS",
@@ -84,7 +84,9 @@
       "markdownlint",
       "Mattermost",
       "Microsoft",
+      "Minikube",
       "MinIO",
+      "ModSecurity",
       "NGINX Ingress",
       "NGINX",
       "OAuth",
@@ -98,9 +100,11 @@
       "Prometheus",
       "Puma",
       "Python",
+      "Rake",
       "Redis",
       "Redmine",
       "reCAPTCHA",
+      "Ruby",
       "runit",
       "Salesforce",
       "SAML",
@@ -123,6 +127,5 @@
       "YouTrack"
     ],
     "code_blocks": false
-  },
-  "code-fence-style": false
+  }
 }
diff --git a/.overcommit.yml.example b/.overcommit.yml.example
index b957a8bbd2..2cca4c0b48 100644
--- a/.overcommit.yml.example
+++ b/.overcommit.yml.example
@@ -15,8 +15,8 @@
 #
 # Uncomment the following lines to make the configuration take effect.
 
-# Make sure to run `cd tooling/overcommit && make && cd -`
-gemfile: 'tooling/overcommit/gems.rb'
+# Make sure to run `make -C tooling/overcommit`
+gemfile: 'tooling/overcommit/Gemfile'
 
 PostCheckout:
   BundleInstall:
@@ -28,7 +28,9 @@ PreCommit:
   EsLint:
     enabled: true
     # https://github.com/sds/overcommit/issues/338
-    command: './node_modules/eslint/bin/eslint.js'
+    required_executable: 'yarn'
+    command: ['yarn', 'eslint']
+    flags: []
   HamlLint:
     enabled: true
   MergeConflicts:
diff --git a/.rubocop.yml b/.rubocop.yml
index ebc27c4cc9..c98d027cee 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -7,6 +7,10 @@ require:
   - ./rubocop/rubocop
   - rubocop-rspec
 
+inherit_mode:
+  merge:
+    - Include
+
 AllCops:
   TargetRubyVersion: 2.6
   TargetRailsVersion: 5.0
@@ -21,8 +25,15 @@ AllCops:
     - 'generator_templates/**/*'
     - 'builds/**/*'
     - 'plugins/**/*'
+    - 'file_hooks/**/*'
   CacheRootDirectory: tmp
 
+Cop/StaticTranslationDefinition:
+  Enabled: true
+  Exclude:
+    - 'spec/**/*'
+    - 'ee/spec/**/*'
+
 # This cop checks whether some constant value isn't a
 # mutable literal (e.g. array or hash).
 Style/MutableConstant:
@@ -161,6 +172,14 @@ Rails/ApplicationRecord:
     - ee/db/**/*.rb
     - ee/spec/**/*.rb
 
+Rails/FindBy:
+  Enabled: true
+  Include:
+    - 'ee/app/**/*.rb'
+    - 'ee/lib/**/*.rb'
+    - 'spec/**/*.rb'
+    - 'ee/spec/**/*.rb'
+
 # GitLab ###################################################################
 
 Gitlab/ModuleWithInstanceVariables:
@@ -200,6 +219,14 @@ GitlabSecurity/PublicSend:
     - 'ee/lib/**/*.rake'
     - 'ee/spec/**/*'
 
+Gitlab/DuplicateSpecLocation:
+  Exclude:
+    - ee/spec/helpers/auth_helper_spec.rb
+    - ee/spec/lib/gitlab/gl_repository_spec.rb
+    - ee/spec/services/merge_requests/refresh_service_spec.rb
+    - ee/spec/helpers/ee/auth_helper_spec.rb
+    - ee/spec/services/ee/merge_requests/refresh_service_spec.rb
+
 Cop/InjectEnterpriseEditionModule:
   Enabled: true
   Exclude:
@@ -299,7 +326,10 @@ RSpec/ImplicitSubject:
   Enabled: false
 
 RSpec/LeakyConstantDeclaration:
-  Enabled: false
+  Enabled: true
+  Exclude:
+    - 'spec/**/*.rb'
+    - 'qa/spec/**/*.rb'
 
 RSpec/EmptyLineAfterHook:
   Enabled: false
@@ -347,3 +377,13 @@ Style/FloatDivision:
 
 Cop/BanCatchThrow:
   Enabled: true
+
+Performance/ReadlinesEach:
+  Enabled: true
+
+Performance/ChainArrayAllocation:
+  Enabled: true
+  Include:
+    - 'lib/gitlab/import_export/**/*'
+    - 'ee/lib/gitlab/import_export/**/*'
+    - 'ee/lib/ee/gitlab/import_export/**/*'
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index f6aa0e7700..66a025a8fe 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -251,10 +251,6 @@ RSpec/LetBeforeExamples:
 RSpec/PredicateMatcher:
   Enabled: false
 
-# Offense count: 69
-RSpec/RepeatedExample:
-  Enabled: false
-
 # Offense count: 584
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle.
@@ -273,14 +269,6 @@ RSpec/ScatteredSetup:
     - 'spec/requests/api/jobs_spec.rb'
     - 'spec/services/projects/create_service_spec.rb'
 
-# Offense count: 4
-RSpec/VoidExpect:
-  Exclude:
-    - 'spec/features/projects/services/user_activates_mattermost_slash_command_spec.rb'
-    - 'spec/models/ci/group_spec.rb'
-    - 'spec/models/ci/runner_spec.rb'
-    - 'spec/services/users/destroy_service_spec.rb'
-
 # Offense count: 10
 # Cop supports --auto-correct.
 Rails/ApplicationController:
@@ -491,13 +479,6 @@ Style/MultilineIfModifier:
     - 'app/services/ci/process_pipeline_service.rb'
     - 'lib/api/commit_statuses.rb'
 
-# Offense count: 34
-# Cop supports --auto-correct.
-# Configuration parameters: Whitelist.
-# Whitelist: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with
-Style/NestedParenthesizedCalls:
-  Enabled: false
-
 # Offense count: 25
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle, MinBodyLength.
diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md
index c570a5d2fd..20d3075f78 100644
--- a/CHANGELOG-EE.md
+++ b/CHANGELOG-EE.md
@@ -1,5 +1,25 @@
 Please view this file on the master branch, on stable branches it's out of date.
 
+## 12.9.4 (2020-04-16)
+
+- No changes.
+### Fixed (2 changes)
+
+- Update index_options to fix advanced search queries. !28712
+- Geo: Fix repository verification on the primary. !28893
+
+### Other (1 change)
+
+- Use prefix search instead of ngrams for sha fields. !27597
+
+
+## 12.9.3 (2020-04-14)
+
+### Security (1 change)
+
+- Fix filename bypass when uploading NuGet packages.
+
+
 ## 12.9.2 (2020-03-31)
 
 ### Fixed (4 changes)
@@ -152,6 +172,13 @@ Please view this file on the master branch, on stable branches it's out of date.
 - Allow users to be marked as service users. !202680
 
 
+## 12.8.9 (2020-04-14)
+
+### Security (1 change)
+
+- Fix filename bypass when uploading NuGet packages.
+
+
 ## 12.8.7 (2020-03-16)
 
 ### Fixed (1 change)
@@ -305,6 +332,13 @@ Please view this file on the master branch, on stable branches it's out of date.
 - Prepare DB structure for GMA forking changes. !22002
 
 
+## 12.7.9 (2020-04-14)
+
+### Security (1 change)
+
+- Fix filename bypass when uploading NuGet packages.
+
+
 ## 12.7.5
 
 ### Fixed (1 change)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8369e524b9..f2ca4d66b0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,460 @@
 documentation](doc/development/changelog.md) for instructions on adding your own
 entry.
 
+## 12.10.0 (2020-04-22)
+
+### Removed (3 changes)
+
+- Revert LDAP readonly attributes feature. !28541
+- Remove deprecated /ci/lint page. !28562
+- Remove open in file view link from Web IDE. !28705
+
+### Fixed (118 changes, 26 of them are from the community)
+
+- Return 202 for command only notes in REST API. !19624
+- Run SAST using awk to pass env variables directly to docker without creating .env file. !21174 (Florian Gaultier)
+- #42671: Project and group storage statistics now support values up to 8 PiB (up from 4GiB)
+. !23131 (Matthias van de Meent)
+- Fix 500 error on profile/chat_names for deleted projects. !24341
+- Migrate the database to activate projects prometheus service integration for projects with prometheus installed on shared k8s cluster. !24684
+- Fix archived corrupted projects not displaying in admin. !25171 (erickcspice)
+- Fix some Web IDE bugs with empty projects. !25463
+- Fix failing ci variable e2e test. !25924
+- Fix new file not being created in non-ascii character folders. !26165
+- Validate uniqueness of project_id and type when a new project service is created. !26308
+- Fix assignee dropdown on new issue page. !26971
+- Resolve Unable to expand multiple downstream pipelines. !27029
+- Hide admin user actions for ghost and bot users. !27162
+- Fix invalid ancestor group milestones when moving projects. !27262
+- Fix right sidebar when scrollbars are always visible. !27314 (Shawn @CasualBot)
+- Fix OpenAPI file detector. !27321 (Roger Meier)
+- Fix managed_free_namespaces scope to only groups without a license or a free license. !27356
+- Set commit status to failed if the TeamCity connection is refused. !27395
+- Resolve Improve format support message in issue design. !27409
+- Add tooltips with full path to file headers on file tree. !27437
+- Scope WAF Statistics anomalies to environment.external_url. !27466
+- Show the proper information in snippet edit form. !27479
+- Fixes the repository Vue router not working with Chinese characters. !27494
+- Fix smartcard config initialization. !27560
+- Fix audit event that weren't being created for failed LDAP log-in tries. !27608
+- Fix filtered search tokenization. !27648
+- Fix processing of GrapqhQL query complexity based on used resolvers. !27652
+- Update board scopes when promoting a label. !27662
+- Reuse default generated snippet file name in repository. !27673
+- Revert user bio back to non-italicized font to fix rendering of emojis. !27693
+- Filter out Releases with missing tags. !27716
+- Update detected languages for dependency scanning in no dind mode. !27723
+- Fix logic for ingress can_uninstall?. !27729
+- Fix dropped filter when paging groups. !27737 (Lee Tickett)
+- Amend GraphQL merge requests resolver to check for project presence. !27783
+- Fix bug issue template handling of markdown. !27808 (Lee Tickett)
+- Update discord notifications to be a single embed and include log messages. !27812 (Sam Bingner)
+- Update detected languages for sast in no dind mode. !27831
+- Fix bug inviting members whose emails start with numbers. !27848 (Lee Tickett)
+- Allow self monitoring project to query internal Prometheus even when "Allow local requests in webhooks and services" setting is false. !27865
+- Add missing docstring to Prometheus metric. !27868
+- Resolve Snippet creation failure bug. !27891
+- Fix optional params for deploy token API. !27961 (Nejc Habjan)
+- Use Ci::Pipeline#all_merge_requests.first as Ci::Build#merge_request. !27968
+- Fix bug tracking snippet shard name. !27979
+- Add `discussion_locked` to Webhook. !28018
+- Fix invalid class option for ionice. !28023
+- Improve SAST NO_DIND file detection with proper boundary conditions. !28036
+- Detect skipped specs in JUnit reports and set TestCase status. !28053
+- Allow 0 for pages size limit setting in admin settings. !28086
+- Fix wrong colors displayed in charts. !28095
+- Fix incorrect content returned on empty dotfile. !28144
+- Include LDAP UID attribute in default attributes for all LDAP lookups. !28148
+- Fix deploy token API to properly delete all associated deploy token records. !28156
+- Fix Gitlab::Auth to handle orphaned oauth tokens. !28159
+- Protect sidekiq admin UI with admin mode. !28164 (Diego Louzán)
+- Prevent overriding the username when creating a Deploy Token via the API. !28175 (Ayoub Mrini)
+- Resolve Snippet actions with binary data. !28191
+- Make all HTTPS cookies set SameSite to none. !28205
+- Don't send 'accept-encoding' in HttpIO requests. !28239
+- Gracefully handle missing latest CI pipeline. !28263
+- Fix error removing secondary email. !28267 (Lee Tickett)
+- Fix name of approvals column in merge requests. !28274 (Steffen Köhler)
+- Add management_project_id to group and project cluster creation, clarifies docs. !28289
+- Check first if feature flag version_snippet is enabled. !28352
+- Fix single stat panel percentile format support. !28365
+- Use CTE optimization for searching board issues. !28430
+- Fix missing synthetic milestone change notes for disabled milestone change event tracking feature flag. !28440
+- Fix Releases page for Guest users of private projects. !28447
+- Prevent ProjectUpdateRepositoryStorageWorker from moving to same filesystem. !28469
+- Return error message for create_merge_request. !28482
+- Include MR times in Milestone time overview. !28519 (Bob van de Vijver)
+- Fix daily report result to use average of coverage values if there are multiple builds for a given group name. !28556
+- Token creation uses HTTP status CREATED. !28587
+- Allow award emoji same name & user duplicates when Importing. !28588
+- Fix pagination in Merge Request GraphQL api. !28667 (briankabiro)
+- Remove duplicate spec in web hook service spec. !28669 (Rajendra Kadam)
+- Fix GraphQL SnippetType repo urls. !28673
+- Add missing ON DELETE FK constraints referencing users table. !28720
+- Update duplicate specs in notification service spec. !28742 (Rajendra Kadam)
+- Fix styling of MR dropdown in Web IDE. !28746
+- Better error message when importing a Github project and Github API rate limit is exceeded. !28785
+- Prevent false positives in Ci::Pipeline#all_merge_requests. !28800
+- Enable toggle all discussions button for logged out users. !28809 (Diego Louzán)
+- Fix display of PyCharm generated Jupyter notebooks. !28810 (Jan Beckmann)
+- Resolve Snippet update error with version flag disabled. !28815
+- Show multimetric embeds on a single chart. !28841
+- Fix race condition updating snippet without repository. !28851
+- Normalize signature mime types when filtering attachments in emails. !28865 (Diego Louzán)
+- Add autostop check to folder table. !28937
+- Fix 500 error on create release API when providing an invalid tag_name. !28969 (Sashi Kumar)
+- Fix missing group icons on profile page when screen < 576px. !28973
+- Stringify Sidekiq job args in exception logs. !28996
+- Ensure members are always added on Project Import when importing as admin. !29046
+- Elasticsearch recommendation alert does not appears while screen is loaded. !29097
+- Prevent wrong environment being used when processing Prometheus alert. !29119
+- Fix Slack slash commands using relative URL. !29160
+- Exclude 'trial_ends_on', 'shared_runners_minutes_limit' & 'extra_shared_runners_minutes_limit' from list of exported Group attributes. !29259
+- Group level container registry show subgroups repos. !29263
+- Move prepend to last line in finders files. !29274 (Rajendra Kadam)
+- Remove 'error' from diff note error message. !29281
+- Migrate legacy uploads out of deprecated paths. !29295
+- Move prepend to last line in commit status presenter. !29328 (Rajendra Kadam)
+- Move prepend to last line in app serializers. !29332 (Rajendra Kadam)
+- Move prepend to last line in app workers and uploaders. !29379 (Rajendra Kadam)
+- fix: Publish toolbar dissappears when submitting empty content. !29410
+- Replace deprecated GlLoadingIcon sizes. !29417
+- fix display head and base in version dropdowns. !29433
+- Fix Web IDE not showing diff when opening commit tab. !29439
+- Use music icon for files with .ogg extension. !29514
+- Fix dashboard processing error which prevented dashboards with unknown attributes inside panels from being displayed. !29517
+- Fix Deploy Token creation when no scope selected. !29614
+- Update auto-build-image to v0.2.2 with fixes for docker caching. !29730
+- Fix resolve WIP clearing merge request area. !29757
+- Enable the Add metric button for CE users. !29769
+- Fix Error 500 when inviting user to a few projects. !29778
+- Fixed whitespace toggle not showing the correct diff.
+- Fixed upload file creating a file in the wrong directory.
+
+### Deprecated (1 change)
+
+- Deprecate 'token' attribute from Runners API. !29481
+
+### Changed (62 changes, 7 of them are from the community)
+
+- Only enable searching of projects by full path / name on certain dropdowns. !21910
+- Support wiki events in activity streams. !23869
+- Fix for issue 26426: Details of runners of nested groups of an owned group are now available for users with enough permissions. !24169 (nachootal@gmail.com)
+- Rename "Project Services" to "Integrations" in frontend and docs. !26244
+- Support multiple Evidences for a Release. !26509
+- Move some global routes to - scope. !27106
+- Only display mirrored URL to users who can manage Repository settings. !27166
+- Disable lookup of other ActiveSessions to determine admin mode status. !27318 (Diego Louzán)
+- Extract X509::Signature from X509::Commit. !27327 (Roger Meier)
+- Show user statistics in admin area also in CE, and use daily generated data for these statistics. !27345
+- Update aws-ecs image location in CI template. !27382
+- Update More Pages button on Wiki Page. !27499
+- Update ApplicationLimits to prefer defaults. !27574
+- Allow external diff files to be removed. !27602
+- Add atomic and cleanup-on-fail parameters for Helm. !27721
+- Change the url when the timeslider changes. !27726
+- Add user_details.bio column and migrate data from users.bio. !27773
+- WAF settings will be read-only if there is a new version of ingress available. !27845
+- Add an helper to check if a notification_event is enabled. !27880 (Jacopo Beschi @jacopo-beschi)
+- Ensure freshness of settings with snippet creation. !27897
+- Update copies in Admin Panel > Repository Storage section. !27986
+- Add event tracking to Container regstry quickstart. !27990
+- Render snippet repository blobs. !28085
+- Accept `author_username` as a param in Merge Requests API. !28100
+- Use rich icons for thw rows on the file tree. !28112
+- Renamed Contribution Charts as Repository Analytics. !28162
+- Move Alerting feature to Core. !28196
+- Add file-based pipeline conditions to default Auto DevOps CI template. !28242
+- Make pipeline info in chat notifications concise. !28284
+- Use different approval icon if current user approved. !28290 (Steffen Köhler)
+- Remove repeated examples in user model specs. !28450 (Rajendra Kadam)
+- Show only active environments in monitoring dropdown. !28456
+- Enable container expiration policies by default for new projects. !28480
+- Show snippet error update to the user. !28516
+- Move 'Additional Metrics' feature to GitLab Core. !28527
+- Add ability to search by environment state in environments GraphQL API. !28567
+- Add correlation_id to project_mirror_data, expose in /import API endpoints. !28662
+- Add status column to container_registry. !28682
+- Cleanup the descriptions of some fields of GraphQL ProjectType. !28735
+- Add Project template for Static Site Editor / Middleman. !28758
+- Remove duplicate show spec in admin routing. !28790 (Rajendra Kadam)
+- Add Fluentd model for cluster apps. !28846
+- Add grab cursor for operations dashboard cards. !28868
+- Update copy when snippet git feature disabled. !28913
+- Expose relations that failed to import in /import endpoints. !28915
+- Update informational text on Edit Release page. !28938
+- Add support for dot (.) in variables masking. !29022
+- Update Auto DevOps docker version to 19.03.8. !29081
+- Make search redaction more robust. !29166
+- Enable async delete in container repository list. !29175
+- Make manual prometheus configuration section always editable. !29209
+- Adjust label title applied to issues on import from Jira. !29246
+- Track statistics per project for jira imported issues. !29406
+- Display local timezone in log explorer. !29409
+- Allow to retry submitting changes when an error occurs. !29434
+- Define dashboard dropdowns layout in flex to improve support smaller screens. !29477
+- Update auto-deploy-image to v0.13.0 for deploy job, enabling more granular control over service.enabled. !29524
+- Do not display branch link in saved changes message UI. !29611
+- Redesign Jira issue import UI. !29671
+- Add support for /file_hooks directory. !29675
+- Sort the project dropdown by star count when moving issues. !29766
+- Increase the timing of polling for the merge request widget.
+
+### Performance (45 changes)
+
+- Limits issues displayed on milestones. !23102
+- Optimize suggestions counters. !26443
+- Prefetch DNS for asset host. !26868
+- Move bots functionality to user_type column. !26981
+- Optimize projects_service_active queries performance in usage data. !27093
+- Optimize projects_mirrored_with_pipelines_enabled query performance in usage data. !27110
+- Optimize ldap keys counters query performance in usage data. !27309
+- Enable Workhorse upload acceleration for Project Import uploads via UI. !27332
+- Cache ES enabled namespaces and projects. !27348
+- Optimize template_repositories query by using batch counting. !27352
+- Reduce SQL queries when rendering webhook settings. !27359
+- Reduce number of SQL queries for service templates. !27396
+- Improve Advanced global search performance by using routing. !27398
+- Improve performance of the container repository cleanup tags service. !27441
+- Optimize usage ping queries by using batch counting. !27455
+- Fix redundant query execution when loading board issues. !27505
+- Optimize projects_enforcing_code_owner_approval counter query performance for usage ping. !27526
+- Optimize projects_reporting_ci_cd_back_to_github query performance for usage data. !27533
+- Optimize service desk enabled projects counter. !27589
+- Improve pagination in discussions API. !27697
+- Improve API response for archived project searchs. !27717
+- Optimize ci builds counters in usage data. !27770
+- Enable streaming serializer feature flag by default. !27813
+- Harden jira usage data. !27973
+- Create merge request pipelines in background jobs. !28024
+- Optimize ci builds non distinct counters in usage data. !28027
+- Remove feature flag 'export_fast_serialize' and 'export_fast_serialize_with_raw_json'. !28037
+- Improve API response for descending internal project searches. !28038
+- Make Rails.cache and Gitlab::Redis::Cache share the same Redis connection pool. !28074
+- Introduce rate limit for creating issues via web UI. !28129
+- Introduce rate limit for creating issues via API. !28130
+- Remove unnecessary index index_ci_builds_on_name_for_security_reports_values. !28224
+- Disallow distinct count for regular batch count. !28518
+- Resolve an N+1 in merge request CI variables. !28688
+- Use faster streaming serializer for project exports. !28925
+- Add index for created_at of resource_milestone_events. !28929
+- Optimize issues with embedded grafana charts usage counter. !28936
+- Avoid scheduling duplicate sidekiq jobs. !29116
+- Optimize projects with repositories enabled usage data. !29117
+- Use diff-stats for calculating raw diffs modified paths. !29134
+- Optimize protected branches usage data. !29148
+- Refresh only existing MRs on push. !29420
+- Reduce SQL requests number for CreateCommitSignatureWorker. !29479
+- Remove redundant index from projects table. !29507
+- Add index on users.unlock_token. !276298
+
+### Added (140 changes, 33 of them are from the community)
+
+- New package list is enabled which includes filtering by type. !18860
+- Create a rake task to cleanup unused LFS files. !21747
+- Support Asciidoc docname attribute. !22313 (Jouke Witteveen)
+- Adds features to delete stopped environments. !22629
+- Highlight line which includes search term is code search results. !22914 (Alex Terekhov (terales))
+- Allow embedded metrics charts to be hidden. !23929
+- Add toggle all discussions button to MRs. !24670 (Martin Hobert & Diego Louzán)
+- Store daily code coverages into ci_daily_report_results table. !24695
+- Add cluster management project template. !25318
+- Add limit metric to lists. !25532
+- Add support for Okta as a SCIM provider. !25649
+- Add grape custom validator for git reference params. !26102 (Rajendra Kadam)
+- Add healthy column to clusters_applications_prometheus table. !26168
+- Add API endpoint to list runners for a group. !26328
+- Add unlock_membership_to_ldap boolean to Groups. !26474
+- Adds wiki metadata models. !26529
+- Create model to store Terraform state files. !26619
+- Improve logs dropdown with more clear labels. !26635
+- Add all pods view to logs explorer. !26883
+- Add first_contribution to single merge request API. !26926
+- Populate user_highest_roles table. !27127
+- Add option for switching between blocking and logging for WAF. !27133
+- Add bar chart support to monitoring dashboard. !27155
+- Start merge request for custom dashboard if new branch is provided. !27189
+- Update user's highest role to keep the users statistics up to date. !27231
+- Make "Value Stream" the default page that appears when clicking the project-level "Analytics" sidebar item. !27279 (Gilang Gumilar)
+- Add metric to derive new users count. !27351
+- Display cluster type in cluster info page. !27366
+- Improve logs filters on mobile, simplify kubernetes API logs filters. !27484
+- Adds branch information to the package details title section. !27488
+- Add forking_access_level to projects API. !27514 (Mathieu Parent)
+- Add a DB column to track external issue and epic ids when importing from external sources. !27522
+- Added Edit Title shared component. !27582
+- Add metrics dashboard annotation model, relation, policy, create and delete services. To provide interface for create and delete operations. !27583
+- Adds filter by name to the packages list. !27586
+- Allow querying of Jira imports and their status via GraphQL. !27587
+- Update Gitaly to 12.9.0-rc5. !27631
+- Add filtered search for elastic search in logs. !27654
+- Add cost factor fields to ci runners. !27666
+- Add auto_ssl_failed to pages_domains. !27671
+- Allow to start Jira import through graphql mutation. !27684
+- Add terraform report to merge request widget. !27700
+- Read metadata from Wiki front-matter. !27706
+- Support custom graceful timeout for Sidekiq Cluster processes. !27710
+- Show storage size on project page. !27724 (Roger Meier)
+- Upload a design by copy/pasting the file into the Design Tab. !27776
+- Update Active checkbox component to use toggle. !27778
+- Add namespace_storage_size_limit to application settings. !27786
+- Add issues to graphQL group endpoint. !27789
+- Enable container registry at the group level. !27814
+- Expose created_at property in Groups API. !27824
+- Add an endpoint to allow group admin users to purge the dependency proxy for a group. !27843
+- Filter health endpoint metrics. !27847
+- Add support for system note metadata in project Import/Export. !27853 (Melvin Vermeeren)
+- Add daily job to create users statistics. !27883
+- Add DS_REMEDIATE env var to dependency scanning template. !27947
+- Add Swift Dockerfile to GitLab templates. !28035
+- Generate JWT and provide it to CI jobs for integration with other systems. !28063
+- Update user's highest role to keep the users statistics up to date. !28087
+- Add jira_imports table to track current jira import progress as well as historical imports data. !28108
+- Add initial support for Cloud Native Buildpacks in Auto DevOps builds. !28165
+- Add app server type to usage ping. !28189
+- Add last_activity_before and last_activity_after filter to /api/projects endpoint. !28221 (Roger Meier)
+- Expose basic project services attributes through GraphQL. !28234
+- Add environment-state flag to metrics data. !28237
+- Allow defining of metric step in dashboard yml. !28247
+- Separate validators into own class files. !28266 (Rajendra Kadam)
+- Refactor push rules and add push_rule_id columns in project settings and application settings. !28286
+- Added support for single-token deletion via option/ctrl-backspace or search-filter clearing via command-backspace in filtered search. !28295 (James Becker)
+- Enable log explorer to use the full height of the screen. !28312
+- Automatically assign id to each panel within dashboard to support panel scoped annotations. !28341
+- Add Praefect rake task to print out replica checksums. !28369
+- Add rake task to update x509 signatures. !28406 (Roger Meier)
+- Add application setting to enable container expiration and retention policies on pre 12.8 projects. !28479
+- Add Prometheus alerts automatically after Prometheus Service was created. !28503
+- Add ability to filter commits by author. !28509
+- Add usage data metrics for instance level clusters and clusters with management projects. !28510
+- Add slash command support for merge train. !28532
+- Add metrics dashboard annotations to GraphQL API. !28550
+- Refactor duplicate specs in wiki page specs. !28551 (Rajendra Kadam)
+- Refactor duplicate member specs. !28574 (Rajendra Kadam)
+- Remove design management as a license feature. !28589
+- Add api endpoint to get x509 signature. !28590 (Roger Meier)
+- Refactored Snippet edit form to Vue. !28600
+- Add support for database-independent embedded metric charts. !28618
+- Fix issuable duplicate spec. !28632 (Rajendra Kadam)
+- Fix build duplicate spec. !28633 (Rajendra Kadam)
+- Remove duplicate specs in ability model. !28644 (Rajendra Kadam)
+- Remove duplicate specs in update service spec. !28650 (Rajendra Kadam)
+- Add added_lines and removed_lines columns to merge_request_metrics table. !28658
+- Remove duplicate specs in pipeline message spec. !28664 (Rajendra Kadam)
+- Implement Terraform State API with locking. !28692
+- Move export issues feature to core. !28703
+- Add status endpoint to Pages Internal API. !28743
+- Enable last user activity logging on the REST API. !28755
+- Refresh metrics dashboard data without reloading the page. !28756
+- Update duplicate specs in update large table spec. !28787 (Rajendra Kadam)
+- Fix duplicate spec in factory relation spec. !28794 (Rajendra Kadam)
+- Remove duplicate spec from changelog spec. !28801 (Rajendra Kadam)
+- Remove duplicate spec from closing issue spec. !28803 (Rajendra Kadam)
+- Allow Release links to be edited on the Edit Release page. !28816
+- Create operations_user_lists table. !28822
+- Added the clone button for Snippet view. !28840
+- Add Fluentd table for cluster apps. !28844
+- Fix duplicate spec from user helper spec. !28854 (Rajendra Kadam)
+- Add missing spec for gitlab schema. !28855 (Rajendra Kadam)
+- Fix duplciate spec in merge requests. !28856 (Rajendra Kadam)
+- Fix duplicate spec in environment finder. !28857 (Rajendra Kadam)
+- Fix duplicate spec in template dropdown spec. !28858 (Rajendra Kadam)
+- Fix duplicate spec in user post diff notes. !28859 (Rajendra Kadam)
+- Fix duplicate spec in filter issues. !28860 (Rajendra Kadam)
+- Remove `ci_dag_support` feature flag. !28863 (Lee Tickett)
+- Validate dependency on job generating a CI config when using dynamic child pipelines. !28901
+- Add read_api scope to personal access tokens for granting read only API access. !28944
+- Add a new default format(engineering notation) for yAxis labels in monitor charts. !28953
+- Add write_registry scope to deploy tokens for container registry push access. !28958
+- Add Nginx error percentage metric. !28983
+- Provide configuration options for Static Site Editor. !29058
+- Remove blobs_fetch_in_batches feature flag. !29069
+- API endpoint to create annotations for environments dashboard. !29089
+- Add graphQL interface to fetch metrics dashboard. !29112
+- Add typed AWS environment variables for access keys & region. !29124
+- Add line range to diff note position. !29135
+- Add push rules association for groups. !29144
+- Gather historical pod list from Elasticsearch. !29168
+- Save changes in Static Site Editor using REST GitLab API. !29286
+- Add temporary empty message when no result is found. !29306
+- Add API endpoint to get users without projects. !29347
+- Add status page url field to DB and setting model. !29357
+- Add metrics_dashboard_access_level to project features. !29371
+- Add a database column to enable or disable group owners from changing the default branch protection setting of a group. !29397
+- Allow sorting of issue and MR discussions. !29492
+- Update UI for project and group settings CI variables. !29584
+- Add GRADLE_CLI_OPTS and SBT_CLI_OPTS env vars to dependency scanning orchestrator. !29595
+- Add name_regex_keep to container_expiration_policies. !29618
+- Adds Knative and Fluentd as CI/CD managed applications. !29637
+- Add jira issues import feature.
+- Add wildcard case in documentation for artifacts. (Fábio Matavelli)
+- Add namespace storage size limit setting.
+- Add placeholders to broadcast message notifications.
+
+### Other (48 changes, 16 of them are from the community)
+
+- Convert schema to plain SQL using structure.sql. !22808
+- Provide link to a survey for Knative users. !23025
+- Complete the migration of Job Artifact to Security Scan. !24244
+- Migrate .fa-spinner to .spinner for app/views/shared/notes. !25028 (nuwe1)
+- Migrate .fa-spinner to .spinner for app/views/ci/variables. !25030 (nuwe1)
+- Migrate .fa-spinner to .spinner for ee/app/views/projects/settings. !25038 (nuwe1)
+- Migrate .fa-spinner to .spinner for app/views/projects/mirrors. !25041 (nuwe1)
+- Migrate .fa-spinner to .spinner for app/views/projects/network. !25050 (nuwe1)
+- Migrate .fa-spinner to .spinner for app/views/groups. !25053 (nuwe1)
+- Replace underscore with lodash for ./app/assets/javascripts/vue_shared. !25108 (Tobias Spagert)
+- Remove health_status column from epics. !26302
+- Show object access warning when disabling repo LFS. !26696
+- Update icons in Sentry Error Tracking list for ignored/resolved errors. !27125
+- Use Ruby 2.7 in specs to remove Ruby 2.1/2.2/2.3. !27269 (Takuya Noguchi)
+- Fill user_type for ghost users. !27387
+- Add Bitbucket Importer metrics. !27524
+- Consume remaining LinkLFsObjectsProjects jobs. !27558
+- Update GitLab Runner Helm Chart to 0.15.0. !27670
+- Log Redis call count and duration to log files. !27735
+- Use id instead of cve where possible when parsing remediations. !27815
+- Log member additions when importing Project/Group. !27930
+- Change project_export_worker urgency to throttled. !27941
+- Add missing track_exception() call to Ci::CreateJobArtifactsService. !27954
+- Add possibility to conigure additional rails hosts with env variable. !28133
+- Remove new issue tooltip. !28261 (Victor Wu)
+- Improve message when promoting project labels. !28265
+- Change the link to chart copy text. !28371
+- Conditional mocking of admin mode in specs by directory. !28420 (Diego Louzán)
+- Align color and font-weight styles of heading elements and their typography classes. !28422
+- Fix merge request thread’s icon buttons color. !28465
+- Updated spinner next to forking message. !28506 (Victor Wu)
+- Replaced old-style buttons with the new ones on Snippet view. !28614
+- Change redo for retry icon in metrics dashboard. !28670
+- Remove User's association max_access_level_membership. !28757
+- Reduce urgency of EmailsOnPushWorker. !28783
+- Use concern instead of service to update highest role. !28791
+- Normalize error message between Gitea and Fogbugz importers. !28802
+- Fix keyboard shortcut to navigate to your groups. !28873 (Victor Wu)
+- Fix keyboard shortcut to navigate to dashboard activity. !28985 (Victor Wu)
+- Remove unused index for vulnerability severity levels. !29023
+- Update query labels dynamically for embedded charts. !29034
+- Refactor projects/:id/packages API to supply only necessary params to PackagesFinder. !29052 (Sashi Kumar)
+- Implement showing CI bridge error messages. !29123
+- Update GitLab Shell to v12.1.0. !29167
+- Update GitLab Elasticsearch Indexer. !29256
+- Add Gitlab User-Agent to ContainerRegistry::Client. !29294 (Sashi Kumar)
+- Improve error message in DAST CI template. !29388
+- Remove store_mentions! in Snippets::CreateService. !29581 (Sashi Kumar)
+
+
+## 12.9.4 (2020-04-16)
+
+- No changes.
+### Fixed (5 changes, 1 of them is from the community)
+
+- Fix not working File upload from Project overview page. !26828 (Gilang Gumilar)
+- Fix storage rollback regression caused by previous refactor. !28496
+- Fix incorrect regex used in FileUploader#extract_dynamic_path. !28683
+- Fully qualify id columns for keyset pagination (Projects API). !29026
+- Fix Slack notifications when upgrading from old GitLab versions. !29111
+
+
 ## 12.9.3 (2020-04-14)
 
 ### Security (3 changes)
@@ -508,6 +962,15 @@ entry.
 - Improvement in token reference.
 
 
+## 12.8.9 (2020-04-14)
+
+### Security (3 changes)
+
+- Refresh ProjectAuthorization during Group deletion.
+- Prevent filename bypass on artifact upload.
+- Update rack and related gems to 2.0.9 to fix security issue.
+
+
 ## 12.8.7 (2020-03-16)
 
 ### Fixed (1 change, 1 of them is from the community)
@@ -1098,6 +1561,15 @@ entry.
 - Add clarifying content to account fields.
 
 
+## 12.7.9 (2020-04-14)
+
+### Security (3 changes)
+
+- Refresh ProjectAuthorization during Group deletion.
+- Prevent filename bypass on artifact upload.
+- Update rack and related gems to 2.0.9 to fix security issue.
+
+
 ## 12.7.5
 
 ### Fixed (4 changes, 1 of them is from the community)
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 07c5481ea9..99aa66d3c1 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-12.9.3
+66fd5d1b9018ebf5427141c733234060b45bf626
diff --git a/GITLAB_ELASTICSEARCH_INDEXER_VERSION b/GITLAB_ELASTICSEARCH_INDEXER_VERSION
index 7ec1d6db40..ccbccc3dc6 100644
--- a/GITLAB_ELASTICSEARCH_INDEXER_VERSION
+++ b/GITLAB_ELASTICSEARCH_INDEXER_VERSION
@@ -1 +1 @@
-2.1.0
+2.2.0
diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION
index 4044f90867..685332623b 100644
--- a/GITLAB_SHELL_VERSION
+++ b/GITLAB_SHELL_VERSION
@@ -1 +1 @@
-12.0.0
+12.2.0
diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION
index 2465b5f7b8..57b9fc187c 100644
--- a/GITLAB_WORKHORSE_VERSION
+++ b/GITLAB_WORKHORSE_VERSION
@@ -1 +1 @@
-8.25.2
+8.30.1
diff --git a/Gemfile b/Gemfile
index 326174c75f..d15628eb83 100644
--- a/Gemfile
+++ b/Gemfile
@@ -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.19'
+gem 'graphql', '~> 1.10.5'
 # 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.17.0'
+gem 'rouge', '~> 3.18.0'
 gem 'truncato', '~> 0.7.11'
 gem 'bootstrap_form', '~> 4.2.0'
 gem 'nokogiri', '~> 1.10.5'
@@ -301,7 +301,7 @@ gem 'sentry-raven', '~> 2.9'
 gem 'premailer-rails', '~> 1.10.3'
 
 # LabKit: Tracing and Correlation
-gem 'gitlab-labkit', '0.11.0'
+gem 'gitlab-labkit', '0.12.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 'gitlab-derailed_benchmarks', require: false
+gem 'derailed_benchmarks', require: false
 
 # Metrics
 group :metrics do
@@ -366,7 +366,7 @@ group :development, :test do
   gem 'spring', '~> 2.0.0'
   gem 'spring-commands-rspec', '~> 1.0.4'
 
-  gem 'gitlab-styles', '~> 3.1.0', require: false
+  gem 'gitlab-styles', '~> 3.2.0', require: false
   # Pin these dependencies, otherwise a new rule could break the CI pipelines
   gem 'rubocop', '~> 0.74.0'
   gem 'rubocop-performance', '~> 1.4.1'
@@ -399,7 +399,6 @@ group :test do
   gem 'fuubar', '~> 2.2.0'
   gem 'rspec-retry', '~> 0.6.1'
   gem 'rspec_profiling', '~> 0.0.5'
-  gem 'rspec-set', '~> 0.1.3'
   gem 'rspec-parameterized', require: false
 
   gem 'capybara', '~> 3.22.0'
@@ -425,7 +424,7 @@ gem 'gitlab-mail_room', '~> 0.0.3', require: 'mail_room'
 gem 'email_reply_trimmer', '~> 0.1'
 gem 'html2text'
 
-gem 'ruby-prof', '~> 1.0.0'
+gem 'ruby-prof', '~> 1.3.0'
 gem 'stackprof', '~> 0.2.15', require: false
 gem 'rbtrace', '~> 0.4', require: false
 gem 'memory_profiler', '~> 0.9', require: false
@@ -493,3 +492,6 @@ gem 'erubi', '~> 1.9.0'
 # Monkey-patched in `config/initializers/mail_encoding_patch.rb`
 # See https://gitlab.com/gitlab-org/gitlab/issues/197386
 gem 'mail', '= 2.7.1'
+
+# File encryption
+gem 'lockbox', '~> 0.3.3'
diff --git a/Gemfile.lock b/Gemfile.lock
index 220735f0e2..64bf4ec44d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -211,6 +211,17 @@ GEM
     declarative-option (0.1.0)
     default_value_for (3.3.0)
       activerecord (>= 3.2.0, < 6.1)
+    derailed_benchmarks (1.7.0)
+      benchmark-ips (~> 2)
+      get_process_mem (~> 0)
+      heapy (~> 0)
+      memory_profiler (~> 0)
+      mini_histogram (~> 0)
+      rack (>= 1)
+      rake (> 10, < 14)
+      ruby-statistics (>= 2.1)
+      thor (>= 0.19, < 2)
+      unicode_plot (>= 0.0.4, < 1.0.0)
     descendants_tracker (0.0.4)
       thread_safe (~> 0.3, >= 0.3.1)
     device_detector (1.0.0)
@@ -259,6 +270,7 @@ GEM
       launchy (~> 2.1)
       mail (~> 2.7)
     encryptor (3.0.0)
+    enumerable-statistics (2.0.1)
     equalizer (0.0.11)
     erubi (1.9.0)
     escape_utils (1.2.1)
@@ -290,7 +302,7 @@ GEM
     fast_blank (1.0.0)
     fast_gettext (1.6.0)
     ffaker (2.10.0)
-    ffi (1.11.3)
+    ffi (1.12.2)
     ffi-compiler (1.0.1)
       ffi (>= 1.0.0)
       rake
@@ -371,16 +383,7 @@ GEM
     github-markup (1.7.0)
     gitlab-chronic (0.10.5)
       numerizer (~> 0.2)
-    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)
+    gitlab-labkit (0.12.0)
       actionpack (>= 5.0.0, < 6.1.0)
       activesupport (>= 5.0.0, < 6.1.0)
       grpc (~> 1.19)
@@ -398,7 +401,7 @@ GEM
       gitlab-puma (>= 2.7, < 5)
     gitlab-sidekiq-fetcher (0.5.2)
       sidekiq (~> 5)
-    gitlab-styles (3.1.0)
+    gitlab-styles (3.2.0)
       rubocop (~> 0.74.0)
       rubocop-gitlab-security (~> 0.1.0)
       rubocop-performance (~> 1.4.1)
@@ -456,7 +459,7 @@ GEM
     graphiql-rails (1.4.10)
       railties
       sprockets-rails
-    graphql (1.9.19)
+    graphql (1.10.5)
     graphql-docs (1.6.0)
       commonmarker (~> 0.16)
       escape_utils (~> 1.2)
@@ -605,6 +608,7 @@ GEM
       rb-inotify (~> 0.9, >= 0.9.7)
       ruby_dep (~> 1.2)
     locale (2.1.2)
+    lockbox (0.3.3)
     lograge (0.10.0)
       actionpack (>= 4)
       activesupport (>= 4)
@@ -631,6 +635,7 @@ GEM
       mime-types-data (~> 3.2015)
     mime-types-data (3.2019.0331)
     mimemagic (0.3.3)
+    mini_histogram (0.1.3)
     mini_magick (4.9.5)
     mini_mime (1.0.2)
     mini_portile2 (2.4.0)
@@ -750,7 +755,7 @@ GEM
     orm_adapter (0.5.0)
     os (1.0.0)
     parallel (1.19.1)
-    parser (2.6.5.0)
+    parser (2.7.0.4)
       ast (~> 2.4.0)
     parslet (1.8.2)
     peek (1.1.0)
@@ -889,7 +894,7 @@ GEM
     retriable (3.1.2)
     rinku (2.0.0)
     rotp (2.1.2)
-    rouge (3.17.0)
+    rouge (3.18.0)
     rqrcode (0.7.0)
       chunky_png
     rqrcode-rails3 (0.1.7)
@@ -922,7 +927,6 @@ GEM
       rspec-support (~> 3.9)
     rspec-retry (0.6.1)
       rspec-core (> 3.3)
-    rspec-set (0.1.3)
     rspec-support (3.9.2)
     rspec_junit_formatter (0.4.1)
       rspec-core (>= 2, < 4, != 2.12.0)
@@ -951,7 +955,7 @@ GEM
       i18n
     ruby-fogbugz (0.2.1)
       crack (~> 0.4)
-    ruby-prof (1.0.0)
+    ruby-prof (1.3.1)
     ruby-progressbar (1.10.1)
     ruby-saml (1.7.2)
       nokogiri (>= 1.5.10)
@@ -1084,6 +1088,8 @@ GEM
       unf_ext
     unf_ext (0.0.7.5)
     unicode-display_width (1.6.0)
+    unicode_plot (0.0.4)
+      enumerable-statistics (>= 2.0.1)
     unicode_utils (1.4.0)
     unicorn (5.4.1)
       kgio (~> 2.6)
@@ -1094,13 +1100,13 @@ GEM
     uniform_notifier (1.13.0)
     unleash (0.1.5)
       murmurhash3 (~> 0.1.6)
-    unparser (0.4.5)
+    unparser (0.4.7)
       abstract_type (~> 0.0.7)
       adamantium (~> 0.2.0)
       concord (~> 0.1.5)
       diff-lcs (~> 1.3)
       equalizer (~> 0.0.9)
-      parser (~> 2.6.3)
+      parser (>= 2.6.5)
       procto (~> 0.0.2)
     validate_email (0.1.6)
       activemodel (>= 3.0)
@@ -1189,6 +1195,7 @@ 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.1.0)
@@ -1231,8 +1238,7 @@ DEPENDENCIES
   gitaly (~> 12.9.0.pre.rc4)
   github-markup (~> 1.7.0)
   gitlab-chronic (~> 0.10.5)
-  gitlab-derailed_benchmarks
-  gitlab-labkit (= 0.11.0)
+  gitlab-labkit (= 0.12.0)
   gitlab-license (~> 1.0)
   gitlab-mail_room (~> 0.0.3)
   gitlab-markup (~> 1.7.0)
@@ -1240,7 +1246,7 @@ DEPENDENCIES
   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)
+  gitlab-styles (~> 3.2.0)
   gitlab_chronic_duration (~> 0.10.6.2)
   gitlab_omniauth-ldap (~> 2.1.1)
   gon (~> 6.2)
@@ -1252,7 +1258,7 @@ DEPENDENCIES
   grape-path-helpers (~> 1.2)
   grape_logging (~> 1.7)
   graphiql-rails (~> 1.4.10)
-  graphql (~> 1.9.19)
+  graphql (~> 1.10.5)
   graphql-docs (~> 1.6.0)
   grpc (~> 1.24.0)
   gssapi
@@ -1280,6 +1286,7 @@ DEPENDENCIES
   license_finder (~> 5.4)
   licensee (~> 8.9)
   liquid (~> 4.0)
+  lockbox (~> 0.3.3)
   lograge (~> 0.5)
   loofah (~> 2.2)
   lru_redux
@@ -1346,19 +1353,18 @@ DEPENDENCIES
   request_store (~> 1.3)
   responders (~> 3.0)
   retriable (~> 3.1.2)
-  rouge (~> 3.17.0)
+  rouge (~> 3.18.0)
   rqrcode-rails3 (~> 0.1.7)
   rspec-parameterized
   rspec-rails (~> 4.0.0.beta4)
   rspec-retry (~> 0.6.1)
-  rspec-set (~> 0.1.3)
   rspec_junit_formatter
   rspec_profiling (~> 0.0.5)
   rubocop (~> 0.74.0)
   rubocop-performance (~> 1.4.1)
   rubocop-rspec (~> 1.37.0)
   ruby-fogbugz (~> 0.2.1)
-  ruby-prof (~> 1.0.0)
+  ruby-prof (~> 1.3.0)
   ruby-progressbar
   ruby_parser (~> 3.8)
   rubyzip (~> 2.0.0)
diff --git a/Procfile b/Procfile
deleted file mode 100644
index 1776fd9794..0000000000
--- a/Procfile
+++ /dev/null
@@ -1,6 +0,0 @@
-# For DEVELOPMENT only. Production uses Runit in
-# https://gitlab.com/gitlab-org/omnibus-gitlab or the init scripts in
-# lib/support/init.d, which call scripts in bin/ .
-#
-web: RAILS_ENV=development bin/web start_foreground
-worker: RAILS_ENV=development bin/background_jobs start_foreground
diff --git a/VERSION b/VERSION
index 07c5481ea9..4de623cfef 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-12.9.3
+12.10.0
diff --git a/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js b/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js
new file mode 100644
index 0000000000..b4803be4d5
--- /dev/null
+++ b/app/assets/javascripts/admin/application_settings/setup_metrics_and_profiling.js
@@ -0,0 +1,8 @@
+import PayloadPreviewer from '~/pages/admin/application_settings/payload_previewer';
+
+export default () => {
+  new PayloadPreviewer(
+    document.querySelector('.js-usage-ping-payload-trigger'),
+    document.querySelector('.js-usage-ping-payload'),
+  ).init();
+};
diff --git a/app/assets/javascripts/alerts_service_settings/components/alerts_service_form.vue b/app/assets/javascripts/alerts_service_settings/components/alerts_service_form.vue
index 5e16f6f387..785598142f 100644
--- a/app/assets/javascripts/alerts_service_settings/components/alerts_service_form.vue
+++ b/app/assets/javascripts/alerts_service_settings/components/alerts_service_form.vue
@@ -1,6 +1,12 @@
 
 
diff --git a/app/assets/javascripts/blob/components/blob_embeddable.vue b/app/assets/javascripts/blob/components/blob_embeddable.vue
index 26bd020830..00b915ec8b 100644
--- a/app/assets/javascripts/blob/components/blob_embeddable.vue
+++ b/app/assets/javascripts/blob/components/blob_embeddable.vue
@@ -1,11 +1,11 @@
 
 
diff --git a/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue b/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue
index 689fa7638f..7155a1d35b 100644
--- a/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue
+++ b/app/assets/javascripts/blob/components/blob_header_viewer_switcher.vue
@@ -1,5 +1,5 @@
 
 
diff --git a/app/assets/javascripts/blob/pipeline_tour_success_modal.vue b/app/assets/javascripts/blob/pipeline_tour_success_modal.vue
index 0739b4d5e3..3ccd84037a 100644
--- a/app/assets/javascripts/blob/pipeline_tour_success_modal.vue
+++ b/app/assets/javascripts/blob/pipeline_tour_success_modal.vue
@@ -3,6 +3,9 @@ import { GlModal, GlSprintf, GlLink } from '@gitlab/ui';
 import { sprintf, s__, __ } from '~/locale';
 import Cookies from 'js-cookie';
 import { glEmojiTag } from '~/emoji';
+import Tracking from '~/tracking';
+
+const trackingMixin = Tracking.mixin();
 
 export default {
   beginnerLink:
@@ -18,11 +21,14 @@ export default {
     },
     false,
   ),
+  goToTrackValue: 10,
+  trackEvent: 'click_button',
   components: {
     GlModal,
     GlSprintf,
     GlLink,
   },
+  mixins: [trackingMixin],
   props: {
     goToPipelinesPath: {
       type: String,
@@ -32,8 +38,26 @@ export default {
       type: String,
       required: true,
     },
+    humanAccess: {
+      type: String,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      trackLabel: 'congratulate_first_pipeline',
+    };
+  },
+  computed: {
+    tracking() {
+      return {
+        label: this.trackLabel,
+        property: this.humanAccess,
+      };
+    },
   },
   mounted() {
+    this.track();
     this.disableModalFromRenderingAgain();
   },
   methods: {
@@ -72,7 +96,17 @@ export default {
       
     
     
   
 
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
index 7f0c232eea..5023496e2c 100644
--- a/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue
+++ b/app/assets/javascripts/blob/suggest_gitlab_ci_yml/components/popover.vue
@@ -1,7 +1,6 @@
 
+
+
diff --git a/app/assets/javascripts/boards/components/board_delete.js b/app/assets/javascripts/boards/components/board_delete.js
index a06db359c9..cc15dc82db 100644
--- a/app/assets/javascripts/boards/components/board_delete.js
+++ b/app/assets/javascripts/boards/components/board_delete.js
@@ -7,6 +7,7 @@ export default Vue.extend({
     list: {
       type: Object,
       default: () => ({}),
+      required: false,
     },
   },
   methods: {
diff --git a/app/assets/javascripts/boards/components/board_new_issue.vue b/app/assets/javascripts/boards/components/board_new_issue.vue
index f9a08f151c..deebe12210 100644
--- a/app/assets/javascripts/boards/components/board_new_issue.vue
+++ b/app/assets/javascripts/boards/components/board_new_issue.vue
@@ -1,6 +1,6 @@
 
+
diff --git a/app/assets/javascripts/ci_variable_list/components/ci_key_field.vue b/app/assets/javascripts/ci_variable_list/components/ci_key_field.vue
new file mode 100644
index 0000000000..f5c2cc57f3
--- /dev/null
+++ b/app/assets/javascripts/ci_variable_list/components/ci_key_field.vue
@@ -0,0 +1,169 @@
+
+
diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_autocomplete_tokens.js b/app/assets/javascripts/ci_variable_list/components/ci_variable_autocomplete_tokens.js
new file mode 100644
index 0000000000..9022bf5151
--- /dev/null
+++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_autocomplete_tokens.js
@@ -0,0 +1,29 @@
+import { __ } from '~/locale';
+
+import { AWS_ACCESS_KEY_ID, AWS_DEFAULT_REGION, AWS_SECRET_ACCESS_KEY } from '../constants';
+
+export const awsTokens = {
+  [AWS_ACCESS_KEY_ID]: {
+    name: AWS_ACCESS_KEY_ID,
+    /* Checks for exactly twenty characters that match key.
+       Based on greps suggested by Amazon at:
+       https://aws.amazon.com/blogs/security/a-safer-way-to-distribute-aws-credentials-to-ec2/
+    */
+    validation: val => /^[A-Za-z0-9]{20}$/.test(val),
+    invalidMessage: __('This variable does not match the expected pattern.'),
+  },
+  [AWS_DEFAULT_REGION]: {
+    name: AWS_DEFAULT_REGION,
+  },
+  [AWS_SECRET_ACCESS_KEY]: {
+    name: AWS_SECRET_ACCESS_KEY,
+    /* Checks for exactly forty characters that match secret.
+       Based on greps suggested by Amazon at:
+       https://aws.amazon.com/blogs/security/a-safer-way-to-distribute-aws-credentials-to-ec2/
+    */
+    validation: val => /^[A-Za-z0-9/+=]{40}$/.test(val),
+    invalidMessage: __('This variable does not match the expected pattern.'),
+  },
+};
+
+export const awsTokenList = Object.keys(awsTokens);
diff --git a/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue b/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue
index 0ccc58ec2d..8f5acd4a0a 100644
--- a/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue
+++ b/app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue
@@ -1,9 +1,6 @@
 
 
@@ -71,22 +110,55 @@ export default {
       {{ s__('ClusterIntegration|Something went wrong while updating Knative domain name.') }}
     
 
-    
+        
+          {{ domain.domain }}
+        
+        
+      
+
+      
+    
+
     
   
diff --git a/app/assets/javascripts/clusters/components/remove_cluster_confirmation.vue b/app/assets/javascripts/clusters/components/remove_cluster_confirmation.vue
index c31ba7ef14..b35adae335 100644
--- a/app/assets/javascripts/clusters/components/remove_cluster_confirmation.vue
+++ b/app/assets/javascripts/clusters/components/remove_cluster_confirmation.vue
@@ -1,7 +1,7 @@
 
+
diff --git a/app/assets/javascripts/custom_metrics/components/custom_metrics_form_fields.vue b/app/assets/javascripts/custom_metrics/components/custom_metrics_form_fields.vue
new file mode 100644
index 0000000000..f5207b47f6
--- /dev/null
+++ b/app/assets/javascripts/custom_metrics/components/custom_metrics_form_fields.vue
@@ -0,0 +1,294 @@
+
+
+
diff --git a/app/assets/javascripts/custom_metrics/components/delete_custom_metric_modal.vue b/app/assets/javascripts/custom_metrics/components/delete_custom_metric_modal.vue
new file mode 100644
index 0000000000..34e4aeb290
--- /dev/null
+++ b/app/assets/javascripts/custom_metrics/components/delete_custom_metric_modal.vue
@@ -0,0 +1,54 @@
+
+
diff --git a/app/assets/javascripts/custom_metrics/constants.js b/app/assets/javascripts/custom_metrics/constants.js
new file mode 100644
index 0000000000..2526445fdf
--- /dev/null
+++ b/app/assets/javascripts/custom_metrics/constants.js
@@ -0,0 +1,12 @@
+export const queryTypes = {
+  business: 'business',
+  response: 'response',
+  system: 'system',
+};
+
+export const formDataValidator = val => {
+  const fieldNames = Object.keys(val);
+  const requiredFields = ['title', 'query', 'yLabel', 'unit', 'group', 'legend'];
+
+  return requiredFields.every(name => fieldNames.includes(name));
+};
diff --git a/app/assets/javascripts/custom_metrics/index.js b/app/assets/javascripts/custom_metrics/index.js
new file mode 100644
index 0000000000..4c279daf5f
--- /dev/null
+++ b/app/assets/javascripts/custom_metrics/index.js
@@ -0,0 +1,47 @@
+import Vue from 'vue';
+import { parseBoolean } from '~/lib/utils/common_utils';
+import CustomMetricsForm from './components/custom_metrics_form.vue';
+
+export default () => {
+  // eslint-disable-next-line no-new
+  new Vue({
+    el: '#js-custom-metrics',
+    components: {
+      CustomMetricsForm,
+    },
+    render(createElement) {
+      const domEl = document.querySelector(this.$options.el);
+      const {
+        customMetricsPath,
+        editProjectServicePath,
+        validateQueryPath,
+        title,
+        query,
+        yLabel,
+        unit,
+        group,
+        legend,
+      } = domEl.dataset;
+      let { metricPersisted } = domEl.dataset;
+
+      metricPersisted = parseBoolean(metricPersisted);
+
+      return createElement('custom-metrics-form', {
+        props: {
+          customMetricsPath,
+          metricPersisted,
+          editProjectServicePath,
+          validateQueryPath,
+          formData: {
+            title,
+            query,
+            yLabel,
+            unit,
+            group,
+            legend,
+          },
+        },
+      });
+    },
+  });
+};
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
index 55e5f4ffad..6b757c6972 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
@@ -13,10 +13,12 @@ export default {
     items: {
       type: Array,
       default: () => [],
+      required: false,
     },
     stage: {
       type: Object,
       default: () => ({}),
+      required: false,
     },
   },
 };
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_component.vue
index c4f5172df3..cc7ae74dd3 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_component.vue
@@ -13,10 +13,12 @@ export default {
     items: {
       type: Array,
       default: () => [],
+      required: false,
     },
     stage: {
       type: Object,
       default: () => ({}),
+      required: false,
     },
   },
 };
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
index a295c8b496..d61e699555 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
@@ -15,10 +15,12 @@ export default {
     items: {
       type: Array,
       default: () => [],
+      required: false,
     },
     stage: {
       type: Object,
       default: () => ({}),
+      required: false,
     },
   },
 };
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
index c5146c3bf8..2a507b7e60 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
@@ -16,10 +16,12 @@ export default {
     items: {
       type: Array,
       default: () => [],
+      required: false,
     },
     stage: {
       type: Object,
       default: () => ({}),
+      required: false,
     },
   },
   computed: {
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_test_component.vue b/app/assets/javascripts/cycle_analytics/components/stage_test_component.vue
index 3572138421..caff6f9c34 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_test_component.vue
+++ b/app/assets/javascripts/cycle_analytics/components/stage_test_component.vue
@@ -15,10 +15,12 @@ export default {
     items: {
       type: Array,
       default: () => [],
+      required: false,
     },
     stage: {
       type: Object,
       default: () => ({}),
+      required: false,
     },
   },
   computed: {
diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
index 6d2b11e39d..f609ca5f22 100644
--- a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
+++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js
@@ -59,16 +59,10 @@ export default () => {
         service: this.createCycleAnalyticsService(cycleAnalyticsEl.dataset.requestPath),
       };
     },
-    defaultNumberOfSummaryItems: 3,
     computed: {
       currentStage() {
         return this.store.currentActiveStage();
       },
-      summaryTableColumnClass() {
-        return this.state.summary.length === this.$options.defaultNumberOfSummaryItems
-          ? 'col-sm-3'
-          : 'col-sm-4';
-      },
     },
     created() {
       // Conditional check placed here to prevent this method from being called on the
diff --git a/app/assets/javascripts/deploy_keys/components/app.vue b/app/assets/javascripts/deploy_keys/components/app.vue
index 048f3a2485..5505704f43 100644
--- a/app/assets/javascripts/deploy_keys/components/app.vue
+++ b/app/assets/javascripts/deploy_keys/components/app.vue
@@ -119,7 +119,7 @@ export default {