From 6158a767e68fb271c2239fd633faed51c499988c Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Tue, 23 Jun 2020 00:09:42 +0530 Subject: [PATCH] New upstream version 13.1.0 --- .editorconfig | 3 + .eslintignore | 1 + .gitignore | 4 +- .gitlab-ci.yml | 2 +- .gitlab/CODEOWNERS | 14 +- .gitlab/ci/docs.gitlab-ci.yml | 2 +- .gitlab/ci/frontend.gitlab-ci.yml | 277 +- .gitlab/ci/global.gitlab-ci.yml | 67 +- .gitlab/ci/memory.gitlab-ci.yml | 5 +- .gitlab/ci/pages.gitlab-ci.yml | 7 +- .gitlab/ci/qa.gitlab-ci.yml | 19 +- .gitlab/ci/rails.gitlab-ci.yml | 80 +- .gitlab/ci/reports.gitlab-ci.yml | 67 +- .gitlab/ci/review.gitlab-ci.yml | 311 +- .gitlab/ci/rules.gitlab-ci.yml | 105 +- .gitlab/ci/setup.gitlab-ci.yml | 2 +- .gitlab/ci/test-metadata.gitlab-ci.yml | 9 - ...tance_Testing.md => Acceptance Testing.md} | 0 ...em_Validation.md => Problem Validation.md} | 0 .../{QA failure.md => QA Failure.md} | 0 ...tion_validation => Solution Validation.md} | 0 .../{Test plan.md => Test Plan.md} | 0 ...on.md => Change Documentation Location.md} | 0 .../merge_request_templates/Documentation.md | 2 + ... check.md => New Static Analysis Check.md} | 0 .haml-lint.yml | 5 +- .haml-lint_todo.yml | 7 +- .markdownlint.json | 3 + .rubocop.yml | 64 +- .rubocop_todo.yml | 892 +- .ruby-version | 2 +- CHANGELOG-EE.md | 54 +- CHANGELOG.md | 572 +- Dangerfile | 16 +- GITALY_SERVER_VERSION | 2 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 23 +- Gemfile.lock | 185 +- VERSION | 2 +- app/assets/images/aws_logo.svg | 38 + app/assets/images/experienced.svg | 1 + app/assets/images/learn-gitlab-avatar.jpg | Bin 0 -> 4237 bytes app/assets/images/novice.svg | 1 + .../components/alert_details.vue | 264 +- .../components/alert_management_list.vue | 216 +- .../components/alert_sidebar.vue | 61 + .../components/sidebar/sidebar_assignee.vue | 51 + .../components/sidebar/sidebar_assignees.vue | 278 + .../components/sidebar/sidebar_header.vue | 34 + .../components/sidebar/sidebar_status.vue | 189 + .../components/sidebar/sidebar_todo.vue | 29 + .../components/system_notes/system_note.vue | 46 + .../javascripts/alert_management/constants.js | 57 +- .../javascripts/alert_management/details.js | 4 +- .../fragments/alert_note.fragment.graphql | 16 + ...t.graphql => detail_item.fragment.graphql} | 8 +- ...ent.graphql => list_item.fragment.graphql} | 6 + .../mutations/alert_set_assignees.graphql | 15 + .../mutations/create_issue_from_alert.graphql | 8 + .../mutations/update_alert_status.graphql | 1 + .../graphql/queries/details.query.graphql | 2 +- .../graphql/queries/getAlerts.query.graphql | 11 - .../graphql/queries/get_alerts.query.graphql | 32 + .../queries/get_count_by_status.query.graphql | 11 + .../alert_management/services/index.js | 7 - .../components/alerts_service_form.vue | 74 +- .../alerts_service_settings/index.js | 12 +- app/assets/javascripts/api.js | 39 +- .../javascripts/authentication/mount_2fa.js | 14 + .../{ => authentication}/u2f/authenticate.js | 10 +- .../{ => authentication}/u2f/error.js | 0 .../u2f.js => authentication/u2f/index.js} | 8 +- .../{ => authentication}/u2f/register.js | 2 +- .../{ => authentication}/u2f/util.js | 0 app/assets/javascripts/avatar_picker.js | 16 - .../javascripts/badges/components/badge.vue | 9 +- .../badges/components/badge_list_row.vue | 2 +- .../components/diff_file_drafts.vue | 41 + .../batch_comments/components/draft_note.vue | 113 + .../components/drafts_count.vue | 15 + .../components/inline_draft_comment_row.vue | 32 + .../components/parallel_draft_comment_row.vue | 45 + .../components/preview_dropdown.vue | 111 + .../components/preview_item.vue | 143 + .../components/publish_button.vue | 55 + .../batch_comments/components/review_bar.vue | 70 + .../javascripts/batch_comments/constants.js | 3 + .../javascripts/batch_comments/index.js | 24 + .../batch_comments/mixins/resolved_status.js | 54 +- .../batch_comments/services/drafts_service.js | 33 + .../batch_comments/stores/index.js | 14 + .../stores/modules/batch_comments/actions.js | 151 + .../stores/modules/batch_comments/getters.js | 87 + .../stores/modules/batch_comments/index.js | 12 + .../modules/batch_comments/mutation_types.js | 23 + .../modules/batch_comments/mutations.js | 81 + .../stores/modules/batch_comments/state.js | 9 + .../javascripts/batch_comments/utils.js | 35 + .../behaviors/markdown/render_mermaid.js | 3 +- .../blob/components/blob_content.vue | 1 + .../blob/components/blob_header.vue | 6 + .../blob_header_default_actions.vue | 7 + .../blob/components/blob_header_filepath.vue | 2 +- .../boards/components/board_column.vue | 254 +- .../boards/components/board_content.vue | 82 + .../boards/components/board_delete.js | 7 + .../boards/components/board_list.vue | 4 +- .../boards/components/board_list_header.vue | 291 + .../boards/components/board_new_issue.vue | 2 +- .../boards/components/board_sidebar.js | 2 +- .../boards/components/issue_card_inner.vue | 8 +- app/assets/javascripts/boards/index.js | 12 +- app/assets/javascripts/boards/models/issue.js | 39 +- app/assets/javascripts/boards/models/list.js | 66 +- .../javascripts/boards/stores/actions.js | 6 +- .../javascripts/boards/stores/boards_store.js | 144 +- .../javascripts/boards/stores/mutations.js | 4 +- app/assets/javascripts/boards/stores/state.js | 1 + .../boards/toggle_epics_swimlanes.js | 1 + .../components/ci_key_field.vue | 2 +- .../components/ci_variable_modal.vue | 100 +- .../components/ci_variable_table.vue | 2 +- .../javascripts/ci_variable_list/constants.js | 6 + .../javascripts/ci_variable_list/index.js | 26 +- .../javascripts/clusters/clusters_bundle.js | 6 + .../clusters/components/application_row.vue | 130 +- .../clusters/components/applications.vue | 402 +- .../components/fluentd_output_settings.vue | 4 +- .../ingress_modsecurity_settings.vue | 6 +- .../components/knative_domain_editor.vue | 5 + .../remove_cluster_confirmation.vue | 2 +- .../update_application_confirmation_modal.vue | 65 + .../clusters_list/components/clusters.vue | 200 +- .../javascripts/clusters_list/constants.js | 3 + app/assets/javascripts/clusters_list/index.js | 4 +- .../clusters_list/store/actions.js | 49 +- .../javascripts/clusters_list/store/state.js | 5 + .../code_navigation/components/doc_line.vue | 22 + .../code_navigation/components/popover.vue | 5 +- app/assets/javascripts/commit/image_file.js | 1 + app/assets/javascripts/commons/bootstrap.js | 7 +- app/assets/javascripts/commons/jquery.js | 2 - .../components/custom_metrics_form.vue | 2 +- .../components/design_note_pin.vue | 4 +- .../design_notes/design_discussion.vue | 158 +- .../components/design_notes/design_note.vue | 40 +- .../design_notes/design_reply_form.vue | 3 +- .../design_notes/toggle_replies_widget.vue | 70 + .../components/design_overlay.vue | 42 +- .../components/design_presentation.vue | 10 +- .../components/design_sidebar.vue | 178 + .../components/upload/button.vue | 2 +- .../design_management/constants.js | 2 + .../graphql/fragments/design.fragment.graphql | 2 + .../fragments/designNote.fragment.graphql | 1 + ...iscussion_resolved_status.fragment.graphql | 9 + ...toggle_resolve_discussion.mutation.graphql | 17 + .../design_management/pages/design/index.vue | 114 +- .../design_management/pages/index.vue | 2 +- .../design_management/router/index.js | 15 +- .../design_management/utils/cache_update.js | 4 + .../utils/design_management_utils.js | 5 +- .../components/jump_to_discussion.js | 12 +- .../diffs/components/commit_item.vue | 2 +- .../diffs/components/compare_versions.vue | 24 +- .../diffs/components/diff_content.vue | 8 +- .../diffs/components/diff_line_note_form.vue | 38 +- .../diffs/components/inline_diff_view.vue | 8 +- .../diffs/components/parallel_diff_view.vue | 6 +- .../diffs/components/tree_list.vue | 2 +- app/assets/javascripts/diffs/constants.js | 19 + .../diffs/mixins/draft_comments.js | 17 +- app/assets/javascripts/diffs/store/actions.js | 24 +- app/assets/javascripts/diffs/store/utils.js | 2 + app/assets/javascripts/diffs/utils/uuids.js | 79 + .../components/environments_app.vue | 14 +- .../error_tracking/components/constants.js | 4 +- .../components/error_details.vue | 51 +- .../components/error_tracking_list.vue | 21 +- .../error_tracking/store/list/actions.js | 14 +- .../javascripts/error_tracking/utils.js | 26 +- app/assets/javascripts/file_pickers.js | 21 + .../filtered_search_visual_tokens.js | 32 +- .../services/recent_searches_service_error.js | 7 +- .../javascripts/frequent_items/index.js | 76 +- app/assets/javascripts/gl_dropdown.js | 2 +- ...autocomplete.js => global_search_input.js} | 291 +- .../fragments/pageInfo.fragment.graphql | 2 + app/assets/javascripts/group.js | 70 +- .../groups/components/group_item.vue | 19 +- .../groups/components/item_actions.vue | 4 +- .../groups/components/item_stats.vue | 8 +- app/assets/javascripts/header.js | 2 +- app/assets/javascripts/ide/commit_icon.js | 11 + .../ide/components/activity_bar.vue | 7 +- .../ide/components/branches/item.vue | 3 +- .../commit_sidebar/editor_header.vue | 4 +- .../components/commit_sidebar/empty_state.vue | 5 +- .../ide/components/commit_sidebar/form.vue | 51 +- .../ide/components/commit_sidebar/list.vue | 6 +- .../components/commit_sidebar/list_item.vue | 4 +- .../ide/components/file_row_extra.vue | 2 +- app/assets/javascripts/ide/components/ide.vue | 23 +- .../ide/components/ide_side_bar.vue | 9 +- .../ide/components/ide_sidebar_nav.vue | 83 + .../ide/components/ide_status_bar.vue | 2 +- .../ide/components/ide_status_list.vue | 12 +- .../components/jobs/detail/description.vue | 2 +- .../javascripts/ide/components/jobs/stage.vue | 4 +- .../ide/components/merge_requests/item.vue | 3 +- .../ide/components/mr_file_icon.vue | 2 +- .../ide/components/new_dropdown/modal.vue | 11 +- .../ide/components/new_dropdown/upload.vue | 1 - .../components/panes/collapsible_sidebar.vue | 92 +- .../ide/components/panes/right.vue | 35 +- .../ide/components/pipelines/list.vue | 8 +- .../ide/components/preview/navigator.vue | 2 +- .../ide/components/repo_commit_section.vue | 48 +- .../ide/components/repo_editor.vue | 89 +- .../javascripts/ide/components/repo_tabs.vue | 14 +- .../ide/components/resizable_panel.vue | 13 +- .../ide/components/terminal/empty_state.vue | 71 + .../ide/components/terminal/session.vue | 53 + .../ide/components/terminal/terminal.vue | 117 + .../components/terminal/terminal_controls.vue | 27 + .../ide/components/terminal/view.vue | 41 + .../terminal_sync/terminal_sync_status.vue | 76 + .../terminal_sync_status_safe.vue | 22 + app/assets/javascripts/ide/constants.js | 8 + app/assets/javascripts/ide/ide_router.js | 153 +- app/assets/javascripts/ide/index.js | 3 +- .../javascripts/ide/lib/common/model.js | 35 +- app/assets/javascripts/ide/lib/create_diff.js | 85 + .../javascripts/ide/lib/create_file_diff.js | 112 + .../javascripts/ide/lib/diff/controller.js | 9 +- app/assets/javascripts/ide/lib/diff/diff.js | 9 +- app/assets/javascripts/ide/lib/editor.js | 32 +- .../javascripts/ide/lib/editor_options.js | 22 +- .../ide/lib/editorconfig/parser.js | 55 + .../ide/lib/editorconfig/rules_mapper.js | 33 + app/assets/javascripts/ide/lib/files.js | 5 - .../javascripts/ide/lib/languages/README.md | 21 + app/assets/javascripts/ide/lib/mirror.js | 154 + .../javascripts/ide/services/terminals.js | 15 + app/assets/javascripts/ide/stores/actions.js | 42 +- .../javascripts/ide/stores/actions/file.js | 23 +- .../javascripts/ide/stores/actions/project.js | 3 +- app/assets/javascripts/ide/stores/extend.js | 14 + app/assets/javascripts/ide/stores/getters.js | 20 +- app/assets/javascripts/ide/stores/index.js | 35 +- .../ide/stores/modules/branches/index.js | 2 +- .../ide/stores/modules/clientside/actions.js | 3 +- .../ide/stores/modules/commit/actions.js | 8 +- .../ide/stores/modules/commit/getters.js | 3 - .../ide/stores/modules/commit/index.js | 2 +- .../stores/modules/file_templates/actions.js | 3 - .../ide/stores/modules/pane/actions.js | 3 - .../ide/stores/modules/pane/getters.js | 7 +- .../ide/stores/modules/router/actions.js | 6 + .../ide/stores/modules/router/index.js | 10 + .../stores/modules/router/mutation_types.js | 2 + .../ide/stores/modules/router/mutations.js | 7 + .../ide/stores/modules/router/state.js | 3 + .../stores/modules/terminal/actions/checks.js | 98 + .../stores/modules/terminal/actions/index.js | 5 + .../terminal/actions/session_controls.js | 118 + .../terminal/actions/session_status.js | 64 + .../stores/modules/terminal/actions/setup.js | 14 + .../ide/stores/modules/terminal/constants.js | 9 + .../ide/stores/modules/terminal/getters.js | 19 + .../ide/stores/modules/terminal/index.js | 12 + .../ide/stores/modules/terminal/messages.js | 55 + .../stores/modules/terminal/mutation_types.js | 11 + .../ide/stores/modules/terminal/mutations.js | 64 + .../ide/stores/modules/terminal/state.js | 13 + .../ide/stores/modules/terminal/utils.js | 5 + .../stores/modules/terminal_sync/actions.js | 41 + .../ide/stores/modules/terminal_sync/index.js | 10 + .../stores/modules/terminal_sync/messages.js | 5 + .../modules/terminal_sync/mutation_types.js | 4 + .../stores/modules/terminal_sync/mutations.js | 22 + .../ide/stores/modules/terminal_sync/state.js | 6 + .../javascripts/ide/stores/mutation_types.js | 2 - .../javascripts/ide/stores/mutations.js | 12 +- .../javascripts/ide/stores/mutations/file.js | 8 - .../javascripts/ide/stores/mutations/tree.js | 5 - .../ide/stores/plugins/terminal.js | 25 + .../ide/stores/plugins/terminal_sync.js | 49 + app/assets/javascripts/ide/stores/state.js | 3 - app/assets/javascripts/ide/stores/utils.js | 44 +- .../javascripts/ide/sync_router_and_store.js | 55 + app/assets/javascripts/ide/utils.js | 61 +- .../components/bitbucket_status_table.vue | 74 + .../components/import_projects_table.vue | 65 +- .../incompatible_repo_table_row.vue | 30 + .../components/provider_repo_table_row.vue | 6 +- .../javascripts/import_projects/index.js | 52 +- .../import_projects/store/actions.js | 64 +- .../import_projects/store/getters.js | 2 + .../import_projects/store/index.js | 4 +- .../import_projects/store/mutation_types.js | 2 - .../import_projects/store/mutations.js | 10 +- .../import_projects/store/state.js | 1 + .../edit/components/active_toggle.vue | 17 +- .../edit/components/dynamic_field.vue | 172 + .../edit/components/integration_form.vue | 8 + .../edit/components/jira_trigger_fields.vue | 103 +- .../javascripts/integrations/edit/index.js | 3 +- .../integrations/integration_settings_form.js | 11 +- .../issuable_bulk_update_actions.js | 5 +- .../issuable_suggestions/components/item.vue | 2 +- .../components/issuable_list_root_app.vue | 6 +- .../components/issuables_list_app.vue | 2 +- app/assets/javascripts/issue.js | 26 + .../javascripts/issue_show/components/app.vue | 79 +- .../issue_show/components/pinned_links.vue | 39 +- .../javascripts/issue_show/constants.js | 17 + .../components/jira_import_app.vue | 108 +- app/assets/javascripts/jira_import/index.js | 1 - .../get_jira_import_details.query.graphql | 12 + .../jira_import/utils/cache_update.js | 37 + .../{utils.js => utils/jira_import_utils.js} | 11 + .../jobs/components/artifacts_block.vue | 32 +- .../jobs/components/commit_block.vue | 2 +- .../jobs/components/environments_block.vue | 2 +- .../jobs/components/stages_dropdown.vue | 2 +- .../jobs/components/stuck_block.vue | 12 +- .../jobs/components/trigger_block.vue | 2 +- .../components/unmet_prerequisites_block.vue | 2 +- app/assets/javascripts/lazy_loader.js | 2 +- .../javascripts/lib/utils/common_utils.js | 14 +- app/assets/javascripts/lib/utils/constants.js | 8 + .../javascripts/lib/utils/datetime_range.js | 15 +- app/assets/javascripts/lib/utils/dom_utils.js | 13 + .../javascripts/lib/utils/text_utility.js | 9 +- .../javascripts/lib/utils/url_utility.js | 17 +- .../logs/components/environment_logs.vue | 4 +- app/assets/javascripts/logs/constants.js | 8 + .../javascripts/logs/logs_tracking_helper.js | 18 + app/assets/javascripts/logs/stores/actions.js | 23 +- .../javascripts/logs/stores/mutation_types.js | 1 + app/assets/javascripts/main.js | 16 +- app/assets/javascripts/merge_request_tabs.js | 50 +- app/assets/javascripts/milestone_select.js | 9 +- .../monitoring/components/alert_widget.vue | 6 +- .../components/alert_widget_form.vue | 2 +- .../monitoring/components/charts/column.vue | 13 +- .../components/charts/empty_chart.vue | 4 +- .../monitoring/components/charts/heatmap.vue | 9 +- .../monitoring/components/charts/options.js | 29 +- .../components/charts/stacked_column.vue | 68 +- .../components/charts/time_series.vue | 60 +- .../monitoring/components/dashboard.vue | 407 +- .../components/dashboard_header.vue | 369 + .../monitoring/components/dashboard_panel.vue | 43 +- .../monitoring/components/graph_group.vue | 11 +- .../monitoring/components/links_section.vue | 32 + .../components/variables_section.vue | 16 +- .../javascripts/monitoring/constants.js | 23 +- .../javascripts/monitoring/format_date.js | 39 + .../javascripts/monitoring/monitoring_app.js | 59 + .../monitoring/monitoring_bundle.js | 32 - .../monitoring_bundle_with_alerts.js | 13 - .../monitoring/pages/dashboard_page.vue | 18 + .../monitoring/router/constants.js | 3 + .../javascripts/monitoring/router/index.js | 15 + .../javascripts/monitoring/router/routes.js | 18 + .../javascripts/monitoring/stores/actions.js | 16 +- .../javascripts/monitoring/stores/getters.js | 22 +- .../javascripts/monitoring/stores/index.js | 12 +- .../monitoring/stores/mutation_types.js | 2 +- .../monitoring/stores/mutations.js | 26 +- .../javascripts/monitoring/stores/state.js | 17 +- .../javascripts/monitoring/stores/utils.js | 110 +- .../monitoring/stores/variable_mapping.js | 2 +- app/assets/javascripts/monitoring/utils.js | 16 +- app/assets/javascripts/mr_notes/index.js | 2 +- app/assets/javascripts/mr_notes/init_notes.js | 2 +- .../javascripts/mr_notes/stores/index.js | 2 + .../namespace_storage_limit_alert.js | 20 + .../notes/components/comment_form.vue | 11 +- .../notes/components/diff_with_note.vue | 1 + .../components/multiline_comment_form.vue | 68 + .../components/multiline_comment_utils.js | 57 + .../notes/components/note_actions.vue | 65 +- .../notes/components/note_body.vue | 36 +- .../notes/components/note_form.vue | 70 +- .../notes/components/noteable_discussion.vue | 5 +- .../notes/components/noteable_note.vue | 98 +- .../mixins/description_version_history.js | 2 +- .../notes/mixins/diff_line_note_form.js | 98 +- .../notes/mixins/discussion_navigation.js | 4 +- app/assets/javascripts/notes/mixins/draft.js | 8 - .../notes/mixins/get_discussion.js | 7 - .../javascripts/notes/mixins/note_form.js | 24 - .../javascripts/notes/stores/actions.js | 53 +- .../javascripts/notes/stores/modules/index.js | 1 + .../notes/stores/mutation_types.js | 5 + .../javascripts/notes/stores/mutations.js | 36 + .../javascripts/onboarding_issues/index.js | 120 + .../components/external_dashboard.vue | 72 - .../form_group/dashboard_timezone.vue | 60 + .../form_group/external_dashboard.vue | 48 + .../components/metrics_settings.vue | 53 + .../javascripts/operation_settings/index.js | 4 +- .../operation_settings/store/actions.js | 18 +- .../store/mutation_types.js | 3 +- .../operation_settings/store/mutations.js | 5 +- .../operation_settings/store/state.js | 9 +- app/assets/javascripts/pager.js | 5 +- .../pages/admin/application_settings/index.js | 4 + .../pages/admin/groups/edit/index.js | 4 +- .../pages/admin/groups/new/index.js | 7 +- .../index/components/delete_project_modal.vue | 2 +- .../pages/groups/{ => clusters}/index.js | 0 .../javascripts/pages/groups/edit/index.js | 7 +- .../javascripts/pages/groups/new/index.js | 7 +- .../pages/groups/shared/group_details.js | 3 + app/assets/javascripts/pages/ide/index.js | 3 +- .../pages/import/bitbucket/status/index.js | 19 + .../bitbucket_server_status_table.vue | 30 + .../import/bitbucket_server/status/index.js | 20 + .../pages/import/fogbugz/status/index.js | 7 + .../pages/import/gitlab/status/index.js | 7 + .../pages/ldap/omniauth_callbacks/index.js | 4 +- .../pages/omniauth_callbacks/index.js | 4 +- .../pages/profiles/two_factor_auths/index.js | 6 +- .../pages/projects/clusters/index.js | 5 + .../javascripts/pages/projects/edit/index.js | 4 +- .../projects/environments/metrics/index.js | 4 +- .../pages/projects/graphs/charts/index.js | 14 + .../graphs/components/code_coverage.vue | 177 + .../javascripts/pages/projects/index.js | 3 - .../pages/projects/issues/index/index.js | 2 + .../labels/components/promote_label_modal.vue | 2 +- .../projects/merge_requests/show/index.js | 2 + .../javascripts/pages/projects/new/index.js | 39 + .../pages/projects/pipelines/index/index.js | 1 + .../permissions/components/settings_panel.vue | 98 +- .../javascripts/pages/projects/show/index.js | 7 + .../pages/projects/tree/show/index.js | 2 + .../javascripts/pages/projects/wikis/index.js | 42 +- .../javascripts/pages/sessions/index.js | 4 +- .../pages/sessions/new/oauth_remember_me.js | 10 +- .../sessions/new/preserve_url_fragment.js | 10 +- .../wikis/components/delete_wiki_modal.vue | 0 .../javascripts/pages/shared/wikis/index.js | 41 + .../pages/{projects => shared}/wikis/wikis.js | 0 .../components/detailed_metric.vue | 11 +- .../components/performance_bar_app.vue | 12 +- .../javascripts/persistent_user_callouts.js | 15 + .../pipelines/components/dag/constants.js | 10 + .../pipelines/components/dag/dag.vue | 136 + .../pipelines/components/dag/dag_graph.vue | 299 + .../pipelines/components/dag/drawing_utils.js | 134 + .../pipelines/components/dag/interactions.js | 134 + .../pipelines/components/dag/parsing_utils.js | 164 + .../pipelines/components/pipelines.vue | 24 +- .../components/pipelines_artifacts.vue | 2 +- .../components/pipelines_filtered_search.vue | 84 +- .../components/test_reports/test_summary.vue | 2 +- .../tokens/pipeline_branch_name_token.vue | 15 +- .../tokens/pipeline_status_token.vue | 104 + .../tokens/pipeline_tag_name_token.vue | 64 + .../tokens/pipeline_trigger_author_token.vue | 13 +- app/assets/javascripts/pipelines/constants.js | 3 + .../pipelines/pipeline_details_bundle.js | 25 + .../pipelines/services/pipelines_service.js | 13 +- app/assets/javascripts/pipelines/utils.js | 8 + .../commits/components/author_select.vue | 4 +- .../projects/commits/store/actions.js | 5 +- .../components/app.vue | 160 + .../components/legacy_container.vue | 31 + .../components/welcome.vue | 70 + .../illustrations/blank-project.svg | 27 + .../illustrations/ci-cd-project.svg | 73 + .../illustrations/create-from-template.svg | 54 + .../illustrations/import-project.svg | 95 + .../experiment_new_project_creation/index.js | 14 + .../components/details_page/delete_alert.vue | 70 + .../components/details_page/delete_modal.vue | 67 + .../details_page/details_header.vue | 30 + .../details_page/empty_tags_state.vue | 33 + .../components/details_page/tags_loader.vue | 34 + .../components/details_page/tags_table.vue | 210 + .../explorer/components/image_list.vue | 124 - .../cli_commands.vue} | 2 +- .../{ => list_page}/group_empty_state.vue | 0 .../components/list_page/image_list.vue | 52 + .../components/list_page/image_list_row.vue | 136 + .../{ => list_page}/project_empty_state.vue | 7 +- .../components/list_page/registry_header.vue | 138 + .../components/project_policy_alert.vue | 68 - .../registry/explorer/constants.js | 130 - .../registry/explorer/constants/details.js | 60 + .../explorer/constants/expiration_policies.js | 11 + .../registry/explorer/constants/index.js | 4 + .../registry/explorer/constants/list.js | 48 + .../explorer/constants/quick_start.js | 9 + .../registry/explorer/pages/details.vue | 401 +- .../registry/explorer/pages/list.vue | 52 +- .../javascripts/registry/explorer/router.js | 4 +- .../registry/explorer/stores/actions.js | 2 +- .../registry/explorer/stores/getters.js | 6 - .../registry/explorer/stores/index.js | 4 +- .../registry/explorer/stores/mutations.js | 8 +- .../releases/components/asset_links_form.vue | 65 +- .../releases/components/evidence_block.vue | 4 +- .../releases/components/release_block.vue | 2 +- .../components/release_block_assets.vue | 187 +- .../components/release_block_author.vue | 2 +- .../components/release_block_metadata.vue | 4 +- .../release_block_milestone_info.vue | 2 +- app/assets/javascripts/releases/constants.js | 9 + .../releases/stores/modules/detail/actions.js | 30 +- .../stores/modules/detail/mutation_types.js | 1 + .../stores/modules/detail/mutations.js | 7 + .../components/grouped_test_reports_app.vue | 40 +- .../reports/components/summary_row.vue | 5 +- .../reports/components/test_issue_body.vue | 2 +- .../repository/components/last_commit.vue | 2 +- .../repository/components/table/row.vue | 7 +- .../getVueFileListLfsBadge.query.graphql | 2 +- .../serverless/components/function_row.vue | 2 +- .../set_status_modal_wrapper.vue | 3 +- .../components/time_tracking/help_state.vue | 9 +- .../components/time_tracking/time_tracker.vue | 6 +- .../sidebar/mount_milestone_sidebar.js | 1 - .../javascripts/snippets/components/edit.vue | 60 +- .../snippets/components/snippet_blob_edit.vue | 2 +- .../snippets/components/snippet_blob_view.vue | 10 +- .../components/snippet_description_edit.vue | 32 +- .../components/snippet_description_view.vue | 2 +- .../snippets/components/snippet_header.vue | 3 +- .../snippets/components/snippet_title.vue | 2 +- app/assets/javascripts/snippets/constants.js | 3 + .../components/edit_area.vue | 45 +- .../unsaved_changes_confirm_dialog.vue | 27 + .../static_site_editor/constants.js | 2 + .../static_site_editor/pages/home.vue | 6 +- .../services/parse_source_file.js | 55 + .../services/submit_content_changes.js | 13 +- app/assets/javascripts/user_callout.js | 15 +- .../deployment/deployment_action_button.vue | 2 +- .../deployment/deployment_view_button.vue | 4 +- .../components/mr_widget_header.vue | 4 +- .../components/mr_widget_terraform_plan.vue | 20 +- .../source_branch_removal_status.vue | 2 +- .../components/states/mr_widget_rebase.vue | 2 +- .../components/changed_file_icon.vue | 2 +- .../viewers/download_viewer.vue | 2 +- .../date_time_picker/date_time_picker.vue | 106 +- .../date_time_picker_input.vue | 4 +- .../date_time_picker/date_time_picker_lib.js | 65 +- .../components/diff_viewer/diff_viewer.vue | 5 + .../diff_viewer/viewers/renamed.vue | 107 +- .../components/file_finder/index.vue | 2 +- .../components/file_finder/item.vue | 8 +- .../filtered_search_bar/constants.js | 8 + .../filtered_search_bar_root.vue | 253 + .../tokens/author_token.vue | 114 + .../vue_shared/components/gl_mentions.vue | 84 +- .../issue/related_issuable_item.vue | 2 +- .../vue_shared/components/markdown/field.vue | 8 +- .../vue_shared/components/markdown/header.vue | 4 +- .../components/markdown/suggestion_diff.vue | 28 + .../markdown/suggestion_diff_header.vue | 119 +- .../components/markdown/suggestions.vue | 21 +- .../components/markdown/toolbar.vue | 72 +- .../components/notes/system_note.vue | 2 +- .../project_selector/project_selector.vue | 58 +- .../rich_content_editor/constants.js | 10 +- .../rich_content_editor/editor_service.js | 42 + .../modals/add_image_modal.vue | 74 + .../rich_content_editor.vue | 97 +- .../rich_content_editor/toolbar_item.vue | 13 +- .../rich_content_editor/toolbar_service.js | 32 - .../sidebar/labels_select_vue/constants.js | 3 +- .../dropdown_contents_labels_view.vue | 23 +- .../sidebar/labels_select_vue/label_item.vue | 16 +- .../vue_shared/components/url_sync.vue | 25 + .../mixins/ci_pagination_api_mixin.js | 14 +- .../mixins/related_issuable_mixin.js | 4 +- app/assets/stylesheets/application_dark.scss | 3 + .../stylesheets/bootstrap_migration.scss | 4 +- app/assets/stylesheets/components/avatar.scss | 11 +- .../components/dashboard_skeleton.scss | 6 +- .../components/design_management/design.scss | 59 +- .../stylesheets/components/popover.scss | 2 +- .../components/related_items_list.scss | 27 +- .../components/rich_content_editor.scss | 22 +- .../stylesheets/framework/animations.scss | 9 +- app/assets/stylesheets/framework/badges.scss | 10 +- app/assets/stylesheets/framework/blank.scss | 14 + .../framework/broadcast_messages.scss | 5 - app/assets/stylesheets/framework/common.scss | 46 +- .../framework/contextual_sidebar.scss | 2 +- .../stylesheets/framework/dropdowns.scss | 5 +- app/assets/stylesheets/framework/files.scss | 2 +- app/assets/stylesheets/framework/filters.scss | 17 +- .../stylesheets/framework/gitlab_theme.scss | 49 +- .../stylesheets/framework/markdown_area.scss | 2 +- app/assets/stylesheets/framework/selects.scss | 41 +- .../framework/system_messages.scss | 12 +- app/assets/stylesheets/framework/tables.scss | 2 +- .../stylesheets/framework/typography.scss | 18 + .../stylesheets/framework/variables.scss | 222 +- .../framework/variables_overrides.scss | 23 + app/assets/stylesheets/notify.scss | 2 +- .../page_bundles/_ide_monaco_overrides.scss | 3 +- .../page_bundles/_ide_theme_overrides.scss | 326 +- app/assets/stylesheets/page_bundles/ide.scss | 67 +- .../page_bundles/ide_themes/README.md | 14 +- .../ide_themes/_solarized-dark.scss | 50 + .../pages/alert_management/details.scss | 33 +- .../pages/alert_management/list.scss | 95 +- app/assets/stylesheets/pages/boards.scss | 29 +- app/assets/stylesheets/pages/diff.scss | 2 +- .../stylesheets/pages/experience_level.scss | 29 + app/assets/stylesheets/pages/groups.scss | 32 +- app/assets/stylesheets/pages/issuable.scss | 5 +- app/assets/stylesheets/pages/issues.scss | 66 + app/assets/stylesheets/pages/labels.scss | 4 +- app/assets/stylesheets/pages/login.scss | 13 +- app/assets/stylesheets/pages/note_form.scss | 4 +- app/assets/stylesheets/pages/notes.scss | 6 +- app/assets/stylesheets/pages/pipelines.scss | 5 +- .../pages/profiles/preferences.scss | 14 +- app/assets/stylesheets/pages/projects.scss | 2 +- app/assets/stylesheets/pages/prometheus.scss | 8 + .../stylesheets/pages/storage_quota.scss | 17 + app/assets/stylesheets/themes/_dark.scss | 134 + app/assets/stylesheets/utilities.scss | 72 +- app/channels/application_cable/channel.rb | 11 + app/channels/application_cable/connection.rb | 8 + app/channels/application_cable/logging.rb | 17 + .../admin/application_settings_controller.rb | 5 + app/controllers/admin/runners_controller.rb | 2 +- app/controllers/admin/users_controller.rb | 3 +- app/controllers/application_controller.rb | 1 + app/controllers/clusters/base_controller.rb | 2 +- .../clusters/clusters_controller.rb | 1 + .../enforces_two_factor_authentication.rb | 3 +- app/controllers/concerns/find_snippet.rb | 24 + .../concerns/integrations_actions.rb | 6 + app/controllers/concerns/issuable_actions.rb | 29 +- .../concerns/issuable_collections.rb | 3 +- .../concerns/issuable_collections_action.rb | 4 +- app/controllers/concerns/known_sign_in.rb | 2 +- app/controllers/concerns/milestone_actions.rb | 8 +- app/controllers/concerns/notes_actions.rb | 6 +- app/controllers/concerns/preview_markdown.rb | 2 +- app/controllers/concerns/service_params.rb | 3 + .../concerns/snippet_authorizations.rb | 23 + app/controllers/concerns/snippets_actions.rb | 61 + app/controllers/concerns/wiki_actions.rb | 232 + .../workhorse_import_export_upload.rb | 33 + .../dashboard/milestones_controller.rb | 32 +- app/controllers/dashboard/todos_controller.rb | 10 +- app/controllers/groups/boards_controller.rb | 1 + .../groups/group_links_controller.rb | 2 +- app/controllers/groups/imports_controller.rb | 19 + .../groups/milestones_controller.rb | 77 +- app/controllers/groups_controller.rb | 15 +- app/controllers/ide_controller.rb | 6 +- app/controllers/import/base_controller.rb | 76 + .../import/bitbucket_controller.rb | 53 +- .../import/bitbucket_server_controller.rb | 77 +- app/controllers/import/fogbugz_controller.rb | 33 +- app/controllers/import/github_controller.rb | 2 +- app/controllers/import/gitlab_controller.rb | 29 +- .../import/gitlab_groups_controller.rb | 65 + .../import/gitlab_projects_controller.rb | 27 +- .../projects/alert_management_controller.rb | 4 - .../alerting/notifications_controller.rb | 16 +- app/controllers/projects/badges_controller.rb | 11 +- app/controllers/projects/blame_controller.rb | 3 +- app/controllers/projects/blob_controller.rb | 6 +- .../projects/branches_controller.rb | 14 +- ...y_build_group_report_results_controller.rb | 11 +- .../projects/discussions_controller.rb | 2 +- .../projects/environments_controller.rb | 2 +- app/controllers/projects/graphs_controller.rb | 10 +- .../projects/group_links_controller.rb | 7 +- .../projects/import/jira_controller.rb | 54 +- app/controllers/projects/issues_controller.rb | 1 - app/controllers/projects/jobs_controller.rb | 40 +- .../merge_requests/diffs_controller.rb | 11 +- .../merge_requests/drafts_controller.rb | 129 + .../projects/merge_requests_controller.rb | 3 + .../projects/milestones_controller.rb | 4 +- .../projects/pipelines_controller.rb | 16 +- app/controllers/projects/refs_controller.rb | 2 +- .../projects/releases_controller.rb | 1 + .../projects/services_controller.rb | 15 +- .../settings/operations_controller.rb | 2 +- .../snippets/application_controller.rb | 19 + .../projects/snippets_controller.rb | 86 +- app/controllers/projects/tags_controller.rb | 18 +- .../projects/web_ide_terminals_controller.rb | 98 + app/controllers/projects/wikis_controller.rb | 199 +- app/controllers/projects_controller.rb | 21 +- .../experience_levels_controller.rb | 44 + app/controllers/registrations_controller.rb | 4 + .../repositories/git_http_controller.rb | 2 +- app/controllers/search_controller.rb | 33 +- .../snippets/application_controller.rb | 22 + app/controllers/snippets_controller.rb | 92 +- app/finders/admin/runners_finder.rb | 71 - ...daily_build_group_report_results_finder.rb | 20 +- app/finders/ci/runners_finder.rb | 92 + app/finders/events_finder.rb | 5 +- app/finders/issuable_finder.rb | 2 +- app/finders/issuable_finder/params.rb | 10 +- app/finders/labels_finder.rb | 9 +- app/finders/milestones_finder.rb | 6 +- app/finders/notes_finder.rb | 2 +- app/finders/resource_label_event_finder.rb | 41 - .../resource_milestone_event_finder.rb | 69 + app/finders/uploader_finder.rb | 34 + app/finders/users_finder.rb | 19 +- .../alert_management/alerts/set_assignees.rb | 56 + .../mutations/alert_management/base.rb | 4 +- .../alert_management/update_alert_status.rb | 2 +- app/graphql/mutations/base_mutation.rb | 2 +- app/graphql/mutations/branches/create.rb | 2 +- app/graphql/mutations/commits/create.rb | 60 + .../concerns/mutations/resolves_issuable.rb | 16 +- .../concerns/mutations/resolves_project.rb | 15 - .../container_expiration_policies/update.rb | 62 + .../mutations/discussions/toggle_resolve.rb | 73 + .../mutations/issues/set_confidential.rb | 2 +- app/graphql/mutations/issues/set_due_date.rb | 2 +- app/graphql/mutations/issues/update.rb | 2 +- .../mutations/jira_import/import_users.rb | 44 + app/graphql/mutations/jira_import/start.rb | 16 +- .../mutations/merge_requests/create.rb | 63 + .../mutations/merge_requests/set_assignees.rb | 2 +- .../mutations/merge_requests/set_labels.rb | 7 +- .../mutations/merge_requests/set_locked.rb | 2 +- .../mutations/merge_requests/set_milestone.rb | 2 +- .../merge_requests/set_subscription.rb | 2 +- .../mutations/merge_requests/set_wip.rb | 2 +- .../metrics/dashboard/annotations/base.rb | 18 + .../metrics/dashboard/annotations/delete.rb | 32 + app/graphql/mutations/snippets/create.rb | 4 +- app/graphql/mutations/todos/mark_all_done.rb | 4 +- app/graphql/mutations/todos/mark_done.rb | 2 +- app/graphql/mutations/todos/restore.rb | 6 +- app/graphql/mutations/todos/restore_many.rb | 2 +- .../alert_management/alert_resolver.rb | 42 + .../alert_status_counts_resolver.rb | 4 + .../alert_management_alert_resolver.rb | 31 - .../assigned_merge_requests_resolver.rb | 9 + .../authored_merge_requests_resolver.rb | 9 + app/graphql/resolvers/base_resolver.rb | 33 +- app/graphql/resolvers/concerns/looks_ahead.rb | 52 + .../concerns/resolves_merge_requests.rb | 67 + .../resolvers/concerns/resolves_project.rb | 15 + app/graphql/resolvers/full_path_resolver.rb | 7 +- .../resolvers/merge_request_resolver.rb | 18 + .../resolvers/merge_requests_resolver.rb | 52 +- .../resolvers/project_members_resolver.rb | 21 + .../resolvers/project_pipeline_resolver.rb | 17 + .../projects/jira_imports_resolver.rb | 2 - .../projects/jira_projects_resolver.rb | 76 + .../resolvers/user_merge_requests_resolver.rb | 68 + app/graphql/resolvers/user_resolver.rb | 43 + app/graphql/resolvers/users_resolver.rb | 57 + app/graphql/types/access_level_enum.rb | 15 + app/graphql/types/access_level_type.rb | 17 + .../types/alert_management/alert_sort_enum.rb | 12 +- .../types/alert_management/alert_type.rb | 11 + app/graphql/types/base_object.rb | 4 + app/graphql/types/board_type.rb | 2 +- app/graphql/types/ci/pipeline_type.rb | 2 + app/graphql/types/commit_action_mode_enum.rb | 14 + app/graphql/types/commit_action_type.rb | 22 + app/graphql/types/commit_encoding_enum.rb | 10 + ...ontainer_expiration_policy_cadence_enum.rb | 17 + .../container_expiration_policy_keep_enum.rb | 18 + ...ainer_expiration_policy_older_than_enum.rb | 16 + .../types/container_expiration_policy_type.rb | 21 + app/graphql/types/evidence_type.rb | 21 + app/graphql/types/group_member_type.rb | 17 + app/graphql/types/group_type.rb | 39 + app/graphql/types/jira_import_type.rb | 6 + app/graphql/types/jira_user_type.rb | 19 + app/graphql/types/member_interface.rb | 22 + app/graphql/types/merge_request_type.rb | 12 +- app/graphql/types/metrics/dashboard_type.rb | 3 + app/graphql/types/milestone_type.rb | 12 + app/graphql/types/mutation_type.rb | 7 + app/graphql/types/notes/discussion_type.rb | 2 + app/graphql/types/notes/note_type.rb | 12 +- app/graphql/types/notes/noteable_type.rb | 2 + .../types/permission_types/ci/pipeline.rb | 3 +- .../types/permission_types/merge_request.rb | 12 +- app/graphql/types/project_member_type.rb | 25 + app/graphql/types/project_type.rb | 63 +- app/graphql/types/projects/service_type.rb | 2 +- .../projects/services/jira_project_type.rb | 21 + .../projects/services/jira_service_type.rb | 11 +- app/graphql/types/query_type.rb | 14 + app/graphql/types/release_assets_type.rb | 20 + app/graphql/types/release_link_type.rb | 20 + app/graphql/types/release_link_type_enum.rb | 12 + app/graphql/types/release_source_type.rb | 14 + app/graphql/types/release_type.rb | 4 + app/graphql/types/resolvable_interface.rb | 28 + app/graphql/types/snippet_type.rb | 10 +- .../types/snippets/file_input_action_enum.rb | 15 + app/graphql/types/snippets/file_input_type.rb | 26 + app/graphql/types/user_state_enum.rb | 12 + app/graphql/types/user_type.rb | 22 +- app/helpers/active_sessions_helper.rb | 2 +- app/helpers/application_helper.rb | 3 +- app/helpers/application_settings_helper.rb | 14 + app/helpers/auto_devops_helper.rb | 2 +- app/helpers/clusters_helper.rb | 24 +- app/helpers/environments_helper.rb | 15 +- app/helpers/events_helper.rb | 2 +- app/helpers/gitlab_routing_helper.rb | 29 +- app/helpers/issuables_helper.rb | 5 +- app/helpers/issues_helper.rb | 39 - app/helpers/markup_helper.rb | 6 +- app/helpers/namespaces_helper.rb | 41 +- app/helpers/notes_helper.rb | 23 +- app/helpers/notifications_helper.rb | 2 +- app/helpers/numbers_helper.rb | 5 +- app/helpers/page_layout_helper.rb | 10 + .../projects/alert_management_helper.rb | 2 +- app/helpers/projects_helper.rb | 51 +- app/helpers/search_helper.rb | 107 - app/helpers/services_helper.rb | 22 + app/helpers/subscribable_banner_helper.rb | 9 + ...lestones_helper.rb => timeboxes_helper.rb} | 39 +- ..._helper.rb => timeboxes_routing_helper.rb} | 4 +- app/helpers/todos_helper.rb | 14 +- app/helpers/visibility_level_helper.rb | 11 + app/helpers/wiki_helper.rb | 51 +- app/mailers/emails/issues.rb | 2 + app/mailers/emails/profile.rb | 11 +- app/mailers/emails/reviews.rb | 33 + app/mailers/notify.rb | 3 +- app/mailers/previews/notify_preview.rb | 2 +- app/models/active_session.rb | 2 +- app/models/alert_management.rb | 7 + app/models/alert_management/alert.rb | 48 +- app/models/alert_management/alert_assignee.rb | 11 + .../alert_management/alert_user_mention.rb | 8 + app/models/application_record.rb | 4 + app/models/application_setting.rb | 29 + .../application_setting_implementation.rb | 33 +- app/models/audit_event.rb | 3 + app/models/badge.rb | 2 +- app/models/blob.rb | 2 + app/models/blob_viewer/go_mod.rb | 43 + .../blob_viewer/metrics_dashboard_yml.rb | 44 + app/models/board_group_recent_visit.rb | 2 +- app/models/board_project_recent_visit.rb | 2 +- app/models/chat_team.rb | 2 +- app/models/ci/bridge.rb | 3 + app/models/ci/build.rb | 49 +- app/models/ci/build_dependencies.rb | 2 +- app/models/ci/build_report_result.rb | 45 + app/models/ci/build_runner_session.rb | 15 +- .../ci/daily_build_group_report_result.rb | 2 + app/models/ci/freeze_period.rb | 2 +- app/models/ci/group.rb | 2 +- app/models/ci/instance_variable.rb | 53 +- app/models/ci/job_artifact.rb | 29 +- app/models/ci/pipeline.rb | 50 +- app/models/ci/pipeline_enums.rb | 5 +- app/models/ci/processable.rb | 4 - app/models/ci/ref.rb | 67 +- app/models/ci/runner.rb | 32 +- .../clusters/applications/cert_manager.rb | 6 +- .../clusters/applications/crossplane.rb | 3 +- .../clusters/applications/elastic_stack.rb | 12 +- app/models/clusters/applications/fluentd.rb | 3 +- app/models/clusters/applications/helm.rb | 6 +- app/models/clusters/applications/ingress.rb | 3 +- app/models/clusters/applications/jupyter.rb | 3 +- app/models/clusters/applications/knative.rb | 6 +- .../clusters/applications/prometheus.rb | 11 +- app/models/clusters/applications/runner.rb | 5 +- app/models/clusters/cluster.rb | 22 +- .../clusters/concerns/application_core.rb | 2 +- .../clusters/concerns/application_data.rb | 5 +- .../clusters/concerns/application_status.rb | 20 +- app/models/commit_status.rb | 25 +- app/models/concerns/cacheable_attributes.rb | 2 +- app/models/concerns/ci/contextable.rb | 2 +- app/models/concerns/each_batch.rb | 2 +- app/models/concerns/featurable.rb | 99 + app/models/concerns/has_status.rb | 4 +- .../import_state/sidekiq_job_tracker.rb | 7 +- app/models/concerns/integration.rb | 19 + app/models/concerns/issuable.rb | 30 +- app/models/concerns/limitable.rb | 29 +- app/models/concerns/mentionable.rb | 4 +- app/models/concerns/milestoneish.rb | 20 - app/models/concerns/noteable.rb | 2 +- app/models/concerns/prometheus_adapter.rb | 2 +- app/models/concerns/relative_positioning.rb | 2 +- app/models/concerns/resolvable_discussion.rb | 7 +- app/models/concerns/resolvable_note.rb | 4 +- .../concerns/storage/legacy_namespace.rb | 2 +- app/models/concerns/timebox.rb | 51 +- app/models/concerns/token_authenticatable.rb | 5 + app/models/concerns/update_highest_role.rb | 4 +- app/models/container_expiration_policy.rb | 6 + app/models/container_repository.rb | 14 +- app/models/dashboard_group_milestone.rb | 29 - app/models/dashboard_milestone.rb | 19 - app/models/data_list.rb | 25 + app/models/deployment.rb | 2 +- app/models/design_management/design.rb | 68 +- app/models/design_management/version.rb | 2 +- app/models/diff_note.rb | 2 +- app/models/discussion.rb | 1 + app/models/draft_note.rb | 122 + app/models/environment.rb | 2 +- app/models/event.rb | 192 +- app/models/global_milestone.rb | 108 - app/models/group.rb | 57 +- app/models/group_deploy_key.rb | 11 + app/models/group_group_link.rb | 1 + app/models/group_import_state.rb | 7 +- app/models/group_milestone.rb | 49 - app/models/internal_id.rb | 24 - app/models/issue.rb | 27 +- app/models/issue/metrics.rb | 4 +- app/models/iteration.rb | 25 +- app/models/jira_import_state.rb | 27 +- app/models/label.rb | 4 +- app/models/lfs_object.rb | 4 +- app/models/license_template.rb | 2 +- app/models/member.rb | 2 +- app/models/members/group_member.rb | 11 +- app/models/members/project_member.rb | 2 +- app/models/merge_request.rb | 32 +- app/models/merge_request_context_commit.rb | 2 +- .../merge_request_context_commit_diff_file.rb | 2 +- app/models/merge_request_diff.rb | 4 +- app/models/merge_request_diff_commit.rb | 2 +- app/models/metrics/dashboard/annotation.rb | 13 + app/models/milestone.rb | 49 +- app/models/namespace.rb | 8 +- app/models/note.rb | 25 +- app/models/pages_domain.rb | 8 +- app/models/pages_domain_acme_order.rb | 2 +- .../prometheus_dashboard.rb | 43 +- .../prometheus_metric.rb | 26 +- .../prometheus_panel.rb | 25 +- .../prometheus_panel_group.rb | 21 +- app/models/project.rb | 132 +- app/models/project_ci_cd_setting.rb | 13 - app/models/project_feature.rb | 106 +- app/models/project_group_link.rb | 6 - app/models/project_import_state.rb | 6 +- app/models/project_metrics_setting.rb | 7 + app/models/project_repository_storage_move.rb | 22 +- app/models/project_services/alerts_service.rb | 2 +- .../chat_message/alert_message.rb | 74 + .../chat_message/merge_message.rb | 2 +- .../chat_message/pipeline_message.rb | 6 +- .../project_services/hipchat_service.rb | 4 +- app/models/project_services/jira_service.rb | 23 +- .../pipelines_email_service.rb | 6 - .../project_services/prometheus_service.rb | 43 +- app/models/project_services/slack_service.rb | 16 +- app/models/project_setting.rb | 4 - app/models/prometheus_alert_event.rb | 6 - app/models/push_event.rb | 4 +- app/models/releases/evidence.rb | 55 +- app/models/releases/link.rb | 7 + app/models/remote_mirror.rb | 12 +- app/models/repository.rb | 8 +- app/models/repository_language.rb | 2 +- app/models/resource_label_event.rb | 8 + app/models/resource_milestone_event.rb | 10 + app/models/review.rb | 30 + app/models/route.rb | 2 +- .../self_managed_prometheus_alert_event.rb | 6 - app/models/service.rb | 26 +- app/models/service_list.rb | 27 + app/models/snippet.rb | 2 +- app/models/snippet_input_action.rb | 62 + app/models/snippet_input_action_collection.rb | 25 + app/models/ssh_host_key.rb | 2 +- app/models/storage/legacy_project.rb | 2 +- app/models/terraform/state.rb | 2 + app/models/todo.rb | 18 +- app/models/uploads/base.rb | 2 +- app/models/user.rb | 61 +- app/models/user_interacted_project.rb | 14 - app/models/user_preference.rb | 2 + app/models/web_ide_terminal.rb | 51 + app/models/wiki.rb | 2 +- app/models/wiki_directory.rb | 2 +- app/models/wiki_page.rb | 8 +- app/models/wiki_page/meta.rb | 2 +- app/models/wiki_page/slug.rb | 4 +- app/policies/ci/build_policy.rb | 22 + .../container_expiration_policy_policy.rb | 5 + app/policies/draft_note_policy.rb | 13 + app/policies/project_policy.rb | 35 +- app/policies/releases/link_policy.rb | 7 + app/policies/releases/source_policy.rb | 13 + app/presenters/gitlab/blame_presenter.rb | 82 + .../projects/prometheus/alert_presenter.rb | 8 +- app/presenters/release_presenter.rb | 2 +- app/presenters/snippet_presenter.rb | 8 +- app/serializers/build_artifact_entity.rb | 34 +- app/serializers/ci/dag_job_entity.rb | 1 + app/serializers/ci/dag_pipeline_entity.rb | 6 +- .../daily_build_group_report_result_entity.rb | 13 + ...ly_build_group_report_result_serializer.rb | 28 + app/serializers/cluster_entity.rb | 1 + app/serializers/cluster_serializer.rb | 1 + .../container_repository_entity.rb | 2 +- app/serializers/diff_file_base_entity.rb | 6 +- app/serializers/diff_file_metadata_entity.rb | 5 +- app/serializers/diffs_entity.rb | 14 +- app/serializers/draft_note_entity.rb | 39 + app/serializers/draft_note_serializer.rb | 4 + .../import/base_provider_repo_entity.rb | 8 + .../import/bitbucket_provider_repo_entity.rb | 15 + .../bitbucket_server_provider_repo_entity.rb | 7 + .../import/fogbugz_provider_repo_entity.rb | 17 + .../githubish_provider_repo_entity.rb} | 12 +- .../import/gitlab_provider_repo_entity.rb | 19 + .../import/provider_repo_serializer.rb | 23 + .../merge_request_noteable_entity.rb | 2 + app/serializers/paginated_diff_entity.rb | 10 +- app/serializers/pipeline_details_entity.rb | 3 +- app/serializers/pipeline_serializer.rb | 36 +- app/serializers/provider_repo_serializer.rb | 5 - app/serializers/service_field_entity.rb | 24 + app/serializers/service_field_serializer.rb | 5 + app/serializers/web_ide_terminal_entity.rb | 12 + .../web_ide_terminal_serializer.rb | 11 + .../admin/propagate_integration_service.rb | 142 + .../alert_management/alerts/update_service.rb | 98 + .../create_alert_issue_service.rb | 3 +- .../process_prometheus_alert_service.rb | 6 +- app/services/auto_merge/base_service.rb | 54 +- app/services/award_emojis/destroy_service.rb | 2 +- .../ci/authorize_job_artifact_service.rb | 53 + .../ci/build_report_result_service.rb | 36 + .../create_cross_project_pipeline_service.rb | 1 + .../ci/create_web_ide_terminal_service.rb | 123 + ...tract_sections_from_build_trace_service.rb | 2 +- app/services/ci/process_pipeline_service.rb | 2 +- .../ci/update_ci_ref_status_service.rb | 1 + app/services/ci/web_ide_config_service.rb | 59 + .../applications/prometheus_config_service.rb | 12 +- ...e_cluster_applications_artifact_service.rb | 27 +- app/services/commits/create_service.rb | 2 + .../concerns/exclusive_lease_guard.rb | 2 +- .../integrations/project_test_data.rb | 62 + app/services/concerns/measurable.rb | 2 - app/services/concerns/spam_check_methods.rb | 11 +- .../update_service.rb | 38 + .../container_expiration_policy_service.rb | 7 + .../delete_designs_service.rb | 5 +- .../design_management/save_designs_service.rb | 17 +- app/services/discussions/resolve_service.rb | 57 +- app/services/draft_notes/base_service.rb | 21 + app/services/draft_notes/create_service.rb | 56 + app/services/draft_notes/destroy_service.rb | 23 + app/services/draft_notes/publish_service.rb | 67 + app/services/event_create_service.rb | 140 +- app/services/git/wiki_push_service/change.rb | 6 +- app/services/groups/destroy_service.rb | 2 +- .../groups/group_links/create_service.rb | 2 +- .../groups/group_links/destroy_service.rb | 6 +- .../groups/import_export/export_service.rb | 29 +- .../groups/import_export/import_service.rb | 23 +- app/services/groups/transfer_service.rb | 10 +- app/services/import/github_service.rb | 29 +- .../integrations/test/base_service.rb | 36 + .../integrations/test/project_service.rb | 47 + app/services/issuable/bulk_update_service.rb | 13 +- .../issuable/clone/attributes_rewriter.rb | 2 +- app/services/issuable_base_service.rb | 12 +- app/services/issues/create_service.rb | 7 +- app/services/issues/import_csv_service.rb | 2 +- app/services/issues/update_service.rb | 6 +- app/services/jira/requests/base.rb | 52 + app/services/jira/requests/projects.rb | 32 + .../jira_import/start_import_service.rb | 4 +- app/services/jira_import/users_importer.rb | 43 + app/services/jira_import/users_mapper.rb | 31 + app/services/keys/create_service.rb | 8 + .../labels/available_labels_service.rb | 6 +- app/services/labels/create_service.rb | 2 +- app/services/labels/promote_service.rb | 2 +- app/services/merge_requests/merge_service.rb | 4 +- app/services/merge_requests/update_service.rb | 4 +- .../metrics/dashboard/base_service.rb | 3 +- .../self_monitoring_dashboard_service.rb | 4 +- .../dashboard/system_dashboard_service.rb | 4 +- app/services/milestones/promote_service.rb | 2 +- .../namespaces/check_storage_size_service.rb | 5 +- app/services/notes/create_service.rb | 8 +- app/services/notes/post_process_service.rb | 2 +- .../notification_recipients/build_service.rb | 6 +- .../builder/new_review.rb | 43 + app/services/notification_service.rb | 29 +- app/services/pages/delete_service.rb | 2 +- app/services/projects/after_import_service.rb | 8 +- .../projects/alerting/notify_service.rb | 33 +- .../cleanup_tags_service.rb | 12 + app/services/projects/create_service.rb | 24 +- app/services/projects/destroy_service.rb | 2 +- .../detect_repository_languages_service.rb | 2 +- .../projects/group_links/create_service.rb | 1 + .../projects/group_links/destroy_service.rb | 4 +- .../projects/group_links/update_service.rb | 29 + .../hashed_storage/base_attachment_service.rb | 2 +- .../projects/import_export/export_service.rb | 14 +- app/services/projects/import_service.rb | 2 - .../projects/lfs_pointers/lfs_link_service.rb | 2 +- app/services/projects/lsif_data_service.rb | 101 - .../move_deploy_keys_projects_service.rb | 2 +- .../move_lfs_objects_projects_service.rb | 2 +- .../move_notification_settings_service.rb | 2 +- .../move_project_group_links_service.rb | 2 +- .../projects/move_project_members_service.rb | 2 +- .../projects/operations/update_service.rb | 4 +- .../alerts/create_events_service.rb | 8 +- .../prometheus/alerts/notify_service.rb | 35 +- .../projects/propagate_service_template.rb | 48 +- .../projects/update_remote_mirror_service.rb | 6 +- .../update_repository_storage_service.rb | 7 +- app/services/projects/update_service.rb | 13 +- .../projects/update_statistics_service.rb | 2 +- .../create_default_alerts_service.rb | 11 + app/services/prometheus/proxy_service.rb | 4 + .../proxy_variable_substitution_service.rb | 24 +- .../legacy_api_update_service.rb | 4 +- .../releases/create_evidence_service.rb | 25 + app/services/releases/create_service.rb | 33 +- .../resource_events/change_labels_service.rb | 2 +- .../resource_events/change_state_service.rb | 36 + .../merge_into_notes_service.rb | 5 +- .../synthetic_state_notes_builder_service.rb | 20 + app/services/search_service.rb | 22 +- app/services/service_response.rb | 6 + app/services/snippets/base_service.rb | 33 +- app/services/snippets/bulk_destroy_service.rb | 6 +- app/services/snippets/create_service.rb | 31 +- app/services/snippets/update_service.rb | 41 +- app/services/spam/akismet_service.rb | 4 +- app/services/spam/spam_action_service.rb | 21 +- app/services/spam/spam_constants.rb | 22 +- app/services/spam/spam_verdict_service.rb | 76 +- app/services/submit_usage_ping_service.rb | 2 +- app/services/suggestions/apply_service.rb | 126 +- app/services/suggestions/create_service.rb | 2 +- .../system_notes/issuables_service.rb | 14 +- app/services/test_hooks/base_service.rb | 28 +- app/services/test_hooks/project_service.rb | 72 +- app/services/test_hooks/system_service.rb | 25 +- app/services/todo_service.rb | 104 +- .../user_project_access_changed_service.rb | 3 +- app/services/users/build_service.rb | 3 +- app/services/users/destroy_service.rb | 2 +- .../users/migrate_to_ghost_user_service.rb | 5 + app/services/web_hook_service.rb | 2 +- app/services/wiki_pages/create_service.rb | 2 +- app/services/wiki_pages/destroy_service.rb | 2 +- app/services/wiki_pages/update_service.rb | 2 +- app/uploaders/file_mover.rb | 2 +- app/validators/json_schema_validator.rb | 38 + .../build_report_result_data.json | 12 + .../build_report_result_data_tests.json | 13 + .../daily_build_group_report_result_data.json | 8 + app/views/admin/appearances/_form.html.haml | 10 +- .../_system_header_footer_form.html.haml | 2 +- .../_account_and_limit.html.haml | 5 + .../_issue_limits.html.haml | 2 +- .../application_settings/_outbound.html.haml | 4 +- .../_repository_storage.html.haml | 8 +- .../application_settings/_spam.html.haml | 9 + .../application_settings/ci/_header.html.haml | 20 + .../application_settings/ci_cd.html.haml | 11 + .../admin/broadcast_messages/_form.html.haml | 4 +- .../admin/broadcast_messages/index.html.haml | 4 +- app/views/admin/groups/_group.html.haml | 43 +- app/views/admin/groups/show.html.haml | 2 + app/views/admin/hook_logs/_index.html.haml | 2 +- app/views/admin/hooks/edit.html.haml | 2 +- app/views/admin/projects/show.html.haml | 2 + .../admin/sessions/_two_factor_u2f.html.haml | 17 - app/views/admin/sessions/two_factor.html.haml | 2 +- app/views/admin/users/_admin_notes.html.haml | 7 + app/views/admin/users/_form.html.haml | 2 +- app/views/admin/users/_user_detail.html.haml | 4 +- .../admin/users/_user_detail_note.html.haml | 7 + .../admin/users/_user_listing_note.html.haml | 3 + app/views/admin/users/show.html.haml | 8 +- app/views/ci/variables/_index.html.haml | 13 +- app/views/clusters/clusters/_banner.html.haml | 2 +- .../_gcp_signup_offer_banner.html.haml | 2 +- .../_gitlab_integration_form.html.haml | 2 +- .../clusters/clusters/_sidebar.html.haml | 2 +- app/views/clusters/clusters/index.html.haml | 2 +- app/views/clusters/clusters/show.html.haml | 2 +- .../dashboard/milestones/_milestone.html.haml | 1 - app/views/dashboard/milestones/show.html.haml | 5 - .../devise/confirmations/almost_there.haml | 2 +- .../devise/sessions/two_factor.html.haml | 2 +- .../devise/shared/_omniauth_box.html.haml | 2 +- .../doorkeeper/applications/index.html.haml | 4 +- app/views/events/event/_note.html.haml | 6 +- app/views/groups/_flash_messages.html.haml | 1 + app/views/groups/_home_panel.html.haml | 6 +- app/views/groups/_import_group_pane.html.haml | 52 + app/views/groups/_new_group_fields.html.haml | 22 + app/views/groups/imports/show.html.haml | 10 + app/views/groups/milestones/_form.html.haml | 4 +- .../groups/milestones/_milestone.html.haml | 2 - app/views/groups/milestones/index.html.haml | 5 +- app/views/groups/new.html.haml | 73 +- .../registry/repositories/index.html.haml | 4 +- app/views/groups/settings/_export.html.haml | 2 +- app/views/groups/settings/_general.html.haml | 2 +- app/views/groups/show.html.haml | 4 - app/views/groups/sidebar/_packages.html.haml | 6 +- app/views/import/_githubish_status.html.haml | 5 +- app/views/import/bitbucket/status.html.haml | 173 +- .../import/bitbucket_server/new.html.haml | 6 +- .../import/bitbucket_server/status.html.haml | 165 +- app/views/import/fogbugz/status.html.haml | 99 +- app/views/import/gitlab/status.html.haml | 95 +- app/views/import/phabricator/new.html.haml | 6 +- app/views/layouts/_head.html.haml | 10 +- app/views/layouts/_page.html.haml | 4 +- app/views/layouts/_search.html.haml | 32 +- app/views/layouts/group.html.haml | 1 + .../header/_current_user_dropdown.html.haml | 4 +- app/views/layouts/header/_default.html.haml | 15 +- .../layouts/header/_logo_with_title.html.haml | 2 +- .../breadcrumbs/_collapsed_dropdown.html.haml | 2 +- .../layouts/nav/sidebar/_group.html.haml | 4 +- .../layouts/nav/sidebar/_project.html.haml | 35 +- app/views/layouts/project.html.haml | 3 +- app/views/layouts/terms.html.haml | 4 +- .../merged_merge_request_email.html.haml | 2 +- .../merged_merge_request_email.text.haml | 2 +- app/views/notify/new_issue_email.html.haml | 2 +- app/views/notify/new_review_email.html.haml | 16 + app/views/notify/new_review_email.text.erb | 13 + .../notify/unknown_sign_in_email.html.haml | 66 +- app/views/profiles/_event_table.html.haml | 2 +- app/views/profiles/accounts/show.html.haml | 8 +- .../profiles/active_sessions/index.html.haml | 2 +- app/views/profiles/audit_log.html.haml | 2 +- app/views/profiles/chat_names/index.html.haml | 2 +- app/views/profiles/emails/index.html.haml | 6 +- app/views/profiles/gpg_keys/index.html.haml | 4 +- app/views/profiles/keys/index.html.haml | 4 +- .../profiles/notifications/show.html.haml | 4 +- app/views/profiles/passwords/edit.html.haml | 4 +- .../personal_access_tokens/index.html.haml | 8 +- .../preferences/_sourcegraph.html.haml | 2 +- app/views/profiles/preferences/show.html.haml | 10 +- app/views/profiles/show.html.haml | 10 +- .../profiles/two_factor_auths/show.html.haml | 12 +- app/views/projects/_export.html.haml | 2 +- app/views/projects/_find_file_link.html.haml | 3 +- app/views/projects/_flash_messages.html.haml | 3 +- app/views/projects/_home_panel.html.haml | 10 +- .../projects/_import_project_pane.html.haml | 6 +- ...ge_request_merge_checks_settings.html.haml | 7 + ...quest_merge_suggestions_settings.html.haml | 4 +- .../projects/_new_project_fields.html.haml | 2 +- app/views/projects/_wiki.html.haml | 2 +- .../projects/blame/_blame_group.html.haml | 26 + app/views/projects/blame/show.html.haml | 47 +- app/views/projects/blob/_editor.html.haml | 2 +- .../projects/blob/_header_content.html.haml | 2 +- .../viewers/_metrics_dashboard_yml.html.haml | 11 + .../_metrics_dashboard_yml_loading.html.haml | 4 + .../projects/blob/viewers/_readme.html.haml | 2 +- .../blob/viewers/_route_map.html.haml | 2 +- .../blob/viewers/_route_map_loading.html.haml | 2 +- app/views/projects/branches/_branch.html.haml | 8 +- app/views/projects/branches/_panel.html.haml | 2 +- app/views/projects/branches/index.html.haml | 2 +- app/views/projects/buttons/_fork.html.haml | 2 +- app/views/projects/buttons/_star.html.haml | 4 +- app/views/projects/cleanup/_show.html.haml | 8 +- .../projects/commit/_commit_box.html.haml | 4 +- app/views/projects/commits/_commit.html.haml | 2 +- app/views/projects/diffs/_file.html.haml | 2 +- app/views/projects/diffs/_stats.html.haml | 4 +- app/views/projects/empty.html.haml | 6 +- .../projects/environments/_form.html.haml | 4 +- .../environments/empty_metrics.html.haml | 2 +- .../projects/environments/index.html.haml | 2 +- .../projects/environments/metrics.html.haml | 2 +- .../projects/environments/show.html.haml | 4 +- .../projects/forks/_fork_button.html.haml | 2 +- app/views/projects/forks/new.html.haml | 4 +- app/views/projects/graphs/charts.html.haml | 2 +- app/views/projects/hook_logs/_index.html.haml | 4 +- app/views/projects/hook_logs/show.html.haml | 2 +- app/views/projects/hooks/edit.html.haml | 2 +- app/views/projects/import/jira/show.html.haml | 39 +- app/views/projects/issues/_issue.html.haml | 1 + .../projects/issues/_issue_estimate.html.haml | 7 + .../projects/issues/_new_branch.html.haml | 2 +- .../issues/import_csv/_button.html.haml | 28 +- app/views/projects/issues/index.html.haml | 9 +- app/views/projects/issues/show.html.haml | 1 + app/views/projects/logs/empty_logs.html.haml | 2 +- .../projects/merge_requests/show.html.haml | 2 + app/views/projects/milestones/_form.html.haml | 4 +- .../projects/milestones/_milestone.html.haml | 1 - app/views/projects/new.html.haml | 14 +- .../pipeline_schedules/_form.html.haml | 2 +- .../projects/pipelines/_with_tabs.html.haml | 12 +- app/views/projects/pipelines/charts.html.haml | 2 +- app/views/projects/pipelines/index.html.haml | 1 + .../_built_in_templates.html.haml | 2 +- .../protected_branches/show.html.haml | 2 +- .../projects/protected_tags/show.html.haml | 2 +- .../registry/repositories/_tag.html.haml | 33 - .../registry/repositories/index.html.haml | 3 +- app/views/projects/services/_form.html.haml | 3 +- .../projects/services/alerts/_help.html.haml | 5 +- .../services/prometheus/_show.html.haml | 2 +- .../settings/access_tokens/index.html.haml | 2 +- .../projects/settings/ci_cd/_form.html.haml | 2 +- .../settings/integrations/show.html.haml | 6 +- .../operations/_external_dashboard.html.haml | 3 - .../settings/operations/_incidents.html.haml | 2 +- .../operations/_metrics_dashboard.html.haml | 5 + .../settings/operations/show.html.haml | 2 +- .../projects/snippets/_actions.html.haml | 2 +- app/views/projects/tags/_tag.html.haml | 6 +- app/views/projects/tags/new.html.haml | 4 +- .../projects/tags/releases/edit.html.haml | 4 +- app/views/projects/triggers/_index.html.haml | 2 +- app/views/projects/triggers/edit.html.haml | 2 +- .../projects/wikis/_main_links.html.haml | 9 - app/views/projects/wikis/_wiki_page.html.haml | 1 - app/views/projects/wikis/git_access.html.haml | 10 +- .../experience_levels/show.html.haml | 28 + app/views/shared/_broadcast_message.html.haml | 4 +- .../shared/_choose_avatar_button.html.haml | 5 +- app/views/shared/_custom_attributes.html.haml | 12 + app/views/shared/_field.html.haml | 5 +- app/views/shared/_file_highlight.html.haml | 2 +- .../shared/_file_picker_button.html.haml | 6 + app/views/shared/_group_form.html.haml | 4 +- .../_md_preview.html.haml | 2 +- .../_namespace_storage_limit_alert.html.haml | 26 + .../_new_merge_request_checkbox.html.haml | 2 +- app/views/shared/_promo.html.haml | 6 +- app/views/shared/_service_settings.html.haml | 10 +- app/views/shared/_visibility_level.html.haml | 2 +- app/views/shared/_visibility_radios.html.haml | 7 +- app/views/{projects => shared}/_zen.html.haml | 4 +- .../_created_container.html.haml | 2 +- .../shared/access_tokens/_form.html.haml | 2 +- .../blob/_markdown_buttons.html.haml | 4 +- app/views/shared/boards/_show.html.haml | 29 +- app/views/shared/deploy_keys/_form.html.haml | 2 +- app/views/shared/deploy_keys/_index.html.haml | 2 +- .../deploy_keys/_project_group_form.html.haml | 4 +- .../shared/deploy_tokens/_index.html.haml | 2 +- .../deploy_tokens/_new_deploy_token.html.haml | 2 +- .../shared/empty_states/_snippets.html.haml | 4 +- .../shared/empty_states/_wikis.html.haml | 19 +- app/views/shared/file_hooks/_index.html.haml | 2 +- .../form_elements/_description.html.haml | 4 +- app/views/shared/groups/_group.html.haml | 37 +- app/views/shared/issuable/_form.html.haml | 2 +- .../shared/issuable/_search_bar.html.haml | 2 + app/views/shared/issuable/_sidebar.html.haml | 3 +- .../issuable/_sidebar_assignees.html.haml | 15 +- .../shared/issuable/form/_metadata.html.haml | 8 +- .../milestones/_deprecation_message.html.haml | 4 +- .../shared/milestones/_form_dates.html.haml | 12 +- app/views/shared/milestones/_header.html.haml | 6 +- .../shared/milestones/_milestone.html.haml | 92 +- .../shared/milestones/_sidebar.html.haml | 56 +- app/views/shared/milestones/_top.html.haml | 27 +- app/views/shared/notes/_edit_form.html.haml | 4 +- app/views/shared/notes/_form.html.haml | 4 +- .../_custom_notifications.html.haml | 4 +- .../notifications/_new_button.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 12 +- app/views/shared/snippets/_form.html.haml | 8 +- app/views/shared/snippets/_header.html.haml | 6 +- .../shared/tokens/_scopes_list.html.haml | 2 +- app/views/shared/web_hooks/_hook.html.haml | 4 +- .../web_hooks/_title_and_docs.html.haml | 13 +- .../wikis/_form.html.haml | 23 +- app/views/shared/wikis/_main_links.html.haml | 9 + .../wikis/_pages_wiki_page.html.haml | 2 +- .../wikis/_sidebar.html.haml | 6 +- .../wikis/_sidebar_wiki_page.html.haml | 2 +- .../wikis/_wiki_directory.html.haml | 0 app/views/shared/wikis/_wiki_page.html.haml | 1 + .../{projects => shared}/wikis/edit.html.haml | 14 +- .../wikis/empty.html.haml | 0 .../wikis/history.html.haml | 7 +- .../wikis/pages.html.haml | 10 +- .../{projects => shared}/wikis/show.html.haml | 12 +- app/views/snippets/_actions.html.haml | 2 +- app/views/u2f/_authenticate.html.haml | 19 +- app/views/u2f/_register.html.haml | 2 +- app/views/users/_deletion_guidance.html.haml | 2 +- app/views/users/terms/index.html.haml | 6 +- app/workers/all_queues.yml | 259 + app/workers/authorized_keys_worker.rb | 1 + .../user_refresh_with_low_urgency_worker.rb | 1 + app/workers/authorized_projects_worker.rb | 2 +- app/workers/background_migration_worker.rb | 1 + app/workers/build_finished_worker.rb | 1 + app/workers/ci/build_report_result_worker.rb | 16 + .../cleanup_container_repository_worker.rb | 1 + app/workers/cluster_install_app_worker.rb | 1 + app/workers/cluster_patch_app_worker.rb | 1 + app/workers/cluster_update_app_worker.rb | 1 + app/workers/cluster_upgrade_app_worker.rb | 1 + ...luster_wait_for_app_installation_worker.rb | 1 + .../cluster_wait_for_app_update_worker.rb | 2 + ...ster_wait_for_ingress_ip_address_worker.rb | 1 + .../applications/activate_service_worker.rb | 2 + .../check_prometheus_health_worker.rb | 30 + .../applications/deactivate_service_worker.rb | 2 + .../clusters/applications/uninstall_worker.rb | 1 + .../wait_for_uninstall_app_worker.rb | 1 + app/workers/concerns/application_worker.rb | 27 +- .../concerns/gitlab/github_import/queue.rb | 11 + .../gitlab/jira_import/import_worker.rb | 2 +- .../concerns/project_import_options.rb | 2 +- .../concerns/reactive_cacheable_worker.rb | 1 + app/workers/concerns/worker_attributes.rb | 22 + .../container_expiration_policy_worker.rb | 2 + app/workers/create_commit_signature_worker.rb | 4 +- app/workers/create_evidence_worker.rb | 9 +- app/workers/create_pipeline_worker.rb | 1 + app/workers/delete_stored_files_worker.rb | 1 + app/workers/delete_user_worker.rb | 3 +- app/workers/email_receiver_worker.rb | 2 +- .../expire_build_instance_artifacts_worker.rb | 2 +- app/workers/export_csv_worker.rb | 1 + app/workers/file_hook_worker.rb | 1 + app/workers/git_garbage_collect_worker.rb | 1 + .../github_import/advance_stage_worker.rb | 1 + app/workers/gitlab/import/stuck_import_job.rb | 82 + .../stuck_project_import_jobs_worker.rb | 22 + .../gitlab/jira_import/import_issue_worker.rb | 6 +- .../jira_import/stage/start_import_worker.rb | 1 - .../stuck_jira_import_jobs_worker.rb | 21 + .../gitlab/phabricator_import/base_worker.rb | 2 +- app/workers/gitlab_shell_worker.rb | 1 + app/workers/group_export_worker.rb | 1 + app/workers/group_import_worker.rb | 9 +- .../hashed_storage/project_migrate_worker.rb | 1 + .../hashed_storage/project_rollback_worker.rb | 1 + .../process_prometheus_alert_worker.rb | 16 +- app/workers/irker_worker.rb | 117 +- .../notification_service_worker.rb | 1 + app/workers/merge_worker.rb | 1 + .../dashboard/prune_old_annotations_worker.rb | 23 + .../schedule_annotations_prune_worker.rb | 23 + app/workers/new_note_worker.rb | 9 +- .../object_storage/background_move_worker.rb | 1 + .../object_storage/migrate_uploads_worker.rb | 1 + app/workers/pages_worker.rb | 1 + .../personal_access_tokens/expiring_worker.rb | 4 +- app/workers/pipeline_notification_worker.rb | 5 +- app/workers/pipeline_process_worker.rb | 1 + .../pipeline_update_ci_ref_status_worker.rb | 1 + app/workers/post_receive.rb | 1 + app/workers/process_commit_worker.rb | 2 +- app/workers/project_cache_worker.rb | 4 +- app/workers/project_export_worker.rb | 1 + app/workers/propagate_integration_worker.rb | 16 + app/workers/rebase_worker.rb | 1 + .../remove_expired_group_links_worker.rb | 6 +- app/workers/repository_check/batch_worker.rb | 2 + app/workers/repository_import_worker.rb | 7 +- .../repository_remove_remote_worker.rb | 1 + .../repository_update_remote_mirror_worker.rb | 1 + app/workers/stuck_import_jobs_worker.rb | 70 +- .../todos_destroyer/entity_leave_worker.rb | 2 + .../update_external_pull_requests_worker.rb | 1 + app/workers/update_merge_requests_worker.rb | 1 + app/workers/web_hook_worker.rb | 1 + babel.config.js | 13 +- bin/background_jobs_sk | 2 +- bin/background_jobs_sk_cluster | 2 +- bin/secpick | 26 +- bin/web | 21 +- cable/config.ru | 2 + config/application.rb | 12 +- config/dependency_decisions.yml | 6 + config/feature_categories.yml | 4 +- config/gitlab.yml.example | 12 +- config/initializers/01_secret_token.rb | 2 + config/initializers/1_settings.rb | 24 +- config/initializers/7_prometheus_metrics.rb | 11 +- config/initializers/8_devise.rb | 7 +- config/initializers/action_cable.rb | 10 + .../actionpack_generate_old_csrf_token.rb | 33 + config/initializers/bullet.rb | 11 +- config/initializers/database_config.rb | 2 +- config/initializers/doorkeeper.rb | 5 - config/initializers/fill_shards.rb | 5 +- config/initializers/google_api_client.rb | 19 +- config/initializers/grape_validators.rb | 1 + ...tive_record_relation_methods_with_limit.rb | 8 +- config/initializers/lograge.rb | 6 +- config/initializers/peek.rb | 2 + .../{rack_attack_new.rb => rack_attack.rb} | 0 config/initializers/zz_metrics.rb | 2 + config/locales/doorkeeper.en.yml | 2 + config/locales/en.yml | 1 + config/prometheus/self_monitoring_default.yml | 30 + config/pseudonymizer.yml | 1 - config/routes.rb | 13 +- config/routes/dashboard.rb | 8 +- config/routes/group.rb | 3 +- config/routes/import.rb | 8 + config/routes/merge_requests.rb | 9 + config/routes/project.rb | 38 +- config/settings.rb | 6 + config/sidekiq_queues.yml | 10 + config/webpack.config.js | 23 +- config/webpack.vendor.config.js | 20 +- danger/bundle_size/Dangerfile | 38 + danger/changelog/Dangerfile | 21 +- danger/commit_messages/Dangerfile | 16 +- danger/roulette/Dangerfile | 76 +- danger/specs/Dangerfile | 27 +- danger/telemetry/Dangerfile | 15 +- db/fixtures/development/10_merge_requests.rb | 2 +- db/fixtures/development/17_cycle_analytics.rb | 4 + db/gitlab_structure.sql | 4 + ...0180101160629_create_prometheus_metrics.rb | 20 - ...hange_project_id_for_prometheus_metrics.rb | 11 - ...220145_add_pages_https_only_to_projects.rb | 9 - ...dd_confidential_note_events_to_services.rb | 16 - ...add_commits_count_to_merge_request_diff.rb | 29 - ...ange_default_value_for_pages_https_only.rb | 13 - ...13220114_rework_redirect_routes_indexes.rb | 60 - ...42_add_default_project_creation_setting.rb | 19 - ...02_add_project_creation_level_to_groups.rb | 17 - ...15201419_add_index_updated_at_to_issues.rb | 15 - .../20180116193854_create_lfs_file_locks.rb | 30 - ...119135717_add_uploader_index_to_uploads.rb | 20 - ...0180119160751_optimize_ci_job_artifacts.rb | 23 - ...o_devops_domain_to_application_settings.rb | 15 - .../20180125214301_create_user_callouts.rb | 16 - ...80129193323_add_uploads_builder_context.rb | 16 - ...straint_to_trending_projects_project_id.rb | 19 - ...0180201110056_add_foreign_keys_to_todos.rb | 38 - ...5907_migrate_remaining_issues_closed_at.rb | 56 - ...00543_reset_events_primary_key_sequence.rb | 21 - ...le_populate_untracked_uploads_if_needed.rb | 47 - .../20180209115333_create_chatops_tables.rb | 26 - .../20180209165249_add_closed_by_to_issues.rb | 20 - ...nal_ip_to_clusters_applications_ingress.rb | 11 - ..._index_to_projects_for_index_only_scans.rb | 21 - db/migrate/20180214093516_create_badges.rb | 21 - ...05_create_clusters_applications_runners.rb | 32 - .../20180215181245_users_name_lower_index.rb | 21 - ...216120000_add_pages_domain_verification.rb | 8 - ...0010_add_pages_domain_verified_at_index.rb | 15 - ...llow_domain_verification_to_be_disabled.rb | 7 - ...16120030_add_pages_domain_enabled_until.rb | 7 - ...40_add_pages_domain_enabled_until_index.rb | 17 - ...pages_domains_verification_grace_period.rb | 26 - ...53455_add_maximum_timeout_to_ci_runners.rb | 9 - ...ow_maintainer_to_push_to_merge_requests.rb | 18 - ...20180222043024_add_ip_address_to_runner.rb | 9 - ...3_create_user_interacted_projects_table.rb | 20 - ...ks_and_services_to_application_settings.rb | 18 - ...050030_add_checksum_to_ci_job_artifacts.rb | 7 - ...0180227182112_add_group_id_to_boards_ce.rb | 36 - ..._include_private_contributions_to_users.rb | 7 - ...1010859_create_ci_builds_metadata_table.rb | 20 - ...e_foreign_keys_on_clusters_applications.rb | 51 - ...0180305095250_create_internal_ids_table.rb | 15 - ...20180305144721_add_privileged_to_runner.rb | 18 - ...sing_indexes_acts_as_taggable_on_engine.rb | 21 - ...ame_id_index_on_ci_build_trace_sections.rb | 17 - ...r_internal_regex_to_application_setting.rb | 15 - ...le_commits_count_for_merge_request_diff.rb | 30 - ...0309160427_add_partial_indexes_on_todos.rb | 29 - ...service_timeout_to_application_settings.rb | 18 - ...and_footer_banners_to_appearances_table.rb | 20 - ...h_mutual_tls_fields_to_project_settings.rb | 20 - .../20180319190020_create_deploy_tokens.rb | 21 - ...9_add_indexes_for_user_activity_queries.rb | 18 - ..._merge_request_to_notification_settings.rb | 9 - ...0326202229_create_ci_build_trace_chunks.rb | 17 - ...27101207_remove_index_from_events_table.rb | 18 - ..._add_issue_due_to_notification_settings.rb | 9 - ...403035759_create_project_ci_cd_settings.rb | 62 - ...0405142733_create_project_deploy_tokens.rb | 16 - ...54_rename_users_rss_token_to_feed_token.rb | 16 - ...te_missing_namespace_for_internal_users.rb | 66 - ...ther_scope_columns_to_internal_id_table.rb | 15 - ..._index_constraints_to_internal_id_table.rb | 41 - ...d_tmp_stage_priority_index_to_ci_builds.rb | 16 - .../20180417101940_add_index_to_ci_stage.rb | 9 - ...dd_index_to_ci_job_artifacts_file_store.rb | 16 - ...20010016_add_pipeline_build_foreign_key.rb | 27 - ...420010616_cleanup_build_stage_migration.rb | 63 - ...d_pages_access_level_to_project_feature.rb | 20 - ...d_enforce_terms_to_application_settings.rb | 10 - ...134533_create_application_setting_terms.rb | 15 - ...160449_add_pipeline_iid_to_ci_pipelines.rb | 13 - .../20180425075446_create_term_agreements.rb | 29 - ...re_commits_count_for_merge_request_diff.rb | 27 - ...9_add_index_constraints_to_pipeline_iid.rb | 15 - ...180426102016_add_accepted_term_to_users.rb | 23 - ...430101916_add_runner_type_to_ci_runners.rb | 9 - ...180502122856_create_project_mirror_data.rb | 32 - .../20180503131624_create_remote_mirrors.rb | 36 - ...mirror_available_overridden_to_projects.rb | 15 - ...7_add_index_to_namespaces_runners_token.rb | 21 - ..._missing_columns_to_project_mirror_data.rb | 19 - ...5054_add_indexes_to_project_mirror_data.rb | 18 - ...0503193542_add_indexes_to_remote_mirror.rb | 17 - ...irror_available_to_application_settings.rb | 17 - ...20_enable_prometheus_metrics_by_default.rb | 11 - ...20180504195842_project_name_lower_index.rb | 24 - ...make_remote_mirrors_disabled_by_default.rb | 11 - ...aint_to_project_mirror_data_foreign_key.rb | 21 - ...to_project_mirror_data_project_id_index.rb | 31 - ...20180508135515_set_runner_type_not_null.rb | 9 - ...724_add_index_on_ci_runners_runner_type.rb | 16 - ...58_create_clusters_applications_jupyter.rb | 25 - ...0515005612_add_squash_to_merge_requests.rb | 20 - .../20180515121227_create_notes_diff_files.rb | 27 - ...l_constraints_to_project_authorizations.rb | 24 - ...merge_requests_allow_maintainer_to_push.rb | 17 - ...uests_target_id_iid_state_partial_index.rb | 27 - ...0529093006_ensure_remote_mirror_columns.rb | 28 - ...0530135500_add_index_to_stages_position.rb | 15 - ...20180531185349_add_repository_languages.rb | 30 - ...e_default_value_for_dsa_key_restriction.rb | 16 - ..._deploy_strategy_to_project_auto_devops.rb | 19 - ..._push_events_branch_filter_to_web_hooks.rb | 12 - .../20180608091413_add_group_to_todos.rb | 36 - ...name_merge_requests_allow_collaboration.rb | 22 - ...dd_columns_for_helm_tiller_certificates.rb | 14 - ...3081317_create_ci_builds_runner_session.rb | 23 - ...0625113853_create_import_export_uploads.rb | 18 - ...add_index_on_deployable_for_deployments.rb | 18 - ...80628124813_alter_web_hook_logs_indexes.rb | 28 - .../20180629153018_create_site_statistics.rb | 18 - .../20180702124358_remove_orphaned_routes.rb | 49 - .../20180702134423_generate_missing_routes.rb | 144 - ...rd_party_offers_to_application_settings.rb | 18 - ...945_add_file_format_to_ci_job_artifacts.rb | 7 - ...key_from_notification_settings_to_users.rb | 30 - ...711103851_drop_duplicate_protected_tags.rb | 38 - ...20180711103922_add_protected_tags_index.rb | 18 - .../20180713092803_create_user_statuses.rb | 22 - .../20180717125853_remove_restricted_todos.rb | 31 - ...stics_visibility_to_application_setting.rb | 20 - ..._max_input_size_to_application_settings.rb | 11 - ...0722103201_add_private_profile_to_users.rb | 10 - ...preview_enabled_to_application_settings.rb | 20 - ...0726172057_create_resource_label_events.rb | 18 - ...ove_redundant_status_index_on_ci_builds.rb | 17 - ...ssh_key_message_to_application_settings.rb | 21 - ...ge_default_of_auto_devops_instance_wide.rb | 15 - ..._auto_devops_instance_wide_for_everyone.rb | 15 - ...0180814153625_add_commit_email_to_users.rb | 37 - ...on_type_to_cluster_platforms_kubernetes.rb | 11 - ...9_add_file_location_to_ci_job_artifacts.rb | 9 - ...rtial_index_to_ci_builds_artifacts_file.rb | 16 - .../20180815175440_add_index_on_list_type.rb | 16 - ...uests_whitelist_to_application_settings.rb | 11 - ...164905_add_common_to_prometheus_metrics.rb | 17 - ..._index_on_common_for_prometheus_metrics.rb | 17 - ...908_add_identifier_to_prometheus_metric.rb | 11 - ...dex_for_identifier_to_prometheus_metric.rb | 17 - .../20180831164910_import_common_metrics.rb | 15 - ..._config_source_status_index_to_pipeline.rb | 17 - ...d_resource_label_event_reference_fields.rb | 13 - ...20180902070406_create_group_group_links.rb | 32 - ...er_ping_consent_to_application_settings.rb | 19 - ...dd_legacy_abac_to_cluster_providers_gcp.rb | 17 - ..._add_attr_encrypted_columns_to_web_hook.rb | 17 - ..._token_digest_to_personal_access_tokens.rb | 19 - ..._token_digest_on_personal_access_tokens.rb | 17 - .../20180912111628_add_knative_application.rb | 22 - ...9_add_index_pipelines_project_id_source.rb | 20 - ...max_patch_bytes_to_application_settings.rb | 25 - ...924190739_add_scheduled_at_to_ci_builds.rb | 9 - ...01039_add_partial_index_to_scheduled_at.rb | 18 - .../20180925200829_create_user_preferences.rb | 31 - ...o_project_deploy_tokens_deploy_token_id.rb | 17 - ...172433_remove_restricted_todos_with_cte.rb | 32 - ...927_add_index_to_lfs_objects_file_store.rb | 17 - ...181005125926_add_index_to_uploads_store.rb | 17 - ...6004100_import_common_metrics_nginx_vts.rb | 13 - ...8_create_clusters_kubernetes_namespaces.rb | 26 - ...5606_create_board_project_recent_visits.rb | 19 - .../20181014203236_create_cluster_groups.rb | 17 - ...15155839_add_finished_at_to_deployments.rb | 15 - ...0181016141739_add_status_to_deployments.rb | 33 - ...152238_create_board_group_recent_visits.rb | 20 - ...1017001059_add_cluster_type_to_clusters.rb | 18 - db/migrate/20181019032400_add_shards_table.rb | 11 - .../20181019032408_add_repositories_table.rb | 15 - ...projects_pool_repository_id_foreign_key.rb | 22 - ...5539_add_index_on_status_to_deployments.rb | 19 - ...builds_duration_to_application_settings.rb | 11 - ...index_for_legacy_successful_deployments.rb | 18 - ..._email_hostname_to_application_settings.rb | 13 - ...ate_snippets_access_level_default_value.rb | 42 - ...d_first_day_of_week_to_user_preferences.rb | 9 - ...rst_day_of_week_to_application_settings.rb | 16 - ...46_add_missing_indexes_for_foreign_keys.rb | 61 - ...ed_ci_variables_to_application_settings.rb | 17 - ...181031190558_drop_fk_gcp_clusters_table.rb | 37 - .../20181031190559_drop_gcp_clusters_table.rb | 53 - ...1101144347_add_index_for_stuck_mr_query.rb | 16 - ...eate_clusters_applications_cert_manager.rb | 21 - ...20181106135939_add_index_to_deployments.rb | 17 - ...91549_cleanup_environments_external_url.rb | 18 - ...rop_default_value_on_status_deployments.rb | 14 - ...add_encrypted_runners_token_to_settings.rb | 13 - .../20181116050532_knative_external_ip.rb | 16 - ...d_encrypted_runners_token_to_namespaces.rb | 13 - ...add_encrypted_runners_token_to_projects.rb | 15 - ...39_add_merge_request_id_to_ci_pipelines.rb | 13 - ..._add_indexes_to_ci_builds_and_pipelines.rb | 44 - ...1_rename_repositories_pool_repositories.rb | 11 - ...eign_key_to_ci_pipelines_merge_requests.rb | 22 - ...51656_add_token_encrypted_to_ci_runners.rb | 11 - ..._partial_index_on_project_id_and_status.rb | 33 - ...emove_redundant_ci_builds_partial_index.rb | 33 - ...81122160027_create_project_repositories.rb | 18 - ...ll_constraint_pool_repository_disk_path.rb | 9 - .../20181123144235_create_suggestions.rb | 24 - ...ents_index_on_project_id_and_created_at.rb | 32 - ...153547_remove_notes_index_on_updated_at.rb | 32 - ...1128123704_add_state_to_pool_repository.rb | 23 - ...104854_add_token_encrypted_to_ci_builds.rb | 15 - ..._add_index_to_ci_builds_token_encrypted.rb | 17 - ...02526_add_project_bfg_object_map_column.rb | 13 - ...5171941_create_project_daily_statistics.rb | 18 - ..._add_name_author_id_and_sha_to_releases.rb | 15 - ..._add_author_id_index_and_fk_to_releases.rb | 21 - ...41_backfill_releases_name_with_tag_name.rb | 17 - ...12171634_create_error_tracking_settings.rb | 19 - ...219145521_add_options_to_build_metadata.rb | 15 - ...181228175414_create_releases_link_table.rb | 21 - ...chema.rb => 20181228175414_init_schema.rb} | 1633 +- ...39_create_merge_request_assignees_table.rb | 2 + ...190402150158_backport_enterprise_schema.rb | 2 + ...2144316_create_milestone_releases_table.rb | 2 + ...90927055500_create_description_versions.rb | 2 + ...1118053631_add_group_deletion_schedules.rb | 2 + ...19_create_gitlab_subscription_histories.rb | 2 + ...2_drop_analytics_repository_files_table.rb | 2 + ...analytics_repository_file_commits_table.rb | 2 + ...p_analytics_repository_file_edits_table.rb | 2 + .../20200214025454_add_canonical_emails.rb | 2 + ...5225103_drop_forked_project_links_table.rb | 2 + .../20200227165129_create_user_details.rb | 2 + ...x_on_author_id_and_created_at_to_events.rb | 5 +- ...0200311093210_create_user_highest_roles.rb | 2 + ...on_skipped_pipeline_to_project_settings.rb | 9 + ...200326122700_create_diff_note_positions.rb | 2 + .../20200330203826_drop_fk_in_ci_ref.rb | 32 + db/migrate/20200330203837_recreate_ci_ref.rb | 45 + ...331103637_add_ci_ref_id_to_ci_pipelines.rb | 19 + .../20200331113728_add_index_to_ci_ref_id.rb | 16 + .../20200331113738_add_fk_to_ci_ref_id.rb | 18 + ...ect_compliance_framework_settings_table.rb | 2 + ...7182205_create_partitioned_foreign_keys.rb | 2 + ...create_project_repository_storage_moves.rb | 2 + ...20200408125046_create_ci_freeze_periods.rb | 2 + ..._create_status_page_published_incidents.rb | 2 + ...17044453_create_alert_management_alerts.rb | 2 + ...420104303_add_group_import_states_table.rb | 2 + ..._create_metrics_users_starred_dashboard.rb | 2 + ..._pipeline_id_from_ci_pipeline_variables.rb | 18 + ..._index_on_pipeline_id_from_ci_variables.rb | 18 + ...0422091541_create_ci_instance_variables.rb | 2 + ...9_create_nuget_dependency_link_metadata.rb | 4 +- .../20200429023324_add_composer_metadata.rb | 12 + ...0430123614_create_project_access_tokens.rb | 14 + ...30130048_create_packages_nuget_metadata.rb | 2 + ...20200430174637_create_group_deploy_keys.rb | 38 + ...gistry_features_to_application_settings.rb | 2 +- ...move_ultraauth_provider_from_identities.rb | 18 + ..._check_endpoint_to_application_settings.rb | 34 + ..._pause_indexing_to_application_settings.rb | 19 + ...orages_weighted_to_application_settings.rb | 13 + .../20200511181027_create_test_reports.rb | 18 + ..._add_author_foreign_key_to_test_reports.rb | 19 + ...dd_pipeline_foreign_key_to_test_reports.rb | 19 + ..._ci_job_artifacts_for_terraform_reports.rb | 18 + ...x_on_name_type_eq_ci_build_to_ci_builds.rb | 36 + ..._to_personal_access_token_impersonation.rb | 26 + ...te_events_constraint_to_support_epic_id.rb | 24 + ...dd_error_message_column_to_jira_imports.rb | 22 + ...519115908_add_epics_confidential_index.rb} | 6 +- ...e_level_variables_column_to_plan_limits.rb | 9 + ..._container_expiration_policies_defaults.rb | 23 + ...00520103514_add_todo_resolved_by_action.rb | 19 + ...dd_experience_level_to_user_preferences.rb | 9 + ...create_alert_management_alert_assignees.rb | 24 + ..._id_on_alert_management_alert_assignees.rb | 19 + ...id_on_alert_mangagement_alert_assignees.rb | 19 + ...235146_add_index_on_snippet_type_and_id.rb | 17 + .../20200525114553_rename_user_type_index.rb | 19 + ...0526013844_add_alert_events_to_services.rb | 19 + ...0714_change_partial_indexes_on_services.rb | 26 + ...ll_constraint_on_group_import_state_jid.rb | 13 + ...3844_add_issues_last_edited_by_id_index.rb | 19 + ..._create_operations_feature_flags_issues.rb | 15 + ...foreign_key_to_ops_feature_flags_issues.rb | 19 + ...27092027_add_link_type_to_release_links.rb | 19 + ...135313_add_requirements_build_reference.rb | 23 + ...13_create_ci_build_report_results_table.rb | 13 + ...key_to_build_id_on_build_report_results.rb | 19 + ...y_to_project_id_on_build_report_results.rb | 19 + ...te_alert_management_alert_user_mentions.rb | 20 + .../20200527211000_add_max_import_size.rb | 15 + ...0200528054112_add_index_to_package_name.rb | 19 + ...ser_id_status_ref_index_to_ci_pipelines.rb | 27 + ...ve_not_null_from_external_dashboard_url.rb | 12 + ...ard_timezone_to_project_metrics_setting.rb | 12 + ...onstraint_name_on_resource_state_events.rb | 16 + ..._pat_expiration_to_application_settings.rb | 9 + ...143628_create_project_security_settings.rb | 29 + ...604145731_create_board_user_preferences.rb | 22 + ...s_foreign_key_to_board_user_preferences.rb | 19 + ...s_foreign_key_to_board_user_preferences.rb | 19 + ...to_alert_management_alert_user_mentions.rb | 19 + ...05093113_add_ip_address_to_audit_events.rb | 9 + ...lt_project_incident_management_settings.rb | 13 + ...ull_constraint_from_weight_events_table.rb | 9 + ..._constraint_from_milestone_events_table.rb | 9 + ...null_constraint_from_state_events_table.rb | 9 + ...ident_settings_to_all_existing_projects.rb | 40 + ...615083635_add_composer_json_to_metadata.rb | 9 + ...ts_foreign_key_to_project_access_tokens.rb | 17 + ...en_foreign_key_to_project_access_tokens.rb | 17 + ...15232735_add_index_to_composer_metadata.rb | 17 + ...et_confidential_note_events_on_webhooks.rb | 23 - ...121225_remove_redundant_pipeline_stages.rb | 58 - ...et_confidential_note_events_on_services.rb | 23 - ...6_change_author_id_to_not_null_in_todos.rb | 26 - ...28_add_tmp_partial_null_index_to_builds.rb | 14 - ...12101928_schedule_build_stage_migration.rb | 14 - ...move_tmp_partial_null_index_from_builds.rb | 14 - ...020_fill_pages_domain_verification_code.rb | 41 - ...030_enqueue_verify_pages_domain_workers.rb | 16 - ...emove_empty_extern_uid_auth0_identities.rb | 25 - ...27_build_user_interacted_projects_table.rb | 139 - ...53_change_project_namespace_id_not_null.rb | 29 - ...0_remove_permanent_from_redirect_routes.rb | 33 - ...ate_create_trace_artifact_sidekiq_queue.rb | 13 - ...64012_add_path_index_to_redirect_routes.rb | 31 - ...ipeline_for_merge_request_sidekiq_queue.rb | 15 - ...1928_reschedule_builds_stages_migration.rb | 33 - ...08143355_cleanup_users_rss_token_rename.rb | 14 - ...populate_missing_project_ci_cd_settings.rb | 30 - ...0080616_schedule_stages_index_migration.rb | 29 - .../20180424151928_fill_file_store.rb | 72 - ...runner_type_for_ci_runners_post_migrate.rb | 24 - ...83701_set_minimal_project_build_timeout.rb | 21 - ...nstraint_to_project_features_project_id.rb | 43 - ...nstraint_to_project_features_project_id.rb | 21 - ...20180514161336_remove_gemnasium_service.rb | 15 - ...equests_allow_maintainer_to_push_rename.rb | 18 - ...52628_schedule_to_archive_legacy_traces.rb | 35 - ...ate_object_storage_upload_sidekiq_queue.rb | 16 - ...23514_cleanup_stages_position_migration.rb | 45 - ...rge_requests_allow_collaboration_rename.rb | 20 - ...o_projects_for_last_repository_check_at.rb | 18 - ...7_enqueue_fix_cross_project_label_links.rb | 30 - .../20180704145007_update_project_indexes.rb | 23 - ...20180706223200_populate_site_statistics.rb | 25 - ...9195358_migrate_null_wiki_access_levels.rb | 32 - ...grate_legacy_artifacts_to_job_artifacts.rb | 32 - ...0816193530_rename_login_root_namespaces.rb | 22 - ...80826111825_recalculate_site_statistics.rb | 27 - ..._schedule_digest_personal_access_tokens.rb | 28 - ...0180914162043_encrypt_web_hooks_columns.rb | 33 - ...iq_throttling_from_application_settings.rb | 17 - ...remove_wikis_count_from_site_statistics.rb | 6 - .../20181008145341_steal_encrypt_columns.rb | 15 - ...08145359_remove_web_hooks_token_and_url.rb | 10 - .../20181008200441_remove_circuit_breaker.rb | 32 - ...ackfill_store_project_full_path_in_repo.rb | 27 - ...remove_koding_from_application_settings.rb | 17 - ...e_populate_cluster_kubernetes_namespace.rb | 18 - ...6091631_migrate_forbidden_redirect_uris.rb | 32 - ...4_fill_empty_finished_at_in_deployments.rb | 27 - ...emove_token_from_personal_access_tokens.rb | 11 - .../20181105201455_steal_fill_store_upload.rb | 31 - ...107054254_remove_restricted_todos_again.rb | 32 - ...11200_schedule_runners_token_encryption.rb | 38 - .../20181123042307_drop_site_statistics.rb | 22 - ...32_backfill_hashed_project_repositories.rb | 26 - ..._update_project_import_visibility_level.rb | 60 - ..._cluster_configure_worker_sidekiq_queue.rb | 15 - ...rate_saml_identities_to_scim_identities.rb | 2 +- ...ll_deployment_clusters_from_deployments.rb | 2 +- ...8132152_remove_namespaces_trial_ends_on.rb | 27 + ...ackfill_status_page_published_incidents.rb | 48 + ...chedule_fix_ruby_object_in_audit_events.rb | 41 + ...ing_at_to_metrics_dashboard_annotations.rb | 18 + ...t_id_and_artifacts_expireatandidpartial.rb | 35 + .../20200525121014_drop_users_ghost_column.rb | 29 + ...jobs_queue_to_stuck_project_import_jobs.rb | 15 + ...00407_seed_repository_storages_weighted.rb | 23 + ...322_drop_vulnerability_confidence_index.rb | 20 + ...lnerability_occurrence_confidence_index.rb | 20 + ...d_merge_request_partial_index_to_events.rb | 24 + ...602013900_add_limit_to_designs_filename.rb | 17 + ...ap_designs_filename_length_to_new_limit.rb | 40 + ...t_and_found_group_and_orphaned_projects.rb | 178 + ..._backfill_imported_snippet_repositories.rb | 47 + ...d_created_at_and_source_to_ci_pipelines.rb | 19 + ...ex_on_locked_state_id_to_merge_requests.rb | 19 + db/structure.sql | 793 +- doc/.vale/gitlab/Acronyms.yml | 71 + doc/.vale/gitlab/BadgeCapitalization.yml | 4 +- doc/.vale/gitlab/British.yml | 6 +- doc/.vale/gitlab/CodeblockFences.yml | 13 + doc/.vale/gitlab/Contractions.yml | 4 +- doc/.vale/gitlab/CurlStringsQuoted.yml | 13 + doc/.vale/gitlab/FirstPerson.yml | 5 +- doc/.vale/gitlab/InternalLinkExtension.yml | 4 +- doc/.vale/gitlab/LatinTerms.yml | 6 +- doc/.vale/gitlab/MeaningfulLinkWords.yml | 15 + doc/.vale/gitlab/MergeConflictMarkers.yml | 13 + doc/.vale/gitlab/OxfordComma.yml | 4 +- doc/.vale/gitlab/Profanity.yml | 30 - doc/.vale/gitlab/ReferenceLinks.yml | 3 + doc/.vale/gitlab/RelativeLinks.yml | 4 +- doc/.vale/gitlab/Repetition.yml | 3 + doc/.vale/gitlab/SentenceLength.yml | 13 + doc/.vale/gitlab/SentenceSpacing.yml | 2 + doc/.vale/gitlab/Spelling.yml | 3 + doc/.vale/gitlab/SubstitutionWarning.yml | 4 + doc/.vale/gitlab/Substitutions.yml | 3 + doc/.vale/gitlab/VersionText.yml | 2 + doc/.vale/gitlab/spelling-exceptions.txt | 140 +- doc/README.md | 4 +- doc/administration/audit_events.md | 26 +- doc/administration/auth/README.md | 12 +- doc/administration/auth/authentiq.md | 3 + doc/administration/auth/cognito.md | 11 + doc/administration/auth/crowd.md | 3 + doc/administration/auth/google_secure_ldap.md | 218 +- .../img/gitlab_ou.png | Bin 11991 -> 0 bytes .../img/ldap_ou.gif | Bin 222162 -> 0 bytes .../img/user_auth.gif | Bin 110971 -> 0 bytes .../how_to_configure_ldap_gitlab_ce/index.md | 272 +- .../img/admin_group.png | Bin 17543 -> 0 bytes .../img/group_link_final.png | Bin 14524 -> 0 bytes .../img/group_linking.gif | Bin 1328162 -> 0 bytes .../img/manual_permissions.gif | Bin 1029427 -> 0 bytes .../img/multi_login.gif | Bin 180218 -> 0 bytes .../how_to_configure_ldap_gitlab_ee/index.md | 124 +- doc/administration/auth/jwt.md | 3 + doc/administration/auth/ldap-ee.md | 416 +- .../auth/ldap-troubleshooting.md | 654 +- doc/administration/auth/ldap.md | 554 +- .../auth/ldap/google_secure_ldap.md | 222 + .../img/google_secure_ldap_add_step_1.png | Bin .../img/google_secure_ldap_add_step_2.png | Bin .../google_secure_ldap_client_settings.png | Bin .../auth/ldap/img/multi_login.gif | Bin 0 -> 321518 bytes doc/administration/auth/ldap/index.md | 756 + .../auth/ldap/ldap-troubleshooting.md | 678 + doc/administration/auth/oidc.md | 7 +- doc/administration/auth/okta.md | 9 +- doc/administration/auth/smartcard.md | 12 +- doc/administration/compliance.md | 4 +- doc/administration/environment_variables.md | 12 +- doc/administration/external_database.md | 44 +- .../external_pipeline_validation.md | 7 + doc/administration/feature_flags.md | 17 +- .../background_verification.md | 7 + .../disaster_recovery/bring_primary_back.md | 7 + .../geo/disaster_recovery/index.md | 42 +- .../geo/disaster_recovery/planned_failover.md | 9 +- .../geo/replication/configuration.md | 9 +- .../geo/replication/database.md | 17 +- .../geo/replication/datatypes.md | 24 +- .../geo/replication/docker_registry.md | 13 +- .../geo/replication/external_database.md | 11 +- doc/administration/geo/replication/faq.md | 7 + .../geo/replication/geo_validation_tests.md | 15 +- doc/administration/geo/replication/index.md | 17 +- .../geo/replication/location_aware_git_url.md | 9 +- .../geo/replication/multiple_servers.md | 11 +- .../geo/replication/object_storage.md | 9 +- .../geo/replication/remove_geo_node.md | 7 + .../geo/replication/security_review.md | 11 +- .../geo/replication/troubleshooting.md | 17 +- doc/administration/geo/replication/tuning.md | 7 + .../geo/replication/updating_the_geo_nodes.md | 7 + .../geo/replication/using_a_geo_server.md | 7 + .../replication/version_specific_updates.md | 13 +- doc/administration/git_annex.md | 2 +- doc/administration/git_protocol.md | 8 +- doc/administration/gitaly/index.md | 458 +- doc/administration/gitaly/praefect.md | 72 +- doc/administration/gitaly/reference.md | 9 +- .../high_availability/consul.md | 4 +- .../high_availability/database.md | 1097 +- .../high_availability/gitaly.md | 9 +- .../high_availability/gitlab.md | 8 +- .../high_availability/load_balancer.md | 12 +- .../high_availability/monitoring_node.md | 4 +- doc/administration/high_availability/nfs.md | 10 +- .../high_availability/pgbouncer.md | 121 +- doc/administration/high_availability/redis.md | 6 +- doc/administration/housekeeping.md | 2 +- doc/administration/incoming_email.md | 14 +- doc/administration/index.md | 4 +- doc/administration/instance_limits.md | 42 +- doc/administration/integration/plantuml.md | 15 + doc/administration/job_artifacts.md | 58 +- doc/administration/job_logs.md | 24 +- doc/administration/lfs/index.md | 2 +- doc/administration/libravatar.md | 2 +- doc/administration/logs.md | 74 +- doc/administration/merge_request_diffs.md | 2 +- .../monitoring/github_imports.md | 6 + .../gitlab_self_monitoring_project/index.md | 24 +- doc/administration/monitoring/index.md | 6 + doc/administration/monitoring/ip_whitelist.md | 6 + .../performance/gitlab_configuration.md | 6 + .../performance/grafana_configuration.md | 8 +- .../img/request_profiling_token.png | Bin 17396 -> 0 bytes .../monitoring/performance/index.md | 6 + .../monitoring/performance/performance_bar.md | 8 +- .../performance/request_profiling.md | 46 +- .../monitoring/prometheus/gitlab_metrics.md | 120 +- .../monitoring/prometheus/index.md | 2 +- .../monitoring/prometheus/node_exporter.md | 25 +- .../prometheus/pgbouncer_exporter.md | 29 +- .../prometheus/postgres_exporter.md | 72 +- .../monitoring/prometheus/redis_exporter.md | 23 +- doc/administration/object_storage.md | 88 +- .../operations/extra_sidekiq_processes.md | 15 +- .../operations/fast_ssh_key_lookup.md | 6 +- .../operations/filesystem_benchmarking.md | 2 +- doc/administration/operations/puma.md | 15 +- .../operations/ssh_certificates.md | 2 +- doc/administration/operations/unicorn.md | 4 +- .../packages/container_registry.md | 62 +- .../packages/dependency_proxy.md | 8 +- doc/administration/packages/index.md | 8 + doc/administration/pages/index.md | 88 +- doc/administration/pages/source.md | 14 +- doc/administration/postgresql/external.md | 41 + .../img/pg_ha_architecture.png | Bin .../postgresql/replication_and_failover.md | 1129 + doc/administration/postgresql/standalone.md | 65 + doc/administration/raketasks/github_import.md | 5 + doc/administration/raketasks/ldap.md | 4 +- doc/administration/raketasks/maintenance.md | 50 +- doc/administration/raketasks/praefect.md | 2 +- .../raketasks/project_import_export.md | 2 +- doc/administration/raketasks/storage.md | 2 +- .../raketasks/uploads/migrate.md | 2 +- .../raketasks/uploads/sanitize.md | 2 +- .../reference_architectures/10k_users.md | 9 +- .../reference_architectures/1k_users.md | 24 +- .../reference_architectures/25k_users.md | 37 +- .../reference_architectures/2k_users.md | 921 +- .../reference_architectures/3k_users.md | 31 +- .../reference_architectures/50k_users.md | 37 +- .../reference_architectures/5k_users.md | 31 +- .../reference_architectures/index.md | 43 +- .../troubleshooting.md | 329 + .../repository_storage_paths.md | 4 +- .../repository_storage_types.md | 4 +- doc/administration/server_hooks.md | 20 +- doc/administration/snippets/index.md | 2 +- doc/administration/timezone.md | 2 +- doc/administration/troubleshooting/debug.md | 2 +- .../troubleshooting/elasticsearch.md | 8 +- .../gitlab_rails_cheat_sheet.md | 63 +- doc/administration/troubleshooting/index.md | 20 + .../troubleshooting/kubernetes_cheat_sheet.md | 4 +- .../troubleshooting/postgresql.md | 22 +- doc/administration/troubleshooting/sidekiq.md | 23 +- .../troubleshooting/test_environments.md | 2 +- doc/administration/uploads.md | 4 +- doc/api/README.md | 28 +- doc/api/access_requests.md | 30 +- doc/api/admin_sidekiq_queues.md | 2 +- doc/api/appearance.md | 8 +- doc/api/applications.md | 6 +- doc/api/audit_events.md | 122 +- doc/api/avatar.md | 2 +- doc/api/award_emoji.md | 22 +- doc/api/boards.md | 71 +- doc/api/branches.md | 10 +- doc/api/broadcast_messages.md | 10 +- doc/api/commits.md | 6 +- doc/api/container_registry.md | 16 +- doc/api/custom_attributes.md | 8 +- doc/api/dependencies.md | 2 +- doc/api/deploy_keys.md | 10 +- doc/api/deploy_tokens.md | 14 +- doc/api/deployments.md | 2 +- doc/api/discussions.md | 78 +- doc/api/environments.md | 8 +- doc/api/epic_issues.md | 14 +- doc/api/epic_links.md | 10 +- doc/api/epics.md | 20 +- doc/api/error_tracking.md | 6 +- doc/api/events.md | 6 +- doc/api/feature_flag_specs.md | 25 +- doc/api/feature_flag_user_lists.md | 16 +- doc/api/feature_flags.md | 420 +- doc/api/feature_flags_legacy.md | 317 + doc/api/features.md | 10 +- doc/api/geo_nodes.md | 20 +- doc/api/graphql/index.md | 6 +- .../graphql/reference/gitlab_schema.graphql | 2130 +- doc/api/graphql/reference/gitlab_schema.json | 5929 +++- doc/api/graphql/reference/index.md | 279 +- doc/api/group_activity_analytics.md | 6 +- doc/api/group_badges.md | 12 +- doc/api/group_boards.md | 26 +- doc/api/group_clusters.md | 10 +- doc/api/group_import_export.md | 10 +- doc/api/group_labels.md | 20 +- doc/api/group_level_variables.md | 2 +- doc/api/group_milestones.md | 13 +- doc/api/groups.md | 85 +- doc/api/import.md | 2 +- doc/api/instance_level_ci_variables.md | 5 +- doc/api/issues.md | 56 +- doc/api/issues_statistics.md | 6 +- doc/api/jobs.md | 88 +- doc/api/keys.md | 10 +- doc/api/labels.md | 14 +- doc/api/lint.md | 2 +- doc/api/managed_licenses.md | 2 +- doc/api/markdown.md | 8 +- doc/api/members.md | 62 +- doc/api/merge_request_approvals.md | 30 +- doc/api/merge_requests.md | 36 +- doc/api/merge_trains.md | 10 +- doc/api/metrics_dashboard_annotations.md | 6 +- doc/api/milestones.md | 15 +- doc/api/namespaces.md | 8 +- doc/api/notes.md | 38 +- doc/api/notification_settings.md | 12 +- doc/api/oauth2.md | 11 +- doc/api/packages.md | 20 +- doc/api/pages.md | 8 +- doc/api/pages_domains.md | 30 +- doc/api/pipeline_schedules.md | 24 +- doc/api/project_aliases.md | 2 +- doc/api/project_badges.md | 12 +- doc/api/project_clusters.md | 10 +- doc/api/project_import_export.md | 16 +- doc/api/project_repository_storage_moves.md | 137 +- doc/api/project_snippets.md | 14 +- doc/api/project_templates.md | 4 +- doc/api/project_vulnerabilities.md | 16 +- doc/api/projects.md | 38 +- doc/api/protected_branches.md | 12 +- doc/api/protected_environments.md | 10 +- doc/api/protected_tags.md | 8 +- doc/api/releases/index.md | 27 +- doc/api/releases/links.md | 36 +- doc/api/remote_mirrors.md | 12 +- doc/api/repositories.md | 2 +- doc/api/repository_files.md | 18 +- doc/api/repository_submodules.md | 2 +- doc/api/resource_label_events.md | 12 +- doc/api/resource_milestone_events.md | 224 + doc/api/runners.md | 6 + doc/api/scim.md | 8 +- doc/api/search.md | 64 +- doc/api/services.md | 6 +- doc/api/settings.md | 9 +- doc/api/sidekiq_metrics.md | 8 +- doc/api/snippets.md | 18 +- doc/api/statistics.md | 2 +- doc/api/suggestions.md | 2 +- doc/api/system_hooks.md | 6 +- doc/api/tags.md | 4 +- doc/api/todos.md | 12 +- doc/api/users.md | 165 +- doc/api/v3_to_v4.md | 2 +- doc/api/version.md | 2 +- doc/api/visual_review_discussions.md | 2 +- doc/api/vulnerabilities.md | 12 +- doc/api/vulnerability_exports.md | 16 +- doc/api/vulnerability_findings.md | 10 +- doc/api/wikis.md | 6 +- .../how_to_configure_ldap_gitlab_ce/index.md | 4 +- .../how_to_configure_ldap_gitlab_ee/index.md | 4 +- doc/articles/index.md | 2 +- doc/ci/README.md | 48 +- doc/ci/caching/index.md | 9 +- doc/ci/chatops/README.md | 3 + .../bitbucket_integration.md | 3 + .../github_integration.md | 13 +- doc/ci/ci_cd_for_external_repos/index.md | 9 +- doc/ci/cloud_deployment/index.md | 67 +- .../img/dag_graph_example_clicked_v13_1.png | Bin 0 -> 54491 bytes .../img/dag_graph_example_v13_1.png | Bin 0 -> 54919 bytes doc/ci/directed_acyclic_graph/index.md | 36 +- doc/ci/docker/README.md | 3 + doc/ci/docker/using_docker_build.md | 73 +- doc/ci/docker/using_docker_images.md | 28 +- doc/ci/docker/using_kaniko.md | 11 +- doc/ci/enable_or_disable_ci.md | 3 + doc/ci/environments/deployment_safety.md | 106 + doc/ci/environments/environments_dashboard.md | 2 +- doc/ci/environments/incremental_rollouts.md | 30 +- doc/ci/environments/index.md | 31 +- doc/ci/environments/protected_environments.md | 2 + doc/ci/examples/README.md | 58 +- .../examples/artifactory_and_gitlab/index.md | 17 +- .../index.md | 3 + .../index.md | 5 +- doc/ci/examples/deployment/README.md | 5 +- .../deployment/composer-npm-deploy.md | 11 +- .../index.md | 13 +- .../end_to_end_testing_webdriverio/index.md | 3 + .../laravel_with_gitlab_and_envoy/index.md | 7 +- doc/ci/examples/php.md | 11 +- ...and-deploy-python-application-to-heroku.md | 3 + ...t-and-deploy-ruby-application-to-heroku.md | 3 + doc/ci/examples/test-clojure-application.md | 3 + doc/ci/examples/test-scala-application.md | 3 + .../index.md | 13 +- doc/ci/git_submodules.md | 3 + doc/ci/interactive_web_terminal/index.md | 9 +- doc/ci/introduction/index.md | 3 + doc/ci/jenkins/index.md | 25 +- doc/ci/junit_test_reports.md | 32 +- doc/ci/large_repositories/index.md | 13 + doc/ci/merge_request_pipelines/index.md | 7 +- .../pipelines_for_merged_results/index.md | 13 +- .../merge_trains/index.md | 15 +- doc/ci/metrics_reports.md | 7 +- doc/ci/migration/circleci.md | 332 + doc/ci/multi_project_pipelines.md | 21 +- doc/ci/parent_child_pipelines.md | 9 +- .../img/code_coverage_graph_v13_1.png | Bin 0 -> 29299 bytes doc/ci/pipelines/index.md | 15 +- doc/ci/pipelines/job_artifacts.md | 35 +- doc/ci/pipelines/pipeline_architectures.md | 3 + doc/ci/pipelines/schedules.md | 3 + doc/ci/pipelines/settings.md | 41 +- doc/ci/quick_start/README.md | 7 +- doc/ci/review_apps/index.md | 15 +- doc/ci/runners/README.md | 506 +- doc/ci/services/README.md | 3 + doc/ci/services/mysql.md | 5 +- doc/ci/services/postgres.md | 5 +- doc/ci/services/redis.md | 5 +- doc/ci/ssh_keys/README.md | 3 + doc/ci/triggers/README.md | 7 +- doc/ci/variables/README.md | 182 +- doc/ci/variables/deprecated_variables.md | 3 + .../img/ci_job_stage_output_example.png | Bin 156322 -> 55081 bytes .../img/inherited_group_variables_v12_5.png | Bin 58215 -> 20448 bytes ...rride_value_via_manual_pipeline_output.png | Bin 310224 -> 110898 bytes .../img/override_variable_manual_pipeline.png | Bin 52678 -> 17876 bytes doc/ci/variables/predefined_variables.md | 19 +- .../variables/where_variables_can_be_used.md | 7 +- doc/ci/yaml/README.md | 254 +- doc/ci/yaml/includes.md | 7 + doc/development/README.md | 47 +- doc/development/adding_database_indexes.md | 4 +- doc/development/api_graphql_styleguide.md | 277 +- doc/development/api_styleguide.md | 67 + doc/development/application_limits.md | 35 +- doc/development/architecture.md | 42 +- doc/development/background_migrations.md | 4 +- doc/development/build_test_package.md | 6 +- doc/development/changelog.md | 6 +- doc/development/cicd/index.md | 4 +- doc/development/code_comments.md | 2 +- doc/development/code_review.md | 23 +- doc/development/contributing/index.md | 87 +- .../contributing/issue_workflow.md | 14 +- .../contributing/merge_request_workflow.md | 2 +- doc/development/creating_enums.md | 2 +- doc/development/database/index.md | 48 + .../database/not_null_constraints.md | 217 + .../strings_and_the_text_data_type.md | 288 + doc/development/database_debugging.md | 6 +- doc/development/database_review.md | 14 +- doc/development/db_dump.md | 4 +- doc/development/deleting_migrations.md | 4 +- doc/development/distributed_tracing.md | 2 +- .../documentation/feature_flags.md | 22 +- doc/development/documentation/index.md | 65 +- .../site_architecture/global_nav.md | 2 +- .../documentation/site_architecture/index.md | 22 +- .../site_architecture/release_process.md | 26 +- doc/development/documentation/structure.md | 2 +- doc/development/documentation/styleguide.md | 143 +- doc/development/documentation/workflow.md | 8 +- doc/development/ee_features.md | 4 +- doc/development/elasticsearch.md | 63 +- doc/development/emails.md | 15 + doc/development/fe_guide/axios.md | 16 +- doc/development/fe_guide/dependencies.md | 2 +- .../fe_guide/development_process.md | 2 +- .../fe_guide/droplab/plugins/ajax.md | 2 +- .../fe_guide/droplab/plugins/filter.md | 2 +- .../fe_guide/droplab/plugins/input_setter.md | 4 +- doc/development/fe_guide/emojis.md | 4 +- doc/development/fe_guide/frontend_faq.md | 4 +- doc/development/fe_guide/graphql.md | 107 +- doc/development/fe_guide/icons.md | 8 +- doc/development/fe_guide/performance.md | 2 +- doc/development/fe_guide/style/vue.md | 2 +- doc/development/fe_guide/vue.md | 10 +- doc/development/feature_flags/controls.md | 63 +- doc/development/feature_flags/development.md | 36 +- doc/development/filtering_by_label.md | 8 +- doc/development/geo.md | 6 +- doc/development/geo/framework.md | 11 +- doc/development/git_object_deduplication.md | 6 +- doc/development/gitaly.md | 10 +- doc/development/github_importer.md | 12 +- doc/development/go_guide/dependencies.md | 175 + doc/development/go_guide/index.md | 22 +- doc/development/gotchas.md | 2 +- doc/development/hash_indexes.md | 4 +- doc/development/i18n/externalization.md | 20 +- doc/development/i18n/merging_translations.md | 21 +- doc/development/i18n/proofreader.md | 22 +- doc/development/i18n/translation.md | 14 +- doc/development/img/bullet_v13_0.png | Bin 0 -> 1085958 bytes doc/development/import_export.md | 53 +- .../insert_into_tables_in_batches.md | 2 - doc/development/instrumentation.md | 6 +- doc/development/integrations/jenkins.md | 2 +- doc/development/integrations/secure.md | 38 +- .../secure_partner_integration.md | 14 +- doc/development/internal_api.md | 4 +- doc/development/issue_types.md | 4 +- doc/development/licensing.md | 8 +- doc/development/logging.md | 6 +- .../merge_request_performance_guidelines.md | 4 +- doc/development/migration_style_guide.md | 27 +- .../module_with_instance_variables.md | 4 +- .../multi_version_compatibility.md | 2 +- .../namespaces_storage_statistics.md | 10 +- .../new_fe_guide/development/accessibility.md | 4 +- .../new_fe_guide/development/performance.md | 4 +- doc/development/omnibus.md | 2 +- doc/development/packages.md | 10 +- doc/development/performance.md | 3 +- doc/development/permissions.md | 25 +- doc/development/pipelines.md | 423 +- doc/development/polling.md | 2 +- doc/development/profiling.md | 10 +- doc/development/rake_tasks.md | 8 +- doc/development/redis.md | 4 +- doc/development/refactoring_guide/index.md | 8 +- doc/development/reference_processing.md | 2 +- doc/development/renaming_features.md | 2 +- doc/development/routing.md | 12 +- doc/development/scalability.md | 22 +- doc/development/secure_coding_guidelines.md | 38 +- doc/development/service_measurement.md | 81 + .../shell_scripting_guide/index.md | 2 +- doc/development/sidekiq_style_guide.md | 118 +- doc/development/telemetry/index.md | 100 +- doc/development/telemetry/snowplow.md | 16 +- doc/development/telemetry/usage_ping.md | 910 +- .../testing_guide/best_practices.md | 83 +- .../end_to_end/best_practices.md | 2 +- .../testing_guide/end_to_end/feature_flags.md | 2 +- .../testing_guide/end_to_end/index.md | 20 +- .../testing_guide/end_to_end/page_objects.md | 8 +- .../end_to_end/rspec_metadata_tests.md | 3 +- ...unning_tests_that_require_special_setup.md | 12 +- .../testing_guide/end_to_end/style_guide.md | 8 +- doc/development/testing_guide/flaky_tests.md | 36 +- .../testing_guide/frontend_testing.md | 42 +- doc/development/testing_guide/index.md | 4 +- doc/development/testing_guide/review_apps.md | 22 +- .../testing_guide/testing_levels.md | 4 +- .../understanding_explain_plans.md | 34 +- doc/development/uploads.md | 6 +- doc/development/utilities.md | 4 +- doc/development/value_stream_analytics.md | 2 +- doc/development/what_requires_downtime.md | 36 +- doc/development/windows.md | 14 +- doc/gitlab-basics/create-project.md | 4 +- doc/gitlab-basics/start-using-git.md | 7 +- .../aws/img/aws_ha_architecture_diagram.png | Bin 42452 -> 144735 bytes doc/install/aws/img/rds_subnet_group.png | Bin 30107 -> 0 bytes doc/install/aws/index.md | 49 +- doc/install/azure/index.md | 2 +- doc/install/digitaloceandocker.md | 12 +- .../google_cloud_platform/img/boot_disk.png | Bin 37786 -> 0 bytes .../google_cloud_platform/img/vm_details.png | Bin 50191 -> 77743 bytes doc/install/google_cloud_platform/index.md | 8 +- doc/install/installation.md | 45 +- doc/install/ldap.md | 4 +- doc/install/openshift_and_gitlab/index.md | 4 +- doc/install/requirements.md | 160 +- doc/integration/akismet.md | 22 +- doc/integration/azure.md | 40 +- doc/integration/elasticsearch.md | 21 +- .../gmail_action_buttons_for_gitlab.md | 2 +- .../img/ultra_auth_credentials.png | Bin 53737 -> 0 bytes .../img/ultra_auth_edit_callback_url.png | Bin 39410 -> 0 bytes ...tra_auth_edit_callback_url_highlighted.png | Bin 68383 -> 0 bytes doc/integration/jira_development_panel.md | 6 +- doc/integration/kerberos.md | 4 +- doc/integration/ldap.md | 4 +- doc/integration/omniauth.md | 1 - doc/integration/saml.md | 2 +- doc/integration/ultra_auth.md | 87 - doc/integration/vault.md | 8 +- doc/policy/maintenance.md | 204 +- doc/public_access/public_access.md | 6 +- doc/push_rules/push_rules.md | 6 +- doc/raketasks/README.md | 4 +- doc/raketasks/backup_restore.md | 14 +- doc/raketasks/cleanup.md | 15 +- doc/raketasks/import.md | 12 +- doc/raketasks/migrate_snippets.md | 4 +- doc/security/img/allowlist_v13_0.png | Bin 0 -> 16076 bytes doc/security/img/whitelist.png | Bin 10650 -> 0 bytes doc/security/rack_attack.md | 3 - doc/security/webhooks.md | 20 +- doc/ssh/README.md | 85 +- doc/subscriptions/index.md | 16 +- doc/system_hooks/system_hooks.md | 8 +- doc/topics/airgap/index.md | 142 +- doc/topics/authentication/index.md | 7 +- doc/topics/autodevops/customize.md | 43 +- .../img/guide_pipeline_stages_v12_3.png | Bin 40329 -> 0 bytes .../img/guide_pipeline_stages_v13_0.png | Bin 0 -> 65686 bytes doc/topics/autodevops/index.md | 205 +- doc/topics/autodevops/quick_start_guide.md | 14 +- doc/topics/autodevops/requirements.md | 134 + doc/topics/autodevops/stages.md | 60 +- doc/topics/git/feature_branch_development.md | 86 + .../git/img/create_merge_request_v13_1.png | Bin 0 -> 16387 bytes doc/topics/git/img/modify_branches_v13_1.png | Bin 0 -> 75159 bytes doc/topics/git/index.md | 3 +- doc/topics/git/lfs/index.md | 20 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 6 +- doc/topics/git/lfs/migrate_to_git_lfs.md | 12 +- .../index.md | 5 + doc/topics/git/partial_clone.md | 4 +- doc/topics/gitlab_flow.md | 2 +- doc/topics/index.md | 1 + doc/topics/offline/index.md | 138 + .../{airgap => offline}/quick_start_guide.md | 4 +- doc/topics/web_application_firewall/index.md | 4 +- .../quick_start_guide.md | 4 +- doc/university/README.md | 6 +- doc/university/support/README.md | 202 - doc/university/training/user_training.md | 4 +- doc/update/README.md | 14 +- doc/update/patch_versions.md | 9 +- doc/update/upgrading_from_ce_to_ee.md | 2 +- doc/update/upgrading_from_source.md | 39 +- .../upgrading_postgresql_using_slony.md | 4 +- doc/user/admin_area/abuse_reports.md | 3 + .../activating_deactivating_users.md | 9 +- doc/user/admin_area/appearance.md | 6 +- .../admin_area/blocking_unblocking_users.md | 3 + doc/user/admin_area/broadcast_messages.md | 2 +- doc/user/admin_area/credentials_inventory.md | 7 + .../admin_area/custom_project_templates.md | 5 +- doc/user/admin_area/diff_limits.md | 3 + doc/user/admin_area/geo_nodes.md | 3 + doc/user/admin_area/labels.md | 3 + doc/user/admin_area/license.md | 7 +- .../admin_area/merge_requests_approvals.md | 5 +- .../settings/account_and_limit_settings.md | 15 +- .../settings/continuous_integration.md | 7 +- doc/user/admin_area/settings/email.md | 4 + .../settings/external_authorization.md | 6 +- .../admin_area/settings/gitaly_timeouts.md | 2 +- .../img/rate_limit_on_issues_creation.png | Bin 11476 -> 0 bytes .../rate_limit_on_issues_creation_v13_1.png | Bin 0 -> 13479 bytes doc/user/admin_area/settings/index.md | 2 +- .../settings/instance_template_repository.md | 2 +- .../settings/push_event_activities_limit.md | 2 +- .../settings/rate_limit_on_issues_creation.md | 5 +- .../visibility_and_access_controls.md | 2 +- doc/user/analytics/code_review_analytics.md | 5 +- .../analytics/img/vsa_time_metrics_v13_0.png | Bin 0 -> 240523 bytes doc/user/analytics/index.md | 7 +- doc/user/analytics/productivity_analytics.md | 9 +- doc/user/analytics/repository_analytics.md | 4 +- doc/user/analytics/value_stream_analytics.md | 28 +- .../configuration/index.md | 3 + .../container_scanning/index.md | 217 +- doc/user/application_security/dast/index.md | 111 +- .../dependency_list/index.md | 15 +- .../dependency_scanning/index.md | 160 +- .../img/security_configuration_page_v13_1.png | Bin 63337 -> 199472 bytes .../img/vulnerability-check_v13_0.png | Bin 0 -> 51019 bytes doc/user/application_security/index.md | 48 +- .../offline_deployments/index.md | 5 +- .../application_security/sast/analyzers.md | 8 +- doc/user/application_security/sast/index.md | 89 +- .../secret_detection/index.md | 119 +- ...up_security_dashboard_export_csv_v13_1.png | Bin 0 -> 536756 bytes .../img/group_security_dashboard_v13_0.png | Bin 212401 -> 69236 bytes .../img/project_security_dashboard_v13_0.png | Bin 199457 -> 66337 bytes .../security_dashboard/index.md | 23 +- .../threat_monitoring/index.md | 52 +- ...ility_page_download_patch_button_v13_1.png | Bin 0 -> 8979 bytes ...ge_merge_request_button_dropdown_v13_1.png | Bin 0 -> 144464 bytes ...bility_page_merge_request_button_v13_1.png | Bin 0 -> 40058 bytes .../vulnerabilities/index.md | 28 +- doc/user/award_emojis.md | 12 +- doc/user/clusters/applications.md | 107 +- doc/user/clusters/crossplane.md | 2 +- doc/user/clusters/environments.md | 4 +- doc/user/clusters/management_project.md | 2 +- .../compliance/compliance_dashboard/index.md | 5 +- doc/user/compliance/index.md | 7 + .../compliance/license_compliance/index.md | 245 +- .../add_another_suggestion_to_batch_v13_1.jpg | Bin 0 -> 23078 bytes .../add_first_suggestion_to_batch_v13_1.jpg | Bin 0 -> 24694 bytes .../img/apply_batch_of_suggestions_v13_1.jpg | Bin 0 -> 26551 bytes .../img/quickly_assign_commenter_v13_1.png | Bin 0 -> 216812 bytes .../remove_suggestion_from_batch_v13_1.jpg | Bin 0 -> 24101 bytes ...ggestions_custom_commit_messages_v12_7.png | Bin 21720 -> 0 bytes ...ggestions_custom_commit_messages_v13_1.jpg | Bin 0 -> 35055 bytes doc/user/discussions/index.md | 86 +- doc/user/feature_highlight.md | 4 +- doc/user/gitlab_com/index.md | 87 +- doc/user/group/bulk_editing/index.md | 89 +- doc/user/group/clusters/index.md | 10 +- .../img/group_stats_table.png | Bin 8473 -> 22691 bytes .../group/contribution_analytics/index.md | 7 +- doc/user/group/custom_project_templates.md | 5 +- doc/user/group/epics/img/bulk_editing.png | Bin 72912 -> 0 bytes doc/user/group/epics/img/issue_list_v13_1.png | Bin 0 -> 24946 bytes doc/user/group/epics/index.md | 17 +- doc/user/group/epics/manage_epics.md | 83 +- doc/user/group/img/ldap_sync_cn_v13_1.png | Bin 0 -> 120390 bytes doc/user/group/img/ldap_sync_filter_v13_1.png | Bin 0 -> 135425 bytes .../group/img/manual_permissions_v13_1.png | Bin 0 -> 31008 bytes doc/user/group/index.md | 89 +- doc/user/group/insights/index.md | 3 +- .../img/issues_table_v13_1.png | Bin 0 -> 125190 bytes doc/user/group/issues_analytics/index.md | 18 +- doc/user/group/iterations/index.md | 85 + doc/user/group/roadmap/index.md | 13 +- doc/user/group/saml_sso/index.md | 23 +- doc/user/group/saml_sso/scim_setup.md | 5 +- doc/user/group/settings/img/export_panel.png | Bin 200162 -> 0 bytes .../group/settings/img/export_panel_v13_0.png | Bin 0 -> 47857 bytes .../group/settings/img/import_panel_v13_1.png | Bin 0 -> 23446 bytes .../img/new_group_navigation_v13_1.png | Bin 0 -> 83427 bytes doc/user/group/settings/import_export.md | 42 +- doc/user/group/subgroups/index.md | 4 +- doc/user/incident_management/index.md | 81 +- doc/user/infrastructure/index.md | 333 +- doc/user/instance/clusters/index.md | 5 +- doc/user/instance_statistics/dev_ops_score.md | 4 +- doc/user/instance_statistics/index.md | 2 +- doc/user/instance_statistics/user_cohorts.md | 4 +- doc/user/markdown.md | 35 +- doc/user/operations_dashboard/index.md | 2 +- .../packages/composer_repository/index.md | 155 + doc/user/packages/conan_repository/index.md | 12 +- ...iner_registry_group_repositories_v13_0.png | Bin 41813 -> 0 bytes ...iner_registry_group_repositories_v13_1.png | Bin 0 -> 45865 bytes .../container_registry_repositories_v13_0.png | Bin 44925 -> 0 bytes .../container_registry_repositories_v13_1.png | Bin 0 -> 46734 bytes ...try_repositories_with_quickstart_v13_0.png | Bin 48708 -> 0 bytes ...try_repositories_with_quickstart_v13_1.png | Bin 0 -> 51791 bytes doc/user/packages/container_registry/index.md | 98 +- doc/user/packages/dependency_proxy/index.md | 8 +- doc/user/packages/go_proxy/index.md | 169 + doc/user/packages/index.md | 35 +- doc/user/packages/maven_repository/index.md | 8 +- doc/user/packages/npm_registry/index.md | 16 +- doc/user/packages/nuget_repository/index.md | 10 +- doc/user/packages/pypi_repository/index.md | 6 + doc/user/permissions.md | 26 +- doc/user/profile/account/create_accounts.md | 5 +- doc/user/profile/account/delete_account.md | 3 + .../account/two_factor_authentication.md | 12 +- doc/user/profile/active_sessions.md | 2 +- .../img/unknown_sign_in_email_v13_1.png | Bin 0 -> 20230 bytes doc/user/profile/index.md | 27 +- doc/user/profile/notifications.md | 7 +- doc/user/profile/personal_access_tokens.md | 55 + doc/user/profile/preferences.md | 23 + .../profile/unknown_sign_in_notification.md | 11 +- doc/user/project/badges.md | 2 +- doc/user/project/bulk_editing.md | 70 +- doc/user/project/canary_deployments.md | 2 +- doc/user/project/clusters/add_eks_clusters.md | 147 +- doc/user/project/clusters/add_gke_clusters.md | 13 +- .../project/clusters/add_remove_clusters.md | 218 +- doc/user/project/clusters/index.md | 13 +- .../project/clusters/kubernetes_pod_logs.md | 12 +- doc/user/project/clusters/runbooks/index.md | 2 +- doc/user/project/clusters/serverless/aws.md | 12 +- doc/user/project/clusters/serverless/index.md | 22 +- doc/user/project/code_owners.md | 28 +- doc/user/project/deploy_boards.md | 15 +- .../deploy_keys/img/deploy_keys_v13_0.png | Bin 0 -> 74337 bytes .../img/public_deploy_key_v13_0.png | Bin 0 -> 45326 bytes doc/user/project/deploy_keys/index.md | 164 + doc/user/project/deploy_tokens/index.md | 11 +- doc/user/project/description_templates.md | 8 +- .../img/status_page_detail_link_v13_1.png | Bin 0 -> 107718 bytes doc/user/project/import/bitbucket.md | 7 + doc/user/project/import/bitbucket_server.md | 7 + doc/user/project/import/clearcase.md | 7 + doc/user/project/import/cvs.md | 7 + doc/user/project/import/fogbugz.md | 7 + doc/user/project/import/gemnasium.md | 7 + doc/user/project/import/gitea.md | 7 + doc/user/project/import/github.md | 7 + doc/user/project/import/gitlab_com.md | 7 + doc/user/project/import/index.md | 11 + doc/user/project/import/jira.md | 7 + doc/user/project/import/manifest.md | 9 +- doc/user/project/import/perforce.md | 7 + doc/user/project/import/phabricator.md | 9 +- doc/user/project/import/repo_by_url.md | 7 + doc/user/project/import/svn.md | 11 +- doc/user/project/import/tfvc.md | 2 +- doc/user/project/index.md | 17 +- doc/user/project/insights/index.md | 2 +- doc/user/project/integrations/bamboo.md | 2 +- .../integrations/custom_issue_tracker.md | 43 +- .../project/integrations/generic_alerts.md | 12 +- doc/user/project/integrations/github.md | 4 +- .../integrations/gitlab_slack_application.md | 4 +- .../project/integrations/hangouts_chat.md | 2 +- ...etheus_dashboard_yaml_validation_v13_1.png | Bin 0 -> 27694 bytes .../prometheus_monitoring_dashboard_v12_8.png | Bin 29683 -> 0 bytes .../prometheus_monitoring_dashboard_v13_1.png | Bin 0 -> 40765 bytes .../integrations/img/related_links_v13_1.png | Bin 0 -> 4086 bytes .../integrations/img/slack_configuration.png | Bin 41458 -> 0 bytes .../integrations/jira_cloud_configuration.md | 2 +- doc/user/project/integrations/prometheus.md | 161 +- .../project/integrations/prometheus_units.md | 4 +- doc/user/project/integrations/slack.md | 18 +- doc/user/project/integrations/webex_teams.md | 2 +- doc/user/project/integrations/webhooks.md | 2 +- doc/user/project/issue_board.md | 20 +- .../project/issues/associate_zoom_meeting.md | 6 + .../project/issues/confidential_issues.md | 8 +- .../project/issues/crosslinking_issues.md | 6 + doc/user/project/issues/design_management.md | 87 +- doc/user/project/issues/due_dates.md | 6 + doc/user/project/issues/img/new_issue.png | Bin 28734 -> 0 bytes .../project/issues/img/new_issue_v13_1.png | Bin 0 -> 69721 bytes ...solve_design-discussion_checkbox_v13_1.png | Bin 0 -> 56634 bytes .../resolve_design-discussion_icon_v13_1.png | Bin 0 -> 36747 bytes doc/user/project/issues/index.md | 10 +- .../project/issues/issue_data_and_actions.md | 16 +- doc/user/project/issues/issue_weight.md | 3 + doc/user/project/issues/managing_issues.md | 56 +- .../issues/multiple_assignees_for_issues.md | 8 +- doc/user/project/issues/related_issues.md | 6 + .../project/issues/sorting_issue_lists.md | 10 +- doc/user/project/labels.md | 14 +- doc/user/project/members/index.md | 4 +- .../members/share_project_with_groups.md | 2 +- .../merge_requests/accessibility_testing.md | 10 - .../browser_performance_testing.md | 4 +- .../merge_requests/cherry_pick_changes.md | 2 +- .../project/merge_requests/code_quality.md | 64 +- .../merge_requests/creating_merge_requests.md | 6 +- .../project/merge_requests/getting_started.md | 4 +- doc/user/project/merge_requests/index.md | 32 +- .../merge_requests/merge_request_approvals.md | 29 +- .../merge_request_dependencies.md | 8 +- .../merge_when_pipeline_succeeds.md | 15 +- .../reviewing_and_managing_merge_requests.md | 8 +- .../test_coverage_visualization.md | 4 +- .../testing_and_reports_in_merge_requests.md | 36 + doc/user/project/merge_requests/versions.md | 6 +- .../project/milestones/burndown_charts.md | 3 + doc/user/project/milestones/index.md | 3 + .../project/new_ci_build_permissions_model.md | 15 +- .../project/operations/alert_management.md | 107 +- .../project/operations/dashboard_settings.md | 47 + doc/user/project/operations/error_tracking.md | 6 +- doc/user/project/operations/feature_flags.md | 205 +- .../img/alert_detail_full_v13_1.png | Bin 0 -> 26957 bytes .../img/alert_detail_overview_v13_1.png | Bin 0 -> 14827 bytes .../img/alert_detail_system_notes_v13_1.png | Bin 0 -> 22329 bytes .../operations/img/alert_detail_v13_0.png | Bin 24097 -> 0 bytes .../img/alert_details_assignees_v13_1.png | Bin 0 -> 31091 bytes .../operations/img/alert_issue_v13_1.png | Bin 0 -> 38546 bytes .../img/alert_list_assignees_v13_1.png | Bin 0 -> 29011 bytes .../img/alert_management_1_v13_1.png | Bin 57133 -> 40053 bytes .../img/alert_todo_assignees_v13_1.png | Bin 0 -> 10157 bytes .../img/dashboard_external_link_v13_1.png | Bin 0 -> 12708 bytes .../img/dashboard_local_timezone_v13_1.png | Bin 0 -> 65094 bytes .../img/external_dashboard_settings.png | Bin 33248 -> 0 bytes doc/user/project/operations/index.md | 2 +- .../linking_to_an_external_dashboard.md | 22 +- .../index.md | 5 +- .../lets_encrypt_integration.md | 4 +- .../getting_started/fork_sample_project.md | 90 +- .../new_or_existing_website.md | 63 +- .../getting_started/pages_bundled_template.md | 31 +- .../pages/getting_started_part_four.md | 425 +- .../project/pages/img/change_path_v12_10.png | Bin 29490 -> 61162 bytes .../project/pages/img/choose_ci_template.png | Bin 23532 -> 0 bytes .../pages/img/choose_ci_template_v13_1.png | Bin 0 -> 33333 bytes .../img/pages_project_templates_v11_8.png | Bin 69675 -> 0 bytes .../img/pages_project_templates_v13_1.png | Bin 0 -> 181998 bytes .../pages/img/remove_fork_relationship.png | Bin 13642 -> 0 bytes .../img/remove_fork_relationship_v13_1.png | Bin 0 -> 34206 bytes doc/user/project/pages/img/setup_ci.png | Bin 10032 -> 0 bytes doc/user/project/pages/img/setup_ci_v13_1.png | Bin 0 -> 15480 bytes doc/user/project/pages/index.md | 145 +- doc/user/project/pages/introduction.md | 6 +- .../pages/lets_encrypt_for_gitlab_pages.md | 2 +- .../project/pages/pages_access_control.md | 2 +- doc/user/project/protected_branches.md | 12 +- doc/user/project/protected_tags.md | 6 +- doc/user/project/push_options.md | 8 +- doc/user/project/quick_actions.md | 129 +- doc/user/project/releases/index.md | 37 +- .../project/repository/forking_workflow.md | 2 +- doc/user/project/repository/git_blame.md | 2 +- .../repository/img/repository_cleanup.png | Bin 8114 -> 0 bytes doc/user/project/repository/index.md | 16 +- .../repository/jupyter_notebooks/index.md | 2 +- .../reducing_the_repo_size_using_git.md | 306 +- .../repository/repository_mirroring.md | 28 +- .../repository/x509_signed_commits/index.md | 4 +- .../img/requirement_edit_save_v12_10.png | Bin 123899 -> 0 bytes doc/user/project/requirements/index.md | 105 +- doc/user/project/service_desk.md | 43 +- doc/user/project/settings/import_export.md | 16 +- doc/user/project/settings/index.md | 19 +- .../project/settings/project_access_tokens.md | 32 +- doc/user/project/status_page/index.md | 30 +- doc/user/project/time_tracking.md | 3 + doc/user/project/web_ide/index.md | 52 +- doc/user/project/wiki/index.md | 10 +- doc/user/search/advanced_global_search.md | 7 +- doc/user/search/advanced_search_syntax.md | 7 +- doc/user/search/index.md | 22 +- doc/user/shortcuts.md | 2 +- doc/user/snippets.md | 8 +- doc/user/todos.md | 3 + jest.config.unit.js => jest.config.js | 0 lib/api/api.rb | 2 +- lib/api/deploy_keys.rb | 5 +- lib/api/discussions.rb | 2 + lib/api/entities/bridge.rb | 9 + lib/api/entities/container_registry.rb | 1 + lib/api/entities/group_detail.rb | 3 + lib/api/entities/merge_request_basic.rb | 8 - lib/api/entities/project.rb | 4 +- lib/api/entities/releases/evidence.rb | 2 +- lib/api/entities/releases/link.rb | 1 + lib/api/entities/resource_milestone_event.rb | 20 + lib/api/entities/runner_details.rb | 7 - lib/api/entities/shared_group_with_group.rb | 17 + ..._group.rb => shared_group_with_project.rb} | 2 +- lib/api/entities/ssh_key.rb | 3 +- lib/api/entities/user_with_admin.rb | 3 +- lib/api/features.rb | 4 +- lib/api/group_container_repositories.rb | 3 +- lib/api/group_export.rb | 6 + lib/api/group_import.rb | 9 +- lib/api/groups.rb | 57 +- lib/api/helpers.rb | 2 +- lib/api/helpers/issues_helpers.rb | 2 + lib/api/helpers/notes_helpers.rb | 2 +- lib/api/helpers/projects_helpers.rb | 2 + lib/api/helpers/runner.rb | 38 +- lib/api/helpers/services_helpers.rb | 12 + lib/api/issues.rb | 9 +- lib/api/jobs.rb | 26 + lib/api/lsif_data.rb | 40 - lib/api/merge_requests.rb | 9 +- lib/api/project_container_repositories.rb | 9 +- lib/api/project_export.rb | 4 +- lib/api/project_import.rb | 5 +- lib/api/project_repository_storage_moves.rb | 57 +- lib/api/projects.rb | 4 +- lib/api/release/links.rb | 2 + lib/api/releases.rb | 11 - lib/api/repositories.rb | 4 + lib/api/resource_label_events.rb | 5 +- lib/api/resource_milestone_events.rb | 54 + lib/api/runner.rb | 18 +- lib/api/search.rb | 15 +- lib/api/settings.rb | 6 + lib/api/suggestions.rb | 43 +- lib/api/terraform/state.rb | 10 +- lib/api/todos.rb | 10 +- lib/api/users.rb | 19 +- lib/api/validations/validators/file_path.rb | 2 +- .../validators/untrusted_regexp.rb | 19 + lib/api/wikis.rb | 2 +- lib/backup/files.rb | 3 +- .../filter/ascii_doc_sanitization_filter.rb | 3 +- lib/banzai/filter/design_reference_filter.rb | 121 + .../filter/external_issue_reference_filter.rb | 36 +- lib/banzai/filter/gollum_tags_filter.rb | 20 +- lib/banzai/filter/issue_reference_filter.rb | 14 +- .../filter/iteration_reference_filter.rb | 16 + lib/banzai/filter/label_reference_filter.rb | 15 +- lib/banzai/filter/reference_filter.rb | 6 + lib/banzai/filter/repository_link_filter.rb | 4 +- lib/banzai/filter/wiki_link_filter.rb | 10 +- lib/banzai/pipeline/gfm_pipeline.rb | 1 + .../reference_parser/iteration_parser.rb | 22 + lib/event_filter.rb | 10 +- lib/extracts_path.rb | 124 +- lib/extracts_ref.rb | 128 + lib/feature.rb | 109 +- lib/gitaly/server.rb | 9 + lib/gitlab.rb | 9 + lib/gitlab/alert_management/alert_params.rb | 3 +- lib/gitlab/alert_management/fingerprint.rb | 27 + lib/gitlab/alerting/alert.rb | 11 +- .../alerting/notification_payload_parser.rb | 7 +- .../cycle_analytics/base_query_builder.rb | 60 +- .../analytics/cycle_analytics/median.rb | 4 +- .../cycle_analytics/records_fetcher.rb | 20 +- lib/gitlab/application_rate_limiter.rb | 9 +- lib/gitlab/auth/auth_finders.rb | 1 + lib/gitlab/auth/ldap/person.rb | 2 +- lib/gitlab/auth/o_auth/provider.rb | 4 - lib/gitlab/background_migration/.rubocop.yml | 2 +- .../backfill_project_repositories.rb | 2 +- ...fix_projects_without_prometheus_service.rb | 2 +- .../fix_ruby_object_in_audit_events.rb | 13 + .../migrate_fingerprint_sha256_within_keys.rb | 2 +- .../migrate_issue_trackers_sensitive_data.rb | 2 +- ...late_cluster_kubernetes_namespace_table.rb | 2 +- .../populate_untracked_uploads.rb | 2 +- .../reset_merge_status.rb | 2 +- .../create_resource_user_mention.rb | 2 +- lib/gitlab/badge/coverage/report.rb | 10 +- lib/gitlab/badge/coverage/template.rb | 14 +- lib/gitlab/badge/pipeline/status.rb | 8 +- lib/gitlab/badge/pipeline/template.rb | 14 +- lib/gitlab/badge/template.rb | 2 + lib/gitlab/bitbucket_import/importer.rb | 2 +- lib/gitlab/cache/import/caching.rb | 11 +- lib/gitlab/ci/build/releaser.rb | 24 + lib/gitlab/ci/build/step.rb | 13 + lib/gitlab/ci/config/entry/job.rb | 2 +- lib/gitlab/ci/config/entry/reports.rb | 7 +- lib/gitlab/ci/features.rb | 30 +- lib/gitlab/ci/parsers/terraform/tfplan.rb | 24 +- lib/gitlab/ci/pipeline/chain/command.rb | 19 +- lib/gitlab/ci/pipeline/chain/metrics.rb | 35 + lib/gitlab/ci/pipeline/chain/seed.rb | 1 + lib/gitlab/ci/pipeline/chain/sequence.rb | 1 + lib/gitlab/ci/reports/terraform_reports.rb | 8 - lib/gitlab/ci/status/bridge/failed.rb | 8 + lib/gitlab/ci/status/core.rb | 2 +- .../ci/templates/AWS/Deploy-ECS.gitlab-ci.yml | 13 + .../ci/templates/Auto-DevOps.gitlab-ci.yml | 2 + .../ci/templates/Deploy-ECS.gitlab-ci.yml | 18 + .../Browser-Performance-Testing.gitlab-ci.yml | 4 +- .../ci/templates/Jobs/Build.gitlab-ci.yml | 4 +- .../templates/Jobs/Code-Quality.gitlab-ci.yml | 4 +- .../DAST-Default-Branch-Deploy.gitlab-ci.yml | 2 +- .../ci/templates/Jobs/Deploy.gitlab-ci.yml | 3 +- .../templates/Jobs/Deploy/ECS.gitlab-ci.yml | 18 +- ...Managed-Cluster-Applications.gitlab-ci.yml | 7 +- lib/gitlab/ci/templates/Rust.gitlab-ci.yml | 2 +- .../Dependency-Scanning.gitlab-ci.yml | 2 + .../Security/License-Scanning.gitlab-ci.yml | 1 + .../ci/templates/Security/SAST.gitlab-ci.yml | 9 +- .../Security/Secret-Detection.gitlab-ci.yml | 24 + .../ci/templates/Terraform.gitlab-ci.yml | 1 - .../templates/Verify/FailFast.gitlab-ci.yml | 17 + lib/gitlab/ci/trace.rb | 2 +- lib/gitlab/ci/yaml_processor.rb | 2 +- lib/gitlab/code_navigation_path.rb | 2 +- lib/gitlab/config/loader/yaml.rb | 8 +- lib/gitlab/contributions_calendar.rb | 8 +- lib/gitlab/cycle_analytics/summary/commit.rb | 2 +- lib/gitlab/cycle_analytics/summary/deploy.rb | 2 +- lib/gitlab/cycle_analytics/summary/issue.rb | 2 +- lib/gitlab/cycle_analytics/summary/value.rb | 12 + lib/gitlab/danger/emoji_checker.rb | 6 +- lib/gitlab/danger/helper.rb | 2 + lib/gitlab/danger/request_helper.rb | 2 +- lib/gitlab/danger/roulette.rb | 67 + lib/gitlab/data_builder/alert.rb | 27 + lib/gitlab/data_builder/note.rb | 2 +- lib/gitlab/database/custom_structure.rb | 44 + lib/gitlab/database/migration_helpers.rb | 14 + .../partitioning_migration_helpers.rb | 116 +- .../foreign_key_helpers.rb | 140 + .../table_management_helpers.rb | 198 + lib/gitlab/database/schema_cleaner.rb | 20 +- lib/gitlab/database/schema_helpers.rb | 36 +- lib/gitlab/dependency_linker.rb | 4 +- lib/gitlab/dependency_linker/go_mod_linker.rb | 34 + lib/gitlab/dependency_linker/go_sum_linker.rb | 38 + lib/gitlab/diff/file.rb | 8 + lib/gitlab/diff/formatters/base_formatter.rb | 11 +- lib/gitlab/diff/position.rb | 13 +- lib/gitlab/doctor/secrets.rb | 87 + lib/gitlab/error_tracking.rb | 3 + .../processor/sidekiq_processor.rb | 66 + lib/gitlab/exception_log_formatter.rb | 10 + lib/gitlab/experimentation.rb | 15 +- lib/gitlab/export/logger.rb | 11 + lib/gitlab/file_detector.rb | 2 + lib/gitlab/gfm/uploads_rewriter.rb | 15 +- lib/gitlab/git/commit.rb | 15 +- lib/gitlab/git/diff.rb | 2 +- lib/gitlab/git/rugged_impl/use_rugged.rb | 5 +- lib/gitlab/git_access.rb | 37 +- lib/gitlab/git_access_project.rb | 44 + lib/gitlab/git_access_snippet.rb | 15 +- lib/gitlab/git_access_wiki.rb | 8 +- lib/gitlab/gitaly_client.rb | 12 +- lib/gitlab/gitaly_client/commit_service.rb | 9 +- lib/gitlab/github_import/bulk_importing.rb | 2 +- .../importer/diff_note_importer.rb | 2 +- .../github_import/importer/issue_importer.rb | 2 +- .../importer/label_links_importer.rb | 2 +- .../importer/lfs_objects_importer.rb | 5 +- .../github_import/importer/note_importer.rb | 2 +- .../importer/pull_requests_importer.rb | 6 +- lib/gitlab/gl_repository.rb | 19 +- lib/gitlab/gl_repository/identifier.rb | 74 + lib/gitlab/gl_repository/repo_type.rb | 27 +- lib/gitlab/golang.rb | 99 + .../authorize/authorize_field_service.rb | 14 +- .../graphql/authorize/instrumentation.rb | 6 +- lib/gitlab/graphql/filterable_array.rb | 14 - .../graphql/loaders/full_path_model_loader.rb | 26 + lib/gitlab/graphql/pagination/connections.rb | 4 - .../pagination/filterable_array_connection.rb | 17 - .../graphql/pagination/keyset/connection.rb | 100 +- lib/gitlab/import/database_helpers.rb | 2 +- lib/gitlab/import/set_async_jid.rb | 7 +- lib/gitlab/import_export/attributes_finder.rb | 2 + .../import_export/attributes_permitter.rb | 105 + lib/gitlab/import_export/importer.rb | 18 + .../json/streaming_serializer.rb | 15 +- .../legacy_relation_tree_saver.rb | 8 +- lib/gitlab/import_export/members_mapper.rb | 2 +- .../import_export/merge_request_parser.rb | 8 +- .../import_export/project/import_export.yml | 2 + lib/gitlab/import_export/repo_restorer.rb | 2 + lib/gitlab/import_export/saver.rb | 21 +- .../import_export/snippet_repo_restorer.rb | 13 +- .../import_export/snippets_repo_restorer.rb | 6 +- lib/gitlab/import_export/version_checker.rb | 6 +- .../elasticsearch_transport.rb | 68 + lib/gitlab/instrumentation/redis.rb | 81 +- lib/gitlab/instrumentation/redis_base.rb | 102 + .../instrumentation/redis_interceptor.rb | 86 + lib/gitlab/instrumentation/redis_payload.rb | 37 + lib/gitlab/instrumentation_helper.rb | 54 +- lib/gitlab/issuable_metadata.rb | 101 +- lib/gitlab/jira/http_client.rb | 7 +- lib/gitlab/jira_import.rb | 40 +- lib/gitlab/jira_import/base_importer.rb | 2 +- lib/gitlab/jira_import/issues_importer.rb | 28 +- lib/gitlab/kubernetes/helm.rb | 6 - lib/gitlab/kubernetes/helm/base_command.rb | 31 +- lib/gitlab/kubernetes/helm/client_command.rb | 4 - lib/gitlab/kubernetes/helm/delete_command.rb | 14 +- lib/gitlab/kubernetes/helm/init_command.rb | 16 +- lib/gitlab/kubernetes/helm/install_command.rb | 15 +- lib/gitlab/kubernetes/helm/patch_command.rb | 16 +- lib/gitlab/kubernetes/helm/reset_command.rb | 15 +- lib/gitlab/kubernetes/network_policy.rb | 45 +- lib/gitlab/lfs_token.rb | 2 +- lib/gitlab/lograge/custom_options.rb | 18 +- lib/gitlab/looping_batcher.rb | 99 - .../metrics/dashboard/stages/url_validator.rb | 19 + .../metrics/elasticsearch_rack_middleware.rb | 41 + lib/gitlab/metrics/methods.rb | 2 +- lib/gitlab/metrics/redis_rack_middleware.rb | 39 + lib/gitlab/metrics/samplers/base_sampler.rb | 4 +- lib/gitlab/metrics/samplers/puma_sampler.rb | 2 + lib/gitlab/metrics/samplers/ruby_sampler.rb | 3 +- lib/gitlab/metrics/sidekiq_middleware.rb | 15 +- .../metrics/subscribers/active_record.rb | 18 +- lib/gitlab/metrics/transaction.rb | 10 +- .../handle_ip_spoof_attack_error.rb | 33 + lib/gitlab/monitor/demo_projects.rb | 27 + .../pagination/keyset/request_context.rb | 4 +- lib/gitlab/pagination/offset_pagination.rb | 8 +- lib/gitlab/phabricator_import/cache/map.rb | 2 +- lib/gitlab/phabricator_import/worker_state.rb | 2 +- lib/gitlab/process_memory_cache/helper.rb | 51 + lib/gitlab/project_search_results.rb | 26 +- lib/gitlab/project_template.rb | 10 +- lib/gitlab/prometheus/query_variables.rb | 14 +- lib/gitlab/prometheus_client.rb | 13 + .../quick_actions/merge_request_actions.rb | 17 + lib/gitlab/redis/cache.rb | 4 + lib/gitlab/redis/queues.rb | 4 + lib/gitlab/redis/shared_state.rb | 4 + lib/gitlab/redis/wrapper.rb | 6 + lib/gitlab/reference_extractor.rb | 2 +- lib/gitlab/regex.rb | 90 + lib/gitlab/routing.rb | 42 +- lib/gitlab/rugged_instrumentation.rb | 7 +- lib/gitlab/search_context.rb | 162 + lib/gitlab/search_results.rb | 2 +- lib/gitlab/setup_helper.rb | 4 +- lib/gitlab/sidekiq_config.rb | 4 +- lib/gitlab/sidekiq_config/cli_methods.rb | 7 +- lib/gitlab/sidekiq_config/dummy_worker.rb | 3 +- lib/gitlab/sidekiq_config/worker.rb | 5 +- lib/gitlab/sidekiq_logging/json_formatter.rb | 18 +- .../sidekiq_logging/structured_logger.rb | 7 +- .../duplicate_jobs/client.rb | 3 - .../duplicate_jobs/duplicate_job.rb | 45 +- .../strategies/until_executing.rb | 26 +- .../sidekiq_middleware/server_metrics.rb | 42 +- lib/gitlab/slash_commands/presenters/help.rb | 2 +- lib/gitlab/snippet_search_results.rb | 2 +- lib/gitlab/sourcegraph.rb | 2 +- lib/gitlab/suggestions/commit_message.rb | 54 + lib/gitlab/suggestions/file_suggestion.rb | 107 + lib/gitlab/suggestions/suggestion_set.rb | 120 + lib/gitlab/themes.rb | 3 +- lib/gitlab/url_builder.rb | 23 +- lib/gitlab/usage_data.rb | 181 +- lib/gitlab/usage_data_concerns/topology.rb | 137 + .../usage_data_counters/base_counter.rb | 6 +- .../usage_data_counters/designs_counter.rb | 2 +- .../usage_data_counters/search_counter.rb | 26 +- lib/gitlab/utils.rb | 21 +- lib/gitlab/utils/log_limited_array.rb | 4 +- lib/gitlab/utils/usage_data.rb | 110 + lib/gitlab/web_ide/config.rb | 44 + lib/gitlab/web_ide/config/entry/global.rb | 29 + lib/gitlab/web_ide/config/entry/terminal.rb | 75 + lib/milestone_array.rb | 42 - lib/object_storage/direct_upload.rb | 30 +- lib/peek/views/bullet_detailed.rb | 47 + lib/peek/views/elasticsearch.rb | 47 + lib/peek/views/gitaly.rb | 6 - lib/peek/views/redis_detailed.rb | 7 +- lib/quality/test_level.rb | 1 + lib/support/init.d/gitlab | 58 +- lib/tasks/gemojione.rake | 16 + lib/tasks/gitlab/container_registry.rake | 35 + lib/tasks/gitlab/db.rake | 35 +- lib/tasks/gitlab/doctor/secrets.rake | 12 + lib/tasks/gitlab/features.rake | 2 +- lib/tasks/gitlab/shell.rake | 15 +- locale/am_ET/gitlab.po | 2308 +- locale/ar_SA/gitlab.po | 2352 +- locale/az_AZ/gitlab.po | 27339 ++++++++++++++++ locale/bg/gitlab.po | 2316 +- locale/bn_BD/gitlab.po | 2308 +- locale/bn_IN/gitlab.po | 2308 +- locale/bs_BA/gitlab.po | 2325 +- locale/ca_ES/gitlab.po | 2350 +- locale/cs_CZ/gitlab.po | 2330 +- locale/cy_GB/gitlab.po | 2352 +- locale/da_DK/gitlab.po | 2314 +- locale/de/gitlab.po | 2474 +- locale/el_GR/gitlab.po | 2308 +- locale/eo/gitlab.po | 2316 +- locale/es/gitlab.po | 3160 +- locale/et_EE/gitlab.po | 2308 +- locale/fa_IR/gitlab.po | 2308 +- locale/fi_FI/gitlab.po | 2308 +- locale/fil_PH/gitlab.po | 2308 +- locale/fr/gitlab.po | 2338 +- locale/gitlab.pot | 1642 +- locale/gl_ES/gitlab.po | 2308 +- locale/he_IL/gitlab.po | 2330 +- locale/hi_IN/gitlab.po | 2308 +- locale/hr_HR/gitlab.po | 2319 +- locale/hu_HU/gitlab.po | 2308 +- locale/id_ID/gitlab.po | 2297 +- locale/is_IS/gitlab.po | 27339 ++++++++++++++++ locale/it/gitlab.po | 2316 +- locale/ja/gitlab.po | 6463 ++-- locale/ka_GE/gitlab.po | 2308 +- locale/ko/gitlab.po | 2333 +- locale/ku_TR/gitlab.po | 2308 +- locale/mn_MN/gitlab.po | 2308 +- locale/nb_NO/gitlab.po | 2308 +- locale/nl_NL/gitlab.po | 2308 +- locale/pa_IN/gitlab.po | 2308 +- locale/pl_PL/gitlab.po | 2332 +- locale/pt_BR/gitlab.po | 2364 +- locale/pt_PT/gitlab.po | 2324 +- locale/ro_RO/gitlab.po | 2319 +- locale/ru/gitlab.po | 3842 ++- locale/sk_SK/gitlab.po | 2330 +- locale/sl_SI/gitlab.po | 2330 +- locale/sq_AL/gitlab.po | 2308 +- locale/sr_CS/gitlab.po | 2323 +- locale/sr_SP/gitlab.po | 2319 +- locale/sv_SE/gitlab.po | 2308 +- locale/sw_KE/gitlab.po | 2308 +- locale/tr_TR/gitlab.po | 3092 +- locale/uk/gitlab.po | 3206 +- locale/ur_PK/gitlab.po | 2308 +- locale/uz_UZ/gitlab.po | 2308 +- locale/vi_VN/gitlab.po | 2297 +- locale/zh_CN/gitlab.po | 2443 +- locale/zh_HK/gitlab.po | 2309 +- locale/zh_TW/gitlab.po | 2311 +- package.json | 47 +- public/-/emojis/1/emojis.json | 10760 ++++++ public/robots.txt | 1 + qa/Dockerfile | 28 +- qa/Gemfile | 2 +- qa/Gemfile.lock | 6 +- qa/qa.rb | 35 +- qa/qa/flow/project.rb | 12 +- qa/qa/git/repository.rb | 2 +- qa/qa/page/base.rb | 25 +- qa/qa/page/component/issue_board/show.rb | 138 + .../web_ide/modal/create_new_file.rb | 19 + qa/qa/page/dashboard/snippet/new.rb | 17 +- qa/qa/page/dashboard/snippet/show.rb | 42 +- qa/qa/page/group/new.rb | 2 +- qa/qa/page/issuable/new.rb | 58 + qa/qa/page/merge_request/new.rb | 53 +- qa/qa/page/merge_request/show.rb | 89 +- qa/qa/page/project/fork/new.rb | 4 +- qa/qa/page/project/issue/new.rb | 18 +- qa/qa/page/project/members.rb | 60 + qa/qa/page/project/menu.rb | 14 + qa/qa/page/project/new_experiment.rb | 26 + qa/qa/page/project/operations/metrics/show.rb | 3 + qa/qa/page/project/settings/advanced.rb | 4 +- qa/qa/page/project/settings/ci_cd.rb | 2 - qa/qa/page/project/settings/integrations.rb | 7 + qa/qa/page/project/settings/main.rb | 2 + qa/qa/page/project/settings/members.rb | 62 - qa/qa/page/project/settings/services/jira.rb | 60 + qa/qa/page/project/snippet/new.rb | 29 + qa/qa/page/project/sub_menus/settings.rb | 9 - qa/qa/page/project/web_ide/edit.rb | 22 +- qa/qa/page/project/wiki/edit.rb | 30 +- qa/qa/page/project/wiki/new.rb | 61 - qa/qa/page/project/wiki/show.rb | 57 +- qa/qa/resource/group.rb | 5 +- qa/qa/resource/issue.rb | 4 +- qa/qa/resource/project.rb | 36 +- qa/qa/resource/project_milestone.rb | 7 +- qa/qa/resource/project_snippet.rb | 29 + qa/qa/resource/protected_branch.rb | 33 +- qa/qa/resource/repository/project_push.rb | 4 + qa/qa/resource/repository/push.rb | 6 +- qa/qa/resource/repository/wiki_push.rb | 17 +- qa/qa/resource/sandbox.rb | 1 + qa/qa/resource/ssh_key.rb | 17 +- qa/qa/resource/wiki.rb | 48 - qa/qa/resource/wiki/project_page.rb | 68 + qa/qa/runtime/api/repository_storage_moves.rb | 33 + qa/qa/runtime/env.rb | 12 + qa/qa/runtime/feature.rb | 37 +- qa/qa/scenario/test/instance/airgapped.rb | 19 + qa/qa/service/docker_run/base.rb | 9 + qa/qa/service/docker_run/gitlab_runner.rb | 19 +- qa/qa/service/docker_run/jenkins.rb | 8 +- .../changing_repository_storage_spec.rb | 53 + .../project/add_project_member_spec.rb | 4 +- .../2_plan/issue/create_issue_spec.rb | 21 + .../2_plan/issue/issue_suggestions_spec.rb | 4 +- .../2_plan/issue_boards/focus_mode_spec.rb | 2 +- .../jira/jira_basic_integration_spec.rb | 105 + .../push_over_http_file_size_spec.rb | 10 +- .../clone_push_pull_project_snippet_spec.rb | 101 + ...pec.rb => create_personal_snippet_spec.rb} | 4 +- .../snippet/create_project_snippet_spec.rb | 30 + .../create_first_file_in_web_ide_spec.rb | 39 + .../wiki/create_edit_clone_push_wiki_spec.rb | 42 - .../project_based_content_creation_spec.rb | 93 + ...project_based_content_manipulation_spec.rb | 51 + ...d_pipelines_dependent_relationship_spec.rb | 16 +- ...pipelines_independent_relationship_spec.rb | 16 +- .../kubernetes/kubernetes_integration_spec.rb | 8 +- .../all_monitor_core_features_spec.rb | 111 +- qa/qa/support/api.rb | 23 +- qa/qa/support/repeater.rb | 5 +- qa/qa/vendor/jira/jira_api.rb | 54 + qa/spec/runtime/feature_spec.rb | 31 + .../scenario/test/instance/airgapped_spec.rb | 8 + .../merge_with_code_owner_shared_examples.rb | 71 + rubocop/cop/default_scope.rb | 24 + rubocop/cop/gitlab/avoid_feature_get.rb | 27 + rubocop/cop/gitlab/bulk_insert.rb | 23 + .../cop/inject_enterprise_edition_module.rb | 23 +- .../migration/add_limit_to_text_columns.rb | 3 + rubocop/cop/migration/drop_table.rb | 52 + rubocop/cop/migration/prevent_strings.rb | 3 + rubocop/cop/migration/update_large_table.rb | 49 - .../rspec/empty_line_after_shared_example.rb | 64 - rubocop/migration_helpers.rb | 55 +- rubocop/rubocop-migrations.yml | 40 + scripts/build_assets_image | 2 +- scripts/gemfile_lock_changed.sh | 2 +- scripts/gitaly-test-build | 1 + scripts/gitaly_test.rb | 27 + scripts/lint-changelog-filenames | 4 +- scripts/lint-conflicts.sh | 2 +- scripts/lint-doc.sh | 4 +- scripts/review_apps/base-config.yaml | 2 +- scripts/review_apps/review-apps.sh | 12 +- scripts/rspec_helpers.sh | 24 + scripts/static-analysis | 195 +- scripts/sync-stable-branch.sh | 54 +- scripts/trigger-build | 26 +- scripts/utils.sh | 28 +- spec/bin/changelog_spec.rb | 2 +- spec/bin/sidekiq_cluster_spec.rb | 2 +- .../application_cable/connection_spec.rb | 2 +- spec/channels/issues_channel_spec.rb | 6 +- spec/config/application_spec.rb | 2 +- spec/config/mail_room_spec.rb | 2 +- spec/config/object_store_settings_spec.rb | 2 +- spec/config/settings_spec.rb | 2 +- spec/config/smime_signature_settings_spec.rb | 2 +- .../abuse_reports_controller_spec.rb | 2 +- .../acme_challenges_controller_spec.rb | 2 +- .../admin/appearances_controller_spec.rb | 2 +- .../application_settings_controller_spec.rb | 14 +- .../admin/applications_controller_spec.rb | 2 +- .../admin/ci/variables_controller_spec.rb | 2 +- .../clusters/applications_controller_spec.rb | 2 +- .../admin/clusters_controller_spec.rb | 9 +- .../admin/dashboard_controller_spec.rb | 2 +- .../admin/gitaly_servers_controller_spec.rb | 2 +- .../admin/groups_controller_spec.rb | 2 +- .../admin/health_check_controller_spec.rb | 2 +- .../admin/hooks_controller_spec.rb | 2 +- .../admin/identities_controller_spec.rb | 2 +- .../admin/impersonations_controller_spec.rb | 2 +- .../admin/integrations_controller_spec.rb | 14 +- .../admin/projects_controller_spec.rb | 2 +- .../requests_profiles_controller_spec.rb | 2 +- .../admin/runners_controller_spec.rb | 2 +- .../serverless/domains_controller_spec.rb | 2 +- .../admin/services_controller_spec.rb | 2 +- .../admin/sessions_controller_spec.rb | 2 +- .../admin/spam_logs_controller_spec.rb | 2 +- .../admin/users_controller_spec.rb | 28 +- .../application_controller_spec.rb | 9 +- .../autocomplete_controller_spec.rb | 2 +- .../boards/issues_controller_spec.rb | 2 +- .../boards/lists_controller_spec.rb | 2 +- spec/controllers/chaos_controller_spec.rb | 2 +- .../concerns/boards_responses_spec.rb | 2 +- .../concerns/checks_collaboration_spec.rb | 2 +- .../concerns/confirm_email_warning_spec.rb | 2 +- .../concerns/continue_params_spec.rb | 2 +- ...er_with_cross_project_access_check_spec.rb | 2 +- .../enforces_admin_authentication_spec.rb | 2 +- spec/controllers/concerns/group_tree_spec.rb | 2 +- .../concerns/import_url_params_spec.rb | 2 +- .../concerns/internal_redirect_spec.rb | 2 +- .../concerns/issuable_actions_spec.rb | 2 +- .../concerns/issuable_collections_spec.rb | 2 +- spec/controllers/concerns/lfs_request_spec.rb | 2 +- .../concerns/metrics_dashboard_spec.rb | 4 +- .../controllers/concerns/page_limiter_spec.rb | 2 +- .../concerns/project_unauthorized_spec.rb | 2 +- ...redirects_for_missing_path_on_tree_spec.rb | 2 +- .../concerns/renders_commits_spec.rb | 2 +- .../concerns/routable_actions_spec.rb | 2 +- .../concerns/send_file_upload_spec.rb | 2 +- .../concerns/sorting_preference_spec.rb | 2 +- .../concerns/sourcegraph_decorator_spec.rb | 8 +- .../static_object_external_storage_spec.rb | 2 +- .../dashboard/groups_controller_spec.rb | 2 +- .../dashboard/labels_controller_spec.rb | 2 +- .../dashboard/milestones_controller_spec.rb | 27 +- .../dashboard/projects_controller_spec.rb | 2 +- .../dashboard/snippets_controller_spec.rb | 2 +- .../dashboard/todos_controller_spec.rb | 2 +- spec/controllers/dashboard_controller_spec.rb | 2 +- .../explore/groups_controller_spec.rb | 2 +- .../explore/projects_controller_spec.rb | 2 +- .../explore/snippets_controller_spec.rb | 2 +- .../authorizations_controller_spec.rb | 2 +- spec/controllers/graphql_controller_spec.rb | 2 +- .../groups/avatars_controller_spec.rb | 2 +- .../groups/boards_controller_spec.rb | 2 +- .../groups/children_controller_spec.rb | 2 +- .../clusters/applications_controller_spec.rb | 2 +- .../groups/clusters_controller_spec.rb | 9 +- .../groups/group_links_controller_spec.rb | 2 +- .../groups/group_members_controller_spec.rb | 2 +- .../groups/imports_controller_spec.rb | 85 + .../groups/labels_controller_spec.rb | 2 +- .../groups/milestones_controller_spec.rb | 81 +- .../registry/repositories_controller_spec.rb | 3 +- .../groups/runners_controller_spec.rb | 2 +- .../groups/settings/ci_cd_controller_spec.rb | 2 +- .../settings/integrations_controller_spec.rb | 2 +- .../settings/repository_controller_spec.rb | 2 +- .../groups/shared_projects_controller_spec.rb | 2 +- .../groups/uploads_controller_spec.rb | 2 +- .../groups/variables_controller_spec.rb | 2 +- spec/controllers/groups_controller_spec.rb | 98 +- .../health_check_controller_spec.rb | 2 +- spec/controllers/help_controller_spec.rb | 2 +- spec/controllers/ide_controller_spec.rb | 2 +- .../import/bitbucket_controller_spec.rb | 38 +- .../bitbucket_server_controller_spec.rb | 35 +- .../import/fogbugz_controller_spec.rb | 13 +- .../import/gitea_controller_spec.rb | 2 +- .../import/github_controller_spec.rb | 2 +- .../import/gitlab_controller_spec.rb | 13 +- .../import/google_code_controller_spec.rb | 2 +- .../import/phabricator_controller_spec.rb | 2 +- .../cohorts_controller_spec.rb | 2 +- .../dev_ops_score_controller_spec.rb | 2 +- spec/controllers/invites_controller_spec.rb | 2 +- .../omniauth_callbacks_controller_spec.rb | 2 +- spec/controllers/metrics_controller_spec.rb | 2 +- .../notification_settings_controller_spec.rb | 2 +- .../oauth/applications_controller_spec.rb | 2 +- .../oauth/authorizations_controller_spec.rb | 2 +- ...authorized_applications_controller_spec.rb | 2 +- .../omniauth_callbacks_controller_spec.rb | 4 +- spec/controllers/passwords_controller_spec.rb | 2 +- .../profiles/accounts_controller_spec.rb | 2 +- .../profiles/avatars_controller_spec.rb | 2 +- .../profiles/emails_controller_spec.rb | 2 +- .../profiles/keys_controller_spec.rb | 2 +- .../profiles/notifications_controller_spec.rb | 2 +- .../personal_access_tokens_controller_spec.rb | 2 +- .../profiles/preferences_controller_spec.rb | 2 +- .../two_factor_auths_controller_spec.rb | 2 +- spec/controllers/profiles_controller_spec.rb | 2 +- .../alert_management_controller_spec.rb | 2 +- .../alerting/notifications_controller_spec.rb | 123 +- .../projects/artifacts_controller_spec.rb | 7 +- .../autocomplete_sources_controller_spec.rb | 2 +- .../projects/avatars_controller_spec.rb | 2 +- .../projects/badges_controller_spec.rb | 42 +- .../projects/blame_controller_spec.rb | 2 +- .../projects/blob_controller_spec.rb | 18 +- .../projects/boards_controller_spec.rb | 2 +- .../projects/branches_controller_spec.rb | 105 +- ...ld_group_report_results_controller_spec.rb | 146 +- .../projects/ci/lints_controller_spec.rb | 2 +- .../clusters/applications_controller_spec.rb | 2 +- .../projects/clusters_controller_spec.rb | 9 +- .../projects/commit_controller_spec.rb | 2 +- .../projects/commits_controller_spec.rb | 2 +- .../projects/compare_controller_spec.rb | 2 +- .../cycle_analytics/events_controller_spec.rb | 2 +- .../cycle_analytics_controller_spec.rb | 2 +- .../projects/deploy_keys_controller_spec.rb | 2 +- .../projects/deployments_controller_spec.rb | 2 +- .../designs/raw_images_controller_spec.rb | 2 +- .../designs/resized_image_controller_spec.rb | 2 +- .../projects/discussions_controller_spec.rb | 2 +- .../prometheus_api_controller_spec.rb | 2 +- .../sample_metrics_controller_spec.rb | 2 +- .../projects/environments_controller_spec.rb | 59 +- .../projects_controller_spec.rb | 2 +- .../stack_traces_controller_spec.rb | 2 +- .../error_tracking_controller_spec.rb | 2 +- .../projects/find_file_controller_spec.rb | 2 +- .../projects/forks_controller_spec.rb | 2 +- .../projects/grafana_api_controller_spec.rb | 2 +- .../projects/graphs_controller_spec.rb | 51 +- .../projects/group_links_controller_spec.rb | 2 +- .../projects/hooks_controller_spec.rb | 2 +- .../projects/import/jira_controller_spec.rb | 263 +- .../projects/imports_controller_spec.rb | 2 +- .../projects/issues_controller_spec.rb | 11 +- .../projects/jobs_controller_spec.rb | 196 +- .../projects/labels_controller_spec.rb | 2 +- .../projects/logs_controller_spec.rb | 2 +- .../projects/mattermosts_controller_spec.rb | 2 +- .../conflicts_controller_spec.rb | 2 +- .../merge_requests/content_controller_spec.rb | 2 +- .../creations_controller_spec.rb | 2 +- .../merge_requests/diffs_controller_spec.rb | 2 +- .../merge_requests/drafts_controller_spec.rb | 455 + .../merge_requests_controller_spec.rb | 34 +- .../projects/milestones_controller_spec.rb | 4 +- .../projects/mirrors_controller_spec.rb | 2 +- .../projects/notes_controller_spec.rb | 8 +- .../projects/pages_controller_spec.rb | 2 +- .../projects/pages_domains_controller_spec.rb | 2 +- .../dashboards_controller_spec.rb | 2 +- .../pipeline_schedules_controller_spec.rb | 2 +- .../projects/pipelines_controller_spec.rb | 115 +- .../pipelines_settings_controller_spec.rb | 2 +- .../project_members_controller_spec.rb | 2 +- .../prometheus/alerts_controller_spec.rb | 2 +- .../prometheus/metrics_controller_spec.rb | 2 +- .../protected_branches_controller_spec.rb | 2 +- .../protected_tags_controller_spec.rb | 2 +- .../projects/raw_controller_spec.rb | 2 +- .../projects/refs_controller_spec.rb | 4 +- .../registry/repositories_controller_spec.rb | 4 +- .../projects/registry/tags_controller_spec.rb | 2 +- .../releases/evidences_controller_spec.rb | 63 +- .../projects/releases_controller_spec.rb | 2 +- .../projects/repositories_controller_spec.rb | 2 +- .../projects/runners_controller_spec.rb | 2 +- .../serverless/functions_controller_spec.rb | 2 +- .../service_hook_logs_controller_spec.rb | 2 +- .../projects/services_controller_spec.rb | 42 +- .../settings/access_tokens_controller_spec.rb | 2 +- .../settings/ci_cd_controller_spec.rb | 2 +- .../settings/integrations_controller_spec.rb | 2 +- .../settings/operations_controller_spec.rb | 2 +- .../settings/repository_controller_spec.rb | 2 +- .../projects/snippets_controller_spec.rb | 2 +- .../projects/stages_controller_spec.rb | 2 +- .../projects/starrers_controller_spec.rb | 2 +- .../static_site_editor_controller_spec.rb | 2 +- .../projects/tags/releases_controller_spec.rb | 4 +- .../projects/tags_controller_spec.rb | 68 +- .../projects/templates_controller_spec.rb | 2 +- .../projects/todos_controller_spec.rb | 2 +- .../projects/tree_controller_spec.rb | 2 +- .../projects/uploads_controller_spec.rb | 2 +- .../projects/usage_ping_controller_spec.rb | 2 +- .../projects/variables_controller_spec.rb | 2 +- .../web_ide_terminals_controller_spec.rb | 304 + .../projects/wikis_controller_spec.rb | 282 +- spec/controllers/projects_controller_spec.rb | 55 +- .../experience_levels_controller_spec.rb | 143 + .../registrations_controller_spec.rb | 2 +- .../repositories/git_http_controller_spec.rb | 2 +- spec/controllers/root_controller_spec.rb | 2 +- spec/controllers/search_controller_spec.rb | 7 +- .../sent_notifications_controller_spec.rb | 2 +- spec/controllers/sessions_controller_spec.rb | 2 +- .../snippets/notes_controller_spec.rb | 2 +- spec/controllers/snippets_controller_spec.rb | 2 +- spec/controllers/uploads_controller_spec.rb | 8 +- .../user_callouts_controller_spec.rb | 2 +- .../users/terms_controller_spec.rb | 2 +- spec/controllers/users_controller_spec.rb | 2 +- .../development/import_common_metrics_spec.rb | 2 +- .../production/import_common_metrics_spec.rb | 2 +- spec/db/production/settings_spec.rb | 2 +- spec/db/schema_spec.rb | 5 +- spec/dependencies/omniauth_saml_spec.rb | 2 +- spec/factories/alert_management/alerts.rb | 14 + spec/factories/ci/build_report_results.rb | 35 + spec/factories/ci/builds.rb | 23 + spec/factories/ci/job_artifacts.rb | 7 +- spec/factories/ci/pipelines.rb | 12 + spec/factories/ci/ref.rb | 10 +- spec/factories/clusters/clusters.rb | 17 + spec/factories/design_management/designs.rb | 2 +- spec/factories/draft_note.rb | 31 + spec/factories/events.rb | 47 +- spec/factories/evidences.rb | 2 + spec/factories/group_import_states.rb | 25 + spec/factories/keys.rb | 4 + spec/factories/labels.rb | 12 + spec/factories/merge_requests.rb | 16 + spec/factories/notes.rb | 24 +- spec/factories/project_group_links.rb | 5 + .../project_repository_storage_moves.rb | 4 + spec/factories/projects.rb | 6 + spec/factories/releases/link.rb | 1 + spec/factories/reviews.rb | 9 + spec/factories/services.rb | 13 +- spec/factories/usage_data.rb | 7 + spec/factories_spec.rb | 2 +- spec/fast_spec_helper.rb | 1 + spec/features/abuse_report_spec.rb | 2 +- spec/features/action_cable_logging_spec.rb | 47 + .../admin/admin_abuse_reports_spec.rb | 2 +- spec/features/admin/admin_appearance_spec.rb | 2 +- .../admin/admin_broadcast_messages_spec.rb | 2 +- .../admin/admin_browse_spam_logs_spec.rb | 2 +- spec/features/admin/admin_builds_spec.rb | 2 +- ...admin_disables_git_access_protocol_spec.rb | 2 +- .../admin/admin_disables_two_factor_spec.rb | 2 +- spec/features/admin/admin_groups_spec.rb | 4 +- .../features/admin/admin_health_check_spec.rb | 2 +- spec/features/admin/admin_hook_logs_spec.rb | 2 +- spec/features/admin/admin_hooks_spec.rb | 2 +- spec/features/admin/admin_mode/login_spec.rb | 2 +- spec/features/admin/admin_mode/logout_spec.rb | 2 +- .../features/admin/admin_mode/workers_spec.rb | 2 +- spec/features/admin/admin_mode_spec.rb | 2 +- spec/features/admin/admin_projects_spec.rb | 2 +- .../admin/admin_requests_profiles_spec.rb | 2 +- spec/features/admin/admin_runners_spec.rb | 2 +- .../admin_sees_project_statistics_spec.rb | 2 +- .../admin_sees_projects_statistics_spec.rb | 2 +- .../admin/admin_serverless_domains_spec.rb | 2 +- spec/features/admin/admin_settings_spec.rb | 38 +- spec/features/admin/admin_system_info_spec.rb | 2 +- .../admin_users_impersonation_tokens_spec.rb | 2 +- spec/features/admin/admin_users_spec.rb | 2 +- .../admin_uses_repository_checks_spec.rb | 2 +- .../admin/clusters/applications_spec.rb | 2 +- spec/features/admin/clusters/eks_spec.rb | 2 +- spec/features/admin/dashboard_spec.rb | 2 +- .../admin_activates_prometheus_spec.rb | 2 +- spec/features/atom/dashboard_issues_spec.rb | 2 +- spec/features/atom/dashboard_spec.rb | 2 +- spec/features/atom/issues_spec.rb | 2 +- spec/features/atom/users_spec.rb | 2 +- spec/features/boards/add_issues_modal_spec.rb | 2 +- spec/features/boards/boards_spec.rb | 2 +- spec/features/boards/focus_mode_spec.rb | 2 +- spec/features/boards/issue_ordering_spec.rb | 2 +- .../features/boards/keyboard_shortcut_spec.rb | 2 +- spec/features/boards/modal_filter_spec.rb | 2 +- spec/features/boards/multi_select_spec.rb | 2 +- spec/features/boards/multiple_boards_spec.rb | 2 +- spec/features/boards/new_issue_spec.rb | 2 +- .../reload_boards_on_browser_back_spec.rb | 2 +- spec/features/boards/sidebar_spec.rb | 2 +- .../features/boards/sub_group_project_spec.rb | 2 +- spec/features/broadcast_messages_spec.rb | 2 +- spec/features/calendar_spec.rb | 4 +- .../clusters/cluster_detail_page_spec.rb | 2 +- ...installing_applications_shared_examples.rb | 4 +- .../commits/user_uses_quick_actions_spec.rb | 2 +- .../commits/user_view_commits_spec.rb | 2 +- spec/features/commits_spec.rb | 2 +- spec/features/contextual_sidebar_spec.rb | 2 +- spec/features/cycle_analytics_spec.rb | 2 +- spec/features/dashboard/activity_spec.rb | 2 +- .../dashboard/datetime_on_tooltips_spec.rb | 4 +- ...ith_external_authorization_service_spec.rb | 2 +- spec/features/dashboard/groups_list_spec.rb | 2 +- .../dashboard/instance_statistics_spec.rb | 2 +- .../dashboard/issuables_counter_spec.rb | 2 +- spec/features/dashboard/issues_filter_spec.rb | 2 +- spec/features/dashboard/label_filter_spec.rb | 2 +- .../features/dashboard/merge_requests_spec.rb | 2 +- .../features/dashboard/milestone_tabs_spec.rb | 42 - spec/features/dashboard/milestones_spec.rb | 2 +- .../project_member_activity_index_spec.rb | 8 +- spec/features/dashboard/projects_spec.rb | 4 +- spec/features/dashboard/root_explore_spec.rb | 2 +- spec/features/dashboard/shortcuts_spec.rb | 2 +- spec/features/dashboard/snippets_spec.rb | 2 +- .../dashboard/todos/target_state_spec.rb | 2 +- .../dashboard/todos/todos_filtering_spec.rb | 2 +- .../dashboard/todos/todos_sorting_spec.rb | 2 +- spec/features/dashboard/todos/todos_spec.rb | 4 +- .../dashboard/user_filters_projects_spec.rb | 2 +- .../discussion_comments/commit_spec.rb | 2 +- .../discussion_comments/issue_spec.rb | 2 +- .../discussion_comments/merge_request_spec.rb | 2 +- .../discussion_comments/snippets_spec.rb | 2 +- ...splay_system_header_and_footer_bar_spec.rb | 2 +- spec/features/error_pages_spec.rb | 2 +- .../user_filters_errors_by_status_spec.rb | 2 +- .../user_searches_sentry_errors_spec.rb | 2 +- .../user_sees_error_details_spec.rb | 2 +- .../user_sees_error_index_spec.rb | 2 +- spec/features/expand_collapse_diffs_spec.rb | 2 +- spec/features/explore/groups_list_spec.rb | 2 +- spec/features/explore/groups_spec.rb | 2 +- .../explore/user_explores_projects_spec.rb | 2 +- spec/features/global_search_spec.rb | 5 +- spec/features/graphiql_spec.rb | 2 +- spec/features/group_variables_spec.rb | 2 +- spec/features/groups/activity_spec.rb | 2 +- spec/features/groups/board_sidebar_spec.rb | 2 +- spec/features/groups/board_spec.rb | 2 +- .../groups/clusters/applications_spec.rb | 2 +- spec/features/groups/clusters/eks_spec.rb | 2 +- spec/features/groups/clusters/user_spec.rb | 2 +- .../groups/container_registry_spec.rb | 11 +- spec/features/groups/empty_states_spec.rb | 2 +- ...ith_external_authorization_service_spec.rb | 2 +- spec/features/groups/group_settings_spec.rb | 2 +- .../groups/import_export/export_file_spec.rb | 2 +- .../groups/import_export/import_file_spec.rb | 104 + spec/features/groups/issues_spec.rb | 2 +- spec/features/groups/labels/create_spec.rb | 2 +- spec/features/groups/labels/edit_spec.rb | 2 +- spec/features/groups/labels/index_spec.rb | 2 +- .../groups/labels/search_labels_spec.rb | 2 +- .../groups/labels/sort_labels_spec.rb | 2 +- .../groups/labels/subscription_spec.rb | 2 +- .../user_sees_links_to_issuables_spec.rb | 2 +- .../groups/members/filter_members_spec.rb | 2 +- .../groups/members/leave_group_spec.rb | 3 +- .../groups/members/list_members_spec.rb | 2 +- .../groups/members/manage_groups_spec.rb | 2 +- .../groups/members/manage_members_spec.rb | 2 +- ...r_adds_member_with_expiration_date_spec.rb | 2 +- .../master_manages_access_requests_spec.rb | 2 +- .../groups/members/request_access_spec.rb | 2 +- .../groups/members/search_members_spec.rb | 2 +- .../groups/members/sort_members_spec.rb | 2 +- spec/features/groups/merge_requests_spec.rb | 2 +- spec/features/groups/milestone_spec.rb | 84 +- .../groups/milestones_sorting_spec.rb | 19 +- spec/features/groups/navbar_spec.rb | 3 +- spec/features/groups/settings/ci_cd_spec.rb | 2 +- .../groups/settings/group_badges_spec.rb | 2 +- .../groups/settings/repository_spec.rb | 2 +- spec/features/groups/share_lock_spec.rb | 2 +- spec/features/groups/show_spec.rb | 2 +- .../user_browse_projects_group_page_spec.rb | 2 +- .../groups/user_sees_package_sidebar_spec.rb | 2 +- ..._users_dropdowns_in_issuables_list_spec.rb | 2 +- spec/features/groups_spec.rb | 2 +- spec/features/help_pages_spec.rb | 2 +- spec/features/ics/dashboard_issues_spec.rb | 2 +- spec/features/ics/group_issues_spec.rb | 2 +- spec/features/ics/project_issues_spec.rb | 2 +- .../ide/clientside_preview_csp_spec.rb | 2 +- ...static_object_external_storage_csp_spec.rb | 2 +- .../features/ide/user_commits_changes_spec.rb | 12 +- .../ide/user_opens_merge_request_spec.rb | 2 +- spec/features/ide_spec.rb | 2 +- spec/features/import/manifest_import_spec.rb | 2 +- .../instance_statistics/cohorts_spec.rb | 2 +- .../instance_statistics/dev_ops_score_spec.rb | 2 +- .../instance_statistics_spec.rb | 2 +- spec/features/invites_spec.rb | 2 +- .../close_reopen_report_toggle_spec.rb | 2 +- .../issuables/discussion_lock_spec.rb | 2 +- spec/features/issuables/issuable_list_spec.rb | 2 +- .../internal_references_spec.rb | 2 +- .../markdown_references/jira_spec.rb | 2 +- .../issuables/shortcuts_issuable_spec.rb | 2 +- spec/features/issuables/sorting_list_spec.rb | 2 +- .../issuables/user_sees_sidebar_spec.rb | 2 +- .../issues/bulk_assignment_labels_spec.rb | 20 +- ...e_for_discussions_in_merge_request_spec.rb | 2 +- ...single_discussion_in_merge_request_spec.rb | 2 +- spec/features/issues/csv_spec.rb | 2 +- .../filtered_search/dropdown_assignee_spec.rb | 2 +- .../filtered_search/dropdown_author_spec.rb | 2 +- .../filtered_search/dropdown_base_spec.rb | 2 +- .../filtered_search/dropdown_emoji_spec.rb | 2 +- .../filtered_search/dropdown_hint_spec.rb | 2 +- .../filtered_search/dropdown_label_spec.rb | 2 +- .../dropdown_milestone_spec.rb | 2 +- .../filtered_search/dropdown_release_spec.rb | 2 +- .../filtered_search/filter_issues_spec.rb | 2 +- .../filtered_search/recent_searches_spec.rb | 2 +- .../issues/filtered_search/search_bar_spec.rb | 2 +- .../filtered_search/visual_tokens_spec.rb | 2 +- spec/features/issues/form_spec.rb | 2 +- spec/features/issues/gfm_autocomplete_spec.rb | 2 +- .../issues/group_label_sidebar_spec.rb | 2 +- spec/features/issues/issue_detail_spec.rb | 2 +- spec/features/issues/issue_sidebar_spec.rb | 141 +- .../features/issues/keyboard_shortcut_spec.rb | 2 +- spec/features/issues/markdown_toolbar_spec.rb | 2 +- spec/features/issues/move_spec.rb | 2 +- spec/features/issues/note_polling_spec.rb | 2 +- spec/features/issues/notes_on_issues_spec.rb | 2 +- .../issues/resource_label_events_spec.rb | 2 +- spec/features/issues/rss_spec.rb | 2 +- spec/features/issues/spam_issues_spec.rb | 6 +- spec/features/issues/todo_spec.rb | 2 +- spec/features/issues/update_issues_spec.rb | 2 +- .../issues/user_comments_on_issue_spec.rb | 2 +- ...r_creates_branch_and_merge_request_spec.rb | 2 +- ...creates_confidential_merge_request_spec.rb | 2 +- .../user_creates_issue_by_email_spec.rb | 2 +- .../issues/user_creates_issue_spec.rb | 2 +- spec/features/issues/user_edits_issue_spec.rb | 2 +- .../issues/user_filters_issues_spec.rb | 2 +- .../issues/user_interacts_with_awards_spec.rb | 2 +- ..._resets_their_incoming_email_token_spec.rb | 2 +- .../issues/user_sees_breadcrumb_links_spec.rb | 2 +- .../issues/user_sees_empty_state_spec.rb | 2 +- .../issues/user_sees_live_update_spec.rb | 2 +- ...r_sees_sidebar_updates_in_realtime_spec.rb | 2 +- .../issues/user_sorts_issue_comments_spec.rb | 2 +- .../features/issues/user_sorts_issues_spec.rb | 2 +- .../issues/user_toggles_subscription_spec.rb | 2 +- .../issues/user_uses_quick_actions_spec.rb | 2 +- spec/features/issues/user_views_issue_spec.rb | 26 +- .../features/issues/user_views_issues_spec.rb | 2 +- spec/features/labels_hierarchy_spec.rb | 2 +- spec/features/markdown/copy_as_gfm_spec.rb | 4 +- .../markdown/gitlab_flavored_markdown_spec.rb | 2 +- spec/features/markdown/markdown_spec.rb | 12 +- spec/features/markdown/math_spec.rb | 2 +- spec/features/markdown/mermaid_spec.rb | 7 +- spec/features/markdown/metrics_spec.rb | 2 +- .../merge_request/batch_comments_spec.rb | 259 + .../maintainer_edits_fork_spec.rb | 2 +- .../user_accepts_merge_request_spec.rb | 2 +- ...ommits_from_memebers_who_can_merge_spec.rb | 2 +- .../user_assigns_themselves_spec.rb | 2 +- .../merge_request/user_awards_emoji_spec.rb | 2 +- .../user_clicks_merge_request_tabs_spec.rb | 24 + .../user_closes_merge_request_spec.rb | 2 +- .../user_comments_on_commit_spec.rb | 2 +- .../user_comments_on_diff_spec.rb | 46 +- .../user_comments_on_merge_request_spec.rb | 2 +- .../user_creates_image_diff_notes_spec.rb | 2 +- .../user_creates_merge_request_spec.rb | 2 +- .../merge_request/user_creates_mr_spec.rb | 2 +- ...er_customizes_merge_commit_message_spec.rb | 2 +- .../user_edits_assignees_sidebar_spec.rb | 113 +- .../user_edits_merge_request_spec.rb | 2 +- .../merge_request/user_edits_mr_spec.rb | 2 +- .../merge_request/user_expands_diff_spec.rb | 2 +- ...er_interacts_with_batched_mr_diffs_spec.rb | 6 +- .../user_locks_discussion_spec.rb | 2 +- .../user_manages_subscription_spec.rb | 2 +- .../user_merges_immediately_spec.rb | 2 +- .../user_merges_merge_request_spec.rb | 2 +- ...r_merges_only_if_pipeline_succeeds_spec.rb | 2 +- ...user_merges_when_pipeline_succeeds_spec.rb | 2 +- .../user_posts_diff_notes_spec.rb | 4 +- .../merge_request/user_posts_notes_spec.rb | 4 +- .../user_rebases_merge_request_spec.rb | 2 +- .../user_reopens_merge_request_spec.rb | 2 +- .../user_resolves_conflicts_spec.rb | 2 +- ...diff_notes_and_discussions_resolve_spec.rb | 27 +- ...resolves_outdated_diff_discussions_spec.rb | 2 +- .../user_resolves_wip_mr_spec.rb | 2 +- .../user_reverts_merge_request_spec.rb | 2 +- .../merge_request/user_reviews_image_spec.rb | 37 + .../user_scrolls_to_note_on_load_spec.rb | 2 +- .../user_sees_avatar_on_diff_notes_spec.rb | 8 +- .../user_sees_breadcrumb_links_spec.rb | 2 +- .../user_sees_check_out_branch_modal_spec.rb | 2 +- .../user_sees_cherry_pick_modal_spec.rb | 2 +- .../user_sees_closing_issues_message_spec.rb | 2 +- .../user_sees_deleted_target_branch_spec.rb | 2 +- .../user_sees_deployment_widget_spec.rb | 2 +- .../merge_request/user_sees_diff_spec.rb | 2 +- .../user_sees_discussions_spec.rb | 2 +- .../user_sees_empty_state_spec.rb | 2 +- ...epending_on_unresolved_discussions_spec.rb | 2 +- .../user_sees_merge_request_pipelines_spec.rb | 2 +- .../user_sees_merge_widget_spec.rb | 2 +- .../user_sees_mini_pipeline_graph_spec.rb | 2 +- ...ees_mr_from_deleted_forked_project_spec.rb | 2 +- ...sees_mr_with_deleted_source_branch_spec.rb | 2 +- ...ser_sees_notes_from_forked_project_spec.rb | 2 +- ...sees_pipelines_from_forked_project_spec.rb | 2 +- .../merge_request/user_sees_pipelines_spec.rb | 2 +- .../user_sees_system_notes_spec.rb | 2 +- .../merge_request/user_sees_versions_spec.rb | 4 +- .../user_sees_wip_help_message_spec.rb | 2 +- .../user_selects_branches_for_new_mr_spec.rb | 2 +- .../user_suggests_changes_on_diff_spec.rb | 108 +- .../user_toggles_whitespace_changes_spec.rb | 2 +- ...rivate_project_info_through_new_mr_spec.rb | 2 +- .../user_uses_quick_actions_spec.rb | 2 +- .../merge_request/user_views_diffs_spec.rb | 2 +- ...ws_merge_request_from_deleted_fork_spec.rb | 2 +- .../user_views_open_merge_request_spec.rb | 2 +- ...views_user_status_on_merge_request_spec.rb | 2 +- .../filters_generic_behavior_spec.rb | 2 +- .../user_filters_by_assignees_spec.rb | 2 +- .../user_filters_by_labels_spec.rb | 2 +- .../user_filters_by_milestones_spec.rb | 2 +- .../user_filters_by_multiple_criteria_spec.rb | 2 +- .../user_filters_by_target_branch_spec.rb | 2 +- .../user_lists_merge_requests_spec.rb | 2 +- .../merge_requests/user_mass_updates_spec.rb | 2 +- .../user_sorts_merge_requests_spec.rb | 2 +- .../user_squashes_merge_request_spec.rb | 2 +- .../user_views_all_merge_requests_spec.rb | 2 +- .../user_views_closed_merge_requests_spec.rb | 2 +- .../user_views_merged_merge_requests_spec.rb | 2 +- .../user_views_open_merge_requests_spec.rb | 2 +- spec/features/milestone_spec.rb | 16 +- .../milestones/user_creates_milestone_spec.rb | 2 +- .../milestones/user_deletes_milestone_spec.rb | 2 +- .../milestones/user_edits_milestone_spec.rb | 2 +- .../user_promotes_milestone_spec.rb | 2 +- .../user_sees_breadcrumb_links_spec.rb | 2 +- .../milestones/user_views_milestone_spec.rb | 2 +- .../milestones/user_views_milestones_spec.rb | 4 +- spec/features/oauth_login_spec.rb | 2 +- .../features/oauth_provider_authorize_spec.rb | 2 +- .../participants_autocomplete_spec.rb | 2 +- spec/features/password_reset_spec.rb | 2 +- ...late_new_pipeline_vars_with_params_spec.rb | 2 +- spec/features/profile_spec.rb | 2 +- spec/features/profiles/account_spec.rb | 33 +- .../features/profiles/active_sessions_spec.rb | 2 +- spec/features/profiles/chat_names_spec.rb | 2 +- spec/features/profiles/emails_spec.rb | 2 +- spec/features/profiles/gpg_keys_spec.rb | 2 +- spec/features/profiles/keys_spec.rb | 2 +- .../profiles/oauth_applications_spec.rb | 2 +- spec/features/profiles/password_spec.rb | 2 +- .../profiles/personal_access_tokens_spec.rb | 2 +- ...r_changes_notified_of_own_activity_spec.rb | 2 +- .../profiles/user_edit_preferences_spec.rb | 2 +- .../profiles/user_edit_profile_spec.rb | 11 +- .../user_manages_applications_spec.rb | 2 +- .../profiles/user_manages_emails_spec.rb | 2 +- .../user_visits_notifications_tab_spec.rb | 2 +- .../user_visits_profile_account_page_spec.rb | 2 +- ..._visits_profile_authentication_log_spec.rb | 2 +- ...er_visits_profile_preferences_page_spec.rb | 2 +- .../profiles/user_visits_profile_spec.rb | 2 +- .../user_visits_profile_ssh_keys_page_spec.rb | 2 +- spec/features/project_group_variables_spec.rb | 2 +- spec/features/project_variables_spec.rb | 2 +- spec/features/projects/active_tabs_spec.rb | 4 +- spec/features/projects/activity/rss_spec.rb | 2 +- .../activity/user_sees_activity_spec.rb | 2 +- .../activity/user_sees_design_comment_spec.rb | 2 +- .../user_sees_private_activity_spec.rb | 2 +- spec/features/projects/artifacts/file_spec.rb | 2 +- spec/features/projects/artifacts/raw_spec.rb | 2 +- .../artifacts/user_browses_artifacts_spec.rb | 2 +- .../user_downloads_artifacts_spec.rb | 2 +- .../features/projects/badges/coverage_spec.rb | 2 +- spec/features/projects/badges/list_spec.rb | 2 +- .../projects/badges/pipeline_badge_spec.rb | 2 +- .../blobs/blob_line_permalink_updater_spec.rb | 2 +- .../features/projects/blobs/blob_show_spec.rb | 49 +- spec/features/projects/blobs/edit_spec.rb | 2 +- .../projects/blobs/shortcuts_blob_spec.rb | 2 +- ...er_creates_new_blob_in_new_project_spec.rb | 2 +- ...ser_follows_pipeline_suggest_nudge_spec.rb | 2 +- .../branches/download_buttons_spec.rb | 2 +- .../branches/new_branch_ref_dropdown_spec.rb | 2 +- .../branches/user_creates_branch_spec.rb | 2 +- .../branches/user_deletes_branch_spec.rb | 2 +- .../branches/user_views_branches_spec.rb | 2 +- spec/features/projects/branches_spec.rb | 40 +- spec/features/projects/ci/lint_spec.rb | 2 +- ...ssification_label_on_project_pages_spec.rb | 2 +- .../projects/clusters/applications_spec.rb | 2 +- spec/features/projects/clusters/eks_spec.rb | 2 +- spec/features/projects/clusters/gcp_spec.rb | 2 +- spec/features/projects/clusters/user_spec.rb | 2 +- spec/features/projects/clusters_spec.rb | 2 +- spec/features/projects/commit/builds_spec.rb | 2 +- .../projects/commit/cherry_pick_spec.rb | 2 +- .../commit/comments/user_adds_comment_spec.rb | 2 +- .../comments/user_deletes_comments_spec.rb | 2 +- .../comments/user_edits_comments_spec.rb | 2 +- .../projects/commit/diff_notes_spec.rb | 2 +- .../commit/mini_pipeline_graph_spec.rb | 2 +- .../commit/user_comments_on_commit_spec.rb | 2 +- .../commit/user_reverts_commit_spec.rb | 2 +- .../user_views_user_status_on_commit_spec.rb | 2 +- spec/features/projects/commits/rss_spec.rb | 2 +- .../commits/user_browses_commits_spec.rb | 2 +- spec/features/projects/compare_spec.rb | 2 +- .../projects/container_registry_spec.rb | 8 +- spec/features/projects/deploy_keys_spec.rb | 2 +- .../features/projects/diffs/diff_show_spec.rb | 2 +- .../environments/environment_metrics_spec.rb | 2 +- .../projects/environments/environment_spec.rb | 2 +- .../environments/environments_spec.rb | 2 +- .../projects/environments_pod_logs_spec.rb | 2 +- .../projects/features_visibility_spec.rb | 4 +- .../files/dockerfile_dropdown_spec.rb | 2 +- .../projects/files/download_buttons_spec.rb | 2 +- .../files/edit_file_soft_wrap_spec.rb | 2 +- .../projects/files/editing_a_file_spec.rb | 2 +- ...files_sort_submodules_with_folders_spec.rb | 2 +- .../projects/files/find_file_keyboard_spec.rb | 2 +- .../projects/files/gitignore_dropdown_spec.rb | 2 +- .../files/gitlab_ci_yml_dropdown_spec.rb | 2 +- ...project_owner_creates_license_file_spec.rb | 2 +- ...eate_license_file_in_empty_project_spec.rb | 2 +- .../files/template_selector_menu_spec.rb | 2 +- .../files/template_type_dropdown_spec.rb | 2 +- .../projects/files/undo_template_spec.rb | 2 +- ..._a_folder_containing_only_a_folder_spec.rb | 2 +- .../projects/files/user_browses_files_spec.rb | 2 +- .../files/user_browses_lfs_files_spec.rb | 2 +- .../files/user_creates_directory_spec.rb | 2 +- .../projects/files/user_creates_files_spec.rb | 2 +- .../projects/files/user_deletes_files_spec.rb | 2 +- .../projects/files/user_edits_files_spec.rb | 2 +- .../projects/files/user_find_file_spec.rb | 2 +- .../files/user_reads_pipeline_status_spec.rb | 2 +- .../files/user_replaces_files_spec.rb | 2 +- .../files/user_searches_for_files_spec.rb | 2 +- .../projects/files/user_uploads_files_spec.rb | 2 +- spec/features/projects/fork_spec.rb | 2 +- .../features/projects/forks/fork_list_spec.rb | 2 +- .../projects/gfm_autocomplete_load_spec.rb | 2 +- spec/features/projects/graph_spec.rb | 2 +- .../projects/hook_logs/user_reads_log_spec.rb | 2 +- .../import_export/export_file_spec.rb | 2 +- .../import_export/import_file_spec.rb | 2 +- .../projects/issuable_templates_spec.rb | 2 +- .../user_links_to_designs_in_issue_spec.rb | 123 + .../user_paginates_designs_spec.rb | 2 +- .../user_permissions_upload_spec.rb | 2 +- .../user_uploads_designs_spec.rb | 2 +- .../user_views_design_images_spec.rb | 2 +- .../user_views_design_spec.rb | 2 +- .../user_views_designs_spec.rb | 2 +- .../user_views_designs_with_svg_xss_spec.rb | 2 +- ...ith_external_authorization_enabled_spec.rb | 2 +- .../projects/jobs/permissions_spec.rb | 2 +- .../projects/jobs/user_browses_job_spec.rb | 2 +- .../projects/jobs/user_browses_jobs_spec.rb | 2 +- spec/features/projects/jobs_spec.rb | 6 +- .../labels/issues_sorted_by_priority_spec.rb | 2 +- .../projects/labels/search_labels_spec.rb | 2 +- .../projects/labels/sort_labels_spec.rb | 2 +- .../projects/labels/subscription_spec.rb | 2 +- .../labels/update_prioritization_spec.rb | 2 +- .../labels/user_creates_labels_spec.rb | 2 +- .../projects/labels/user_edits_labels_spec.rb | 2 +- .../labels/user_promotes_label_spec.rb | 2 +- .../labels/user_removes_labels_spec.rb | 2 +- .../labels/user_sees_breadcrumb_links_spec.rb | 2 +- .../user_sees_links_to_issuables_spec.rb | 2 +- .../projects/labels/user_views_labels_spec.rb | 2 +- .../anonymous_user_sees_members_spec.rb | 2 +- ..._member_cannot_leave_group_project_spec.rb | 2 +- ...equest_access_to_his_group_project_spec.rb | 2 +- .../projects/members/group_members_spec.rb | 12 +- ...r_cannot_request_access_to_project_spec.rb | 2 +- .../members/groups_with_access_list_spec.rb | 6 +- .../projects/members/invite_group_spec.rb | 16 +- spec/features/projects/members/list_spec.rb | 4 +- ...r_adds_member_with_expiration_date_spec.rb | 2 +- .../master_manages_access_requests_spec.rb | 2 +- ...nnot_request_access_to_his_project_spec.rb | 2 +- .../members/member_leaves_project_spec.rb | 2 +- .../owner_cannot_leave_project_spec.rb | 2 +- ...nnot_request_access_to_his_project_spec.rb | 2 +- .../features/projects/members/sorting_spec.rb | 2 +- .../members/user_requests_access_spec.rb | 2 +- .../projects/merge_request_button_spec.rb | 2 +- .../projects/milestones/milestone_spec.rb | 2 +- .../milestones/milestones_sorting_spec.rb | 2 +- spec/features/projects/milestones/new_spec.rb | 2 +- .../user_interacts_with_labels_spec.rb | 2 +- spec/features/projects/navbar_spec.rb | 2 +- spec/features/projects/network_graph_spec.rb | 2 +- spec/features/projects/new_project_spec.rb | 2 +- .../projects/pages_lets_encrypt_spec.rb | 2 +- spec/features/projects/pages_spec.rb | 4 +- .../projects/pipeline_schedules_spec.rb | 2 +- .../projects/pipelines/pipeline_spec.rb | 2 +- .../projects/pipelines/pipelines_spec.rb | 8 +- .../user_interacts_with_raw_endpoint_spec.rb | 2 +- .../releases/user_views_edit_release_spec.rb | 2 +- .../releases/user_views_release_spec.rb | 2 +- .../releases/user_views_releases_spec.rb | 76 +- spec/features/projects/remote_mirror_spec.rb | 2 +- .../projects/serverless/functions_spec.rb | 2 +- .../services/disable_triggers_spec.rb | 4 +- .../prometheus_external_alerts_spec.rb | 2 +- .../services/user_activates_alerts_spec.rb | 2 +- .../services/user_activates_asana_spec.rb | 2 +- .../services/user_activates_assembla_spec.rb | 2 +- ...user_activates_atlassian_bamboo_ci_spec.rb | 4 +- .../user_activates_emails_on_push_spec.rb | 2 +- .../services/user_activates_flowdock_spec.rb | 2 +- .../services/user_activates_hipchat_spec.rb | 2 +- .../services/user_activates_irker_spec.rb | 2 +- .../user_activates_issue_tracker_spec.rb | 2 +- ...er_activates_jetbrains_teamcity_ci_spec.rb | 4 +- .../services/user_activates_jira_spec.rb | 2 +- ...activates_mattermost_slash_command_spec.rb | 2 +- .../services/user_activates_packagist_spec.rb | 2 +- .../user_activates_pivotaltracker_spec.rb | 2 +- .../user_activates_prometheus_spec.rb | 2 +- .../services/user_activates_pushover_spec.rb | 2 +- ...user_activates_slack_notifications_spec.rb | 18 +- ...user_activates_slack_slash_command_spec.rb | 12 +- .../services/user_views_services_spec.rb | 2 +- .../projects/settings/access_tokens_spec.rb | 2 +- ...nal_authorization_service_settings_spec.rb | 2 +- .../settings/forked_project_settings_spec.rb | 2 +- .../projects/settings/lfs_settings_spec.rb | 2 +- .../settings/operations_settings_spec.rb | 2 +- .../settings/pipelines_settings_spec.rb | 2 +- .../projects/settings/project_badges_spec.rb | 2 +- .../settings/project_settings_spec.rb | 2 +- .../settings/registry_settings_spec.rb | 17 +- .../settings/repository_settings_spec.rb | 2 +- .../settings/user_archives_project_spec.rb | 2 +- .../settings/user_changes_avatar_spec.rb | 2 +- .../user_changes_default_branch_spec.rb | 2 +- .../user_interacts_with_deploy_keys_spec.rb | 2 +- .../settings/user_manages_group_links_spec.rb | 44 - ...er_manages_merge_requests_settings_spec.rb | 2 +- .../user_manages_project_members_spec.rb | 2 +- .../settings/user_renames_a_project_spec.rb | 2 +- ...ser_sees_revoke_deploy_token_modal_spec.rb | 2 +- .../settings/user_tags_project_spec.rb | 2 +- .../settings/user_transfers_a_project_spec.rb | 2 +- .../settings/visibility_settings_spec.rb | 2 +- .../settings/webhooks_settings_spec.rb | 2 +- ...r_views_empty_project_instructions_spec.rb | 2 +- .../projects/show/download_buttons_spec.rb | 2 +- .../projects/show/no_password_spec.rb | 2 +- spec/features/projects/show/redirects_spec.rb | 2 +- spec/features/projects/show/rss_spec.rb | 2 +- ..._interacts_with_auto_devops_banner_spec.rb | 2 +- .../show/user_interacts_with_stars_spec.rb | 2 +- .../show/user_manages_notifications_spec.rb | 2 +- .../user_sees_collaboration_links_spec.rb | 2 +- ...user_sees_deletion_failure_message_spec.rb | 2 +- .../show/user_sees_git_instructions_spec.rb | 2 +- .../user_sees_last_commit_ci_status_spec.rb | 2 +- .../projects/show/user_sees_readme_spec.rb | 2 +- .../user_sees_setup_shortcut_buttons_spec.rb | 2 +- .../projects/show/user_uploads_files_spec.rb | 2 +- .../projects/snippets/create_snippet_spec.rb | 4 +- spec/features/projects/snippets/show_spec.rb | 2 +- .../snippets/user_comments_on_snippet_spec.rb | 2 +- .../snippets/user_deletes_snippet_spec.rb | 2 +- .../snippets/user_updates_snippet_spec.rb | 2 +- .../snippets/user_views_snippets_spec.rb | 2 +- .../features/projects/sourcegraph_csp_spec.rb | 2 +- .../projects/sub_group_issuables_spec.rb | 2 +- .../projects/tags/download_buttons_spec.rb | 2 +- .../projects/tags/user_edits_tags_spec.rb | 2 +- .../projects/tags/user_views_tags_spec.rb | 2 +- .../projects/tree/create_directory_spec.rb | 2 +- .../projects/tree/create_file_spec.rb | 2 +- spec/features/projects/tree/rss_spec.rb | 2 +- spec/features/projects/tree/tree_show_spec.rb | 8 +- .../projects/tree/upload_file_spec.rb | 2 +- .../user_changes_project_visibility_spec.rb | 2 +- .../projects/user_creates_project_spec.rb | 2 +- .../projects/user_sees_sidebar_spec.rb | 2 +- .../projects/user_sees_user_popover_spec.rb | 2 +- .../projects/user_uses_shortcuts_spec.rb | 2 +- .../projects/user_views_empty_project_spec.rb | 2 +- spec/features/projects/view_on_env_spec.rb | 2 +- .../projects/wiki/markdown_preview_spec.rb | 2 +- spec/features/projects/wiki/shortcuts_spec.rb | 2 +- .../wiki/user_creates_wiki_page_spec.rb | 2 +- .../wiki/user_deletes_wiki_page_spec.rb | 2 +- .../wiki/user_git_access_wiki_page_spec.rb | 2 +- .../wiki/user_updates_wiki_page_spec.rb | 4 +- .../wiki/user_views_wiki_empty_spec.rb | 8 +- .../user_views_wiki_in_project_page_spec.rb | 2 +- .../wiki/user_views_wiki_page_spec.rb | 2 +- .../wiki/user_views_wiki_pages_spec.rb | 2 +- ..._views_asciidoc_page_with_includes_spec.rb | 2 +- spec/features/projects_spec.rb | 2 +- spec/features/protected_branches_spec.rb | 2 +- spec/features/protected_tags_spec.rb | 2 +- spec/features/read_only_spec.rb | 2 +- spec/features/reportable_note/commit_spec.rb | 2 +- spec/features/reportable_note/issue_spec.rb | 2 +- .../reportable_note/merge_request_spec.rb | 2 +- .../features/reportable_note/snippets_spec.rb | 2 +- spec/features/runners_spec.rb | 2 +- .../search/user_searches_for_code_spec.rb | 2 +- .../search/user_searches_for_comments_spec.rb | 2 +- .../search/user_searches_for_commits_spec.rb | 2 +- .../search/user_searches_for_issues_spec.rb | 2 +- .../user_searches_for_merge_requests_spec.rb | 2 +- .../user_searches_for_milestones_spec.rb | 2 +- .../search/user_searches_for_projects_spec.rb | 2 +- .../search/user_searches_for_users_spec.rb | 2 +- .../user_searches_for_wiki_pages_spec.rb | 2 +- .../user_uses_header_search_field_spec.rb | 10 +- .../search/user_uses_search_filters_spec.rb | 2 +- spec/features/security/admin_access_spec.rb | 2 +- .../security/dashboard_access_spec.rb | 2 +- .../security/group/internal_access_spec.rb | 2 +- .../security/group/private_access_spec.rb | 2 +- .../security/group/public_access_spec.rb | 2 +- spec/features/security/profile_access_spec.rb | 2 +- .../security/project/internal_access_spec.rb | 6 +- .../security/project/private_access_spec.rb | 6 +- .../security/project/public_access_spec.rb | 6 +- .../project/snippet/internal_access_spec.rb | 2 +- .../project/snippet/private_access_spec.rb | 2 +- .../project/snippet/public_access_spec.rb | 2 +- spec/features/sentry_js_spec.rb | 6 +- spec/features/signed_commits_spec.rb | 2 +- .../snippets/embedded_snippet_spec.rb | 2 +- spec/features/snippets/explore_spec.rb | 2 +- .../snippets/internal_snippet_spec.rb | 2 +- .../notes_on_personal_snippets_spec.rb | 2 +- .../snippets/private_snippets_spec.rb | 2 +- .../features/snippets/public_snippets_spec.rb | 2 +- .../features/snippets/search_snippets_spec.rb | 2 +- spec/features/snippets/show_spec.rb | 2 +- spec/features/snippets/spam_snippets_spec.rb | 6 +- .../snippets/user_creates_snippet_spec.rb | 40 +- .../snippets/user_deletes_snippet_spec.rb | 2 +- .../snippets/user_edits_snippet_spec.rb | 2 +- spec/features/snippets/user_snippets_spec.rb | 2 +- spec/features/snippets_spec.rb | 2 +- spec/features/static_site_editor_spec.rb | 2 +- .../tags/developer_creates_tag_spec.rb | 2 +- .../tags/developer_deletes_tag_spec.rb | 2 +- .../tags/developer_updates_tag_spec.rb | 2 +- .../tags/developer_views_tags_spec.rb | 2 +- spec/features/task_lists_spec.rb | 2 +- spec/features/triggers_spec.rb | 2 +- spec/features/u2f_spec.rb | 4 +- spec/features/unsubscribe_links_spec.rb | 2 +- .../user_uploads_avatar_to_group_spec.rb | 2 +- .../user_uploads_avatar_to_profile_spec.rb | 2 +- .../uploads/user_uploads_file_to_note_spec.rb | 2 +- spec/features/usage_stats_consent_spec.rb | 2 +- .../user_can_display_performance_bar_spec.rb | 2 +- .../user_opens_link_to_comment_spec.rb | 2 +- spec/features/user_sees_revert_modal_spec.rb | 2 +- spec/features/user_sorts_things_spec.rb | 2 +- spec/features/users/active_sessions_spec.rb | 2 +- .../add_email_to_existing_account_spec.rb | 2 +- .../features/users/anonymous_sessions_spec.rb | 2 +- spec/features/users/login_spec.rb | 2 +- spec/features/users/logout_spec.rb | 2 +- spec/features/users/overview_spec.rb | 2 +- spec/features/users/rss_spec.rb | 2 +- spec/features/users/show_spec.rb | 2 +- spec/features/users/signup_spec.rb | 8 +- spec/features/users/snippets_spec.rb | 2 +- spec/features/users/terms_spec.rb | 2 +- ...user_browses_projects_on_user_page_spec.rb | 2 +- spec/finders/abuse_reports_finder_spec.rb | 2 +- spec/finders/access_requests_finder_spec.rb | 2 +- spec/finders/admin/projects_finder_spec.rb | 2 +- spec/finders/admin/runners_finder_spec.rb | 81 - .../alert_management/alerts_finder_spec.rb | 14 +- spec/finders/applications_finder_spec.rb | 2 +- .../acts_as_taggable_on/tags_finder_spec.rb | 2 +- .../finders/autocomplete/group_finder_spec.rb | 2 +- .../move_to_project_finder_spec.rb | 2 +- .../autocomplete/project_finder_spec.rb | 2 +- .../finders/autocomplete/users_finder_spec.rb | 2 +- spec/finders/award_emojis_finder_spec.rb | 2 +- spec/finders/boards/visits_finder_spec.rb | 2 +- spec/finders/branches_finder_spec.rb | 2 +- ..._build_group_report_results_finder_spec.rb | 28 +- spec/finders/ci/job_artifacts_finder_spec.rb | 2 +- spec/finders/ci/jobs_finder_spec.rb | 2 +- .../ci/pipeline_schedules_finder_spec.rb | 2 +- spec/finders/ci/pipelines_finder_spec.rb | 2 +- ...pipelines_for_merge_request_finder_spec.rb | 2 +- spec/finders/ci/runner_jobs_finder_spec.rb | 2 +- spec/finders/ci/runners_finder_spec.rb | 304 + spec/finders/cluster_ancestors_finder_spec.rb | 2 +- .../clusters/knative_services_finder_spec.rb | 2 +- spec/finders/clusters_finder_spec.rb | 2 +- spec/finders/concerns/finder_methods_spec.rb | 2 +- .../finder_with_cross_project_access_spec.rb | 2 +- .../container_repositories_finder_spec.rb | 2 +- spec/finders/context_commits_finder_spec.rb | 2 +- .../contributed_projects_finder_spec.rb | 2 +- spec/finders/deployments_finder_spec.rb | 2 +- .../design_management/designs_finder_spec.rb | 2 +- .../design_management/versions_finder_spec.rb | 2 +- spec/finders/environments_finder_spec.rb | 2 +- spec/finders/events_finder_spec.rb | 14 +- spec/finders/fork_projects_finder_spec.rb | 2 +- spec/finders/fork_targets_finder_spec.rb | 2 +- spec/finders/freeze_periods_finder_spec.rb | 2 +- spec/finders/group_descendants_finder_spec.rb | 2 +- spec/finders/group_labels_finder_spec.rb | 2 +- spec/finders/group_members_finder_spec.rb | 2 +- spec/finders/group_projects_finder_spec.rb | 2 +- spec/finders/groups_finder_spec.rb | 8 +- spec/finders/issues_finder_spec.rb | 2 +- spec/finders/joined_groups_finder_spec.rb | 2 +- spec/finders/keys_finder_spec.rb | 2 +- spec/finders/labels_finder_spec.rb | 84 +- spec/finders/license_template_finder_spec.rb | 2 +- spec/finders/members_finder_spec.rb | 2 +- ...erge_request_target_project_finder_spec.rb | 2 +- spec/finders/merge_requests_finder_spec.rb | 83 +- .../dashboards/annotations_finder_spec.rb | 2 +- .../users_starred_dashboards_finder_spec.rb | 2 +- spec/finders/milestones_finder_spec.rb | 2 +- spec/finders/notes_finder_spec.rb | 2 +- spec/finders/pending_todos_finder_spec.rb | 2 +- .../personal_access_tokens_finder_spec.rb | 2 +- spec/finders/personal_projects_finder_spec.rb | 2 +- .../projects/export_job_finder_spec.rb | 2 +- .../projects/prometheus/alerts_finder_spec.rb | 2 +- .../serverless/functions_finder_spec.rb | 2 +- spec/finders/projects_finder_spec.rb | 2 +- .../finders/prometheus_metrics_finder_spec.rb | 2 +- .../finders/protected_branches_finder_spec.rb | 2 +- spec/finders/releases_finder_spec.rb | 2 +- .../resource_label_event_finder_spec.rb | 61 - .../resource_milestone_event_finder_spec.rb | 83 + spec/finders/sentry_issue_finder_spec.rb | 2 +- spec/finders/serverless_domain_finder_spec.rb | 2 +- spec/finders/snippets_finder_spec.rb | 2 +- spec/finders/starred_projects_finder_spec.rb | 2 +- spec/finders/tags_finder_spec.rb | 2 +- spec/finders/template_finder_spec.rb | 2 +- spec/finders/todos_finder_spec.rb | 2 +- spec/finders/uploader_finder_spec.rb | 55 + spec/finders/user_finder_spec.rb | 2 +- .../finders/user_recent_events_finder_spec.rb | 2 +- spec/finders/users_finder_spec.rb | 14 +- .../users_star_projects_finder_spec.rb | 2 +- .../users_with_pending_todos_finder_spec.rb | 2 +- .../entities/merge_request_noteable.json | 3 +- .../fixtures/api/schemas/evidences/issue.json | 1 - .../api/schemas/evidences/milestone.json | 9 +- .../api/schemas/public_api/v4/board.json | 3 +- .../api/schemas/registry/repository.json | 15 +- spec/fixtures/api/schemas/release/link.json | 3 +- .../gitlab/database/structure_example.sql | 1 - .../database/structure_example_cleaned.sql | 2 - .../metrics/dashboard/sample_dashboard.yml | 13 + .../metrics/dashboard/schemas/dashboard.json | 4 +- .../metrics/dashboard/schemas/links.json | 9 + .../metrics/dashboard/schemas/templating.json | 8 + .../schemas/text_variable_full_syntax.json | 12 + .../schemas/text_variable_options.json | 7 + .../metrics/dashboard/schemas/variables.json | 12 + spec/fixtures/lsif.json.gz | Bin 759 -> 0 bytes .../conan/package_files/conan_package.tgz | Bin 0 -> 2125 bytes .../conan/package_files/conaninfo.txt | 33 + .../conan/package_files/conanmanifest.txt | 4 + .../packages/conan/recipe_files/conanfile.py | 47 + .../conan/recipe_files/conanmanifest.txt | 2 + .../packages/maven/maven-metadata.xml | 25 + .../maven/my-app-1.0-20180724.124855-1.jar | Bin 0 -> 2526 bytes .../maven/my-app-1.0-20180724.124855-1.pom | 34 + spec/fixtures/packages/npm/foo-1.0.1.tgz | Bin 0 -> 134 bytes spec/fixtures/packages/npm/payload.json | 30 + .../npm/payload_with_duplicated_packages.json | 44 + spec/fixtures/packages/nuget/package.nupkg | Bin 0 -> 3513 bytes .../packages/nuget/with_dependencies.nuspec | 19 + .../packages/nuget/with_metadata.nuspec | 19 + .../packages/pypi/sample-project.tar.gz | Bin 0 -> 1149 bytes spec/fixtures/trace/sample_trace | 3 - spec/frontend/.eslintrc.yml | 2 +- spec/frontend/__mocks__/lodash/throttle.js | 4 + .../frontend/__mocks__/monaco-editor/index.js | 3 + .../alert_management_detail_spec.js | 167 +- .../components/alert_management_list_spec.js | 280 +- .../alert_management_system_note_spec.js | 34 + .../alert_managment_sidebar_assignees_spec.js | 133 + .../components/alert_sidebar_spec.js | 55 + .../components/alert_sidebar_status_spec.js | 107 + .../alert_management/mocks/alerts.json | 91 +- .../alerts_service_form_spec.js.snap | 2 +- .../components/alerts_service_form_spec.js | 7 +- spec/frontend/api_spec.js | 56 + .../u2f/authenticate_spec.js | 8 +- .../u2f/mock_u2f_device.js | 0 .../{ => authentication}/u2f/register_spec.js | 2 +- .../{ => authentication}/u2f/util_spec.js | 2 +- .../awards_handler_spec.js | 111 +- .../components/diff_file_drafts_spec.js | 61 + .../components/draft_note_spec.js | 125 + .../components/drafts_count_spec.js | 43 + .../components/preview_item_spec.js | 130 + .../components/publish_button_spec.js | 52 + .../components/publish_dropdown_spec.js | 96 + spec/frontend/batch_comments/mock_data.js | 27 + .../modules/batch_comments/actions_spec.js | 403 + .../modules/batch_comments/getters_spec.js | 27 + .../modules/batch_comments/mutations_spec.js | 159 + .../behaviors/autosize_spec.js | 0 spec/frontend/behaviors/bind_in_out_spec.js | 10 +- .../behaviors/copy_as_gfm_spec.js | 14 +- .../gl_emoji/unicode_support_map_spec.js | 24 +- .../markdown/highlight_current_user_spec.js | 0 .../behaviors/requires_input_spec.js | 0 .../shortcuts/shortcuts_issuable_spec.js | 75 +- .../blob_header_filepath_spec.js.snap | 2 +- .../blob_header_default_actions_spec.js | 8 + .../components/blob_header_filepath_spec.js | 5 +- .../blob/components/blob_header_spec.js | 11 + .../boards/board_list_helper.js} | 0 spec/frontend/boards/board_list_spec.js | 2 +- .../boards/components/board_column_spec.js | 88 +- .../components/board_list_header_spec.js | 166 + spec/frontend/boards/stores/actions_spec.js | 17 +- spec/frontend/boards/stores/mutations_spec.js | 147 +- .../components/ci_variable_modal_spec.js | 40 + .../frontend/clusters/clusters_bundle_spec.js | 9 +- .../__snapshots__/applications_spec.js.snap | 89 + .../components/application_row_spec.js | 443 +- .../clusters/components/applications_spec.js | 428 +- .../fluentd_output_settings_spec.js | 12 +- ...ate_application_confirmation_modal_spec.js | 52 + .../clusters_list/components/clusters_spec.js | 158 +- spec/frontend/clusters_list/mock_data.js | 75 +- .../clusters_list/store/actions_spec.js | 144 +- .../__snapshots__/popover_spec.js.snap | 22 +- .../components/popover_spec.js | 19 +- .../collapsed_sidebar_todo_spec.js | 21 +- spec/frontend/comment_type_toggle_spec.js | 169 + spec/frontend/confirm_modal_spec.js | 6 +- .../__snapshots__/contributors_spec.js.snap | 6 + .../eks_cluster/store/actions_spec.js | 8 +- .../design_note_pin_spec.js.snap | 12 +- .../components/design_note_pin_spec.js | 4 +- .../__snapshots__/design_note_spec.js.snap | 8 +- .../design_notes/design_discussion_spec.js | 241 +- .../design_notes/design_reply_form_spec.js | 6 +- .../toggle_replies_widget_spec.js | 98 + .../components/design_overlay_spec.js | 103 +- .../components/design_presentation_spec.js | 9 +- .../components/design_sidebar_spec.js | 236 + .../upload/__snapshots__/button_spec.js.snap | 6 +- .../design_management/mock_data/design.js | 20 + .../design_management/mock_data/notes.js | 14 + .../design/__snapshots__/index_spec.js.snap | 122 +- .../pages/design/index_spec.js | 137 +- .../design_management/pages/index_spec.js | 36 +- .../frontend/design_management/router_spec.js | 1 + .../utils/design_management_utils_spec.js | 8 +- .../diffs/components/diff_file_spec.js | 2 +- .../components/diff_line_note_form_spec.js | 14 +- .../diffs/components/inline_diff_view_spec.js | 2 +- .../components/parallel_diff_view_spec.js | 2 +- spec/frontend/diffs/mock_data/diff_file.js | 1 + .../frontend/diffs/mock_data/diff_metadata.js | 58 + spec/frontend/diffs/store/actions_spec.js | 228 +- spec/frontend/diffs/store/utils_spec.js | 245 +- spec/frontend/diffs/utils/uuids_spec.js | 92 + spec/frontend/droplab/drop_down_spec.js | 662 + spec/frontend/droplab/hook_spec.js | 94 + .../droplab/plugins/input_setter_spec.js | 259 + .../dropzone_input_spec.js | 68 +- spec/frontend/environment.js | 2 +- .../environments/environments_app_spec.js | 4 +- .../components/error_details_spec.js | 72 +- .../components/error_tracking_list_spec.js | 36 + .../filtered_search_dropdown_manager_spec.js | 36 +- .../filtered_search_visual_tokens_spec.js | 32 +- spec/frontend/fixtures/abuse_reports.rb | 2 +- spec/frontend/fixtures/admin_users.rb | 2 +- .../frontend/fixtures/application_settings.rb | 2 +- .../frontend/fixtures/autocomplete_sources.rb | 2 +- spec/frontend/fixtures/blob.rb | 2 +- spec/frontend/fixtures/boards.rb | 2 +- spec/frontend/fixtures/branches.rb | 2 +- spec/frontend/fixtures/clusters.rb | 2 +- spec/frontend/fixtures/commit.rb | 2 +- spec/frontend/fixtures/deploy_keys.rb | 2 +- spec/frontend/fixtures/groups.rb | 2 +- spec/frontend/fixtures/issues.rb | 4 +- spec/frontend/fixtures/jobs.rb | 2 +- spec/frontend/fixtures/labels.rb | 2 +- spec/frontend/fixtures/merge_requests.rb | 2 +- .../frontend/fixtures/merge_requests_diffs.rb | 2 +- spec/frontend/fixtures/metrics_dashboard.rb | 2 +- spec/frontend/fixtures/pipeline_schedules.rb | 2 +- spec/frontend/fixtures/pipelines.rb | 2 +- spec/frontend/fixtures/projects.rb | 2 +- spec/frontend/fixtures/prometheus_service.rb | 2 +- spec/frontend/fixtures/raw.rb | 2 +- spec/frontend/fixtures/search.rb | 2 +- spec/frontend/fixtures/services.rb | 2 +- spec/frontend/fixtures/sessions.rb | 2 +- spec/frontend/fixtures/snippet.rb | 2 +- ...complete.html => global_search_input.html} | 0 .../fixtures/static/oauth_remember_me.html | 22 +- spec/frontend/fixtures/test_report.rb | 2 +- spec/frontend/fixtures/todos.rb | 2 +- spec/frontend/fixtures/u2f.rb | 2 +- .../gl_dropdown_spec.js | 106 +- .../{javascripts => frontend}/gl_form_spec.js | 63 +- .../global_search_input_spec.js} | 64 +- spec/frontend/header_spec.js | 4 +- .../helpers/dom_shims/element_scroll_to.js | 6 + .../dom_shims/image_element_properties.js | 2 +- spec/frontend/helpers/dom_shims/index.js | 2 + .../helpers/dom_shims/mutation_observer.js | 7 + spec/frontend/helpers/local_storage_helper.js | 20 +- .../helpers/local_storage_helper_spec.js | 21 + spec/frontend/helpers/mock_dom_observer.js | 94 + .../helpers/mock_window_location_helper.js | 43 + .../helpers/scroll_into_view_promise.js | 28 - .../set_window_location_helper_spec.js | 2 +- spec/frontend/helpers/vue_mock_directive.js | 17 + .../helpers/wait_for_attribute_change.js | 16 - spec/frontend/ide/commit_icon_spec.js | 45 + .../ide/components/branches/item_spec.js | 11 +- .../components/commit_sidebar/form_spec.js | 136 +- .../commit_sidebar/list_item_spec.js | 13 +- .../commit_sidebar/message_field_spec.js | 6 +- .../ide/components/ide_sidebar_nav_spec.js | 118 + spec/frontend/ide/components/ide_spec.js | 9 +- .../ide/components/ide_status_list_spec.js | 16 +- .../jobs/__snapshots__/stage_spec.js.snap | 4 +- .../ide/components/jobs/detail_spec.js | 187 + .../components/merge_requests/item_spec.js | 110 +- .../ide/components/new_dropdown/modal_spec.js | 40 + .../components/new_dropdown/upload_spec.js | 2 - .../panes/collapsible_sidebar_spec.js | 127 +- .../ide/components/panes/right_spec.js | 57 +- .../ide/components/pipelines/list_spec.js | 2 +- .../components/repo_commit_section_spec.js | 46 +- .../ide/components/repo_editor_spec.js | 664 + spec/frontend/ide/components/repo_tab_spec.js | 12 +- .../frontend/ide/components/repo_tabs_spec.js | 2 - .../ide/components/resizable_panel_spec.js | 114 + .../components/terminal/empty_state_spec.js | 107 + .../ide/components/terminal/session_spec.js | 96 + .../terminal/terminal_controls_spec.js | 65 + .../ide/components/terminal/terminal_spec.js | 225 + .../ide/components/terminal/view_spec.js | 91 + .../terminal_sync_status_safe_spec.js | 47 + .../terminal_sync_status_spec.js | 99 + spec/frontend/ide/file_helpers.js | 35 + spec/frontend/ide/ide_router_spec.js | 37 +- spec/frontend/ide/lib/common/model_spec.js | 72 + spec/frontend/ide/lib/create_diff_spec.js | 182 + .../frontend/ide/lib/create_file_diff_spec.js | 163 + spec/frontend/ide/lib/diff/diff_spec.js | 8 + spec/frontend/ide/lib/editor_options_spec.js | 11 - spec/frontend/ide/lib/editor_spec.js | 46 +- .../ide/lib/editorconfig/mock_data.js | 146 + .../ide/lib/editorconfig/parser_spec.js | 18 + .../ide/lib/editorconfig/rules_mapper_spec.js | 43 + spec/frontend/ide/lib/files_spec.js | 4 - spec/frontend/ide/lib/mirror_spec.js | 184 + spec/frontend/ide/stores/actions/file_spec.js | 40 +- .../ide/stores/actions/merge_request_spec.js | 52 +- .../ide/stores/actions/project_spec.js | 67 +- .../ide/stores/actions/tree_spec.js | 44 +- .../ide/stores/actions_spec.js | 146 +- spec/frontend/ide/stores/extend_spec.js | 74 + spec/frontend/ide/stores/getters_spec.js | 65 + .../ide/stores/modules/commit/actions_spec.js | 117 +- .../ide/stores/modules/pane/getters_spec.js | 32 +- .../ide/stores/modules/router/actions_spec.js | 19 + .../stores/modules/router/mutations_spec.js | 23 + .../modules/terminal/actions/checks_spec.js | 289 + .../terminal/actions/session_controls_spec.js | 300 + .../terminal/actions/session_status_spec.js | 169 + .../modules/terminal/actions/setup_spec.js | 40 + .../stores/modules/terminal/getters_spec.js | 50 + .../stores/modules/terminal/messages_spec.js | 38 + .../stores/modules/terminal/mutations_spec.js | 142 + .../modules/terminal_sync/actions_spec.js | 118 + .../modules/terminal_sync/mutations_spec.js | 89 + .../ide/stores/mutations/file_spec.js | 37 - spec/frontend/ide/stores/mutations_spec.js | 36 - .../ide/stores/plugins/terminal_spec.js | 58 + .../ide/stores/plugins/terminal_sync_spec.js | 72 + spec/frontend/ide/stores/utils_spec.js | 93 +- .../ide/sync_router_and_store_spec.js | 150 + spec/frontend/ide/utils_spec.js | 137 +- .../components/bitbucket_status_table_spec.js | 59 + .../components/import_projects_table_spec.js | 320 +- .../provider_repo_table_row_spec.js | 11 +- .../import_projects/store/actions_spec.js | 189 +- .../import_projects/store/getters_spec.js | 15 + .../importer_status_spec.js | 21 +- .../edit/components/dynamic_field_spec.js | 179 + .../edit/components/integration_form_spec.js | 21 + .../issue_show/components/app_spec.js | 335 +- .../components/pinned_links_spec.js | 34 +- .../components/jira_import_app_spec.js | 28 +- spec/frontend/jira_import/mock_data.js | 72 + .../jira_import/utils/cache_update_spec.js | 64 + .../jira_import_utils_spec.js} | 31 +- .../jobs/components/artifacts_block_spec.js | 158 +- spec/frontend/jobs/components/job_log_spec.js | 2 +- .../frontend/jobs/components/log/mock_data.js | 2 +- .../labels_issue_sidebar_spec.js | 10 +- spec/frontend/lazy_loader_spec.js | 153 + spec/frontend/lib/utils/common_utils_spec.js | 81 + spec/frontend/lib/utils/text_markdown_spec.js | 16 +- spec/frontend/lib/utils/text_utility_spec.js | 16 + spec/frontend/lib/utils/url_utility_spec.js | 17 + spec/frontend/line_highlighter_spec.js | 268 + .../logs/components/environment_logs_spec.js | 4 +- spec/frontend/logs/stores/actions_spec.js | 73 +- spec/frontend/matchers.js | 33 + spec/frontend/matchers_spec.js | 48 + .../merge_request_spec.js | 70 +- spec/frontend/merge_request_tabs_spec.js | 293 + .../mini_pipeline_graph_dropdown_spec.js | 18 +- .../__snapshots__/alert_widget_spec.js.snap | 6 +- .../dashboard_template_spec.js.snap | 10 +- .../components/charts/anomaly_spec.js | 2 - .../components/charts/column_spec.js | 52 +- .../components/charts/heatmap_spec.js | 115 +- .../components/charts/stacked_column_spec.js | 195 +- .../components/charts/time_series_spec.js | 368 +- .../components/dashboard_panel_spec.js | 160 +- .../monitoring/components/dashboard_spec.js | 215 +- .../components/dashboard_template_spec.js | 13 +- .../components/dashboard_url_time_spec.js | 5 +- .../duplicate_dashboard_form_spec.js | 2 + .../components/embeds/metric_embed_spec.js | 3 + .../monitoring/components/embeds/mock_data.js | 1 - .../monitoring/components/graph_group_spec.js | 20 + .../components/links_section_spec.js | 64 + .../components/variables_section_spec.js | 17 +- spec/frontend/monitoring/mock_data.js | 137 +- .../monitoring/pages/dashboard_page_spec.js | 36 + .../frontend/monitoring/store/actions_spec.js | 116 +- .../frontend/monitoring/store/getters_spec.js | 40 +- spec/frontend/monitoring/store/index_spec.js | 23 + .../monitoring/store/mutations_spec.js | 26 +- spec/frontend/monitoring/store/utils_spec.js | 188 + .../monitoring/store/variable_mapping_spec.js | 27 +- spec/frontend/monitoring/store_utils.js | 23 +- .../namespace_storage_limit_alert_spec.js | 36 + .../notes/components/diff_with_note_spec.js | 9 +- .../discussion_reply_placeholder_spec.js | 2 +- .../multiline_comment_utils_spec.js | 49 + .../notes/components/note_actions_spec.js | 60 +- .../notes/components/note_form_spec.js | 54 +- .../notes/components/noteable_note_spec.js | 53 +- .../mixins/discussion_navigation_spec.js | 12 +- spec/frontend/notes/mock_data.js | 13 + spec/frontend/notes/stores/actions_spec.js | 214 +- spec/frontend/notes/stores/mutation_spec.js | 117 + spec/frontend/oauth_remember_me_spec.js | 26 +- spec/frontend/onboarding_issues/index_spec.js | 137 + ...board_spec.js => metrics_settings_spec.js} | 110 +- .../store/mutations_spec.js | 12 +- spec/{javascripts => frontend}/pager_spec.js | 33 +- .../dashboard/todos/index}/todos_spec.js | 19 +- .../bitbucket_server_status_table_spec.js | 47 + .../__snapshots__/code_coverage_spec.js.snap | 88 + .../projects/graphs/code_coverage_spec.js | 164 + .../pages/projects/graphs/mock_data.js | 60 + .../new/preserve_url_fragment_spec.js | 25 +- .../new}/signin_tabs_memoizer_spec.js | 36 +- .../pdf/index_spec.js | 4 + .../pdf/page_spec.js | 26 +- .../components/detailed_metric_spec.js | 100 +- .../performance_bar/index_spec.js | 11 +- .../persistent_user_callout_spec.js | 87 +- .../dag/__snapshots__/dag_graph_spec.js.snap | 230 + .../components/dag/dag_graph_spec.js | 218 + .../pipelines/components/dag/dag_spec.js | 137 + .../components/dag/drawing_utils_spec.js | 57 + .../pipelines/components/dag/mock_data.js | 390 + .../components/dag/parsing_utils_spec.js | 133 + .../pipelines_filtered_search_spec.js | 123 +- .../pipelines/graph/graph_component_spec.js | 5 + spec/frontend/pipelines/mock_data.js | 98 + spec/frontend/pipelines/pipelines_spec.js | 9 +- .../tokens/pipeline_branch_name_token_spec.js | 17 +- .../tokens/pipeline_status_token_spec.js | 62 + .../tokens/pipeline_tag_name_token_spec.js | 98 + .../pipeline_trigger_author_token_spec.js | 10 + .../components/app_spec.js | 70 + .../components/legacy_container_spec.js | 63 + .../components/welcome_spec.js | 31 + .../pipelines_area_chart_spec.js.snap | 3 + .../read_more_spec.js | 0 .../__snapshots__/tags_loader_spec.js.snap | 63 + .../details_page/delete_alert_spec.js | 116 + .../details_page/delete_modal_spec.js | 79 + .../details_page/details_header_spec.js | 32 + .../details_page/empty_tags_state.js | 43 + .../details_page/tags_loader_spec.js | 49 + .../details_page/tags_table_spec.js | 286 + .../explorer/components/image_list_spec.js | 74 - .../group_empty_state_spec.js.snap | 0 .../project_empty_state_spec.js.snap | 2 +- .../cli_commands_spec.js} | 4 +- .../{ => list_page}/group_empty_state_spec.js | 4 +- .../list_page/image_list_row_spec.js | 140 + .../components/list_page/image_list_spec.js | 62 + .../project_empty_state_spec.js | 4 +- .../list_page/registry_header_spec.js | 221 + .../components/project_policy_alert_spec.js | 132 - spec/frontend/registry/explorer/mock_data.js | 4 +- .../registry/explorer/pages/details_spec.js | 480 +- .../registry/explorer/pages/index_spec.js | 4 +- .../registry/explorer/pages/list_spec.js | 57 +- .../registry/explorer/stores/getters_spec.js | 29 - .../explorer/stores/mutations_spec.js | 9 +- spec/frontend/registry/explorer/stubs.js | 21 + .../releases/components/app_index_spec.js | 112 +- .../components/asset_links_form_spec.js | 34 +- .../components/release_block_assets_spec.js | 137 + spec/frontend/releases/mock_data.js | 91 + .../stores/modules/detail/actions_spec.js | 49 + .../stores/modules/detail/mutations_spec.js | 41 +- .../stores/modules/list/actions_spec.js | 8 +- .../releases/stores/modules/list/helpers.js | 0 .../stores/modules/list/mutations_spec.js | 0 .../grouped_test_reports_app_spec.js | 312 +- .../reports/mock_data/new_errors_report.json | 20 +- .../right_sidebar_spec.js | 22 +- spec/frontend/shortcuts_spec.js | 46 + .../confidential_issue_sidebar_spec.js | 7 +- .../snippet_blob_edit_spec.js.snap | 2 +- .../snippet_description_edit_spec.js.snap | 82 +- .../snippet_description_view_spec.js.snap | 2 +- .../frontend/snippets/components/edit_spec.js | 136 +- .../components/snippet_blob_view_spec.js | 20 +- .../snippet_description_edit_spec.js | 4 + .../components/edit_area_spec.js | 36 +- .../unsaved_changes_confirm_dialog_spec.js | 44 + spec/frontend/static_site_editor/mock_data.js | 11 +- .../static_site_editor/pages/home_spec.js | 16 + .../services/parse_source_file_spec.js | 64 + .../services/submit_content_changes_spec.js | 30 +- spec/frontend/test_setup.js | 15 - .../toggle_buttons_spec.js | 58 +- spec/frontend/tracking_spec.js | 25 +- .../user_popovers_spec.js | 10 +- .../mr_widget_alert_message_spec.js | 0 .../components/mr_widget_author_spec.js | 2 +- .../components/mr_widget_author_time_spec.js | 2 +- .../components/mr_widget_header_spec.js | 2 +- .../components/mr_widget_memory_usage_spec.js | 24 +- .../components/mr_widget_merge_help_spec.js | 2 +- .../components/mr_widget_pipeline_spec.js | 4 +- .../components/mr_widget_rebase_spec.js | 8 +- .../mr_widget_related_links_spec.js | 2 +- .../components/mr_widget_status_icon_spec.js | 2 +- .../mr_widget_terraform_plan_spec.js | 10 +- .../components/review_app_link_spec.js | 4 +- .../states/mr_widget_archived_spec.js | 2 +- .../mr_widget_auto_merge_enabled_spec.js | 18 +- .../states/mr_widget_checking_spec.js | 2 +- .../states/mr_widget_closed_spec.js | 2 +- .../states/mr_widget_conflicts_spec.js | 9 +- .../states/mr_widget_failed_to_merge_spec.js | 10 +- .../states/mr_widget_merged_spec.js | 12 +- .../states/mr_widget_merging_spec.js | 2 +- .../states/mr_widget_missing_branch_spec.js | 2 +- .../states/mr_widget_not_allowed_spec.js | 2 +- .../states/mr_widget_nothing_to_merge_spec.js | 0 .../states/mr_widget_pipeline_blocked_spec.js | 4 +- .../states/mr_widget_pipeline_failed_spec.js | 2 +- .../states/mr_widget_ready_to_merge_spec.js | 122 +- .../states/mr_widget_sha_mismatch_spec.js | 4 +- .../mr_widget_squash_before_merge_spec.js | 0 .../mr_widget_unresolved_discussions_spec.js | 7 +- .../components/states/mr_widget_wip_spec.js | 17 +- .../date_time_picker_lib_spec.js | 192 +- .../date_time_picker/date_time_picker_spec.js | 274 +- .../components/deprecated_modal_2_spec.js | 31 +- .../components/deprecated_modal_spec.js | 10 +- .../diff_viewer/diff_viewer_spec.js | 30 +- .../diff_viewer/viewers/renamed_spec.js | 283 + .../components/file_finder/index_spec.js | 44 +- .../filtered_search_bar_root_spec.js | 259 + .../filtered_search_bar/mock_data.js | 64 + .../tokens/author_token_spec.js | 150 + .../vue_shared/components/icon_spec.js | 29 +- .../issue/related_issuable_item_spec.js | 14 +- .../suggestion_diff_spec.js.snap | 3 + .../components/markdown/field_spec.js | 4 +- .../markdown/suggestion_diff_header_spec.js | 163 +- .../markdown/suggestion_diff_spec.js | 34 +- .../components/panel_resizer_spec.js | 6 +- .../vue_shared/components/pikaday_spec.js | 38 +- .../project_selector/project_selector_spec.js | 23 + .../editor_service_spec.js | 77 + .../modals/add_image_modal_spec.js | 41 + .../rich_content_editor_spec.js | 59 + .../rich_content_editor/toolbar_item_spec.js | 51 +- .../toolbar_service_spec.js | 29 - .../components/sidebar/date_picker_spec.js | 162 +- .../dropdown_contents_labels_view_spec.js | 5 + .../labels_select_vue/label_item_spec.js | 27 +- .../components/smart_virtual_list_spec.js | 4 +- .../directives/autofocusonshow_spec.js | 14 +- .../vue_shared/directives/tooltip_spec.js | 98 + spec/frontend/vue_shared/translate_spec.js | 214 + .../vuex_shared/modules/modal/actions_spec.js | 2 +- spec/frontend/wikis_spec.js | 2 +- .../zen_mode_spec.js | 18 +- .../ide_integration_spec.js.snap | 2 +- spec/graphql/features/authorization_spec.rb | 2 +- spec/graphql/features/feature_flag_spec.rb | 2 +- spec/graphql/gitlab_schema_spec.rb | 8 +- .../alerts/set_assignees_spec.rb | 167 + .../create_alert_issue_spec.rb | 2 +- .../update_alert_status_spec.rb | 4 +- .../graphql/mutations/branches/create_spec.rb | 2 +- spec/graphql/mutations/commits/create_spec.rb | 180 + .../concerns/mutations/resolves_group_spec.rb | 2 +- .../mutations/resolves_issuable_spec.rb | 2 +- .../mutations/resolves_project_spec.rb | 22 - .../update_spec.rb | 96 + .../design_management/delete_spec.rb | 2 +- .../design_management/upload_spec.rb | 2 +- .../discussions/toggle_resolve_spec.rb | 155 + .../mutations/issues/set_confidential_spec.rb | 2 +- .../mutations/issues/set_due_date_spec.rb | 2 +- .../mutations/merge_requests/create_spec.rb | 87 + .../alert_resolver_spec.rb} | 6 +- spec/graphql/resolvers/base_resolver_spec.rb | 52 +- .../resolvers/concerns/looks_ahead_spec.rb | 177 + .../concerns/resolves_project_spec.rb | 37 + .../resolvers/merge_requests_resolver_spec.rb | 159 +- .../project_members_resolver_spec.rb | 62 + .../project_pipeline_resolver_spec.rb | 36 + .../projects/jira_imports_resolver_spec.rb | 10 - .../projects/jira_projects_resolver_spec.rb | 81 + spec/graphql/resolvers/user_resolver_spec.rb | 45 + spec/graphql/resolvers/users_resolver_spec.rb | 51 + spec/graphql/types/access_level_enum_spec.rb | 11 + spec/graphql/types/access_level_type_spec.rb | 13 + .../types/alert_management/alert_type_spec.rb | 3 + spec/graphql/types/base_field_spec.rb | 19 - .../types/commit_action_mode_enum_spec.rb | 11 + .../types/commit_encoding_enum_spec.rb | 11 + ...ner_expiration_policy_cadence_enum_spec.rb | 9 + ...tainer_expiration_policy_keep_enum_spec.rb | 9 + ..._expiration_policy_older_than_enum_spec.rb | 9 + .../container_expiration_policy_type_spec.rb | 27 + spec/graphql/types/evidence_type_spec.rb | 15 + spec/graphql/types/group_member_type_spec.rb | 19 + spec/graphql/types/group_type_spec.rb | 2 + spec/graphql/types/jira_import_type_spec.rb | 5 +- spec/graphql/types/merge_request_type_spec.rb | 5 +- .../types/metrics/dashboard_type_spec.rb | 2 +- .../types/notes/diff_position_type_spec.rb | 17 +- .../types/notes/discussion_type_spec.rb | 16 +- spec/graphql/types/notes/note_type_spec.rb | 22 +- .../graphql/types/notes/noteable_type_spec.rb | 11 +- .../graphql/types/project_member_type_spec.rb | 19 + spec/graphql/types/project_type_spec.rb | 34 +- .../types/projects/jira_project_type_spec.rb | 11 + .../types/projects/jira_service_type_spec.rb | 2 +- spec/graphql/types/query_type_spec.rb | 13 +- .../graphql/types/release_assets_type_spec.rb | 27 + spec/graphql/types/release_links_type_spec.rb | 15 + .../graphql/types/release_source_type_spec.rb | 15 + spec/graphql/types/release_type_spec.rb | 14 +- .../types/resolvable_interface_spec.rb | 16 + spec/graphql/types/snippet_type_spec.rb | 114 +- .../snippets/file_input_action_enum_spec.rb | 11 + .../types/snippets/file_input_type_spec.rb | 15 + spec/graphql/types/user_type_spec.rb | 14 +- spec/helpers/application_helper_spec.rb | 25 +- .../application_settings_helper_spec.rb | 23 + spec/helpers/auto_devops_helper_spec.rb | 4 +- spec/helpers/clusters_helper_spec.rb | 16 + spec/helpers/environments_helper_spec.rb | 4 +- spec/helpers/events_helper_spec.rb | 15 + spec/helpers/gitlab_routing_helper_spec.rb | 30 + spec/helpers/issues_helper_spec.rb | 53 - spec/helpers/markup_helper_spec.rb | 4 +- spec/helpers/namespaces_helper_spec.rb | 92 + spec/helpers/notes_helper_spec.rb | 30 + spec/helpers/page_layout_helper_spec.rb | 15 + .../projects/alert_management_helper_spec.rb | 4 +- spec/helpers/projects_helper_spec.rb | 34 +- .../recaptcha_experiment_helper_spec.rb | 6 + spec/helpers/search_helper_spec.rb | 93 - .../subscribable_banner_helper_spec.rb | 11 + ...elper_spec.rb => timeboxes_helper_spec.rb} | 35 +- ...ec.rb => timeboxes_routing_helper_spec.rb} | 2 +- spec/helpers/todos_helper_spec.rb | 63 +- spec/helpers/visibility_level_helper_spec.rb | 78 + spec/helpers/wiki_helper_spec.rb | 6 +- ...actionpack_generate_old_csrf_token_spec.rb | 47 + spec/initializers/database_config_spec.rb | 15 + spec/initializers/google_api_client_spec.rb | 17 - spec/initializers/lograge_spec.rb | 2 +- spec/javascripts/comment_type_toggle_spec.js | 168 - spec/javascripts/droplab/drop_down_spec.js | 650 - spec/javascripts/droplab/hook_spec.js | 73 - .../droplab/plugins/input_setter_spec.js | 214 - .../helpers/scroll_into_view_promise.js | 28 - .../helpers/vuex_action_helper_spec.js | 166 - .../helpers/wait_for_attribute_change.js | 16 - .../ide/components/jobs/detail_spec.js | 184 - .../ide/components/repo_editor_spec.js | 512 - spec/javascripts/ide/helpers.js | 1 - spec/javascripts/ide/mock_data.js | 1 - spec/javascripts/lazy_loader_spec.js | 244 - spec/javascripts/line_highlighter_spec.js | 261 - spec/javascripts/merge_request_tabs_spec.js | 283 - spec/javascripts/releases/mock_data.js | 148 - spec/javascripts/shortcuts_spec.js | 46 - spec/javascripts/vue_mr_widget/mock_data.js | 2 - .../issue/related_issuable_mock_data.js | 1 - .../vue_shared/directives/tooltip_spec.js | 89 - spec/javascripts/vue_shared/translate_spec.js | 251 - spec/lib/api/entities/release_spec.rb | 6 +- .../validators/untrusted_regexp_spec.rb | 28 + .../filter/design_reference_filter_spec.rb | 307 + .../external_issue_reference_filter_spec.rb | 30 +- .../banzai/filter/gollum_tags_filter_spec.rb | 34 +- .../filter/issue_reference_filter_spec.rb | 44 +- .../filter/label_reference_filter_spec.rb | 22 +- .../filter/repository_link_filter_spec.rb | 8 +- .../banzai/filter/wiki_link_filter_spec.rb | 16 +- .../pipeline/description_pipeline_spec.rb | 4 +- .../lib/banzai/pipeline/wiki_pipeline_spec.rb | 67 +- .../constraints/feature_constrainer_spec.rb | 7 +- spec/lib/extracts_path_spec.rb | 126 +- spec/lib/extracts_ref_spec.rb | 23 + spec/lib/feature/gitaly_spec.rb | 2 +- spec/lib/feature_spec.rb | 180 +- spec/lib/gitaly/server_spec.rb | 19 + .../alert_management/alert_params_spec.rb | 3 +- .../alert_status_counts_spec.rb | 13 + .../alert_management/fingerprint_spec.rb | 48 + spec/lib/gitlab/alerting/alert_spec.rb | 4 +- .../notification_payload_parser_spec.rb | 35 +- .../base_query_builder_spec.rb | 4 +- .../cycle_analytics/records_fetcher_spec.rb | 4 +- spec/lib/gitlab/auth/auth_finders_spec.rb | 24 +- spec/lib/gitlab/auth/ldap/person_spec.rb | 7 +- ...assignees_migration_progress_check_spec.rb | 8 +- .../reset_merge_status_spec.rb | 24 +- spec/lib/gitlab/badge/coverage/report_spec.rb | 2 +- .../gitlab/badge/coverage/template_spec.rb | 46 +- .../gitlab/badge/pipeline/template_spec.rb | 50 +- .../gitlab/bitbucket_import/importer_spec.rb | 5 +- spec/lib/gitlab/cache/import/caching_spec.rb | 15 +- spec/lib/gitlab/chat_spec.rb | 10 +- .../ci/build/credentials/factory_spec.rb | 10 +- spec/lib/gitlab/ci/build/releaser_spec.rb | 51 + spec/lib/gitlab/ci/build/step_spec.rb | 26 +- .../gitlab/ci/config/entry/reports_spec.rb | 1 + spec/lib/gitlab/ci/config/entry/retry_spec.rb | 4 +- .../ci/parsers/terraform/tfplan_spec.rb | 72 +- .../lib/gitlab/ci/pipeline/chain/seed_spec.rb | 4 + .../gitlab/ci/pipeline/chain/sequence_spec.rb | 15 +- .../ci/pipeline/seed/build/cache_spec.rb | 2 +- .../ci/reports/terraform_reports_spec.rb | 14 +- .../gitlab/ci/status/bridge/factory_spec.rb | 3 +- .../ci/status/stage/play_manual_spec.rb | 2 +- spec/lib/gitlab/ci/yaml_processor_spec.rb | 2 +- .../orphan_lfs_file_references_spec.rb | 45 + .../cluster/mixins/puma_cluster_spec.rb | 4 +- .../mixins/unicorn_http_server_spec.rb | 4 +- spec/lib/gitlab/code_navigation_path_spec.rb | 17 +- spec/lib/gitlab/config/entry/factory_spec.rb | 11 +- spec/lib/gitlab/config/loader/yaml_spec.rb | 47 + .../lib/gitlab/contributions_calendar_spec.rb | 8 +- .../cycle_analytics/stage_summary_spec.rb | 80 +- spec/lib/gitlab/danger/changelog_spec.rb | 4 +- spec/lib/gitlab/danger/helper_spec.rb | 2 + spec/lib/gitlab/danger/roulette_spec.rb | 193 +- spec/lib/gitlab/data_builder/alert_spec.rb | 26 + .../gitlab/database/custom_structure_spec.rb | 65 + .../gitlab/database/migration_helpers_spec.rb | 151 +- .../database/obsolete_ignored_columns_spec.rb | 55 +- .../foreign_key_helpers_spec.rb} | 79 +- .../table_management_helpers_spec.rb | 289 + .../gitlab/database/schema_cleaner_spec.rb | 4 - .../gitlab/database/with_lock_retries_spec.rb | 5 +- .../dependency_linker/go_mod_linker_spec.rb | 94 + .../dependency_linker/go_sum_linker_spec.rb | 65 + spec/lib/gitlab/dependency_linker_spec.rb | 16 + spec/lib/gitlab/diff/file_spec.rb | 12 + .../diff/formatters/image_formatter_spec.rb | 1 + .../diff/formatters/text_formatter_spec.rb | 1 + spec/lib/gitlab/diff/position_spec.rb | 80 + spec/lib/gitlab/doctor/secrets_spec.rb | 42 + .../email/handler/create_note_handler_spec.rb | 24 +- .../processor/sidekiq_processor_spec.rb | 165 + spec/lib/gitlab/error_tracking_spec.rb | 30 +- spec/lib/gitlab/etag_caching/router_spec.rb | 12 +- spec/lib/gitlab/experimentation_spec.rb | 2 +- spec/lib/gitlab/gfm/uploads_rewriter_spec.rb | 18 +- spec/lib/gitlab/git/diff_collection_spec.rb | 46 +- spec/lib/gitlab/git/diff_spec.rb | 30 + .../gitlab/git/rugged_impl/use_rugged_spec.rb | 14 +- spec/lib/gitlab/git_access_project_spec.rb | 166 + spec/lib/gitlab/git_access_spec.rb | 150 +- .../gitaly_client/commit_service_spec.rb | 68 +- spec/lib/gitlab/gitaly_client_spec.rb | 6 +- .../importer/pull_requests_importer_spec.rb | 8 +- .../gitlab/gl_repository/identifier_spec.rb | 82 + .../gitlab/gl_repository/repo_type_spec.rb | 10 +- spec/lib/gitlab/gl_repository_spec.rb | 2 +- spec/lib/gitlab/gon_helper_spec.rb | 10 +- .../filterable_array_connection_spec.rb | 29 - .../pagination/keyset/connection_spec.rb | 114 +- .../import/merge_request_creator_spec.rb | 2 +- spec/lib/gitlab/import/set_async_jid_spec.rb | 2 +- spec/lib/gitlab/import_export/all_models.yml | 15 +- .../attributes_permitter_spec.rb | 77 + .../import_test_coverage_spec.rb | 101 +- .../lib/gitlab/import_export/importer_spec.rb | 51 + .../json/streaming_serializer_spec.rb | 22 + .../legacy_relation_tree_saver_spec.rb | 34 +- .../project/relation_factory_spec.rb | 47 +- .../project/tree_restorer_spec.rb | 2 +- .../import_export/project/tree_saver_spec.rb | 2 +- .../import_export/repo_restorer_spec.rb | 27 +- .../import_export/safe_model_attributes.yml | 13 + spec/lib/gitlab/import_export/saver_spec.rb | 12 +- .../snippet_repo_restorer_spec.rb | 16 +- .../snippets_repo_restorer_spec.rb | 83 +- .../gitlab/instrumentation/redis_base_spec.rb | 144 + .../instrumentation/redis_interceptor_spec.rb | 45 + spec/lib/gitlab/instrumentation/redis_spec.rb | 114 + .../lib/gitlab/instrumentation_helper_spec.rb | 57 +- spec/lib/gitlab/issuable_metadata_spec.rb | 10 +- .../gitlab/jira_import/base_importer_spec.rb | 16 +- .../jira_import/issues_importer_spec.rb | 35 +- .../jira_import/labels_importer_spec.rb | 1 - spec/lib/gitlab/jira_import_spec.rb | 125 +- spec/lib/gitlab/kubernetes/helm/api_spec.rb | 5 +- .../kubernetes/helm/base_command_spec.rb | 25 +- .../kubernetes/helm/delete_command_spec.rb | 7 +- .../kubernetes/helm/init_command_spec.rb | 2 +- .../kubernetes/helm/install_command_spec.rb | 8 +- .../kubernetes/helm/patch_command_spec.rb | 8 +- .../kubernetes/helm/reset_command_spec.rb | 2 +- .../gitlab/kubernetes/network_policy_spec.rb | 288 +- spec/lib/gitlab/lfs_token_spec.rb | 78 +- .../lib/gitlab/lograge/custom_options_spec.rb | 57 +- spec/lib/gitlab/looping_batcher_spec.rb | 71 - .../gitlab/metrics/dashboard/finder_spec.rb | 4 +- .../metrics/dashboard/processor_spec.rb | 24 +- .../elasticsearch_rack_middleware_spec.rb | 57 + spec/lib/gitlab/metrics/method_call_spec.rb | 4 +- spec/lib/gitlab/metrics/methods_spec.rb | 4 +- .../metrics/redis_rack_middleware_spec.rb | 61 + .../metrics/samplers/database_sampler_spec.rb | 12 +- .../metrics/samplers/puma_sampler_spec.rb | 12 +- .../metrics/samplers/ruby_sampler_spec.rb | 12 +- .../gitlab/metrics/sidekiq_middleware_spec.rb | 20 +- .../metrics/subscribers/active_record_spec.rb | 132 +- spec/lib/gitlab/metrics/transaction_spec.rb | 40 +- .../handle_ip_spoof_attack_error_spec.rb | 24 + spec/lib/gitlab/monitor/demo_projects_spec.rb | 37 + spec/lib/gitlab/no_cache_headers_spec.rb | 7 +- .../pagination/keyset/request_context_spec.rb | 12 +- .../action_dispatch_journey_formatter_spec.rb | 2 +- spec/lib/gitlab/path_regex_spec.rb | 21 +- .../phabricator_import/cache/map_spec.rb | 2 +- .../process_memory_cache/helper_spec.rb | 52 + .../lib/gitlab/project_search_results_spec.rb | 75 +- spec/lib/gitlab/project_template_spec.rb | 33 +- .../gitlab/prometheus/query_variables_spec.rb | 40 +- spec/lib/gitlab/prometheus_client_spec.rb | 52 + spec/lib/gitlab/redis/wrapper_spec.rb | 16 +- spec/lib/gitlab/reference_extractor_spec.rb | 6 +- spec/lib/gitlab/regex_spec.rb | 134 +- spec/lib/gitlab/routing_spec.rb | 21 + .../lib/gitlab/rugged_instrumentation_spec.rb | 6 +- .../lib/gitlab/search_context/builder_spec.rb | 152 + .../search_context/controller_concern_spec.rb | 82 + .../gitlab/sidekiq_config/cli_methods_spec.rb | 45 +- spec/lib/gitlab/sidekiq_config/worker_spec.rb | 9 +- spec/lib/gitlab/sidekiq_config_spec.rb | 3 +- .../sidekiq_logging/json_formatter_spec.rb | 49 +- .../sidekiq_logging/structured_logger_spec.rb | 10 +- .../sidekiq_middleware/client_metrics_spec.rb | 7 +- .../duplicate_jobs/client_spec.rb | 49 +- .../duplicate_jobs/duplicate_job_spec.rb | 65 +- .../strategies/until_executing_spec.rb | 85 +- .../sidekiq_middleware/server_metrics_spec.rb | 58 +- spec/lib/gitlab/sidekiq_middleware_spec.rb | 2 +- .../gitlab/sidekiq_versioning/manager_spec.rb | 3 +- spec/lib/gitlab/sourcegraph_spec.rb | 2 +- .../gitlab/suggestions/commit_message_spec.rb | 87 + .../suggestions/file_suggestion_spec.rb | 241 + .../gitlab/suggestions/suggestion_set_spec.rb | 110 + spec/lib/gitlab/tracking_spec.rb | 11 +- spec/lib/gitlab/url_builder_spec.rb | 32 + .../usage_data_concerns/topology_spec.rb | 220 + .../search_counter_spec.rb | 18 +- spec/lib/gitlab/usage_data_spec.rb | 1039 +- spec/lib/gitlab/utils/usage_data_spec.rb | 111 + spec/lib/gitlab/utils_spec.rb | 13 + .../web_ide/config/entry/global_spec.rb | 164 + .../web_ide/config/entry/terminal_spec.rb | 156 + spec/lib/gitlab/web_ide/config_spec.rb | 78 + .../wiki_pages/front_matter_parser_spec.rb | 2 +- spec/lib/gitlab_spec.rb | 42 + spec/lib/milestone_array_spec.rb | 36 - spec/lib/object_storage/direct_upload_spec.rb | 117 +- spec/lib/peek/views/bullet_detailed_spec.rb | 54 + spec/lib/peek/views/redis_detailed_spec.rb | 13 +- spec/lib/peek/views/rugged_spec.rb | 2 +- spec/lib/quality/test_level_spec.rb | 8 +- spec/mailers/emails/profile_spec.rb | 32 +- spec/mailers/notify_spec.rb | 61 +- ...4345_add_admin_mode_protected_path_spec.rb | 9 +- ...nfidential_note_events_on_services_spec.rb | 46 - ...rom_notification_settings_to_users_spec.rb | 36 - .../add_foreign_keys_to_todos_spec.rb | 69 - ..._settings_to_all_existing_projects_spec.rb | 93 + ...to_project_mirror_data_foreign_key_spec.rb | 20 - ...es_access_level_to_project_feature_spec.rb | 32 - .../add_pipeline_build_foreign_key_spec.rb | 34 - ...int_to_project_features_project_id_spec.rb | 61 - ...mmits_count_for_merge_request_diff_spec.rb | 34 - ...fill_imported_snippet_repositories_spec.rb | 52 + ...ckfill_releases_name_with_tag_name_spec.rb | 23 - ...ll_status_page_published_incidents_spec.rb | 54 + ...ll_store_project_full_path_in_repo_spec.rb | 98 - ...signs_filename_length_to_new_limit_spec.rb | 60 + ...ault_value_for_dsa_key_restriction_spec.rb | 35 - .../cleanup_build_stage_migration_spec.rb | 55 - .../cleanup_environments_external_url_spec.rb | 30 - ...up_projects_with_missing_namespace_spec.rb | 32 +- .../cleanup_stages_position_migration_spec.rb | 69 - ...ssing_namespace_for_internal_users_spec.rb | 39 - .../drop_duplicate_protected_tags_spec.rb | 42 - .../encrypt_deploy_tokens_tokens_spec.rb | 47 - ...nqueue_verify_pages_domain_workers_spec.rb | 29 - ...l_empty_finished_at_in_deployments_spec.rb | 72 - spec/migrations/fill_file_store_spec.rb | 45 - .../generate_missing_routes_spec.rb | 86 - spec/migrations/import_common_metrics_spec.rb | 16 - ...ter_configure_worker_sidekiq_queue_spec.rb | 64 - ...reate_trace_artifact_sidekiq_queue_spec.rb | 62 - .../migrate_forbidden_redirect_uris_spec.rb | 48 - ..._legacy_artifacts_to_job_artifacts_spec.rb | 75 - .../migrate_null_wiki_access_levels_spec.rb | 29 - ...bject_storage_upload_sidekiq_queue_spec.rb | 29 - ...ne_for_merge_request_sidekiq_queue_spec.rb | 60 - ..._empty_extern_uid_auth0_identities_spec.rb | 24 - .../remove_redundant_pipeline_stages_spec.rb | 61 - ...reschedule_builds_stages_migration_spec.rb | 39 - ...mmits_count_for_merge_request_diff_spec.rb | 39 - ...dule_digest_personal_access_tokens_spec.rb | 48 - .../schedule_runners_token_encryption_spec.rb | 40 - ...nfidential_note_events_on_webhooks_spec.rb | 46 - .../schedule_stages_index_migration_spec.rb | 37 - .../schedule_to_archive_legacy_traces_spec.rb | 47 - .../seed_repository_storages_weighted_spec.rb | 31 + .../steal_fill_store_upload_spec.rb | 40 - ...te_project_import_visibility_level_spec.rb | 86 - ..._found_group_and_orphaned_projects_spec.rb | 182 + spec/models/active_session_spec.rb | 2 +- .../alert_management/alert_assignee_spec.rb | 21 + spec/models/alert_management/alert_spec.rb | 20 + .../alert_user_mention_spec.rb | 12 + spec/models/application_setting_spec.rb | 53 + spec/models/blob_viewer/go_mod_spec.rb | 63 + .../blob_viewer/metrics_dashboard_yml_spec.rb | 127 + spec/models/broadcast_message_spec.rb | 6 +- spec/models/ci/bridge_spec.rb | 5 + spec/models/ci/build_report_result_spec.rb | 74 + spec/models/ci/build_runner_session_spec.rb | 60 + spec/models/ci/build_spec.rb | 99 +- spec/models/ci/build_trace_chunk_spec.rb | 2 +- .../daily_build_group_report_result_spec.rb | 24 + spec/models/ci/instance_variable_spec.rb | 33 +- spec/models/ci/job_artifact_spec.rb | 79 +- spec/models/ci/pipeline_schedule_spec.rb | 2 +- spec/models/ci/pipeline_spec.rb | 186 +- spec/models/ci/ref_spec.rb | 153 +- spec/models/ci/runner_spec.rb | 10 +- .../applications/elastic_stack_spec.rb | 10 + .../clusters/applications/prometheus_spec.rb | 8 +- spec/models/clusters/cluster_spec.rb | 159 +- spec/models/commit_status_spec.rb | 19 +- spec/models/concerns/bulk_insert_safe_spec.rb | 4 +- .../concerns/cacheable_attributes_spec.rb | 4 +- spec/models/concerns/each_batch_spec.rb | 2 +- spec/models/concerns/featurable_spec.rb | 184 + spec/models/concerns/issuable_spec.rb | 22 +- spec/models/concerns/limitable_spec.rb | 55 + spec/models/concerns/milestoneish_spec.rb | 4 +- .../concerns/resolvable_discussion_spec.rb | 22 +- spec/models/concerns/sortable_spec.rb | 2 +- .../container_expiration_policy_spec.rb | 41 + spec/models/container_repository_spec.rb | 6 + spec/models/deployment_spec.rb | 8 +- spec/models/design_management/design_spec.rb | 89 +- spec/models/diff_note_spec.rb | 30 +- spec/models/draft_note_spec.rb | 42 + spec/models/environment_spec.rb | 2 +- spec/models/event_spec.rb | 178 +- spec/models/fork_network_member_spec.rb | 2 +- spec/models/global_milestone_spec.rb | 208 - spec/models/group_deploy_key_spec.rb | 11 + spec/models/group_group_link_spec.rb | 26 + spec/models/group_import_state_spec.rb | 72 + spec/models/group_milestone_spec.rb | 57 - spec/models/group_spec.rb | 29 + spec/models/hooks/system_hook_spec.rb | 4 +- spec/models/instance_configuration_spec.rb | 2 +- spec/models/integration_spec.rb | 21 + spec/models/internal_id_spec.rb | 41 - spec/models/issue/metrics_spec.rb | 10 +- spec/models/issue_spec.rb | 55 +- spec/models/iteration_spec.rb | 16 +- spec/models/jira_import_state_spec.rb | 37 +- spec/models/member_spec.rb | 6 +- spec/models/members/group_member_spec.rb | 32 +- spec/models/members/project_member_spec.rb | 6 +- spec/models/merge_request_diff_commit_spec.rb | 2 +- spec/models/merge_request_spec.rb | 178 +- .../metrics/dashboard/annotation_spec.rb | 33 + spec/models/milestone_spec.rb | 183 +- spec/models/note_spec.rb | 52 +- spec/models/pages_domain_spec.rb | 8 +- .../prometheus_dashboard_spec.rb | 178 +- .../prometheus_metric_spec.rb | 8 + .../prometheus_panel_group_spec.rb | 10 +- .../prometheus_panel_spec.rb | 10 +- spec/models/personal_access_token_spec.rb | 9 + spec/models/project_ci_cd_setting_spec.rb | 19 - spec/models/project_feature_spec.rb | 131 - spec/models/project_group_link_spec.rb | 16 - spec/models/project_import_state_spec.rb | 24 + spec/models/project_metrics_setting_spec.rb | 18 +- .../project_repository_storage_move_spec.rb | 46 +- .../chat_message/alert_message_spec.rb | 57 + .../chat_message/merge_message_spec.rb | 8 +- .../chat_message/pipeline_message_spec.rb | 34 +- .../emails_on_push_service_spec.rb | 28 +- .../project_services/hipchat_service_spec.rb | 4 +- .../project_services/jira_service_spec.rb | 16 +- .../pipelines_email_service_spec.rb | 16 - .../prometheus_service_spec.rb | 45 + spec/models/project_spec.rb | 271 +- spec/models/project_team_spec.rb | 16 +- spec/models/project_wiki_spec.rb | 4 +- spec/models/prometheus_alert_event_spec.rb | 4 +- spec/models/push_event_spec.rb | 6 +- spec/models/release_spec.rb | 8 - spec/models/releases/evidence_spec.rb | 80 +- spec/models/remote_mirror_spec.rb | 24 +- spec/models/repository_spec.rb | 24 +- spec/models/resource_label_event_spec.rb | 44 + spec/models/resource_milestone_event_spec.rb | 30 + spec/models/review_spec.rb | 44 + spec/models/service_spec.rb | 58 +- .../snippet_input_action_collection_spec.rb | 47 + spec/models/snippet_input_action_spec.rb | 89 + spec/models/todo_spec.rb | 24 +- spec/models/user_interacted_project_spec.rb | 17 +- spec/models/user_spec.rb | 87 +- spec/models/web_ide_terminal_spec.rb | 82 + spec/models/wiki_directory_spec.rb | 2 +- spec/models/wiki_page_spec.rb | 11 +- spec/policies/ci/build_policy_spec.rb | 125 + spec/policies/group_policy_spec.rb | 2 +- spec/policies/project_policy_spec.rb | 181 +- spec/policies/releases/source_policy_spec.rb | 88 + .../presenters/gitlab/blame_presenter_spec.rb | 45 + .../prometheus/alert_presenter_spec.rb | 35 +- spec/presenters/snippet_presenter_spec.rb | 21 + spec/requests/api/admin/ci/variables_spec.rb | 16 + spec/requests/api/commits_spec.rb | 31 +- spec/requests/api/deploy_keys_spec.rb | 54 +- spec/requests/api/events_spec.rb | 6 +- spec/requests/api/features_spec.rb | 38 +- spec/requests/api/files_spec.rb | 26 +- .../graphql/boards/board_lists_query_spec.rb | 64 +- .../api/graphql/group/labels_query_spec.rb | 19 + .../graphql/metrics/dashboard_query_spec.rb | 56 +- .../alerts/create_alert_issue_spec.rb | 74 + .../alerts/set_assignees_spec.rb | 65 + .../alerts/update_alert_status_spec.rb | 20 +- .../graphql/mutations/commits/create_spec.rb | 52 + .../update_spec.rb | 110 + .../discussions/toggle_resolve_spec.rb | 49 + .../jira_import/import_users_spec.rb | 104 + .../mutations/jira_import/start_spec.rb | 64 +- .../mutations/merge_requests/create_spec.rb | 51 + .../dashboard/annotations/delete_spec.rb | 80 + .../graphql/mutations/snippets/create_spec.rb | 40 +- .../alert_management/alert/assignees_spec.rb | 78 + .../alert_management/alert/notes_spec.rb | 67 + .../alert_status_counts_spec.rb | 16 + .../project/alert_management/alerts_spec.rb | 3 +- .../container_expiration_policy_spec.rb | 30 + .../api/graphql/project/issues_spec.rb | 2 +- .../api/graphql/project/jira_import_spec.rb | 36 +- .../api/graphql/project/jira_projects_spec.rb | 114 + .../api/graphql/project/labels_query_spec.rb | 19 + .../api/graphql/project/merge_request_spec.rb | 24 + .../graphql/project/merge_requests_spec.rb | 174 + .../api/graphql/project/pipeline_spec.rb | 32 + .../api/graphql/project/release_spec.rb | 206 + .../api/graphql/project_query_spec.rb | 48 + .../tasks/task_completion_status_spec.rb | 8 +- .../graphql/user/group_member_query_spec.rb | 32 + .../graphql/user/project_member_query_spec.rb | 32 + spec/requests/api/graphql/user_query_spec.rb | 260 + spec/requests/api/graphql/user_spec.rb | 55 + spec/requests/api/graphql/users_spec.rb | 90 + spec/requests/api/graphql_spec.rb | 58 + spec/requests/api/group_export_spec.rb | 34 + spec/requests/api/groups_spec.rb | 219 +- spec/requests/api/internal/base_spec.rb | 30 +- spec/requests/api/issues/issues_spec.rb | 6 + .../api/issues/put_projects_issues_spec.rb | 223 +- spec/requests/api/jobs_spec.rb | 172 + spec/requests/api/labels_spec.rb | 4 +- spec/requests/api/lsif_data_spec.rb | 95 - spec/requests/api/markdown_spec.rb | 15 +- spec/requests/api/merge_requests_spec.rb | 34 + spec/requests/api/oauth_tokens_spec.rb | 61 +- .../project_container_repositories_spec.rb | 34 + spec/requests/api/project_events_spec.rb | 12 +- spec/requests/api/project_export_spec.rb | 41 +- .../project_repository_storage_moves_spec.rb | 168 +- spec/requests/api/projects_spec.rb | 105 +- spec/requests/api/releases_spec.rb | 104 - spec/requests/api/repositories_spec.rb | 8 +- .../api/resource_milestone_events_spec.rb | 27 + spec/requests/api/runner_spec.rb | 150 +- spec/requests/api/runners_spec.rb | 26 - spec/requests/api/search_spec.rb | 48 +- spec/requests/api/settings_spec.rb | 19 +- spec/requests/api/suggestions_spec.rb | 144 +- spec/requests/api/terraform/state_spec.rb | 81 +- spec/requests/api/users_spec.rb | 481 +- .../registry/repositories_controller_spec.rb | 2 +- .../import/gitlab_groups_controller_spec.rb | 258 + spec/requests/user_spoofs_ip_spec.rb | 12 + spec/routing/project_routing_spec.rb | 2 - .../active_record_association_reload_spec.rb | 12 +- ...avoid_route_redirect_leading_slash_spec.rb | 4 +- spec/rubocop/cop/default_scope_spec.rb | 48 + spec/rubocop/cop/destroy_all_spec.rb | 6 +- spec/rubocop/cop/filename_length_spec.rb | 5 +- spec/rubocop/cop/gitlab/bulk_insert_spec.rb | 19 + .../cop/gitlab/change_timezone_spec.rb | 2 +- .../gitlab/const_get_inherit_false_spec.rb | 12 +- .../gitlab/duplicate_spec_location_spec.rb | 14 +- .../inject_enterprise_edition_module_spec.rb | 14 + spec/rubocop/cop/migration/add_index_spec.rb | 4 +- .../add_limit_to_text_columns_spec.rb | 21 + spec/rubocop/cop/migration/drop_table_spec.rb | 62 + .../cop/migration/prevent_strings_spec.rb | 21 + .../cop/migration/update_large_table_spec.rb | 91 - .../cop/performance/ar_count_each_spec.rb | 3 +- .../ar_exists_and_present_blank_spec.rb | 3 +- .../cop/performance/readlines_each_spec.rb | 3 +- .../cop/put_group_routes_under_scope_spec.rb | 6 +- .../put_project_routes_under_scope_spec.rb | 6 +- .../empty_line_after_shared_example_spec.rb | 86 - .../rspec/modify_sidekiq_middleware_spec.rb | 3 +- .../cop/rspec/top_level_describe_path_spec.rb | 10 +- .../bulk_perform_with_context_spec.rb | 13 +- .../scalability/cron_worker_context_spec.rb | 15 +- .../cop/scalability/file_uploads_spec.rb | 11 +- .../cop/scalability/idempotent_worker_spec.rb | 7 +- .../serializers/build_artifact_entity_spec.rb | 9 +- spec/serializers/ci/dag_job_entity_spec.rb | 13 +- .../ci/dag_pipeline_entity_spec.rb | 49 +- ...y_build_group_report_result_entity_spec.rb | 26 + ...ild_group_report_result_serializer_spec.rb | 38 + spec/serializers/cluster_serializer_spec.rb | 1 + spec/serializers/commit_entity_spec.rb | 6 +- .../container_repository_entity_spec.rb | 4 +- spec/serializers/diffs_entity_spec.rb | 10 + .../evidences/evidence_entity_spec.rb | 60 +- .../bitbucket_provider_repo_entity_spec.rb | 34 + ...bucket_server_provider_repo_entity_spec.rb | 36 + .../fogbugz_provider_repo_entity_spec.rb | 27 + .../githubish_provider_repo_entity_spec.rb | 27 + .../gitlab_provider_repo_entity_spec.rb | 27 + .../import/provider_repo_serializer_spec.rb | 29 + .../merge_request_widget_entity_spec.rb | 2 +- .../serializers/paginated_diff_entity_spec.rb | 10 + .../pipeline_details_entity_spec.rb | 39 - spec/serializers/pipeline_serializer_spec.rb | 4 - spec/serializers/provider_repo_entity_spec.rb | 24 - .../provider_repo_serializer_spec.rb | 9 - spec/serializers/service_field_entity_spec.rb | 99 + .../web_ide_terminal_entity_spec.rb | 27 + .../web_ide_terminal_serializer_spec.rb | 27 + .../propagate_integration_service_spec.rb | 149 + .../alerts/update_service_spec.rb | 134 + .../create_alert_issue_service_spec.rb | 17 +- .../process_prometheus_alert_service_spec.rb | 40 +- spec/services/audit_event_service_spec.rb | 6 +- .../project_create_service_spec.rb | 50 +- spec/services/auto_merge/base_service_spec.rb | 99 +- .../ci/build_report_result_service_spec.rb | 51 + ...ate_cross_project_pipeline_service_spec.rb | 30 +- .../ci/create_pipeline_service_spec.rb | 12 + .../create_web_ide_terminal_service_spec.rb | 143 + .../ci/expire_pipeline_cache_service_spec.rb | 4 +- ...generate_terraform_reports_service_spec.rb | 24 +- .../ci/pipeline_bridge_status_service_spec.rb | 2 +- spec/services/ci/retry_build_service_spec.rb | 7 +- .../ci/update_ci_ref_status_service_spec.rb | 169 - .../ci/web_ide_config_service_spec.rb | 91 + .../check_uninstall_progress_service_spec.rb | 4 +- .../prometheus_config_service_spec.rb | 20 +- ...ster_applications_artifact_service_spec.rb | 14 +- .../concerns/exclusive_lease_guard_spec.rb | 121 + .../update_service_spec.rb | 101 + ...ontainer_expiration_policy_service_spec.rb | 15 + .../delete_designs_service_spec.rb | 26 +- .../save_designs_service_spec.rb | 25 +- .../discussions/resolve_service_spec.rb | 95 +- .../draft_notes/create_service_spec.rb | 94 + .../draft_notes/destroy_service_spec.rb | 52 + .../draft_notes/publish_service_spec.rb | 261 + spec/services/event_create_service_spec.rb | 102 +- .../services/git/branch_hooks_service_spec.rb | 8 +- .../git/wiki_push_service/change_spec.rb | 6 +- spec/services/git/wiki_push_service_spec.rb | 16 +- .../group_links/destroy_service_spec.rb | 10 +- .../import_export/export_service_spec.rb | 21 +- .../import_export/import_service_spec.rb | 63 + spec/services/groups/transfer_service_spec.rb | 9 + spec/services/import/github_service_spec.rb | 55 + .../integrations/test/project_service_spec.rb | 195 + .../issuable/bulk_update_service_spec.rb | 93 +- spec/services/issues/close_service_spec.rb | 23 +- spec/services/issues/create_service_spec.rb | 2 +- .../issues/import_csv_service_spec.rb | 20 +- spec/services/issues/update_service_spec.rb | 34 +- spec/services/jira/requests/projects_spec.rb | 95 + .../jira_import/start_import_service_spec.rb | 26 +- .../jira_import/users_importer_spec.rb | 77 + .../services/jira_import/users_mapper_spec.rb | 43 + .../labels/available_labels_service_spec.rb | 6 + .../merge_requests/close_service_spec.rb | 65 +- .../merge_requests/create_service_spec.rb | 6 +- .../delete_non_latest_diffs_service_spec.rb | 4 +- .../merge_requests/ff_merge_service_spec.rb | 103 +- .../merge_requests/merge_service_spec.rb | 41 +- .../merge_requests/refresh_service_spec.rb | 174 +- .../merge_requests/reopen_service_spec.rb | 22 +- .../check_storage_size_service_spec.rb | 8 +- .../build_service_spec.rb | 52 + spec/services/notification_service_spec.rb | 56 +- .../projects/alerting/notify_service_spec.rb | 65 +- .../cleanup_tags_service_spec.rb | 43 +- spec/services/projects/create_service_spec.rb | 162 +- .../group_links/create_service_spec.rb | 15 +- .../group_links/destroy_service_spec.rb | 18 +- .../group_links/update_service_spec.rb | 56 + .../import_export/export_service_spec.rb | 6 +- .../projects/lsif_data_service_spec.rb | 126 - .../operations/update_service_spec.rb | 33 +- .../alerts/create_events_service_spec.rb | 2 +- .../prometheus/alerts/notify_service_spec.rb | 140 +- .../propagate_service_template_spec.rb | 4 +- .../projects/update_pages_service_spec.rb | 17 + .../update_remote_mirror_service_spec.rb | 17 + .../update_repository_storage_service_spec.rb | 6 +- spec/services/projects/update_service_spec.rb | 78 +- .../create_default_alerts_service_spec.rb | 19 +- .../services/prometheus/proxy_service_spec.rb | 39 + ...roxy_variable_substitution_service_spec.rb | 14 + .../quick_actions/interpret_service_spec.rb | 23 + .../releases/create_evidence_service_spec.rb | 28 + spec/services/releases/create_service_spec.rb | 177 + .../change_state_service_spec.rb | 39 + spec/services/service_response_spec.rb | 10 + .../snippets/bulk_destroy_service_spec.rb | 12 + spec/services/snippets/create_service_spec.rb | 59 +- spec/services/snippets/update_service_spec.rb | 78 + spec/services/spam/akismet_service_spec.rb | 8 +- .../services/spam/spam_action_service_spec.rb | 12 +- .../spam/spam_verdict_service_spec.rb | 262 +- .../submit_usage_ping_service_spec.rb | 3 +- .../suggestions/apply_service_spec.rb | 579 +- .../system_notes/issuables_service_spec.rb | 15 + .../test_hooks/project_service_spec.rb | 16 - .../test_hooks/system_service_spec.rb | 2 - spec/services/todo_service_spec.rb | 316 +- ...ser_project_access_changed_service_spec.rb | 6 +- spec/services/users/destroy_service_spec.rb | 12 + .../migrate_to_ghost_user_service_spec.rb | 9 + .../wiki_pages/event_create_service_spec.rb | 8 +- spec/spec_helper.rb | 51 +- spec/support/action_cable.rb | 7 + spec/support/helpers/api_helpers.rb | 11 - .../helpers/design_management_test_helpers.rb | 3 +- spec/support/helpers/filter_spec_helper.rb | 16 +- spec/support/helpers/graphql_helpers.rb | 65 +- .../helpers/http_basic_auth_helpers.rb | 26 + spec/support/helpers/login_helpers.rb | 6 +- spec/support/helpers/markdown_feature.rb | 8 +- spec/support/helpers/partitioning_helpers.rb | 54 + spec/support/helpers/prometheus_helpers.rb | 47 + .../helpers/stub_action_cable_connection.rb | 7 + spec/support/helpers/stub_feature_flags.rb | 58 +- spec/support/helpers/stub_gitlab_calls.rb | 6 + spec/support/helpers/trigger_helpers.rb | 65 + spec/support/helpers/usage_data_helpers.rb | 24 + spec/support/helpers/wiki_helpers.rb | 4 +- spec/support/import_export/common_util.rb | 2 +- spec/support/let_it_be.rb | 9 + spec/support/matchers/exceed_query_limit.rb | 103 +- spec/support/matchers/graphql_matchers.rb | 22 +- spec/support/rspec.rb | 3 + .../merge_requests_finder_shared_contexts.rb | 31 +- .../navbar_structure_context.rb | 5 +- .../project_service_shared_context.rb | 1 - .../jira_import/jira_projects_context.rb | 104 + .../support/shared_contexts/spam_constants.rb | 9 +- ...ontroller_new_import_ui_shared_examples.rb | 36 + ...issuables_list_metadata_shared_examples.rb | 2 +- .../milestone_tabs_shared_examples.rb | 10 +- ...ace_storage_limit_alert_shared_examples.rb | 53 + .../wiki_actions_shared_examples.rb | 302 + ..._on_merge_request_files_shared_examples.rb | 3 +- .../discussion_comments_shared_example.rb | 6 +- ...ainer_expiration_policy_shared_examples.rb | 12 + .../shared_examples/graphql/label_fields.rb | 124 + .../graphql/members_shared_examples.rb | 22 + .../resolves_issuable_shared_examples.rb | 14 +- .../sorted_paginated_query_shared_examples.rb | 18 +- .../integrations/test_examples.rb | 11 + .../gitlab/gl_repository_shared_examples.rb | 12 + ...tuck_import_job_workers_shared_examples.rb | 44 + .../position_formatters_shared_examples.rb | 16 +- .../lib/gitlab/repo_type_shared_examples.rb | 20 - .../application_setting_shared_examples.rb | 34 +- ...r_application_helm_cert_shared_examples.rb | 2 +- ...lication_initial_status_shared_examples.rb | 2 +- ...ster_application_status_shared_examples.rb | 63 +- ...lob_replicator_strategy_shared_examples.rb | 117 - .../has_repository_shared_examples.rb | 8 +- .../concerns/limitable_shared_examples.rb | 2 +- .../models/wiki_shared_examples.rb | 7 + .../path_extraction_shared_examples.rb | 118 + ...e_tracking_quick_action_shared_examples.rb | 2 +- .../container_repositories_shared_examples.rb | 23 + .../api/diff_discussions_shared_examples.rb | 4 +- ...nd_project_boards_query_shared_examples.rb | 55 +- .../api/issuable_update_shared_examples.rb | 38 + ...source_label_events_api_shared_examples.rb | 14 + ...ce_milestone_events_api_shared_examples.rb | 66 + .../diff_file_entity_shared_examples.rb | 2 +- .../import/import_entity_shared_examples.rb | 21 + ...ainer_expiration_policy_shared_examples.rb | 40 + .../create_service_shared_examples.rb | 2 +- .../destroy_service_shared_examples.rb | 2 +- .../update_service_shared_examples.rb | 2 +- .../uncached_response_shared_examples.rb | 12 + .../helpers/graphql_helpers_spec.rb | 57 + .../helpers/stub_feature_flags_spec.rb | 72 +- .../exceed_query_limit_helpers_spec.rb | 21 +- .../gitlab/container_registry_rake_spec.rb | 123 + spec/tasks/gitlab/db_rake_spec.rb | 61 +- .../lib/tooling/test_file_finder_spec.rb | 111 + spec/uploaders/uploader_helper_spec.rb | 2 +- spec/validators/json_schema_validator_spec.rb | 50 + .../_repository_storage.html.haml_spec.rb | 20 +- spec/views/layouts/_head.html.haml_spec.rb | 13 +- .../nav/sidebar/_project.html.haml_spec.rb | 6 +- .../preferences/show.html.haml_spec.rb | 3 +- spec/views/projects/edit.html.haml_spec.rb | 16 +- .../import_csv/_button.html.haml_spec.rb | 43 + .../merge_requests/show.html.haml_spec.rb | 4 + .../projects/services/_form.haml_spec.rb | 4 +- .../shared/milestones/_top.html.haml_spec.rb | 16 - spec/workers/build_finished_worker_spec.rb | 33 +- .../ci/build_report_result_worker_spec.rb | 30 + .../check_prometheus_health_worker_spec.rb | 19 + .../concerns/application_worker_spec.rb | 40 + .../concerns/project_import_options_spec.rb | 2 +- ...container_expiration_policy_worker_spec.rb | 17 + spec/workers/create_evidence_worker_spec.rb | 17 +- spec/workers/every_sidekiq_worker_spec.rb | 6 + spec/workers/expire_job_cache_worker_spec.rb | 2 +- .../stuck_project_import_jobs_worker_spec.rb | 27 + .../stage/finish_import_worker_spec.rb | 48 +- .../stage/import_attachments_worker_spec.rb | 25 +- .../stage/import_issues_worker_spec.rb | 68 +- .../stage/import_labels_worker_spec.rb | 45 +- .../stage/import_notes_worker_spec.rb | 25 +- .../stage/start_import_worker_spec.rb | 80 +- .../stuck_jira_import_jobs_worker_spec.rb | 39 + spec/workers/group_import_worker_spec.rb | 13 +- .../process_alert_worker_spec.rb | 7 +- .../process_prometheus_alert_worker_spec.rb | 4 +- spec/workers/irker_worker_spec.rb | 99 + .../prune_old_annotations_worker_spec.rb | 40 + .../schedule_annotations_prune_worker_spec.rb | 13 + spec/workers/new_note_worker_spec.rb | 12 +- .../expiring_worker_spec.rb | 22 +- ...pdate_ci_ref_status_worker_service_spec.rb | 1 + spec/workers/post_receive_spec.rb | 2 +- .../propagate_integration_worker_spec.rb | 26 + .../remove_expired_group_links_worker_spec.rb | 43 +- .../single_repository_worker_spec.rb | 4 +- spec/workers/stuck_import_jobs_worker_spec.rb | 47 +- tooling/bin/find_foss_tests | 29 + tooling/lib/tooling/test_file_finder.rb | 78 + tooling/overcommit/Gemfile | 2 +- tooling/overcommit/Gemfile.lock | 61 +- vendor/project_templates/learn_gitlab.tar.gz | Bin 0 -> 114701 bytes yarn.lock | 2712 +- 5513 files changed, 296367 insertions(+), 78792 deletions(-) rename .gitlab/issue_templates/{Acceptance_Testing.md => Acceptance Testing.md} (100%) rename .gitlab/issue_templates/{Problem_Validation.md => Problem Validation.md} (100%) rename .gitlab/issue_templates/{QA failure.md => QA Failure.md} (100%) rename .gitlab/issue_templates/{Solution_validation => Solution Validation.md} (100%) rename .gitlab/issue_templates/{Test plan.md => Test Plan.md} (100%) rename .gitlab/merge_request_templates/{Change documentation location.md => Change Documentation Location.md} (100%) rename .gitlab/merge_request_templates/{New static analysis check.md => New Static Analysis Check.md} (100%) create mode 100644 app/assets/images/aws_logo.svg create mode 100644 app/assets/images/experienced.svg create mode 100644 app/assets/images/learn-gitlab-avatar.jpg create mode 100644 app/assets/images/novice.svg create mode 100644 app/assets/javascripts/alert_management/components/alert_sidebar.vue create mode 100644 app/assets/javascripts/alert_management/components/sidebar/sidebar_assignee.vue create mode 100644 app/assets/javascripts/alert_management/components/sidebar/sidebar_assignees.vue create mode 100644 app/assets/javascripts/alert_management/components/sidebar/sidebar_header.vue create mode 100644 app/assets/javascripts/alert_management/components/sidebar/sidebar_status.vue create mode 100644 app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue create mode 100644 app/assets/javascripts/alert_management/components/system_notes/system_note.vue create mode 100644 app/assets/javascripts/alert_management/graphql/fragments/alert_note.fragment.graphql rename app/assets/javascripts/alert_management/graphql/fragments/{detailItem.fragment.graphql => detail_item.fragment.graphql} (53%) rename app/assets/javascripts/alert_management/graphql/fragments/{listItem.fragment.graphql => list_item.fragment.graphql} (65%) create mode 100644 app/assets/javascripts/alert_management/graphql/mutations/alert_set_assignees.graphql create mode 100644 app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql delete mode 100644 app/assets/javascripts/alert_management/graphql/queries/getAlerts.query.graphql create mode 100644 app/assets/javascripts/alert_management/graphql/queries/get_alerts.query.graphql create mode 100644 app/assets/javascripts/alert_management/graphql/queries/get_count_by_status.query.graphql delete mode 100644 app/assets/javascripts/alert_management/services/index.js create mode 100644 app/assets/javascripts/authentication/mount_2fa.js rename app/assets/javascripts/{ => authentication}/u2f/authenticate.js (91%) rename app/assets/javascripts/{ => authentication}/u2f/error.js (100%) rename app/assets/javascripts/{shared/sessions/u2f.js => authentication/u2f/index.js} (66%) rename app/assets/javascripts/{ => authentication}/u2f/register.js (96%) rename app/assets/javascripts/{ => authentication}/u2f/util.js (100%) delete mode 100644 app/assets/javascripts/avatar_picker.js create mode 100644 app/assets/javascripts/batch_comments/components/diff_file_drafts.vue create mode 100644 app/assets/javascripts/batch_comments/components/draft_note.vue create mode 100644 app/assets/javascripts/batch_comments/components/drafts_count.vue create mode 100644 app/assets/javascripts/batch_comments/components/inline_draft_comment_row.vue create mode 100644 app/assets/javascripts/batch_comments/components/parallel_draft_comment_row.vue create mode 100644 app/assets/javascripts/batch_comments/components/preview_dropdown.vue create mode 100644 app/assets/javascripts/batch_comments/components/preview_item.vue create mode 100644 app/assets/javascripts/batch_comments/components/publish_button.vue create mode 100644 app/assets/javascripts/batch_comments/components/review_bar.vue create mode 100644 app/assets/javascripts/batch_comments/constants.js create mode 100644 app/assets/javascripts/batch_comments/index.js create mode 100644 app/assets/javascripts/batch_comments/services/drafts_service.js create mode 100644 app/assets/javascripts/batch_comments/stores/index.js create mode 100644 app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js create mode 100644 app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js create mode 100644 app/assets/javascripts/batch_comments/stores/modules/batch_comments/index.js create mode 100644 app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutation_types.js create mode 100644 app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js create mode 100644 app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js create mode 100644 app/assets/javascripts/batch_comments/utils.js create mode 100644 app/assets/javascripts/boards/components/board_content.vue create mode 100644 app/assets/javascripts/boards/components/board_list_header.vue create mode 100644 app/assets/javascripts/boards/toggle_epics_swimlanes.js create mode 100644 app/assets/javascripts/clusters/components/update_application_confirmation_modal.vue create mode 100644 app/assets/javascripts/code_navigation/components/doc_line.vue create mode 100644 app/assets/javascripts/design_management/components/design_notes/toggle_replies_widget.vue create mode 100644 app/assets/javascripts/design_management/components/design_sidebar.vue create mode 100644 app/assets/javascripts/design_management/graphql/fragments/discussion_resolved_status.fragment.graphql create mode 100644 app/assets/javascripts/design_management/graphql/mutations/toggle_resolve_discussion.mutation.graphql create mode 100644 app/assets/javascripts/diffs/utils/uuids.js create mode 100644 app/assets/javascripts/file_pickers.js rename app/assets/javascripts/{search_autocomplete.js => global_search_input.js} (68%) create mode 100644 app/assets/javascripts/ide/commit_icon.js create mode 100644 app/assets/javascripts/ide/components/ide_sidebar_nav.vue create mode 100644 app/assets/javascripts/ide/components/terminal/empty_state.vue create mode 100644 app/assets/javascripts/ide/components/terminal/session.vue create mode 100644 app/assets/javascripts/ide/components/terminal/terminal.vue create mode 100644 app/assets/javascripts/ide/components/terminal/terminal_controls.vue create mode 100644 app/assets/javascripts/ide/components/terminal/view.vue create mode 100644 app/assets/javascripts/ide/components/terminal_sync/terminal_sync_status.vue create mode 100644 app/assets/javascripts/ide/components/terminal_sync/terminal_sync_status_safe.vue create mode 100644 app/assets/javascripts/ide/lib/create_diff.js create mode 100644 app/assets/javascripts/ide/lib/create_file_diff.js create mode 100644 app/assets/javascripts/ide/lib/editorconfig/parser.js create mode 100644 app/assets/javascripts/ide/lib/editorconfig/rules_mapper.js create mode 100644 app/assets/javascripts/ide/lib/languages/README.md create mode 100644 app/assets/javascripts/ide/lib/mirror.js create mode 100644 app/assets/javascripts/ide/services/terminals.js create mode 100644 app/assets/javascripts/ide/stores/extend.js create mode 100644 app/assets/javascripts/ide/stores/modules/router/actions.js create mode 100644 app/assets/javascripts/ide/stores/modules/router/index.js create mode 100644 app/assets/javascripts/ide/stores/modules/router/mutation_types.js create mode 100644 app/assets/javascripts/ide/stores/modules/router/mutations.js create mode 100644 app/assets/javascripts/ide/stores/modules/router/state.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/actions/checks.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/actions/index.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/actions/session_controls.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/actions/session_status.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/actions/setup.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/constants.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/getters.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/index.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/messages.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/mutation_types.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/mutations.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/state.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal/utils.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal_sync/actions.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal_sync/index.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal_sync/messages.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal_sync/mutation_types.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal_sync/mutations.js create mode 100644 app/assets/javascripts/ide/stores/modules/terminal_sync/state.js create mode 100644 app/assets/javascripts/ide/stores/plugins/terminal.js create mode 100644 app/assets/javascripts/ide/stores/plugins/terminal_sync.js create mode 100644 app/assets/javascripts/ide/sync_router_and_store.js create mode 100644 app/assets/javascripts/import_projects/components/bitbucket_status_table.vue create mode 100644 app/assets/javascripts/import_projects/components/incompatible_repo_table_row.vue create mode 100644 app/assets/javascripts/integrations/edit/components/dynamic_field.vue create mode 100644 app/assets/javascripts/issue_show/constants.js create mode 100644 app/assets/javascripts/jira_import/utils/cache_update.js rename app/assets/javascripts/jira_import/{utils.js => utils/jira_import_utils.js} (81%) create mode 100644 app/assets/javascripts/logs/logs_tracking_helper.js create mode 100644 app/assets/javascripts/monitoring/components/dashboard_header.vue create mode 100644 app/assets/javascripts/monitoring/components/links_section.vue create mode 100644 app/assets/javascripts/monitoring/format_date.js create mode 100644 app/assets/javascripts/monitoring/monitoring_app.js delete mode 100644 app/assets/javascripts/monitoring/monitoring_bundle.js delete mode 100644 app/assets/javascripts/monitoring/monitoring_bundle_with_alerts.js create mode 100644 app/assets/javascripts/monitoring/pages/dashboard_page.vue create mode 100644 app/assets/javascripts/monitoring/router/constants.js create mode 100644 app/assets/javascripts/monitoring/router/index.js create mode 100644 app/assets/javascripts/monitoring/router/routes.js create mode 100644 app/assets/javascripts/namespace_storage_limit_alert.js create mode 100644 app/assets/javascripts/notes/components/multiline_comment_form.vue create mode 100644 app/assets/javascripts/notes/components/multiline_comment_utils.js delete mode 100644 app/assets/javascripts/notes/mixins/draft.js delete mode 100644 app/assets/javascripts/notes/mixins/get_discussion.js delete mode 100644 app/assets/javascripts/notes/mixins/note_form.js create mode 100644 app/assets/javascripts/onboarding_issues/index.js delete mode 100644 app/assets/javascripts/operation_settings/components/external_dashboard.vue create mode 100644 app/assets/javascripts/operation_settings/components/form_group/dashboard_timezone.vue create mode 100644 app/assets/javascripts/operation_settings/components/form_group/external_dashboard.vue create mode 100644 app/assets/javascripts/operation_settings/components/metrics_settings.vue rename app/assets/javascripts/pages/groups/{ => clusters}/index.js (100%) create mode 100644 app/assets/javascripts/pages/import/bitbucket/status/index.js create mode 100644 app/assets/javascripts/pages/import/bitbucket_server/status/components/bitbucket_server_status_table.vue create mode 100644 app/assets/javascripts/pages/import/bitbucket_server/status/index.js create mode 100644 app/assets/javascripts/pages/import/fogbugz/status/index.js create mode 100644 app/assets/javascripts/pages/import/gitlab/status/index.js create mode 100644 app/assets/javascripts/pages/projects/clusters/index.js create mode 100644 app/assets/javascripts/pages/projects/graphs/components/code_coverage.vue rename app/assets/javascripts/pages/{projects => shared}/wikis/components/delete_wiki_modal.vue (100%) create mode 100644 app/assets/javascripts/pages/shared/wikis/index.js rename app/assets/javascripts/pages/{projects => shared}/wikis/wikis.js (100%) create mode 100644 app/assets/javascripts/persistent_user_callouts.js create mode 100644 app/assets/javascripts/pipelines/components/dag/constants.js create mode 100644 app/assets/javascripts/pipelines/components/dag/dag.vue create mode 100644 app/assets/javascripts/pipelines/components/dag/dag_graph.vue create mode 100644 app/assets/javascripts/pipelines/components/dag/drawing_utils.js create mode 100644 app/assets/javascripts/pipelines/components/dag/interactions.js create mode 100644 app/assets/javascripts/pipelines/components/dag/parsing_utils.js create mode 100644 app/assets/javascripts/pipelines/components/tokens/pipeline_status_token.vue create mode 100644 app/assets/javascripts/pipelines/components/tokens/pipeline_tag_name_token.vue create mode 100644 app/assets/javascripts/pipelines/utils.js create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/components/app.vue create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/components/legacy_container.vue create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/components/welcome.vue create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/illustrations/blank-project.svg create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/illustrations/ci-cd-project.svg create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/illustrations/create-from-template.svg create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/illustrations/import-project.svg create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/index.js create mode 100644 app/assets/javascripts/registry/explorer/components/details_page/delete_alert.vue create mode 100644 app/assets/javascripts/registry/explorer/components/details_page/delete_modal.vue create mode 100644 app/assets/javascripts/registry/explorer/components/details_page/details_header.vue create mode 100644 app/assets/javascripts/registry/explorer/components/details_page/empty_tags_state.vue create mode 100644 app/assets/javascripts/registry/explorer/components/details_page/tags_loader.vue create mode 100644 app/assets/javascripts/registry/explorer/components/details_page/tags_table.vue delete mode 100644 app/assets/javascripts/registry/explorer/components/image_list.vue rename app/assets/javascripts/registry/explorer/components/{quickstart_dropdown.vue => list_page/cli_commands.vue} (99%) rename app/assets/javascripts/registry/explorer/components/{ => list_page}/group_empty_state.vue (100%) create mode 100644 app/assets/javascripts/registry/explorer/components/list_page/image_list.vue create mode 100644 app/assets/javascripts/registry/explorer/components/list_page/image_list_row.vue rename app/assets/javascripts/registry/explorer/components/{ => list_page}/project_empty_state.vue (97%) create mode 100644 app/assets/javascripts/registry/explorer/components/list_page/registry_header.vue delete mode 100644 app/assets/javascripts/registry/explorer/components/project_policy_alert.vue delete mode 100644 app/assets/javascripts/registry/explorer/constants.js create mode 100644 app/assets/javascripts/registry/explorer/constants/details.js create mode 100644 app/assets/javascripts/registry/explorer/constants/expiration_policies.js create mode 100644 app/assets/javascripts/registry/explorer/constants/index.js create mode 100644 app/assets/javascripts/registry/explorer/constants/list.js create mode 100644 app/assets/javascripts/registry/explorer/constants/quick_start.js create mode 100644 app/assets/javascripts/static_site_editor/components/unsaved_changes_confirm_dialog.vue create mode 100644 app/assets/javascripts/static_site_editor/services/parse_source_file.js create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/constants.js create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/author_token.vue create mode 100644 app/assets/javascripts/vue_shared/components/rich_content_editor/editor_service.js create mode 100644 app/assets/javascripts/vue_shared/components/rich_content_editor/modals/add_image_modal.vue delete mode 100644 app/assets/javascripts/vue_shared/components/rich_content_editor/toolbar_service.js create mode 100644 app/assets/javascripts/vue_shared/components/url_sync.vue create mode 100644 app/assets/stylesheets/application_dark.scss create mode 100644 app/assets/stylesheets/page_bundles/ide_themes/_solarized-dark.scss create mode 100644 app/assets/stylesheets/pages/experience_level.scss create mode 100644 app/assets/stylesheets/pages/storage_quota.scss create mode 100644 app/assets/stylesheets/themes/_dark.scss create mode 100644 app/channels/application_cable/logging.rb create mode 100644 app/controllers/concerns/find_snippet.rb create mode 100644 app/controllers/concerns/snippet_authorizations.rb create mode 100644 app/controllers/concerns/wiki_actions.rb create mode 100644 app/controllers/concerns/workhorse_import_export_upload.rb create mode 100644 app/controllers/groups/imports_controller.rb create mode 100644 app/controllers/import/gitlab_groups_controller.rb create mode 100644 app/controllers/projects/merge_requests/drafts_controller.rb create mode 100644 app/controllers/projects/snippets/application_controller.rb create mode 100644 app/controllers/projects/web_ide_terminals_controller.rb create mode 100644 app/controllers/registrations/experience_levels_controller.rb create mode 100644 app/controllers/snippets/application_controller.rb delete mode 100644 app/finders/admin/runners_finder.rb create mode 100644 app/finders/ci/runners_finder.rb delete mode 100644 app/finders/resource_label_event_finder.rb create mode 100644 app/finders/resource_milestone_event_finder.rb create mode 100644 app/finders/uploader_finder.rb create mode 100644 app/graphql/mutations/alert_management/alerts/set_assignees.rb create mode 100644 app/graphql/mutations/commits/create.rb delete mode 100644 app/graphql/mutations/concerns/mutations/resolves_project.rb create mode 100644 app/graphql/mutations/container_expiration_policies/update.rb create mode 100644 app/graphql/mutations/discussions/toggle_resolve.rb create mode 100644 app/graphql/mutations/jira_import/import_users.rb create mode 100644 app/graphql/mutations/merge_requests/create.rb create mode 100644 app/graphql/mutations/metrics/dashboard/annotations/base.rb create mode 100644 app/graphql/mutations/metrics/dashboard/annotations/delete.rb create mode 100644 app/graphql/resolvers/alert_management/alert_resolver.rb delete mode 100644 app/graphql/resolvers/alert_management_alert_resolver.rb create mode 100644 app/graphql/resolvers/assigned_merge_requests_resolver.rb create mode 100644 app/graphql/resolvers/authored_merge_requests_resolver.rb create mode 100644 app/graphql/resolvers/concerns/looks_ahead.rb create mode 100644 app/graphql/resolvers/concerns/resolves_merge_requests.rb create mode 100644 app/graphql/resolvers/concerns/resolves_project.rb create mode 100644 app/graphql/resolvers/merge_request_resolver.rb create mode 100644 app/graphql/resolvers/project_members_resolver.rb create mode 100644 app/graphql/resolvers/project_pipeline_resolver.rb create mode 100644 app/graphql/resolvers/projects/jira_projects_resolver.rb create mode 100644 app/graphql/resolvers/user_merge_requests_resolver.rb create mode 100644 app/graphql/resolvers/user_resolver.rb create mode 100644 app/graphql/resolvers/users_resolver.rb create mode 100644 app/graphql/types/access_level_enum.rb create mode 100644 app/graphql/types/access_level_type.rb create mode 100644 app/graphql/types/commit_action_mode_enum.rb create mode 100644 app/graphql/types/commit_action_type.rb create mode 100644 app/graphql/types/commit_encoding_enum.rb create mode 100644 app/graphql/types/container_expiration_policy_cadence_enum.rb create mode 100644 app/graphql/types/container_expiration_policy_keep_enum.rb create mode 100644 app/graphql/types/container_expiration_policy_older_than_enum.rb create mode 100644 app/graphql/types/container_expiration_policy_type.rb create mode 100644 app/graphql/types/evidence_type.rb create mode 100644 app/graphql/types/group_member_type.rb create mode 100644 app/graphql/types/jira_user_type.rb create mode 100644 app/graphql/types/member_interface.rb create mode 100644 app/graphql/types/project_member_type.rb create mode 100644 app/graphql/types/projects/services/jira_project_type.rb create mode 100644 app/graphql/types/release_assets_type.rb create mode 100644 app/graphql/types/release_link_type.rb create mode 100644 app/graphql/types/release_link_type_enum.rb create mode 100644 app/graphql/types/release_source_type.rb create mode 100644 app/graphql/types/resolvable_interface.rb create mode 100644 app/graphql/types/snippets/file_input_action_enum.rb create mode 100644 app/graphql/types/snippets/file_input_type.rb create mode 100644 app/graphql/types/user_state_enum.rb create mode 100644 app/helpers/subscribable_banner_helper.rb rename app/helpers/{milestones_helper.rb => timeboxes_helper.rb} (86%) rename app/helpers/{milestones_routing_helper.rb => timeboxes_routing_helper.rb} (84%) create mode 100644 app/mailers/emails/reviews.rb create mode 100644 app/models/alert_management.rb create mode 100644 app/models/alert_management/alert_assignee.rb create mode 100644 app/models/alert_management/alert_user_mention.rb create mode 100644 app/models/blob_viewer/go_mod.rb create mode 100644 app/models/blob_viewer/metrics_dashboard_yml.rb create mode 100644 app/models/ci/build_report_result.rb create mode 100644 app/models/concerns/featurable.rb create mode 100644 app/models/concerns/integration.rb delete mode 100644 app/models/dashboard_group_milestone.rb delete mode 100644 app/models/dashboard_milestone.rb create mode 100644 app/models/data_list.rb create mode 100644 app/models/draft_note.rb delete mode 100644 app/models/global_milestone.rb create mode 100644 app/models/group_deploy_key.rb delete mode 100644 app/models/group_milestone.rb create mode 100644 app/models/project_services/chat_message/alert_message.rb create mode 100644 app/models/review.rb create mode 100644 app/models/service_list.rb create mode 100644 app/models/snippet_input_action.rb create mode 100644 app/models/snippet_input_action_collection.rb create mode 100644 app/models/web_ide_terminal.rb create mode 100644 app/policies/container_expiration_policy_policy.rb create mode 100644 app/policies/draft_note_policy.rb create mode 100644 app/policies/releases/link_policy.rb create mode 100644 app/policies/releases/source_policy.rb create mode 100644 app/presenters/gitlab/blame_presenter.rb create mode 100644 app/serializers/ci/daily_build_group_report_result_entity.rb create mode 100644 app/serializers/ci/daily_build_group_report_result_serializer.rb create mode 100644 app/serializers/draft_note_entity.rb create mode 100644 app/serializers/draft_note_serializer.rb create mode 100644 app/serializers/import/base_provider_repo_entity.rb create mode 100644 app/serializers/import/bitbucket_provider_repo_entity.rb create mode 100644 app/serializers/import/bitbucket_server_provider_repo_entity.rb create mode 100644 app/serializers/import/fogbugz_provider_repo_entity.rb rename app/serializers/{provider_repo_entity.rb => import/githubish_provider_repo_entity.rb} (53%) create mode 100644 app/serializers/import/gitlab_provider_repo_entity.rb create mode 100644 app/serializers/import/provider_repo_serializer.rb delete mode 100644 app/serializers/provider_repo_serializer.rb create mode 100644 app/serializers/service_field_entity.rb create mode 100644 app/serializers/service_field_serializer.rb create mode 100644 app/serializers/web_ide_terminal_entity.rb create mode 100644 app/serializers/web_ide_terminal_serializer.rb create mode 100644 app/services/admin/propagate_integration_service.rb create mode 100644 app/services/alert_management/alerts/update_service.rb create mode 100644 app/services/ci/authorize_job_artifact_service.rb create mode 100644 app/services/ci/build_report_result_service.rb create mode 100644 app/services/ci/create_web_ide_terminal_service.rb create mode 100644 app/services/ci/web_ide_config_service.rb create mode 100644 app/services/concerns/integrations/project_test_data.rb create mode 100644 app/services/container_expiration_policies/update_service.rb create mode 100644 app/services/draft_notes/base_service.rb create mode 100644 app/services/draft_notes/create_service.rb create mode 100644 app/services/draft_notes/destroy_service.rb create mode 100644 app/services/draft_notes/publish_service.rb create mode 100644 app/services/integrations/test/base_service.rb create mode 100644 app/services/integrations/test/project_service.rb create mode 100644 app/services/jira/requests/base.rb create mode 100644 app/services/jira/requests/projects.rb create mode 100644 app/services/jira_import/users_importer.rb create mode 100644 app/services/jira_import/users_mapper.rb create mode 100644 app/services/notification_recipients/builder/new_review.rb create mode 100644 app/services/projects/group_links/update_service.rb delete mode 100644 app/services/projects/lsif_data_service.rb create mode 100644 app/services/releases/create_evidence_service.rb create mode 100644 app/services/resource_events/change_state_service.rb create mode 100644 app/services/resource_events/synthetic_state_notes_builder_service.rb create mode 100644 app/validators/json_schema_validator.rb create mode 100644 app/validators/json_schemas/build_report_result_data.json create mode 100644 app/validators/json_schemas/build_report_result_data_tests.json create mode 100644 app/validators/json_schemas/daily_build_group_report_result_data.json create mode 100644 app/views/admin/application_settings/ci/_header.html.haml delete mode 100644 app/views/admin/sessions/_two_factor_u2f.html.haml create mode 100644 app/views/admin/users/_admin_notes.html.haml create mode 100644 app/views/admin/users/_user_detail_note.html.haml create mode 100644 app/views/admin/users/_user_listing_note.html.haml delete mode 100644 app/views/dashboard/milestones/show.html.haml create mode 100644 app/views/groups/_import_group_pane.html.haml create mode 100644 app/views/groups/_new_group_fields.html.haml create mode 100644 app/views/groups/imports/show.html.haml create mode 100644 app/views/notify/new_review_email.html.haml create mode 100644 app/views/notify/new_review_email.text.erb create mode 100644 app/views/projects/blame/_blame_group.html.haml create mode 100644 app/views/projects/blob/viewers/_metrics_dashboard_yml.html.haml create mode 100644 app/views/projects/blob/viewers/_metrics_dashboard_yml_loading.html.haml create mode 100644 app/views/projects/issues/_issue_estimate.html.haml delete mode 100644 app/views/projects/registry/repositories/_tag.html.haml delete mode 100644 app/views/projects/settings/operations/_external_dashboard.html.haml create mode 100644 app/views/projects/settings/operations/_metrics_dashboard.html.haml delete mode 100644 app/views/projects/wikis/_main_links.html.haml delete mode 100644 app/views/projects/wikis/_wiki_page.html.haml create mode 100644 app/views/registrations/experience_levels/show.html.haml create mode 100644 app/views/shared/_custom_attributes.html.haml create mode 100644 app/views/shared/_file_picker_button.html.haml rename app/views/{projects => shared}/_md_preview.html.haml (92%) create mode 100644 app/views/shared/_namespace_storage_limit_alert.html.haml rename app/views/{projects => shared}/_zen.html.haml (85%) rename app/views/{projects => shared}/blob/_markdown_buttons.html.haml (91%) rename app/views/{projects => shared}/wikis/_form.html.haml (75%) create mode 100644 app/views/shared/wikis/_main_links.html.haml rename app/views/{projects => shared}/wikis/_pages_wiki_page.html.haml (75%) rename app/views/{projects => shared}/wikis/_sidebar.html.haml (78%) rename app/views/{projects => shared}/wikis/_sidebar_wiki_page.html.haml (61%) rename app/views/{projects => shared}/wikis/_wiki_directory.html.haml (100%) create mode 100644 app/views/shared/wikis/_wiki_page.html.haml rename app/views/{projects => shared}/wikis/edit.html.haml (59%) rename app/views/{projects => shared}/wikis/empty.html.haml (100%) rename app/views/{projects => shared}/wikis/history.html.haml (80%) rename app/views/{projects => shared}/wikis/pages.html.haml (64%) rename app/views/{projects => shared}/wikis/show.html.haml (76%) create mode 100644 app/workers/ci/build_report_result_worker.rb create mode 100644 app/workers/clusters/applications/check_prometheus_health_worker.rb create mode 100644 app/workers/gitlab/import/stuck_import_job.rb create mode 100644 app/workers/gitlab/import/stuck_project_import_jobs_worker.rb create mode 100644 app/workers/gitlab/jira_import/stuck_jira_import_jobs_worker.rb create mode 100644 app/workers/metrics/dashboard/prune_old_annotations_worker.rb create mode 100644 app/workers/metrics/dashboard/schedule_annotations_prune_worker.rb create mode 100644 app/workers/propagate_integration_worker.rb create mode 100644 config/initializers/actionpack_generate_old_csrf_token.rb rename config/initializers/{rack_attack_new.rb => rack_attack.rb} (100%) create mode 100644 danger/bundle_size/Dangerfile create mode 100644 db/gitlab_structure.sql delete mode 100644 db/migrate/20180101160629_create_prometheus_metrics.rb delete mode 100644 db/migrate/20180101160630_change_project_id_for_prometheus_metrics.rb delete mode 100644 db/migrate/20180102220145_add_pages_https_only_to_projects.rb delete mode 100644 db/migrate/20180103123548_add_confidential_note_events_to_services.rb delete mode 100644 db/migrate/20180105212544_add_commits_count_to_merge_request_diff.rb delete mode 100644 db/migrate/20180109183319_change_default_value_for_pages_https_only.rb delete mode 100644 db/migrate/20180113220114_rework_redirect_routes_indexes.rb delete mode 100644 db/migrate/20180115094742_add_default_project_creation_setting.rb delete mode 100644 db/migrate/20180115113902_add_project_creation_level_to_groups.rb delete mode 100644 db/migrate/20180115201419_add_index_updated_at_to_issues.rb delete mode 100644 db/migrate/20180116193854_create_lfs_file_locks.rb delete mode 100644 db/migrate/20180119135717_add_uploader_index_to_uploads.rb delete mode 100644 db/migrate/20180119160751_optimize_ci_job_artifacts.rb delete mode 100644 db/migrate/20180122162010_add_auto_devops_domain_to_application_settings.rb delete mode 100644 db/migrate/20180125214301_create_user_callouts.rb delete mode 100644 db/migrate/20180129193323_add_uploads_builder_context.rb delete mode 100644 db/migrate/20180201102129_add_unique_constraint_to_trending_projects_project_id.rb delete mode 100644 db/migrate/20180201110056_add_foreign_keys_to_todos.rb delete mode 100644 db/migrate/20180201145907_migrate_remaining_issues_closed_at.rb delete mode 100644 db/migrate/20180206200543_reset_events_primary_key_sequence.rb delete mode 100644 db/migrate/20180208183958_schedule_populate_untracked_uploads_if_needed.rb delete mode 100644 db/migrate/20180209115333_create_chatops_tables.rb delete mode 100644 db/migrate/20180209165249_add_closed_by_to_issues.rb delete mode 100644 db/migrate/20180212030105_add_external_ip_to_clusters_applications_ingress.rb delete mode 100644 db/migrate/20180213131630_add_partial_index_to_projects_for_index_only_scans.rb delete mode 100644 db/migrate/20180214093516_create_badges.rb delete mode 100644 db/migrate/20180214155405_create_clusters_applications_runners.rb delete mode 100644 db/migrate/20180215181245_users_name_lower_index.rb delete mode 100644 db/migrate/20180216120000_add_pages_domain_verification.rb delete mode 100644 db/migrate/20180216120010_add_pages_domain_verified_at_index.rb delete mode 100644 db/migrate/20180216120020_allow_domain_verification_to_be_disabled.rb delete mode 100644 db/migrate/20180216120030_add_pages_domain_enabled_until.rb delete mode 100644 db/migrate/20180216120040_add_pages_domain_enabled_until_index.rb delete mode 100644 db/migrate/20180216120050_pages_domains_verification_grace_period.rb delete mode 100644 db/migrate/20180219153455_add_maximum_timeout_to_ci_runners.rb delete mode 100644 db/migrate/20180221151752_add_allow_maintainer_to_push_to_merge_requests.rb delete mode 100644 db/migrate/20180222043024_add_ip_address_to_runner.rb delete mode 100644 db/migrate/20180223120443_create_user_interacted_projects_table.rb delete mode 100644 db/migrate/20180223144945_add_allow_local_requests_from_hooks_and_services_to_application_settings.rb delete mode 100644 db/migrate/20180226050030_add_checksum_to_ci_job_artifacts.rb delete mode 100644 db/migrate/20180227182112_add_group_id_to_boards_ce.rb delete mode 100644 db/migrate/20180228172924_add_include_private_contributions_to_users.rb delete mode 100644 db/migrate/20180301010859_create_ci_builds_metadata_table.rb delete mode 100644 db/migrate/20180302152117_ensure_foreign_keys_on_clusters_applications.rb delete mode 100644 db/migrate/20180305095250_create_internal_ids_table.rb delete mode 100644 db/migrate/20180305144721_add_privileged_to_runner.rb delete mode 100644 db/migrate/20180306134842_add_missing_indexes_acts_as_taggable_on_engine.rb delete mode 100644 db/migrate/20180308052825_add_section_name_id_index_on_ci_build_trace_sections.rb delete mode 100644 db/migrate/20180308125206_add_user_internal_regex_to_application_setting.rb delete mode 100644 db/migrate/20180309121820_reschedule_commits_count_for_merge_request_diff.rb delete mode 100644 db/migrate/20180309160427_add_partial_indexes_on_todos.rb delete mode 100644 db/migrate/20180314100728_add_external_authorization_service_timeout_to_application_settings.rb delete mode 100644 db/migrate/20180314145917_add_header_and_footer_banners_to_appearances_table.rb delete mode 100644 db/migrate/20180315160435_add_external_auth_mutual_tls_fields_to_project_settings.rb delete mode 100644 db/migrate/20180319190020_create_deploy_tokens.rb delete mode 100644 db/migrate/20180320182229_add_indexes_for_user_activity_queries.rb delete mode 100644 db/migrate/20180323150945_add_push_to_merge_request_to_notification_settings.rb delete mode 100644 db/migrate/20180326202229_create_ci_build_trace_chunks.rb delete mode 100644 db/migrate/20180327101207_remove_index_from_events_table.rb delete mode 100644 db/migrate/20180330121048_add_issue_due_to_notification_settings.rb delete mode 100644 db/migrate/20180403035759_create_project_ci_cd_settings.rb delete mode 100644 db/migrate/20180405142733_create_project_deploy_tokens.rb delete mode 100644 db/migrate/20180408143354_rename_users_rss_token_to_feed_token.rb delete mode 100644 db/migrate/20180413022611_create_missing_namespace_for_internal_users.rb delete mode 100644 db/migrate/20180416155103_add_further_scope_columns_to_internal_id_table.rb delete mode 100644 db/migrate/20180417090132_add_index_constraints_to_internal_id_table.rb delete mode 100644 db/migrate/20180417101040_add_tmp_stage_priority_index_to_ci_builds.rb delete mode 100644 db/migrate/20180417101940_add_index_to_ci_stage.rb delete mode 100644 db/migrate/20180418053107_add_index_to_ci_job_artifacts_file_store.rb delete mode 100644 db/migrate/20180420010016_add_pipeline_build_foreign_key.rb delete mode 100644 db/migrate/20180420010616_cleanup_build_stage_migration.rb delete mode 100644 db/migrate/20180423204600_add_pages_access_level_to_project_feature.rb delete mode 100644 db/migrate/20180424090541_add_enforce_terms_to_application_settings.rb delete mode 100644 db/migrate/20180424134533_create_application_setting_terms.rb delete mode 100644 db/migrate/20180424160449_add_pipeline_iid_to_ci_pipelines.rb delete mode 100644 db/migrate/20180425075446_create_term_agreements.rb delete mode 100644 db/migrate/20180425131009_assure_commits_count_for_merge_request_diff.rb delete mode 100644 db/migrate/20180425205249_add_index_constraints_to_pipeline_iid.rb delete mode 100644 db/migrate/20180426102016_add_accepted_term_to_users.rb delete mode 100644 db/migrate/20180430101916_add_runner_type_to_ci_runners.rb delete mode 100644 db/migrate/20180502122856_create_project_mirror_data.rb delete mode 100644 db/migrate/20180503131624_create_remote_mirrors.rb delete mode 100644 db/migrate/20180503141722_add_remote_mirror_available_overridden_to_projects.rb delete mode 100644 db/migrate/20180503150427_add_index_to_namespaces_runners_token.rb delete mode 100644 db/migrate/20180503175053_ensure_missing_columns_to_project_mirror_data.rb delete mode 100644 db/migrate/20180503175054_add_indexes_to_project_mirror_data.rb delete mode 100644 db/migrate/20180503193542_add_indexes_to_remote_mirror.rb delete mode 100644 db/migrate/20180503193953_add_mirror_available_to_application_settings.rb delete mode 100644 db/migrate/20180503200320_enable_prometheus_metrics_by_default.rb delete mode 100644 db/migrate/20180504195842_project_name_lower_index.rb delete mode 100644 db/migrate/20180508055821_make_remote_mirrors_disabled_by_default.rb delete mode 100644 db/migrate/20180508100222_add_not_null_constraint_to_project_mirror_data_foreign_key.rb delete mode 100644 db/migrate/20180508102840_add_unique_constraint_to_project_mirror_data_project_id_index.rb delete mode 100644 db/migrate/20180508135515_set_runner_type_not_null.rb delete mode 100644 db/migrate/20180511090724_add_index_on_ci_runners_runner_type.rb delete mode 100644 db/migrate/20180511131058_create_clusters_applications_jupyter.rb delete mode 100644 db/migrate/20180515005612_add_squash_to_merge_requests.rb delete mode 100644 db/migrate/20180515121227_create_notes_diff_files.rb delete mode 100644 db/migrate/20180517082340_add_not_null_constraints_to_project_authorizations.rb delete mode 100644 db/migrate/20180523042841_rename_merge_requests_allow_maintainer_to_push.rb delete mode 100644 db/migrate/20180524132016_merge_requests_target_id_iid_state_partial_index.rb delete mode 100644 db/migrate/20180529093006_ensure_remote_mirror_columns.rb delete mode 100644 db/migrate/20180530135500_add_index_to_stages_position.rb delete mode 100644 db/migrate/20180531185349_add_repository_languages.rb delete mode 100644 db/migrate/20180531220618_change_default_value_for_dsa_key_restriction.rb delete mode 100644 db/migrate/20180601213245_add_deploy_strategy_to_project_auto_devops.rb delete mode 100644 db/migrate/20180607071808_add_push_events_branch_filter_to_web_hooks.rb delete mode 100644 db/migrate/20180608091413_add_group_to_todos.rb delete mode 100644 db/migrate/20180608110058_rename_merge_requests_allow_collaboration.rb delete mode 100644 db/migrate/20180612103626_add_columns_for_helm_tiller_certificates.rb delete mode 100644 db/migrate/20180613081317_create_ci_builds_runner_session.rb delete mode 100644 db/migrate/20180625113853_create_import_export_uploads.rb delete mode 100644 db/migrate/20180626125654_add_index_on_deployable_for_deployments.rb delete mode 100644 db/migrate/20180628124813_alter_web_hook_logs_indexes.rb delete mode 100644 db/migrate/20180629153018_create_site_statistics.rb delete mode 100644 db/migrate/20180702124358_remove_orphaned_routes.rb delete mode 100644 db/migrate/20180702134423_generate_missing_routes.rb delete mode 100644 db/migrate/20180704204006_add_hide_third_party_offers_to_application_settings.rb delete mode 100644 db/migrate/20180705160945_add_file_format_to_ci_job_artifacts.rb delete mode 100644 db/migrate/20180710162338_add_foreign_key_from_notification_settings_to_users.rb delete mode 100644 db/migrate/20180711103851_drop_duplicate_protected_tags.rb delete mode 100644 db/migrate/20180711103922_add_protected_tags_index.rb delete mode 100644 db/migrate/20180713092803_create_user_statuses.rb delete mode 100644 db/migrate/20180717125853_remove_restricted_todos.rb delete mode 100644 db/migrate/20180718005113_add_instance_statistics_visibility_to_application_setting.rb delete mode 100644 db/migrate/20180720023512_add_receive_max_input_size_to_application_settings.rb delete mode 100644 db/migrate/20180722103201_add_private_profile_to_users.rb delete mode 100644 db/migrate/20180723135214_add_web_ide_client_side_preview_enabled_to_application_settings.rb delete mode 100644 db/migrate/20180726172057_create_resource_label_events.rb delete mode 100644 db/migrate/20180807153545_remove_redundant_status_index_on_ci_builds.rb delete mode 100644 db/migrate/20180808162000_add_user_show_add_ssh_key_message_to_application_settings.rb delete mode 100644 db/migrate/20180813101999_change_default_of_auto_devops_instance_wide.rb delete mode 100644 db/migrate/20180813102000_enable_auto_devops_instance_wide_for_everyone.rb delete mode 100644 db/migrate/20180814153625_add_commit_email_to_users.rb delete mode 100644 db/migrate/20180815040323_add_authorization_type_to_cluster_platforms_kubernetes.rb delete mode 100644 db/migrate/20180815160409_add_file_location_to_ci_job_artifacts.rb delete mode 100644 db/migrate/20180815170510_add_partial_index_to_ci_builds_artifacts_file.rb delete mode 100644 db/migrate/20180815175440_add_index_on_list_type.rb delete mode 100644 db/migrate/20180824202952_add_outbound_requests_whitelist_to_application_settings.rb delete mode 100644 db/migrate/20180831164905_add_common_to_prometheus_metrics.rb delete mode 100644 db/migrate/20180831164907_add_index_on_common_for_prometheus_metrics.rb delete mode 100644 db/migrate/20180831164908_add_identifier_to_prometheus_metric.rb delete mode 100644 db/migrate/20180831164909_add_index_for_identifier_to_prometheus_metric.rb delete mode 100644 db/migrate/20180831164910_import_common_metrics.rb delete mode 100644 db/migrate/20180901171833_add_project_config_source_status_index_to_pipeline.rb delete mode 100644 db/migrate/20180901200537_add_resource_label_event_reference_fields.rb delete mode 100644 db/migrate/20180902070406_create_group_group_links.rb delete mode 100644 db/migrate/20180906101639_add_user_ping_consent_to_application_settings.rb delete mode 100644 db/migrate/20180907015926_add_legacy_abac_to_cluster_providers_gcp.rb delete mode 100644 db/migrate/20180910115836_add_attr_encrypted_columns_to_web_hook.rb delete mode 100644 db/migrate/20180910153412_add_token_digest_to_personal_access_tokens.rb delete mode 100644 db/migrate/20180910153413_add_index_to_token_digest_on_personal_access_tokens.rb delete mode 100644 db/migrate/20180912111628_add_knative_application.rb delete mode 100644 db/migrate/20180916011959_add_index_pipelines_project_id_source.rb delete mode 100644 db/migrate/20180924141949_add_diff_max_patch_bytes_to_application_settings.rb delete mode 100644 db/migrate/20180924190739_add_scheduled_at_to_ci_builds.rb delete mode 100644 db/migrate/20180924201039_add_partial_index_to_scheduled_at.rb delete mode 100644 db/migrate/20180925200829_create_user_preferences.rb delete mode 100644 db/migrate/20180927073410_add_index_to_project_deploy_tokens_deploy_token_id.rb delete mode 100644 db/migrate/20181002172433_remove_restricted_todos_with_cte.rb delete mode 100644 db/migrate/20181005110927_add_index_to_lfs_objects_file_store.rb delete mode 100644 db/migrate/20181005125926_add_index_to_uploads_store.rb delete mode 100644 db/migrate/20181006004100_import_common_metrics_nginx_vts.rb delete mode 100644 db/migrate/20181009190428_create_clusters_kubernetes_namespaces.rb delete mode 100644 db/migrate/20181010235606_create_board_project_recent_visits.rb delete mode 100644 db/migrate/20181014203236_create_cluster_groups.rb delete mode 100644 db/migrate/20181015155839_add_finished_at_to_deployments.rb delete mode 100644 db/migrate/20181016141739_add_status_to_deployments.rb delete mode 100644 db/migrate/20181016152238_create_board_group_recent_visits.rb delete mode 100644 db/migrate/20181017001059_add_cluster_type_to_clusters.rb delete mode 100644 db/migrate/20181019032400_add_shards_table.rb delete mode 100644 db/migrate/20181019032408_add_repositories_table.rb delete mode 100644 db/migrate/20181019105553_add_projects_pool_repository_id_foreign_key.rb delete mode 100644 db/migrate/20181022135539_add_index_on_status_to_deployments.rb delete mode 100644 db/migrate/20181023104858_add_archive_builds_duration_to_application_settings.rb delete mode 100644 db/migrate/20181023144439_add_partial_index_for_legacy_successful_deployments.rb delete mode 100644 db/migrate/20181025115728_add_private_commit_email_hostname_to_application_settings.rb delete mode 100644 db/migrate/20181026143227_migrate_snippets_access_level_default_value.rb delete mode 100644 db/migrate/20181027114222_add_first_day_of_week_to_user_preferences.rb delete mode 100644 db/migrate/20181028120717_add_first_day_of_week_to_application_settings.rb delete mode 100644 db/migrate/20181030154446_add_missing_indexes_for_foreign_keys.rb delete mode 100644 db/migrate/20181031145139_add_protected_ci_variables_to_application_settings.rb delete mode 100644 db/migrate/20181031190558_drop_fk_gcp_clusters_table.rb delete mode 100644 db/migrate/20181031190559_drop_gcp_clusters_table.rb delete mode 100644 db/migrate/20181101144347_add_index_for_stuck_mr_query.rb delete mode 100644 db/migrate/20181101191341_create_clusters_applications_cert_manager.rb delete mode 100644 db/migrate/20181106135939_add_index_to_deployments.rb delete mode 100644 db/migrate/20181108091549_cleanup_environments_external_url.rb delete mode 100644 db/migrate/20181112103239_drop_default_value_on_status_deployments.rb delete mode 100644 db/migrate/20181115140140_add_encrypted_runners_token_to_settings.rb delete mode 100644 db/migrate/20181116050532_knative_external_ip.rb delete mode 100644 db/migrate/20181116141415_add_encrypted_runners_token_to_namespaces.rb delete mode 100644 db/migrate/20181116141504_add_encrypted_runners_token_to_projects.rb delete mode 100644 db/migrate/20181119081539_add_merge_request_id_to_ci_pipelines.rb delete mode 100644 db/migrate/20181119132520_add_indexes_to_ci_builds_and_pipelines.rb delete mode 100644 db/migrate/20181120082911_rename_repositories_pool_repositories.rb delete mode 100644 db/migrate/20181120091639_add_foreign_key_to_ci_pipelines_merge_requests.rb delete mode 100644 db/migrate/20181120151656_add_token_encrypted_to_ci_runners.rb delete mode 100644 db/migrate/20181121101842_add_ci_builds_partial_index_on_project_id_and_status.rb delete mode 100644 db/migrate/20181121101843_remove_redundant_ci_builds_partial_index.rb delete mode 100644 db/migrate/20181122160027_create_project_repositories.rb delete mode 100644 db/migrate/20181123135036_drop_not_null_constraint_pool_repository_disk_path.rb delete mode 100644 db/migrate/20181123144235_create_suggestions.rb delete mode 100644 db/migrate/20181126150622_add_events_index_on_project_id_and_created_at.rb delete mode 100644 db/migrate/20181126153547_remove_notes_index_on_updated_at.rb delete mode 100644 db/migrate/20181128123704_add_state_to_pool_repository.rb delete mode 100644 db/migrate/20181129104854_add_token_encrypted_to_ci_builds.rb delete mode 100644 db/migrate/20181129104944_add_index_to_ci_builds_token_encrypted.rb delete mode 100644 db/migrate/20181203002526_add_project_bfg_object_map_column.rb delete mode 100644 db/migrate/20181205171941_create_project_daily_statistics.rb delete mode 100644 db/migrate/20181211092510_add_name_author_id_and_sha_to_releases.rb delete mode 100644 db/migrate/20181211092514_add_author_id_index_and_fk_to_releases.rb delete mode 100644 db/migrate/20181212104941_backfill_releases_name_with_tag_name.rb delete mode 100644 db/migrate/20181212171634_create_error_tracking_settings.rb delete mode 100644 db/migrate/20181219145521_add_options_to_build_metadata.rb delete mode 100644 db/migrate/20181228175414_create_releases_link_table.rb rename db/migrate/{20171230123729_init_schema.rb => 20181228175414_init_schema.rb} (58%) create mode 100644 db/migrate/20200325094612_add_allow_merge_on_skipped_pipeline_to_project_settings.rb create mode 100644 db/migrate/20200330203826_drop_fk_in_ci_ref.rb create mode 100644 db/migrate/20200330203837_recreate_ci_ref.rb create mode 100644 db/migrate/20200331103637_add_ci_ref_id_to_ci_pipelines.rb create mode 100644 db/migrate/20200331113728_add_index_to_ci_ref_id.rb create mode 100644 db/migrate/20200331113738_add_fk_to_ci_ref_id.rb create mode 100644 db/migrate/20200421054930_remove_index_on_pipeline_id_from_ci_pipeline_variables.rb create mode 100644 db/migrate/20200421054948_remove_index_on_pipeline_id_from_ci_variables.rb create mode 100644 db/migrate/20200429023324_add_composer_metadata.rb create mode 100644 db/migrate/20200430123614_create_project_access_tokens.rb create mode 100644 db/migrate/20200430174637_create_group_deploy_keys.rb create mode 100644 db/migrate/20200508021128_remove_ultraauth_provider_from_identities.rb create mode 100644 db/migrate/20200508050301_add_spam_check_endpoint_to_application_settings.rb create mode 100644 db/migrate/20200508140959_add_elasticsearch_pause_indexing_to_application_settings.rb create mode 100644 db/migrate/20200508203901_add_repository_storages_weighted_to_application_settings.rb create mode 100644 db/migrate/20200511181027_create_test_reports.rb create mode 100644 db/migrate/20200511191027_add_author_foreign_key_to_test_reports.rb create mode 100644 db/migrate/20200511208012_add_pipeline_foreign_key_to_test_reports.rb create mode 100644 db/migrate/20200512160004_add_index_to_ci_job_artifacts_for_terraform_reports.rb create mode 100644 db/migrate/20200512195442_update_index_on_name_type_eq_ci_build_to_ci_builds.rb create mode 100644 db/migrate/20200518091745_add_index_to_personal_access_token_impersonation.rb create mode 100644 db/migrate/20200519074709_update_resource_state_events_constraint_to_support_epic_id.rb create mode 100644 db/migrate/20200519101002_add_error_message_column_to_jira_imports.rb rename db/{post_migrate/20181101091005_steal_digest_column.rb => migrate/20200519115908_add_epics_confidential_index.rb} (50%) create mode 100644 db/migrate/20200519141534_add_instance_level_variables_column_to_plan_limits.rb create mode 100644 db/migrate/20200519194042_update_container_expiration_policies_defaults.rb create mode 100644 db/migrate/20200520103514_add_todo_resolved_by_action.rb create mode 100644 db/migrate/20200521022725_add_experience_level_to_user_preferences.rb create mode 100644 db/migrate/20200521225327_create_alert_management_alert_assignees.rb create mode 100644 db/migrate/20200521225337_add_foreign_key_to_user_id_on_alert_management_alert_assignees.rb create mode 100644 db/migrate/20200521225346_add_foreign_key_to_alert_id_on_alert_mangagement_alert_assignees.rb create mode 100644 db/migrate/20200522235146_add_index_on_snippet_type_and_id.rb create mode 100644 db/migrate/20200525114553_rename_user_type_index.rb create mode 100644 db/migrate/20200526013844_add_alert_events_to_services.rb create mode 100644 db/migrate/20200526120714_change_partial_indexes_on_services.rb create mode 100644 db/migrate/20200526142550_drop_null_constraint_on_group_import_state_jid.rb create mode 100644 db/migrate/20200526153844_add_issues_last_edited_by_id_index.rb create mode 100644 db/migrate/20200526164946_create_operations_feature_flags_issues.rb create mode 100644 db/migrate/20200526164947_add_foreign_key_to_ops_feature_flags_issues.rb create mode 100644 db/migrate/20200527092027_add_link_type_to_release_links.rb create mode 100644 db/migrate/20200527135313_add_requirements_build_reference.rb create mode 100644 db/migrate/20200527151413_create_ci_build_report_results_table.rb create mode 100644 db/migrate/20200527152116_add_foreign_key_to_build_id_on_build_report_results.rb create mode 100644 db/migrate/20200527152657_add_foreign_key_to_project_id_on_build_report_results.rb create mode 100644 db/migrate/20200527170649_create_alert_management_alert_user_mentions.rb create mode 100644 db/migrate/20200527211000_add_max_import_size.rb create mode 100644 db/migrate/20200528054112_add_index_to_package_name.rb create mode 100644 db/migrate/20200528125905_add_project_id_user_id_status_ref_index_to_ci_pipelines.rb create mode 100644 db/migrate/20200528171933_remove_not_null_from_external_dashboard_url.rb create mode 100644 db/migrate/20200601210148_add_dashboard_timezone_to_project_metrics_setting.rb create mode 100644 db/migrate/20200603073101_change_constraint_name_on_resource_state_events.rb create mode 100644 db/migrate/20200603180338_add_enforce_pat_expiration_to_application_settings.rb create mode 100644 db/migrate/20200604143628_create_project_security_settings.rb create mode 100644 db/migrate/20200604145731_create_board_user_preferences.rb create mode 100644 db/migrate/20200604174544_add_users_foreign_key_to_board_user_preferences.rb create mode 100644 db/migrate/20200604174558_add_boards_foreign_key_to_board_user_preferences.rb create mode 100644 db/migrate/20200605003204_add_foreign_key_to_alert_management_alert_user_mentions.rb create mode 100644 db/migrate/20200605093113_add_ip_address_to_audit_events.rb create mode 100644 db/migrate/20200608214008_change_column_default_project_incident_management_settings.rb create mode 100644 db/migrate/20200609142506_remove_not_null_constraint_from_weight_events_table.rb create mode 100644 db/migrate/20200609142507_remove_not_null_constraint_from_milestone_events_table.rb create mode 100644 db/migrate/20200609142508_remove_not_null_constraint_from_state_events_table.rb create mode 100644 db/migrate/20200609212701_add_incident_settings_to_all_existing_projects.rb create mode 100644 db/migrate/20200615083635_add_composer_json_to_metadata.rb create mode 100644 db/migrate/20200615121217_add_projects_foreign_key_to_project_access_tokens.rb create mode 100644 db/migrate/20200615123055_add_personal_access_token_foreign_key_to_project_access_tokens.rb create mode 100644 db/migrate/20200615232735_add_index_to_composer_metadata.rb delete mode 100644 db/post_migrate/20180104131052_schedule_set_confidential_note_events_on_webhooks.rb delete mode 100644 db/post_migrate/20180119121225_remove_redundant_pipeline_stages.rb delete mode 100644 db/post_migrate/20180122154930_schedule_set_confidential_note_events_on_services.rb delete mode 100644 db/post_migrate/20180204200836_change_author_id_to_not_null_in_todos.rb delete mode 100644 db/post_migrate/20180212101828_add_tmp_partial_null_index_to_builds.rb delete mode 100644 db/post_migrate/20180212101928_schedule_build_stage_migration.rb delete mode 100644 db/post_migrate/20180212102028_remove_tmp_partial_null_index_from_builds.rb delete mode 100644 db/post_migrate/20180216121020_fill_pages_domain_verification_code.rb delete mode 100644 db/post_migrate/20180216121030_enqueue_verify_pages_domain_workers.rb delete mode 100644 db/post_migrate/20180220150310_remove_empty_extern_uid_auth0_identities.rb delete mode 100644 db/post_migrate/20180223124427_build_user_interacted_projects_table.rb delete mode 100644 db/post_migrate/20180301084653_change_project_namespace_id_not_null.rb delete mode 100644 db/post_migrate/20180305100050_remove_permanent_from_redirect_routes.rb delete mode 100644 db/post_migrate/20180306074045_migrate_create_trace_artifact_sidekiq_queue.rb delete mode 100644 db/post_migrate/20180306164012_add_path_index_to_redirect_routes.rb delete mode 100644 db/post_migrate/20180307012445_migrate_update_head_pipeline_for_merge_request_sidekiq_queue.rb delete mode 100644 db/post_migrate/20180405101928_reschedule_builds_stages_migration.rb delete mode 100644 db/post_migrate/20180408143355_cleanup_users_rss_token_rename.rb delete mode 100644 db/post_migrate/20180409170809_populate_missing_project_ci_cd_settings.rb delete mode 100644 db/post_migrate/20180420080616_schedule_stages_index_migration.rb delete mode 100644 db/post_migrate/20180424151928_fill_file_store.rb delete mode 100644 db/post_migrate/20180430143705_backfill_runner_type_for_ci_runners_post_migrate.rb delete mode 100644 db/post_migrate/20180507083701_set_minimal_project_build_timeout.rb delete mode 100644 db/post_migrate/20180511174224_add_unique_constraint_to_project_features_project_id.rb delete mode 100644 db/post_migrate/20180512061621_add_not_null_constraint_to_project_features_project_id.rb delete mode 100644 db/post_migrate/20180514161336_remove_gemnasium_service.rb delete mode 100644 db/post_migrate/20180523125103_cleanup_merge_requests_allow_maintainer_to_push_rename.rb delete mode 100644 db/post_migrate/20180529152628_schedule_to_archive_legacy_traces.rb delete mode 100644 db/post_migrate/20180603190921_migrate_object_storage_upload_sidekiq_queue.rb delete mode 100644 db/post_migrate/20180604123514_cleanup_stages_position_migration.rb delete mode 100644 db/post_migrate/20180608201435_cleanup_merge_requests_allow_collaboration_rename.rb delete mode 100644 db/post_migrate/20180629191052_add_partial_index_to_projects_for_last_repository_check_at.rb delete mode 100644 db/post_migrate/20180702120647_enqueue_fix_cross_project_label_links.rb delete mode 100644 db/post_migrate/20180704145007_update_project_indexes.rb delete mode 100644 db/post_migrate/20180706223200_populate_site_statistics.rb delete mode 100644 db/post_migrate/20180809195358_migrate_null_wiki_access_levels.rb delete mode 100644 db/post_migrate/20180816161409_migrate_legacy_artifacts_to_job_artifacts.rb delete mode 100644 db/post_migrate/20180816193530_rename_login_root_namespaces.rb delete mode 100644 db/post_migrate/20180826111825_recalculate_site_statistics.rb delete mode 100644 db/post_migrate/20180913142237_schedule_digest_personal_access_tokens.rb delete mode 100644 db/post_migrate/20180914162043_encrypt_web_hooks_columns.rb delete mode 100644 db/post_migrate/20180914201132_remove_sidekiq_throttling_from_application_settings.rb delete mode 100644 db/post_migrate/20180917172041_remove_wikis_count_from_site_statistics.rb delete mode 100644 db/post_migrate/20181008145341_steal_encrypt_columns.rb delete mode 100644 db/post_migrate/20181008145359_remove_web_hooks_token_and_url.rb delete mode 100644 db/post_migrate/20181008200441_remove_circuit_breaker.rb delete mode 100644 db/post_migrate/20181010133639_backfill_store_project_full_path_in_repo.rb delete mode 100644 db/post_migrate/20181013005024_remove_koding_from_application_settings.rb delete mode 100644 db/post_migrate/20181022173835_enqueue_populate_cluster_kubernetes_namespace.rb delete mode 100644 db/post_migrate/20181026091631_migrate_forbidden_redirect_uris.rb delete mode 100644 db/post_migrate/20181030135124_fill_empty_finished_at_in_deployments.rb delete mode 100644 db/post_migrate/20181101091124_remove_token_from_personal_access_tokens.rb delete mode 100644 db/post_migrate/20181105201455_steal_fill_store_upload.rb delete mode 100644 db/post_migrate/20181107054254_remove_restricted_todos_again.rb delete mode 100644 db/post_migrate/20181121111200_schedule_runners_token_encryption.rb delete mode 100644 db/post_migrate/20181123042307_drop_site_statistics.rb delete mode 100644 db/post_migrate/20181130102132_backfill_hashed_project_repositories.rb delete mode 100644 db/post_migrate/20181219130552_update_project_import_visibility_level.rb delete mode 100644 db/post_migrate/20181219145520_migrate_cluster_configure_worker_sidekiq_queue.rb create mode 100644 db/post_migrate/20200408132152_remove_namespaces_trial_ends_on.rb create mode 100644 db/post_migrate/20200421195234_backfill_status_page_published_incidents.rb create mode 100644 db/post_migrate/20200518114540_schedule_fix_ruby_object_in_audit_events.rb create mode 100644 db/post_migrate/20200518133123_add_index_on_starting_ending_at_to_metrics_dashboard_annotations.rb create mode 100644 db/post_migrate/20200519171058_update_index_ci_builds_on_commit_id_and_artifacts_expireatandidpartial.rb create mode 100644 db/post_migrate/20200525121014_drop_users_ghost_column.rb create mode 100644 db/post_migrate/20200525144525_migrate_stuck_import_jobs_queue_to_stuck_project_import_jobs.rb create mode 100644 db/post_migrate/20200526000407_seed_repository_storages_weighted.rb create mode 100644 db/post_migrate/20200527094322_drop_vulnerability_confidence_index.rb create mode 100644 db/post_migrate/20200527095401_drop_vulnerability_occurrence_confidence_index.rb create mode 100644 db/post_migrate/20200528123703_add_merge_request_partial_index_to_events.rb create mode 100644 db/post_migrate/20200602013900_add_limit_to_designs_filename.rb create mode 100644 db/post_migrate/20200602013901_cap_designs_filename_length_to_new_limit.rb create mode 100644 db/post_migrate/20200602143020_update_routes_for_lost_and_found_group_and_orphaned_projects.rb create mode 100644 db/post_migrate/20200608072931_backfill_imported_snippet_repositories.rb create mode 100644 db/post_migrate/20200608075553_add_index_on_user_id_and_created_at_and_source_to_ci_pipelines.rb create mode 100644 db/post_migrate/20200609002841_add_partial_index_on_locked_state_id_to_merge_requests.rb create mode 100644 doc/.vale/gitlab/Acronyms.yml create mode 100644 doc/.vale/gitlab/CodeblockFences.yml create mode 100644 doc/.vale/gitlab/CurlStringsQuoted.yml create mode 100644 doc/.vale/gitlab/MeaningfulLinkWords.yml create mode 100644 doc/.vale/gitlab/MergeConflictMarkers.yml delete mode 100644 doc/.vale/gitlab/Profanity.yml create mode 100644 doc/.vale/gitlab/SentenceLength.yml delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ce/img/gitlab_ou.png delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ce/img/ldap_ou.gif delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ce/img/user_auth.gif delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ee/img/admin_group.png delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ee/img/group_link_final.png delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ee/img/group_linking.gif delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ee/img/manual_permissions.gif delete mode 100644 doc/administration/auth/how_to_configure_ldap_gitlab_ee/img/multi_login.gif create mode 100644 doc/administration/auth/ldap/google_secure_ldap.md rename doc/administration/auth/{ => ldap}/img/google_secure_ldap_add_step_1.png (100%) rename doc/administration/auth/{ => ldap}/img/google_secure_ldap_add_step_2.png (100%) rename doc/administration/auth/{ => ldap}/img/google_secure_ldap_client_settings.png (100%) create mode 100644 doc/administration/auth/ldap/img/multi_login.gif create mode 100644 doc/administration/auth/ldap/index.md create mode 100644 doc/administration/auth/ldap/ldap-troubleshooting.md delete mode 100644 doc/administration/monitoring/performance/img/request_profiling_token.png create mode 100644 doc/administration/postgresql/external.md rename doc/administration/{high_availability => postgresql}/img/pg_ha_architecture.png (100%) create mode 100644 doc/administration/postgresql/replication_and_failover.md create mode 100644 doc/administration/postgresql/standalone.md create mode 100644 doc/administration/reference_architectures/troubleshooting.md create mode 100644 doc/administration/troubleshooting/index.md create mode 100644 doc/api/feature_flags_legacy.md create mode 100644 doc/api/resource_milestone_events.md create mode 100644 doc/ci/directed_acyclic_graph/img/dag_graph_example_clicked_v13_1.png create mode 100644 doc/ci/directed_acyclic_graph/img/dag_graph_example_v13_1.png create mode 100644 doc/ci/environments/deployment_safety.md create mode 100644 doc/ci/migration/circleci.md create mode 100644 doc/ci/pipelines/img/code_coverage_graph_v13_1.png create mode 100644 doc/development/database/index.md create mode 100644 doc/development/database/not_null_constraints.md create mode 100644 doc/development/database/strings_and_the_text_data_type.md create mode 100644 doc/development/go_guide/dependencies.md create mode 100644 doc/development/img/bullet_v13_0.png create mode 100644 doc/development/service_measurement.md delete mode 100644 doc/install/aws/img/rds_subnet_group.png delete mode 100644 doc/install/google_cloud_platform/img/boot_disk.png delete mode 100644 doc/integration/img/ultra_auth_credentials.png delete mode 100644 doc/integration/img/ultra_auth_edit_callback_url.png delete mode 100644 doc/integration/img/ultra_auth_edit_callback_url_highlighted.png delete mode 100644 doc/integration/ultra_auth.md create mode 100644 doc/security/img/allowlist_v13_0.png delete mode 100644 doc/security/img/whitelist.png delete mode 100644 doc/topics/autodevops/img/guide_pipeline_stages_v12_3.png create mode 100644 doc/topics/autodevops/img/guide_pipeline_stages_v13_0.png create mode 100644 doc/topics/autodevops/requirements.md create mode 100644 doc/topics/git/feature_branch_development.md create mode 100644 doc/topics/git/img/create_merge_request_v13_1.png create mode 100644 doc/topics/git/img/modify_branches_v13_1.png create mode 100644 doc/topics/offline/index.md rename doc/topics/{airgap => offline}/quick_start_guide.md (97%) delete mode 100644 doc/university/support/README.md delete mode 100644 doc/user/admin_area/settings/img/rate_limit_on_issues_creation.png create mode 100644 doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v13_1.png create mode 100644 doc/user/analytics/img/vsa_time_metrics_v13_0.png create mode 100644 doc/user/application_security/img/vulnerability-check_v13_0.png create mode 100644 doc/user/application_security/security_dashboard/img/group_security_dashboard_export_csv_v13_1.png create mode 100644 doc/user/application_security/vulnerabilities/img/standalone_vulnerability_page_download_patch_button_v13_1.png create mode 100644 doc/user/application_security/vulnerabilities/img/standalone_vulnerability_page_merge_request_button_dropdown_v13_1.png create mode 100644 doc/user/application_security/vulnerabilities/img/standalone_vulnerability_page_merge_request_button_v13_1.png create mode 100644 doc/user/discussions/img/add_another_suggestion_to_batch_v13_1.jpg create mode 100644 doc/user/discussions/img/add_first_suggestion_to_batch_v13_1.jpg create mode 100644 doc/user/discussions/img/apply_batch_of_suggestions_v13_1.jpg create mode 100644 doc/user/discussions/img/quickly_assign_commenter_v13_1.png create mode 100644 doc/user/discussions/img/remove_suggestion_from_batch_v13_1.jpg delete mode 100644 doc/user/discussions/img/suggestions_custom_commit_messages_v12_7.png create mode 100644 doc/user/discussions/img/suggestions_custom_commit_messages_v13_1.jpg delete mode 100644 doc/user/group/epics/img/bulk_editing.png create mode 100644 doc/user/group/epics/img/issue_list_v13_1.png create mode 100644 doc/user/group/img/ldap_sync_cn_v13_1.png create mode 100644 doc/user/group/img/ldap_sync_filter_v13_1.png create mode 100644 doc/user/group/img/manual_permissions_v13_1.png create mode 100644 doc/user/group/issues_analytics/img/issues_table_v13_1.png create mode 100644 doc/user/group/iterations/index.md delete mode 100644 doc/user/group/settings/img/export_panel.png create mode 100644 doc/user/group/settings/img/export_panel_v13_0.png create mode 100644 doc/user/group/settings/img/import_panel_v13_1.png create mode 100644 doc/user/group/settings/img/new_group_navigation_v13_1.png create mode 100644 doc/user/packages/composer_repository/index.md delete mode 100644 doc/user/packages/container_registry/img/container_registry_group_repositories_v13_0.png create mode 100644 doc/user/packages/container_registry/img/container_registry_group_repositories_v13_1.png delete mode 100644 doc/user/packages/container_registry/img/container_registry_repositories_v13_0.png create mode 100644 doc/user/packages/container_registry/img/container_registry_repositories_v13_1.png delete mode 100644 doc/user/packages/container_registry/img/container_registry_repositories_with_quickstart_v13_0.png create mode 100644 doc/user/packages/container_registry/img/container_registry_repositories_with_quickstart_v13_1.png create mode 100644 doc/user/packages/go_proxy/index.md create mode 100644 doc/user/profile/img/unknown_sign_in_email_v13_1.png create mode 100644 doc/user/project/deploy_keys/img/deploy_keys_v13_0.png create mode 100644 doc/user/project/deploy_keys/img/public_deploy_key_v13_0.png create mode 100644 doc/user/project/deploy_keys/index.md create mode 100644 doc/user/project/img/status_page_detail_link_v13_1.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_yaml_validation_v13_1.png delete mode 100644 doc/user/project/integrations/img/prometheus_monitoring_dashboard_v12_8.png create mode 100644 doc/user/project/integrations/img/prometheus_monitoring_dashboard_v13_1.png create mode 100644 doc/user/project/integrations/img/related_links_v13_1.png delete mode 100644 doc/user/project/integrations/img/slack_configuration.png delete mode 100644 doc/user/project/issues/img/new_issue.png create mode 100644 doc/user/project/issues/img/new_issue_v13_1.png create mode 100644 doc/user/project/issues/img/resolve_design-discussion_checkbox_v13_1.png create mode 100644 doc/user/project/issues/img/resolve_design-discussion_icon_v13_1.png create mode 100644 doc/user/project/merge_requests/testing_and_reports_in_merge_requests.md create mode 100644 doc/user/project/operations/dashboard_settings.md create mode 100644 doc/user/project/operations/img/alert_detail_full_v13_1.png create mode 100644 doc/user/project/operations/img/alert_detail_overview_v13_1.png create mode 100644 doc/user/project/operations/img/alert_detail_system_notes_v13_1.png delete mode 100644 doc/user/project/operations/img/alert_detail_v13_0.png create mode 100644 doc/user/project/operations/img/alert_details_assignees_v13_1.png create mode 100644 doc/user/project/operations/img/alert_issue_v13_1.png create mode 100644 doc/user/project/operations/img/alert_list_assignees_v13_1.png create mode 100644 doc/user/project/operations/img/alert_todo_assignees_v13_1.png create mode 100644 doc/user/project/operations/img/dashboard_external_link_v13_1.png create mode 100644 doc/user/project/operations/img/dashboard_local_timezone_v13_1.png delete mode 100644 doc/user/project/operations/img/external_dashboard_settings.png delete mode 100644 doc/user/project/pages/img/choose_ci_template.png create mode 100644 doc/user/project/pages/img/choose_ci_template_v13_1.png delete mode 100644 doc/user/project/pages/img/pages_project_templates_v11_8.png create mode 100644 doc/user/project/pages/img/pages_project_templates_v13_1.png delete mode 100644 doc/user/project/pages/img/remove_fork_relationship.png create mode 100644 doc/user/project/pages/img/remove_fork_relationship_v13_1.png delete mode 100644 doc/user/project/pages/img/setup_ci.png create mode 100644 doc/user/project/pages/img/setup_ci_v13_1.png delete mode 100644 doc/user/project/repository/img/repository_cleanup.png delete mode 100644 doc/user/project/requirements/img/requirement_edit_save_v12_10.png rename jest.config.unit.js => jest.config.js (100%) create mode 100644 lib/api/entities/bridge.rb create mode 100644 lib/api/entities/resource_milestone_event.rb create mode 100644 lib/api/entities/shared_group_with_group.rb rename lib/api/entities/{shared_group.rb => shared_group_with_project.rb} (88%) delete mode 100644 lib/api/lsif_data.rb create mode 100644 lib/api/resource_milestone_events.rb create mode 100644 lib/api/validations/validators/untrusted_regexp.rb create mode 100644 lib/banzai/filter/design_reference_filter.rb create mode 100644 lib/banzai/filter/iteration_reference_filter.rb create mode 100644 lib/banzai/reference_parser/iteration_parser.rb create mode 100644 lib/extracts_ref.rb create mode 100644 lib/gitlab/alert_management/fingerprint.rb create mode 100644 lib/gitlab/background_migration/fix_ruby_object_in_audit_events.rb create mode 100644 lib/gitlab/ci/build/releaser.rb create mode 100644 lib/gitlab/ci/pipeline/chain/metrics.rb create mode 100644 lib/gitlab/ci/templates/AWS/Deploy-ECS.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/Security/Secret-Detection.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/Verify/FailFast.gitlab-ci.yml create mode 100644 lib/gitlab/data_builder/alert.rb create mode 100644 lib/gitlab/database/custom_structure.rb create mode 100644 lib/gitlab/database/partitioning_migration_helpers/foreign_key_helpers.rb create mode 100644 lib/gitlab/database/partitioning_migration_helpers/table_management_helpers.rb create mode 100644 lib/gitlab/dependency_linker/go_mod_linker.rb create mode 100644 lib/gitlab/dependency_linker/go_sum_linker.rb create mode 100644 lib/gitlab/doctor/secrets.rb create mode 100644 lib/gitlab/error_tracking/processor/sidekiq_processor.rb create mode 100644 lib/gitlab/export/logger.rb create mode 100644 lib/gitlab/git_access_project.rb create mode 100644 lib/gitlab/gl_repository/identifier.rb create mode 100644 lib/gitlab/golang.rb delete mode 100644 lib/gitlab/graphql/filterable_array.rb create mode 100644 lib/gitlab/graphql/loaders/full_path_model_loader.rb delete mode 100644 lib/gitlab/graphql/pagination/filterable_array_connection.rb create mode 100644 lib/gitlab/import_export/attributes_permitter.rb create mode 100644 lib/gitlab/instrumentation/elasticsearch_transport.rb create mode 100644 lib/gitlab/instrumentation/redis_base.rb create mode 100644 lib/gitlab/instrumentation/redis_interceptor.rb create mode 100644 lib/gitlab/instrumentation/redis_payload.rb delete mode 100644 lib/gitlab/looping_batcher.rb create mode 100644 lib/gitlab/metrics/dashboard/stages/url_validator.rb create mode 100644 lib/gitlab/metrics/elasticsearch_rack_middleware.rb create mode 100644 lib/gitlab/metrics/redis_rack_middleware.rb create mode 100644 lib/gitlab/middleware/handle_ip_spoof_attack_error.rb create mode 100644 lib/gitlab/monitor/demo_projects.rb create mode 100644 lib/gitlab/process_memory_cache/helper.rb create mode 100644 lib/gitlab/search_context.rb create mode 100644 lib/gitlab/suggestions/commit_message.rb create mode 100644 lib/gitlab/suggestions/file_suggestion.rb create mode 100644 lib/gitlab/suggestions/suggestion_set.rb create mode 100644 lib/gitlab/usage_data_concerns/topology.rb create mode 100644 lib/gitlab/utils/usage_data.rb create mode 100644 lib/gitlab/web_ide/config.rb create mode 100644 lib/gitlab/web_ide/config/entry/global.rb create mode 100644 lib/gitlab/web_ide/config/entry/terminal.rb delete mode 100644 lib/milestone_array.rb create mode 100644 lib/peek/views/bullet_detailed.rb create mode 100644 lib/peek/views/elasticsearch.rb create mode 100644 lib/tasks/gitlab/container_registry.rake create mode 100644 lib/tasks/gitlab/doctor/secrets.rake create mode 100644 locale/az_AZ/gitlab.po create mode 100644 locale/is_IS/gitlab.po create mode 100644 public/-/emojis/1/emojis.json create mode 100644 qa/qa/page/component/issue_board/show.rb create mode 100644 qa/qa/page/component/web_ide/modal/create_new_file.rb create mode 100644 qa/qa/page/issuable/new.rb create mode 100644 qa/qa/page/project/members.rb create mode 100644 qa/qa/page/project/new_experiment.rb delete mode 100644 qa/qa/page/project/settings/members.rb create mode 100644 qa/qa/page/project/settings/services/jira.rb create mode 100644 qa/qa/page/project/snippet/new.rb delete mode 100644 qa/qa/page/project/wiki/new.rb create mode 100644 qa/qa/resource/project_snippet.rb delete mode 100644 qa/qa/resource/wiki.rb create mode 100644 qa/qa/resource/wiki/project_page.rb create mode 100644 qa/qa/runtime/api/repository_storage_moves.rb create mode 100644 qa/qa/scenario/test/instance/airgapped.rb create mode 100644 qa/qa/specs/features/api/3_create/repository/changing_repository_storage_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/jira/jira_basic_integration_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb rename qa/qa/specs/features/browser_ui/3_create/snippet/{create_snippet_spec.rb => create_personal_snippet_spec.rb} (91%) create mode 100644 qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb delete mode 100644 qa/qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_creation_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_manipulation_spec.rb create mode 100644 qa/qa/vendor/jira/jira_api.rb create mode 100644 qa/spec/scenario/test/instance/airgapped_spec.rb create mode 100644 qa/spec/support/shared_examples/merge_with_code_owner_shared_examples.rb create mode 100644 rubocop/cop/default_scope.rb create mode 100644 rubocop/cop/gitlab/avoid_feature_get.rb create mode 100644 rubocop/cop/gitlab/bulk_insert.rb create mode 100644 rubocop/cop/migration/drop_table.rb delete mode 100644 rubocop/cop/migration/update_large_table.rb delete mode 100644 rubocop/cop/rspec/empty_line_after_shared_example.rb create mode 100644 rubocop/rubocop-migrations.yml create mode 100644 spec/controllers/groups/imports_controller_spec.rb create mode 100644 spec/controllers/projects/merge_requests/drafts_controller_spec.rb create mode 100644 spec/controllers/projects/web_ide_terminals_controller_spec.rb create mode 100644 spec/controllers/registrations/experience_levels_controller_spec.rb create mode 100644 spec/factories/ci/build_report_results.rb create mode 100644 spec/factories/draft_note.rb create mode 100644 spec/factories/group_import_states.rb create mode 100644 spec/factories/reviews.rb create mode 100644 spec/features/action_cable_logging_spec.rb delete mode 100644 spec/features/dashboard/milestone_tabs_spec.rb create mode 100644 spec/features/groups/import_export/import_file_spec.rb create mode 100644 spec/features/merge_request/batch_comments_spec.rb create mode 100644 spec/features/merge_request/user_clicks_merge_request_tabs_spec.rb create mode 100644 spec/features/merge_request/user_reviews_image_spec.rb create mode 100644 spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb delete mode 100644 spec/features/projects/settings/user_manages_group_links_spec.rb delete mode 100644 spec/finders/admin/runners_finder_spec.rb create mode 100644 spec/finders/ci/runners_finder_spec.rb delete mode 100644 spec/finders/resource_label_event_finder_spec.rb create mode 100644 spec/finders/resource_milestone_event_finder_spec.rb create mode 100644 spec/finders/uploader_finder_spec.rb create mode 100644 spec/fixtures/lib/gitlab/metrics/dashboard/schemas/links.json create mode 100644 spec/fixtures/lib/gitlab/metrics/dashboard/schemas/templating.json create mode 100644 spec/fixtures/lib/gitlab/metrics/dashboard/schemas/text_variable_full_syntax.json create mode 100644 spec/fixtures/lib/gitlab/metrics/dashboard/schemas/text_variable_options.json create mode 100644 spec/fixtures/lib/gitlab/metrics/dashboard/schemas/variables.json delete mode 100644 spec/fixtures/lsif.json.gz create mode 100644 spec/fixtures/packages/conan/package_files/conan_package.tgz create mode 100644 spec/fixtures/packages/conan/package_files/conaninfo.txt create mode 100644 spec/fixtures/packages/conan/package_files/conanmanifest.txt create mode 100644 spec/fixtures/packages/conan/recipe_files/conanfile.py create mode 100644 spec/fixtures/packages/conan/recipe_files/conanmanifest.txt create mode 100644 spec/fixtures/packages/maven/maven-metadata.xml create mode 100644 spec/fixtures/packages/maven/my-app-1.0-20180724.124855-1.jar create mode 100644 spec/fixtures/packages/maven/my-app-1.0-20180724.124855-1.pom create mode 100644 spec/fixtures/packages/npm/foo-1.0.1.tgz create mode 100644 spec/fixtures/packages/npm/payload.json create mode 100644 spec/fixtures/packages/npm/payload_with_duplicated_packages.json create mode 100644 spec/fixtures/packages/nuget/package.nupkg create mode 100644 spec/fixtures/packages/nuget/with_dependencies.nuspec create mode 100644 spec/fixtures/packages/nuget/with_metadata.nuspec create mode 100644 spec/fixtures/packages/pypi/sample-project.tar.gz create mode 100644 spec/frontend/__mocks__/lodash/throttle.js create mode 100644 spec/frontend/alert_management/components/alert_management_system_note_spec.js create mode 100644 spec/frontend/alert_management/components/alert_managment_sidebar_assignees_spec.js create mode 100644 spec/frontend/alert_management/components/alert_sidebar_spec.js create mode 100644 spec/frontend/alert_management/components/alert_sidebar_status_spec.js rename spec/frontend/{ => authentication}/u2f/authenticate_spec.js (93%) rename spec/frontend/{ => authentication}/u2f/mock_u2f_device.js (100%) rename spec/frontend/{ => authentication}/u2f/register_spec.js (98%) rename spec/frontend/{ => authentication}/u2f/util_spec.js (97%) rename spec/{javascripts => frontend}/awards_handler_spec.js (83%) create mode 100644 spec/frontend/batch_comments/components/diff_file_drafts_spec.js create mode 100644 spec/frontend/batch_comments/components/draft_note_spec.js create mode 100644 spec/frontend/batch_comments/components/drafts_count_spec.js create mode 100644 spec/frontend/batch_comments/components/preview_item_spec.js create mode 100644 spec/frontend/batch_comments/components/publish_button_spec.js create mode 100644 spec/frontend/batch_comments/components/publish_dropdown_spec.js create mode 100644 spec/frontend/batch_comments/mock_data.js create mode 100644 spec/frontend/batch_comments/stores/modules/batch_comments/actions_spec.js create mode 100644 spec/frontend/batch_comments/stores/modules/batch_comments/getters_spec.js create mode 100644 spec/frontend/batch_comments/stores/modules/batch_comments/mutations_spec.js rename spec/{javascripts => frontend}/behaviors/autosize_spec.js (100%) rename spec/{javascripts => frontend}/behaviors/copy_as_gfm_spec.js (88%) rename spec/{javascripts => frontend}/behaviors/gl_emoji/unicode_support_map_spec.js (57%) rename spec/{javascripts => frontend}/behaviors/markdown/highlight_current_user_spec.js (100%) rename spec/{javascripts => frontend}/behaviors/requires_input_spec.js (100%) rename spec/{javascripts => frontend}/behaviors/shortcuts/shortcuts_issuable_spec.js (81%) rename spec/{javascripts/boards/board_list_common_spec.js => frontend/boards/board_list_helper.js} (100%) create mode 100644 spec/frontend/boards/components/board_list_header_spec.js create mode 100644 spec/frontend/clusters/components/__snapshots__/applications_spec.js.snap create mode 100644 spec/frontend/clusters/components/update_application_confirmation_modal_spec.js rename spec/{javascripts => frontend}/collapsed_sidebar_todo_spec.js (92%) create mode 100644 spec/frontend/comment_type_toggle_spec.js create mode 100644 spec/frontend/design_management/components/design_notes/toggle_replies_widget_spec.js create mode 100644 spec/frontend/design_management/components/design_sidebar_spec.js create mode 100644 spec/frontend/diffs/mock_data/diff_metadata.js create mode 100644 spec/frontend/diffs/utils/uuids_spec.js create mode 100644 spec/frontend/droplab/drop_down_spec.js create mode 100644 spec/frontend/droplab/hook_spec.js create mode 100644 spec/frontend/droplab/plugins/input_setter_spec.js rename spec/{javascripts => frontend}/dropzone_input_spec.js (56%) rename spec/{javascripts => frontend}/filtered_search/filtered_search_dropdown_manager_spec.js (76%) rename spec/{javascripts => frontend}/filtered_search/filtered_search_visual_tokens_spec.js (97%) rename spec/frontend/fixtures/static/{search_autocomplete.html => global_search_input.html} (100%) rename spec/{javascripts => frontend}/gl_dropdown_spec.js (74%) rename spec/{javascripts => frontend}/gl_form_spec.js (58%) rename spec/{javascripts/search_autocomplete_spec.js => frontend/global_search_input_spec.js} (79%) create mode 100644 spec/frontend/helpers/dom_shims/element_scroll_to.js create mode 100644 spec/frontend/helpers/dom_shims/mutation_observer.js create mode 100644 spec/frontend/helpers/local_storage_helper_spec.js create mode 100644 spec/frontend/helpers/mock_dom_observer.js create mode 100644 spec/frontend/helpers/mock_window_location_helper.js delete mode 100644 spec/frontend/helpers/scroll_into_view_promise.js create mode 100644 spec/frontend/helpers/vue_mock_directive.js delete mode 100644 spec/frontend/helpers/wait_for_attribute_change.js create mode 100644 spec/frontend/ide/commit_icon_spec.js rename spec/{javascripts => frontend}/ide/components/commit_sidebar/message_field_spec.js (96%) create mode 100644 spec/frontend/ide/components/ide_sidebar_nav_spec.js create mode 100644 spec/frontend/ide/components/jobs/detail_spec.js create mode 100644 spec/frontend/ide/components/repo_editor_spec.js create mode 100644 spec/frontend/ide/components/resizable_panel_spec.js create mode 100644 spec/frontend/ide/components/terminal/empty_state_spec.js create mode 100644 spec/frontend/ide/components/terminal/session_spec.js create mode 100644 spec/frontend/ide/components/terminal/terminal_controls_spec.js create mode 100644 spec/frontend/ide/components/terminal/terminal_spec.js create mode 100644 spec/frontend/ide/components/terminal/view_spec.js create mode 100644 spec/frontend/ide/components/terminal_sync/terminal_sync_status_safe_spec.js create mode 100644 spec/frontend/ide/components/terminal_sync/terminal_sync_status_spec.js create mode 100644 spec/frontend/ide/file_helpers.js create mode 100644 spec/frontend/ide/lib/create_diff_spec.js create mode 100644 spec/frontend/ide/lib/create_file_diff_spec.js delete mode 100644 spec/frontend/ide/lib/editor_options_spec.js create mode 100644 spec/frontend/ide/lib/editorconfig/mock_data.js create mode 100644 spec/frontend/ide/lib/editorconfig/parser_spec.js create mode 100644 spec/frontend/ide/lib/editorconfig/rules_mapper_spec.js create mode 100644 spec/frontend/ide/lib/mirror_spec.js rename spec/{javascripts => frontend}/ide/stores/actions/merge_request_spec.js (90%) rename spec/{javascripts => frontend}/ide/stores/actions/project_spec.js (86%) rename spec/{javascripts => frontend}/ide/stores/actions/tree_spec.js (85%) rename spec/{javascripts => frontend}/ide/stores/actions_spec.js (89%) create mode 100644 spec/frontend/ide/stores/extend_spec.js rename spec/{javascripts => frontend}/ide/stores/modules/commit/actions_spec.js (85%) create mode 100644 spec/frontend/ide/stores/modules/router/actions_spec.js create mode 100644 spec/frontend/ide/stores/modules/router/mutations_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/actions/checks_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/actions/session_controls_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/actions/session_status_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/actions/setup_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/getters_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/messages_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal/mutations_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal_sync/actions_spec.js create mode 100644 spec/frontend/ide/stores/modules/terminal_sync/mutations_spec.js create mode 100644 spec/frontend/ide/stores/plugins/terminal_spec.js create mode 100644 spec/frontend/ide/stores/plugins/terminal_sync_spec.js create mode 100644 spec/frontend/ide/sync_router_and_store_spec.js create mode 100644 spec/frontend/import_projects/components/bitbucket_status_table_spec.js rename spec/{javascripts => frontend}/importer_status_spec.js (85%) create mode 100644 spec/frontend/integrations/edit/components/dynamic_field_spec.js create mode 100644 spec/frontend/jira_import/mock_data.js create mode 100644 spec/frontend/jira_import/utils/cache_update_spec.js rename spec/frontend/jira_import/{utils_spec.js => utils/jira_import_utils_spec.js} (74%) rename spec/{javascripts => frontend}/labels_issue_sidebar_spec.js (96%) create mode 100644 spec/frontend/lazy_loader_spec.js create mode 100644 spec/frontend/line_highlighter_spec.js create mode 100644 spec/frontend/matchers_spec.js rename spec/{javascripts => frontend}/merge_request_spec.js (71%) create mode 100644 spec/frontend/merge_request_tabs_spec.js rename spec/{javascripts => frontend}/mini_pipeline_graph_dropdown_spec.js (88%) create mode 100644 spec/frontend/monitoring/components/links_section_spec.js create mode 100644 spec/frontend/monitoring/pages/dashboard_page_spec.js create mode 100644 spec/frontend/monitoring/store/index_spec.js create mode 100644 spec/frontend/namespace_storage_limit_alert_spec.js create mode 100644 spec/frontend/notes/components/multiline_comment_utils_spec.js create mode 100644 spec/frontend/onboarding_issues/index_spec.js rename spec/frontend/operation_settings/components/{external_dashboard_spec.js => metrics_settings_spec.js} (53%) rename spec/{javascripts => frontend}/pager_spec.js (79%) rename spec/{javascripts => frontend/pages/dashboard/todos/index}/todos_spec.js (83%) create mode 100644 spec/frontend/pages/import/bitbucket_server/components/bitbucket_server_status_table_spec.js create mode 100644 spec/frontend/pages/projects/graphs/__snapshots__/code_coverage_spec.js.snap create mode 100644 spec/frontend/pages/projects/graphs/code_coverage_spec.js create mode 100644 spec/frontend/pages/projects/graphs/mock_data.js rename spec/{javascripts => frontend/pages/sessions/new}/signin_tabs_memoizer_spec.js (86%) rename spec/{javascripts => frontend}/pdf/index_spec.js (90%) rename spec/{javascripts => frontend}/pdf/page_spec.js (55%) rename spec/{javascripts => frontend}/performance_bar/index_spec.js (83%) rename spec/{javascripts => frontend}/persistent_user_callout_spec.js (60%) create mode 100644 spec/frontend/pipelines/components/dag/__snapshots__/dag_graph_spec.js.snap create mode 100644 spec/frontend/pipelines/components/dag/dag_graph_spec.js create mode 100644 spec/frontend/pipelines/components/dag/dag_spec.js create mode 100644 spec/frontend/pipelines/components/dag/drawing_utils_spec.js create mode 100644 spec/frontend/pipelines/components/dag/mock_data.js create mode 100644 spec/frontend/pipelines/components/dag/parsing_utils_spec.js create mode 100644 spec/frontend/pipelines/tokens/pipeline_status_token_spec.js create mode 100644 spec/frontend/pipelines/tokens/pipeline_tag_name_token_spec.js create mode 100644 spec/frontend/projects/experiment_new_project_creation/components/app_spec.js create mode 100644 spec/frontend/projects/experiment_new_project_creation/components/legacy_container_spec.js create mode 100644 spec/frontend/projects/experiment_new_project_creation/components/welcome_spec.js rename spec/{javascripts => frontend}/read_more_spec.js (100%) create mode 100644 spec/frontend/registry/explorer/components/details_page/__snapshots__/tags_loader_spec.js.snap create mode 100644 spec/frontend/registry/explorer/components/details_page/delete_alert_spec.js create mode 100644 spec/frontend/registry/explorer/components/details_page/delete_modal_spec.js create mode 100644 spec/frontend/registry/explorer/components/details_page/details_header_spec.js create mode 100644 spec/frontend/registry/explorer/components/details_page/empty_tags_state.js create mode 100644 spec/frontend/registry/explorer/components/details_page/tags_loader_spec.js create mode 100644 spec/frontend/registry/explorer/components/details_page/tags_table_spec.js delete mode 100644 spec/frontend/registry/explorer/components/image_list_spec.js rename spec/frontend/registry/explorer/components/{ => list_page}/__snapshots__/group_empty_state_spec.js.snap (100%) rename spec/frontend/registry/explorer/components/{ => list_page}/__snapshots__/project_empty_state_spec.js.snap (99%) rename spec/frontend/registry/explorer/components/{quickstart_dropdown_spec.js => list_page/cli_commands_spec.js} (96%) rename spec/frontend/registry/explorer/components/{ => list_page}/group_empty_state_spec.js (84%) create mode 100644 spec/frontend/registry/explorer/components/list_page/image_list_row_spec.js create mode 100644 spec/frontend/registry/explorer/components/list_page/image_list_spec.js rename spec/frontend/registry/explorer/components/{ => list_page}/project_empty_state_spec.js (87%) create mode 100644 spec/frontend/registry/explorer/components/list_page/registry_header_spec.js delete mode 100644 spec/frontend/registry/explorer/components/project_policy_alert_spec.js rename spec/{javascripts => frontend}/releases/components/app_index_spec.js (50%) create mode 100644 spec/frontend/releases/components/release_block_assets_spec.js rename spec/{javascripts => frontend}/releases/stores/modules/list/actions_spec.js (92%) rename spec/{javascripts => frontend}/releases/stores/modules/list/helpers.js (100%) rename spec/{javascripts => frontend}/releases/stores/modules/list/mutations_spec.js (100%) rename spec/{javascripts => frontend}/right_sidebar_spec.js (86%) create mode 100644 spec/frontend/shortcuts_spec.js create mode 100644 spec/frontend/static_site_editor/components/unsaved_changes_confirm_dialog_spec.js create mode 100644 spec/frontend/static_site_editor/services/parse_source_file_spec.js rename spec/{javascripts => frontend}/toggle_buttons_spec.js (67%) rename spec/{javascripts => frontend}/user_popovers_spec.js (90%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_alert_message_spec.js (100%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_author_spec.js (93%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_author_time_spec.js (94%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_header_spec.js (99%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_memory_usage_spec.js (91%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_merge_help_spec.js (96%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_pipeline_spec.js (98%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_rebase_spec.js (93%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_related_links_spec.js (97%) rename spec/{javascripts => frontend}/vue_mr_widget/components/mr_widget_status_icon_spec.js (95%) rename spec/{javascripts => frontend}/vue_mr_widget/components/review_app_link_spec.js (90%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_archived_spec.js (92%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_auto_merge_enabled_spec.js (94%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_checking_spec.js (92%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_closed_spec.js (96%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_conflicts_spec.js (96%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_failed_to_merge_spec.js (92%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_merged_spec.js (95%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_merging_spec.js (94%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_missing_branch_spec.js (94%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_not_allowed_spec.js (91%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_nothing_to_merge_spec.js (100%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_pipeline_blocked_spec.js (84%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_pipeline_failed_spec.js (92%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js (90%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_sha_mismatch_spec.js (82%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_squash_before_merge_spec.js (100%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_unresolved_discussions_spec.js (85%) rename spec/{javascripts => frontend}/vue_mr_widget/components/states/mr_widget_wip_spec.js (87%) rename spec/{javascripts => frontend}/vue_shared/components/deprecated_modal_2_spec.js (91%) rename spec/{javascripts => frontend}/vue_shared/components/deprecated_modal_spec.js (89%) create mode 100644 spec/frontend/vue_shared/components/diff_viewer/viewers/renamed_spec.js rename spec/{javascripts => frontend}/vue_shared/components/file_finder/index_spec.js (90%) create mode 100644 spec/frontend/vue_shared/components/filtered_search_bar/filtered_search_bar_root_spec.js create mode 100644 spec/frontend/vue_shared/components/filtered_search_bar/mock_data.js create mode 100644 spec/frontend/vue_shared/components/filtered_search_bar/tokens/author_token_spec.js rename spec/{javascripts => frontend}/vue_shared/components/icon_spec.js (69%) rename spec/{javascripts => frontend}/vue_shared/components/panel_resizer_spec.js (91%) create mode 100644 spec/frontend/vue_shared/components/rich_content_editor/editor_service_spec.js create mode 100644 spec/frontend/vue_shared/components/rich_content_editor/modals/add_image_modal_spec.js delete mode 100644 spec/frontend/vue_shared/components/rich_content_editor/toolbar_service_spec.js rename spec/{javascripts => frontend}/vue_shared/components/smart_virtual_list_spec.js (95%) rename spec/{javascripts => frontend}/vue_shared/directives/autofocusonshow_spec.js (76%) create mode 100644 spec/frontend/vue_shared/directives/tooltip_spec.js create mode 100644 spec/frontend/vue_shared/translate_spec.js rename spec/{javascripts => frontend}/vuex_shared/modules/modal/actions_spec.js (93%) rename spec/{javascripts => frontend}/zen_mode_spec.js (78%) create mode 100644 spec/graphql/mutations/alert_management/alerts/set_assignees_spec.rb create mode 100644 spec/graphql/mutations/commits/create_spec.rb delete mode 100644 spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb create mode 100644 spec/graphql/mutations/container_expiration_policies/update_spec.rb create mode 100644 spec/graphql/mutations/discussions/toggle_resolve_spec.rb create mode 100644 spec/graphql/mutations/merge_requests/create_spec.rb rename spec/graphql/resolvers/{alert_management_alert_resolver_spec.rb => alert_management/alert_resolver_spec.rb} (86%) create mode 100644 spec/graphql/resolvers/concerns/looks_ahead_spec.rb create mode 100644 spec/graphql/resolvers/concerns/resolves_project_spec.rb create mode 100644 spec/graphql/resolvers/project_members_resolver_spec.rb create mode 100644 spec/graphql/resolvers/project_pipeline_resolver_spec.rb create mode 100644 spec/graphql/resolvers/projects/jira_projects_resolver_spec.rb create mode 100644 spec/graphql/resolvers/user_resolver_spec.rb create mode 100644 spec/graphql/resolvers/users_resolver_spec.rb create mode 100644 spec/graphql/types/access_level_enum_spec.rb create mode 100644 spec/graphql/types/access_level_type_spec.rb create mode 100644 spec/graphql/types/commit_action_mode_enum_spec.rb create mode 100644 spec/graphql/types/commit_encoding_enum_spec.rb create mode 100644 spec/graphql/types/container_expiration_policy_cadence_enum_spec.rb create mode 100644 spec/graphql/types/container_expiration_policy_keep_enum_spec.rb create mode 100644 spec/graphql/types/container_expiration_policy_older_than_enum_spec.rb create mode 100644 spec/graphql/types/container_expiration_policy_type_spec.rb create mode 100644 spec/graphql/types/evidence_type_spec.rb create mode 100644 spec/graphql/types/group_member_type_spec.rb create mode 100644 spec/graphql/types/project_member_type_spec.rb create mode 100644 spec/graphql/types/projects/jira_project_type_spec.rb create mode 100644 spec/graphql/types/release_assets_type_spec.rb create mode 100644 spec/graphql/types/release_links_type_spec.rb create mode 100644 spec/graphql/types/release_source_type_spec.rb create mode 100644 spec/graphql/types/resolvable_interface_spec.rb create mode 100644 spec/graphql/types/snippets/file_input_action_enum_spec.rb create mode 100644 spec/graphql/types/snippets/file_input_type_spec.rb create mode 100644 spec/helpers/subscribable_banner_helper_spec.rb rename spec/helpers/{milestones_helper_spec.rb => timeboxes_helper_spec.rb} (72%) rename spec/helpers/{milestones_routing_helper_spec.rb => timeboxes_routing_helper_spec.rb} (97%) create mode 100644 spec/initializers/actionpack_generate_old_csrf_token_spec.rb delete mode 100644 spec/initializers/google_api_client_spec.rb delete mode 100644 spec/javascripts/comment_type_toggle_spec.js delete mode 100644 spec/javascripts/droplab/drop_down_spec.js delete mode 100644 spec/javascripts/droplab/hook_spec.js delete mode 100644 spec/javascripts/droplab/plugins/input_setter_spec.js delete mode 100644 spec/javascripts/helpers/scroll_into_view_promise.js delete mode 100644 spec/javascripts/helpers/vuex_action_helper_spec.js delete mode 100644 spec/javascripts/helpers/wait_for_attribute_change.js delete mode 100644 spec/javascripts/ide/components/jobs/detail_spec.js delete mode 100644 spec/javascripts/ide/components/repo_editor_spec.js delete mode 100644 spec/javascripts/ide/helpers.js delete mode 100644 spec/javascripts/ide/mock_data.js delete mode 100644 spec/javascripts/lazy_loader_spec.js delete mode 100644 spec/javascripts/line_highlighter_spec.js delete mode 100644 spec/javascripts/merge_request_tabs_spec.js delete mode 100644 spec/javascripts/releases/mock_data.js delete mode 100644 spec/javascripts/shortcuts_spec.js delete mode 100644 spec/javascripts/vue_mr_widget/mock_data.js delete mode 100644 spec/javascripts/vue_shared/components/issue/related_issuable_mock_data.js delete mode 100644 spec/javascripts/vue_shared/directives/tooltip_spec.js delete mode 100644 spec/javascripts/vue_shared/translate_spec.js create mode 100644 spec/lib/api/validations/validators/untrusted_regexp_spec.rb create mode 100644 spec/lib/banzai/filter/design_reference_filter_spec.rb create mode 100644 spec/lib/extracts_ref_spec.rb create mode 100644 spec/lib/gitlab/alert_management/fingerprint_spec.rb create mode 100644 spec/lib/gitlab/ci/build/releaser_spec.rb create mode 100644 spec/lib/gitlab/cleanup/orphan_lfs_file_references_spec.rb create mode 100644 spec/lib/gitlab/data_builder/alert_spec.rb create mode 100644 spec/lib/gitlab/database/custom_structure_spec.rb rename spec/lib/gitlab/database/{partitioning_migration_helpers_spec.rb => partitioning_migration_helpers/foreign_key_helpers_spec.rb} (71%) create mode 100644 spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb create mode 100644 spec/lib/gitlab/dependency_linker/go_mod_linker_spec.rb create mode 100644 spec/lib/gitlab/dependency_linker/go_sum_linker_spec.rb create mode 100644 spec/lib/gitlab/doctor/secrets_spec.rb create mode 100644 spec/lib/gitlab/error_tracking/processor/sidekiq_processor_spec.rb create mode 100644 spec/lib/gitlab/git_access_project_spec.rb create mode 100644 spec/lib/gitlab/gl_repository/identifier_spec.rb delete mode 100644 spec/lib/gitlab/graphql/pagination/filterable_array_connection_spec.rb create mode 100644 spec/lib/gitlab/import_export/attributes_permitter_spec.rb create mode 100644 spec/lib/gitlab/instrumentation/redis_base_spec.rb create mode 100644 spec/lib/gitlab/instrumentation/redis_interceptor_spec.rb create mode 100644 spec/lib/gitlab/instrumentation/redis_spec.rb delete mode 100644 spec/lib/gitlab/looping_batcher_spec.rb create mode 100644 spec/lib/gitlab/metrics/elasticsearch_rack_middleware_spec.rb create mode 100644 spec/lib/gitlab/metrics/redis_rack_middleware_spec.rb create mode 100644 spec/lib/gitlab/middleware/handle_ip_spoof_attack_error_spec.rb create mode 100644 spec/lib/gitlab/monitor/demo_projects_spec.rb create mode 100644 spec/lib/gitlab/process_memory_cache/helper_spec.rb create mode 100644 spec/lib/gitlab/search_context/builder_spec.rb create mode 100644 spec/lib/gitlab/search_context/controller_concern_spec.rb create mode 100644 spec/lib/gitlab/suggestions/commit_message_spec.rb create mode 100644 spec/lib/gitlab/suggestions/file_suggestion_spec.rb create mode 100644 spec/lib/gitlab/suggestions/suggestion_set_spec.rb create mode 100644 spec/lib/gitlab/usage_data_concerns/topology_spec.rb create mode 100644 spec/lib/gitlab/utils/usage_data_spec.rb create mode 100644 spec/lib/gitlab/web_ide/config/entry/global_spec.rb create mode 100644 spec/lib/gitlab/web_ide/config/entry/terminal_spec.rb create mode 100644 spec/lib/gitlab/web_ide/config_spec.rb delete mode 100644 spec/lib/milestone_array_spec.rb create mode 100644 spec/lib/peek/views/bullet_detailed_spec.rb delete mode 100644 spec/migrations/active_record/schedule_set_confidential_note_events_on_services_spec.rb delete mode 100644 spec/migrations/add_foreign_key_from_notification_settings_to_users_spec.rb delete mode 100644 spec/migrations/add_foreign_keys_to_todos_spec.rb create mode 100644 spec/migrations/add_incident_settings_to_all_existing_projects_spec.rb delete mode 100644 spec/migrations/add_not_null_constraint_to_project_mirror_data_foreign_key_spec.rb delete mode 100644 spec/migrations/add_pages_access_level_to_project_feature_spec.rb delete mode 100644 spec/migrations/add_pipeline_build_foreign_key_spec.rb delete mode 100644 spec/migrations/add_unique_constraint_to_project_features_project_id_spec.rb delete mode 100644 spec/migrations/assure_commits_count_for_merge_request_diff_spec.rb create mode 100644 spec/migrations/backfill_imported_snippet_repositories_spec.rb delete mode 100644 spec/migrations/backfill_releases_name_with_tag_name_spec.rb create mode 100644 spec/migrations/backfill_status_page_published_incidents_spec.rb delete mode 100644 spec/migrations/backfill_store_project_full_path_in_repo_spec.rb create mode 100644 spec/migrations/cap_designs_filename_length_to_new_limit_spec.rb delete mode 100644 spec/migrations/change_default_value_for_dsa_key_restriction_spec.rb delete mode 100644 spec/migrations/cleanup_build_stage_migration_spec.rb delete mode 100644 spec/migrations/cleanup_environments_external_url_spec.rb delete mode 100644 spec/migrations/cleanup_stages_position_migration_spec.rb delete mode 100644 spec/migrations/create_missing_namespace_for_internal_users_spec.rb delete mode 100644 spec/migrations/drop_duplicate_protected_tags_spec.rb delete mode 100644 spec/migrations/encrypt_deploy_tokens_tokens_spec.rb delete mode 100644 spec/migrations/enqueue_verify_pages_domain_workers_spec.rb delete mode 100644 spec/migrations/fill_empty_finished_at_in_deployments_spec.rb delete mode 100644 spec/migrations/fill_file_store_spec.rb delete mode 100644 spec/migrations/generate_missing_routes_spec.rb delete mode 100644 spec/migrations/import_common_metrics_spec.rb delete mode 100644 spec/migrations/migrate_cluster_configure_worker_sidekiq_queue_spec.rb delete mode 100644 spec/migrations/migrate_create_trace_artifact_sidekiq_queue_spec.rb delete mode 100644 spec/migrations/migrate_forbidden_redirect_uris_spec.rb delete mode 100644 spec/migrations/migrate_legacy_artifacts_to_job_artifacts_spec.rb delete mode 100644 spec/migrations/migrate_null_wiki_access_levels_spec.rb delete mode 100644 spec/migrations/migrate_object_storage_upload_sidekiq_queue_spec.rb delete mode 100644 spec/migrations/migrate_update_head_pipeline_for_merge_request_sidekiq_queue_spec.rb delete mode 100644 spec/migrations/remove_empty_extern_uid_auth0_identities_spec.rb delete mode 100644 spec/migrations/remove_redundant_pipeline_stages_spec.rb delete mode 100644 spec/migrations/reschedule_builds_stages_migration_spec.rb delete mode 100644 spec/migrations/reschedule_commits_count_for_merge_request_diff_spec.rb delete mode 100644 spec/migrations/schedule_digest_personal_access_tokens_spec.rb delete mode 100644 spec/migrations/schedule_runners_token_encryption_spec.rb delete mode 100644 spec/migrations/schedule_set_confidential_note_events_on_webhooks_spec.rb delete mode 100644 spec/migrations/schedule_stages_index_migration_spec.rb delete mode 100644 spec/migrations/schedule_to_archive_legacy_traces_spec.rb create mode 100644 spec/migrations/seed_repository_storages_weighted_spec.rb delete mode 100644 spec/migrations/steal_fill_store_upload_spec.rb delete mode 100644 spec/migrations/update_project_import_visibility_level_spec.rb create mode 100644 spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb create mode 100644 spec/models/alert_management/alert_assignee_spec.rb create mode 100644 spec/models/alert_management/alert_user_mention_spec.rb create mode 100644 spec/models/blob_viewer/go_mod_spec.rb create mode 100644 spec/models/blob_viewer/metrics_dashboard_yml_spec.rb create mode 100644 spec/models/ci/build_report_result_spec.rb create mode 100644 spec/models/concerns/featurable_spec.rb create mode 100644 spec/models/concerns/limitable_spec.rb create mode 100644 spec/models/draft_note_spec.rb delete mode 100644 spec/models/global_milestone_spec.rb create mode 100644 spec/models/group_deploy_key_spec.rb create mode 100644 spec/models/group_import_state_spec.rb delete mode 100644 spec/models/group_milestone_spec.rb create mode 100644 spec/models/integration_spec.rb create mode 100644 spec/models/project_services/chat_message/alert_message_spec.rb create mode 100644 spec/models/review_spec.rb create mode 100644 spec/models/snippet_input_action_collection_spec.rb create mode 100644 spec/models/snippet_input_action_spec.rb create mode 100644 spec/models/web_ide_terminal_spec.rb create mode 100644 spec/policies/releases/source_policy_spec.rb create mode 100644 spec/presenters/gitlab/blame_presenter_spec.rb create mode 100644 spec/requests/api/graphql/group/labels_query_spec.rb create mode 100644 spec/requests/api/graphql/mutations/alert_management/alerts/create_alert_issue_spec.rb create mode 100644 spec/requests/api/graphql/mutations/alert_management/alerts/set_assignees_spec.rb create mode 100644 spec/requests/api/graphql/mutations/commits/create_spec.rb create mode 100644 spec/requests/api/graphql/mutations/container_expiration_policy/update_spec.rb create mode 100644 spec/requests/api/graphql/mutations/discussions/toggle_resolve_spec.rb create mode 100644 spec/requests/api/graphql/mutations/jira_import/import_users_spec.rb create mode 100644 spec/requests/api/graphql/mutations/merge_requests/create_spec.rb create mode 100644 spec/requests/api/graphql/mutations/metrics/dashboard/annotations/delete_spec.rb create mode 100644 spec/requests/api/graphql/project/alert_management/alert/assignees_spec.rb create mode 100644 spec/requests/api/graphql/project/alert_management/alert/notes_spec.rb create mode 100644 spec/requests/api/graphql/project/container_expiration_policy_spec.rb create mode 100644 spec/requests/api/graphql/project/jira_projects_spec.rb create mode 100644 spec/requests/api/graphql/project/labels_query_spec.rb create mode 100644 spec/requests/api/graphql/project/merge_requests_spec.rb create mode 100644 spec/requests/api/graphql/project/pipeline_spec.rb create mode 100644 spec/requests/api/graphql/project/release_spec.rb create mode 100644 spec/requests/api/graphql/user/group_member_query_spec.rb create mode 100644 spec/requests/api/graphql/user/project_member_query_spec.rb create mode 100644 spec/requests/api/graphql/user_query_spec.rb create mode 100644 spec/requests/api/graphql/user_spec.rb create mode 100644 spec/requests/api/graphql/users_spec.rb delete mode 100644 spec/requests/api/lsif_data_spec.rb create mode 100644 spec/requests/api/resource_milestone_events_spec.rb create mode 100644 spec/requests/import/gitlab_groups_controller_spec.rb create mode 100644 spec/requests/user_spoofs_ip_spec.rb create mode 100644 spec/rubocop/cop/default_scope_spec.rb create mode 100644 spec/rubocop/cop/gitlab/bulk_insert_spec.rb create mode 100644 spec/rubocop/cop/migration/drop_table_spec.rb delete mode 100644 spec/rubocop/cop/migration/update_large_table_spec.rb delete mode 100644 spec/rubocop/cop/rspec/empty_line_after_shared_example_spec.rb create mode 100644 spec/serializers/ci/daily_build_group_report_result_entity_spec.rb create mode 100644 spec/serializers/ci/daily_build_group_report_result_serializer_spec.rb create mode 100644 spec/serializers/import/bitbucket_provider_repo_entity_spec.rb create mode 100644 spec/serializers/import/bitbucket_server_provider_repo_entity_spec.rb create mode 100644 spec/serializers/import/fogbugz_provider_repo_entity_spec.rb create mode 100644 spec/serializers/import/githubish_provider_repo_entity_spec.rb create mode 100644 spec/serializers/import/gitlab_provider_repo_entity_spec.rb create mode 100644 spec/serializers/import/provider_repo_serializer_spec.rb delete mode 100644 spec/serializers/provider_repo_entity_spec.rb delete mode 100644 spec/serializers/provider_repo_serializer_spec.rb create mode 100644 spec/serializers/service_field_entity_spec.rb create mode 100644 spec/serializers/web_ide_terminal_entity_spec.rb create mode 100644 spec/serializers/web_ide_terminal_serializer_spec.rb create mode 100644 spec/services/admin/propagate_integration_service_spec.rb create mode 100644 spec/services/alert_management/alerts/update_service_spec.rb create mode 100644 spec/services/ci/build_report_result_service_spec.rb create mode 100644 spec/services/ci/create_web_ide_terminal_service_spec.rb delete mode 100644 spec/services/ci/update_ci_ref_status_service_spec.rb create mode 100644 spec/services/ci/web_ide_config_service_spec.rb create mode 100644 spec/services/concerns/exclusive_lease_guard_spec.rb create mode 100644 spec/services/container_expiration_policies/update_service_spec.rb create mode 100644 spec/services/draft_notes/create_service_spec.rb create mode 100644 spec/services/draft_notes/destroy_service_spec.rb create mode 100644 spec/services/draft_notes/publish_service_spec.rb create mode 100644 spec/services/import/github_service_spec.rb create mode 100644 spec/services/integrations/test/project_service_spec.rb create mode 100644 spec/services/jira/requests/projects_spec.rb create mode 100644 spec/services/jira_import/users_importer_spec.rb create mode 100644 spec/services/jira_import/users_mapper_spec.rb create mode 100644 spec/services/projects/group_links/update_service_spec.rb delete mode 100644 spec/services/projects/lsif_data_service_spec.rb create mode 100644 spec/services/releases/create_evidence_service_spec.rb create mode 100644 spec/services/resource_events/change_state_service_spec.rb create mode 100644 spec/support/action_cable.rb create mode 100644 spec/support/helpers/http_basic_auth_helpers.rb create mode 100644 spec/support/helpers/partitioning_helpers.rb create mode 100644 spec/support/helpers/stub_action_cable_connection.rb create mode 100644 spec/support/helpers/trigger_helpers.rb create mode 100644 spec/support/let_it_be.rb create mode 100644 spec/support/shared_contexts/requests/api/graphql/jira_import/jira_projects_context.rb create mode 100644 spec/support/shared_examples/controllers/import_controller_new_import_ui_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/namespace_storage_limit_alert_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/wiki_actions_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/container_expiration_policy_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/label_fields.rb create mode 100644 spec/support/shared_examples/graphql/members_shared_examples.rb create mode 100644 spec/support/shared_examples/integrations/test_examples.rb create mode 100644 spec/support/shared_examples/lib/gitlab/gl_repository_shared_examples.rb create mode 100644 spec/support/shared_examples/lib/gitlab/import/stuck_import_job_workers_shared_examples.rb delete mode 100644 spec/support/shared_examples/models/concerns/blob_replicator_strategy_shared_examples.rb create mode 100644 spec/support/shared_examples/path_extraction_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/issuable_update_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/resource_milestone_events_api_shared_examples.rb create mode 100644 spec/support/shared_examples/serializers/import/import_entity_shared_examples.rb create mode 100644 spec/support/shared_examples/services/container_expiration_policy_shared_examples.rb create mode 100644 spec/support/shared_examples/uncached_response_shared_examples.rb create mode 100644 spec/support_specs/helpers/graphql_helpers_spec.rb create mode 100644 spec/tasks/gitlab/container_registry_rake_spec.rb create mode 100644 spec/tooling/lib/tooling/test_file_finder_spec.rb create mode 100644 spec/validators/json_schema_validator_spec.rb create mode 100644 spec/views/projects/issues/import_csv/_button.html.haml_spec.rb create mode 100644 spec/workers/ci/build_report_result_worker_spec.rb create mode 100644 spec/workers/clusters/applications/check_prometheus_health_worker_spec.rb create mode 100644 spec/workers/gitlab/import/stuck_project_import_jobs_worker_spec.rb create mode 100644 spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb create mode 100644 spec/workers/irker_worker_spec.rb create mode 100644 spec/workers/metrics/dashboard/prune_old_annotations_worker_spec.rb create mode 100644 spec/workers/metrics/dashboard/schedule_annotations_prune_worker_spec.rb create mode 100644 spec/workers/propagate_integration_worker_spec.rb create mode 100755 tooling/bin/find_foss_tests create mode 100644 tooling/lib/tooling/test_file_finder.rb create mode 100644 vendor/project_templates/learn_gitlab.tar.gz diff --git a/.editorconfig b/.editorconfig index d704f20c72..56ce6d8714 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,3 +13,6 @@ indent_size = 2 [*.{js,json,vue,scss,rb,haml,yml,md}] indent_style = space charset = utf-8 + +[*.{md,markdown}] +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore index f364771e54..c41556f6aa 100644 --- a/.eslintignore +++ b/.eslintignore @@ -9,6 +9,7 @@ /scripts/ /tmp/ /vendor/ +jest.config.js jest.config.*.js karma.config.js webpack.config.js diff --git a/.gitignore b/.gitignore index 3120c1c1bd..29180b76e2 100644 --- a/.gitignore +++ b/.gitignore @@ -35,7 +35,6 @@ eslint-report.html /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 /config/resque.yml @@ -92,3 +91,6 @@ jsdoc/ webpack-dev-server.json /.nvimrc .solargraph.yml +apollo.config.js +/tmp/matching_foss_tests.txt +ee/changelogs/unreleased-ee diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 21dfd6563e..4bbf411c23 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,7 +15,7 @@ stages: # in cases where jobs require Docker-in-Docker, the job # definition must be extended with `.use-docker-in-docker` default: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-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" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-golang-1.14-git-2.27-lfs-2.9-chrome-83-node-12.x-yarn-1.21-postgresql-11-graphicsmagick-1.3.34" tags: - gitlab-org # All jobs are interruptible by default diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index e71e74fd4d..6cd316349c 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -8,11 +8,15 @@ # Technical writing team are the default reviewers for all markdown docs /doc/ @gl-docsteam -# Dev and Doc guidelines +# Doc subpaths +/doc/administration/monitoring/ @aqualls /doc/development/ @marcia @mjang1 /doc/development/documentation/ @mikelewis /doc/ci @marcel.amirault @sselhorn -/doc/.linting @marcel.amirault @eread @aqualls @mikelewis +/doc/user/clusters @aqualls +/doc/user/infrastructure @aqualls +/doc/user/project/clusters @aqualls +/doc/.vale/ @marcel.amirault @eread @aqualls @mikelewis # Frontend maintainers should see everything in `app/assets/` *.scss @annabeldunstone @gitlab-org/maintainers/frontend @@ -37,7 +41,6 @@ /ee/app/finders/ @gitlab-org/maintainers/database # Feature specific owners -/ee/lib/gitlab/code_owners/ @reprazent @kerrizor /ee/lib/ee/gitlab/auth/ldap/ @dblessing @mkozono /lib/gitlab/auth/ldap/ @dblessing @mkozono /lib/gitlab/ci/templates/ @nolith @zj @@ -46,6 +49,11 @@ /ee/app/models/project_alias.rb @patrickbajao /ee/lib/api/project_aliases.rb @patrickbajao +# Code Owners +# +/ee/lib/gitlab/code_owners/ @reprazent @kerrizor @garyh +/doc/user/project/code_owners.md @reprazent @kerrizor @garyh + # Quality owned files /qa/ @gl-quality diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 50dbef4459..5a6f2aacf9 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -62,7 +62,7 @@ docs lint: graphql-reference-verify: extends: - .default-retry - - .default-cache + - .rails-cache - .default-before_script - .docs:rules:graphql-reference-verify - .use-pg11 diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 6e9119f295..4403187d42 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -1,157 +1,128 @@ -.assets-compile-cache: - cache: - paths: - - vendor/ruby/ - - public/assets/webpack/ - - assets-hash.txt - - .yarn-cache/ - - tmp/cache/assets/sprockets - - tmp/cache/babel-loader - - tmp/cache/vue-loader - - tmp/cache/webpack-dlls - -.gitlab:assets:compile-metadata: +.frontend-base: extends: - .default-retry - .default-before_script - .assets-compile-cache - image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-git-2.26-lfs-2.9-chrome-73.0-node-12.x-yarn-1.21-graphicsmagick-1.3.34-docker-19.03.1 + variables: + SETUP_DB: "false" + # we override the max_old_space_size to prevent OOM errors + NODE_OPTIONS: --max_old_space_size=3584 + WEBPACK_VENDOR_DLL: "true" + +.compile-assets-base: + extends: .frontend-base + image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-git-2.27-lfs-2.9-node-12.x-yarn-1.21-graphicsmagick-1.3.34 stage: prepare + script: + - node --version + - run_timed_command "retry yarn install --frozen-lockfile" + - free -m + - run_timed_command "bin/rake gitlab:assets:compile > assets-compile.log 2>&1" + - run_timed_command "scripts/clean-old-cached-assets" + +compile-production-assets: + extends: + - .compile-assets-base + - .frontend:rules:compile-production-assets variables: NODE_ENV: "production" RAILS_ENV: "production" - SETUP_DB: "false" - SKIP_STORAGE_VALIDATION: "true" WEBPACK_REPORT: "true" - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 - cache: - key: "assets-compile:production:v1" artifacts: name: webpack-report expire_in: 31d paths: - - webpack-report/ - assets-compile.log # These assets are used in multiple locations: # - in `build-assets-image` job to create assets image for packaging systems # - GitLab UI for integration tests: https://gitlab.com/gitlab-org/gitlab-ui/-/blob/e88493b3c855aea30bf60baee692a64606b0eb1e/.storybook/preview-head.pug#L1 - - public/assets + - public/assets/ + - webpack-report/ when: always - script: - - node --version - - retry yarn install --frozen-lockfile --production --cache-folder .yarn-cache --prefer-offline - - free -m - - time bin/rake gitlab:assets:compile > assets-compile.log 2>&1 - - scripts/clean-old-cached-assets + after_script: - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here -gitlab:assets:compile pull-push-cache: +compile-test-assets: extends: - - .gitlab:assets:compile-metadata - - .frontend:rules:gitlab-assets-compile-pull-push-cache - cache: - policy: pull-push + - .compile-assets-base + - .frontend:rules:compile-test-assets + artifacts: + expire_in: 7d + paths: + - assets-compile.log + - public/assets/ + - node_modules/@gitlab/svgs/dist/icons.json # app/helpers/icons_helper.rb uses this file + when: always -gitlab:assets:compile pull-cache: +compile-test-assets as-if-foss: extends: - - .gitlab:assets:compile-metadata - - .frontend:rules:gitlab-assets-compile-pull-cache + - compile-test-assets + - .frontend:rules:compile-test-assets-as-if-foss + - .as-if-foss + +update-assets-compile-production-cache: + extends: + - compile-production-assets + - .shared:rules:update-cache + stage: prepare + artifacts: {} # This job's purpose is only to update the cache. cache: - policy: pull + policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. + +update-assets-compile-test-cache: + extends: + - compile-test-assets + - .shared:rules:update-cache + stage: prepare + artifacts: {} # This job's purpose is only to update the cache. + cache: + policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. + +update-yarn-cache: + extends: + - .default-retry + - .yarn-cache + - .shared:rules:update-cache + stage: prepare + script: + - source scripts/utils.sh + - run_timed_command "retry yarn install --frozen-lockfile" + cache: + policy: push build-assets-image: extends: - .use-kaniko - - .frontend:rules:gitlab-assets-compile-pull-cache + - .frontend:rules:compile-production-assets stage: build-images - needs: ["gitlab:assets:compile pull-cache"] + needs: ["compile-production-assets"] variables: GIT_DEPTH: "1" script: # 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 - - scripts/build_assets_image - -.compile-assets-metadata: - extends: - - .default-retry - - .default-before_script - - .assets-compile-cache - stage: prepare - script: - - node --version - - retry yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline - - free -m - - time bin/rake gitlab:assets:compile > assets-compile.log 2>&1 - - scripts/clean-old-cached-assets - variables: - SETUP_DB: "false" - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 - WEBPACK_VENDOR_DLL: "true" - cache: - key: "assets-compile:test:v1" - artifacts: - expire_in: 7d - paths: - - node_modules - - public/assets - - assets-compile.log - when: always - -compile-assets pull-push-cache: - extends: - - .compile-assets-metadata - - .frontend:rules:compile-assets-pull-push-cache - cache: - policy: pull-push - -compile-assets pull-push-cache as-if-foss: - extends: - - .compile-assets-metadata - - .frontend:rules:compile-assets-pull-push-cache-as-if-foss - - .as-if-foss - cache: - policy: pull-push - key: "assets-compile:test:as-if-foss:v1" - -compile-assets pull-cache: - extends: - - .compile-assets-metadata - - .frontend:rules:compile-assets-pull-cache - cache: - policy: pull - -compile-assets pull-cache as-if-foss: - extends: - - .compile-assets-metadata - - .frontend:rules:compile-assets-pull-cache-as-if-foss - - .as-if-foss - cache: - policy: pull - key: "assets-compile:test:as-if-foss:v1" + - run_timed_command "scripts/build_assets_image" + retry: 2 .frontend-fixtures-base: extends: - - .default-retry + - .frontend-base - .rails-cache - - .default-before_script - .use-pg11 stage: fixtures - needs: ["setup-test-env", "compile-assets pull-cache"] + needs: ["setup-test-env", "compile-test-assets"] + variables: + SETUP_DB: "true" script: - run_timed_command "scripts/gitaly-test-build" - run_timed_command "scripts/gitaly-test-spawn" - - run_timed_command "bundle exec rake frontend:fixtures" + - run_timed_command "bin/rake frontend:fixtures" artifacts: name: frontend-fixtures expire_in: 31d when: always paths: - - node_modules - - public/assets - tmp/tests/frontend/ frontend-fixtures: @@ -165,25 +136,27 @@ frontend-fixtures-as-if-foss: - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss -.frontend-job-base: +.frontend-test-base: extends: - .default-retry - - .default-cache - - .default-before_script + - .yarn-cache variables: USE_BUNDLE_INSTALL: "false" SETUP_DB: "false" stage: test + before_script: + - source scripts/utils.sh .karma-base: - extends: .frontend-job-base + extends: .frontend-test-base variables: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 script: + - source scripts/utils.sh - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - - date - - yarn karma + - run_timed_command "retry yarn install --frozen-lockfile" + - run_timed_command "yarn karma" karma: extends: @@ -210,15 +183,11 @@ karma-as-if-foss: needs: ["frontend-fixtures-as-if-foss"] .jest-base: - extends: .frontend-job-base + extends: .frontend-test-base script: - - date - - yarn jest --ci --coverage --testSequencer ./scripts/frontend/parallel_ci_sequencer.js - cache: - key: jest - paths: - - tmp/cache/jest/ - policy: pull-push + - source scripts/utils.sh + - run_timed_command "retry yarn install --frozen-lockfile" + - run_timed_command "yarn jest --ci --coverage --testSequencer ./scripts/frontend/parallel_ci_sequencer.js" jest: extends: @@ -235,21 +204,17 @@ jest: - tmp/tests/frontend/ reports: junit: junit_jest.xml - parallel: 2 + parallel: 4 jest-integration: extends: - - .frontend-job-base + - .frontend-test-base - .frontend:rules:default-frontend-jobs script: - - date - - yarn jest:integration --ci + - source scripts/utils.sh + - run_timed_command "retry yarn install --frozen-lockfile" + - run_timed_command "yarn jest:integration --ci" needs: ["frontend-fixtures"] - cache: - key: jest-integration - paths: - - tmp/cache/jest/ - policy: pull-push jest-as-if-foss: extends: @@ -257,8 +222,7 @@ jest-as-if-foss: - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss needs: ["frontend-fixtures-as-if-foss"] - cache: - policy: pull + parallel: 2 coverage-frontend: extends: @@ -269,33 +233,26 @@ coverage-frontend: stage: post-test before_script: - source scripts/utils.sh - - retry yarn install --frozen-lockfile + - run_timed_command "retry yarn install --frozen-lockfile" script: - - yarn node scripts/frontend/merge_coverage_frontend.js + - run_timed_command "yarn node scripts/frontend/merge_coverage_frontend.js" artifacts: name: coverage-frontend expire_in: 31d paths: - coverage-frontend/ - cache: - policy: pull .qa-frontend-node: extends: - .default-retry + - .yarn-cache - .frontend:rules:qa-frontend-node stage: test dependencies: [] - cache: - key: "$CI_JOB_NAME" - paths: - - .yarn-cache/ - policy: pull-push script: - - date - - yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline - - date - - yarn run webpack-prod + - source scripts/utils.sh + - run_timed_command "yarn install --frozen-lockfile" + - run_timed_command "yarn run webpack-prod" qa-frontend-node:10: extends: .qa-frontend-node @@ -310,27 +267,39 @@ qa-frontend-node:latest: webpack-dev-server: extends: - .default-retry + - .yarn-cache - .frontend:rules:default-frontend-jobs stage: test needs: [] variables: WEBPACK_MEMORY_TEST: "true" WEBPACK_VENDOR_DLL: "true" - cache: - key: - files: - - yarn.lock - prefix: "v1" - paths: - - node_modules/ - - tmp/cache/webpack-dlls/ script: - source scripts/utils.sh - - retry yarn install --frozen-lockfile - - retry yarn webpack-vendor - - node --expose-gc node_modules/.bin/webpack-dev-server --config config/webpack.config.js + - run_timed_command "retry yarn install --frozen-lockfile" + - run_timed_command "retry yarn webpack-vendor" + - run_timed_command "node --expose-gc node_modules/.bin/webpack-dev-server --config config/webpack.config.js" artifacts: name: webpack-dev-server expire_in: 31d paths: - webpack-dev-server.json + +bundle-size-review: + extends: + - .default-retry + - .frontend:rules:bundle-size-review + image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger + stage: test + needs: ["compile-production-assets"] + script: + - mkdir -p bundle-size-review + - cp webpack-report/index.html bundle-size-review/bundle-report.html + - yarn global add https://gitlab.com/gitlab-org/frontend/playground/webpack-memory-metrics.git + - danger --dangerfile=danger/bundle_size/Dangerfile --fail-on-errors=true --verbose --danger_id=bundle-size-review + artifacts: + when: always + name: bundle-size-review + expire_in: 31d + paths: + - bundle-size-review diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index e6619ff2b6..30e3abf13b 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -10,49 +10,61 @@ .default-before_script: before_script: - - date - '[ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb' - export GOPATH=$CI_PROJECT_DIR/.go - mkdir -p $GOPATH - source scripts/utils.sh - source scripts/prepare_build.sh - - date - -# Jobs that only need to pull cache -.default-cache: - cache: - key: "debian-stretch-ruby-2.6.6-pg11-node-12.x" - paths: - - .go/pkg/mod - - vendor/ruby - - .yarn-cache/ - - vendor/gitaly-ruby - policy: pull .rails-cache: cache: - key: - files: - - Gemfile.lock - - GITALY_SERVER_VERSION - prefix: "ruby-go-cache-v1" + key: "rails-v1" paths: - - vendor/ruby - - vendor/gitaly-ruby - - .go/pkg/mod + - vendor/ruby/ + - vendor/gitaly-ruby/ + - .go/pkg/mod/ + policy: pull + +.static-analysis-cache: + cache: + key: "static-analysis-v1" + paths: + - vendor/ruby/ + - node_modules/ + - tmp/rubocop_cache/ + policy: pull + +.qa-cache: + cache: + key: "qa-v1" + paths: + - qa/vendor/ruby/ policy: pull .yarn-cache: cache: - key: - files: - - yarn.lock - prefix: "v1" + key: "yarn-v1" paths: - node_modules/ + - tmp/cache/webpack-dlls/ + policy: pull + +.assets-compile-cache: + cache: + key: "assets-compile-${NODE_ENV}-v1" + paths: + - vendor/ruby/ + - node_modules/ + - assets-hash.txt + - public/assets/webpack/ + - tmp/cache/assets/sprockets/ + - tmp/cache/babel-loader/ + - tmp/cache/vue-loader/ + - tmp/cache/webpack-dlls/ + policy: pull .use-pg11: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-golang-1.14-git-2.26-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.6-golang-1.14-git-2.27-lfs-2.9-chrome-83-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"] @@ -61,7 +73,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg11-ee: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-golang-1.14-git-2.26-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.6-golang-1.14-git-2.27-lfs-2.9-chrome-83-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"] @@ -75,6 +87,7 @@ name: gcr.io/kaniko-project/executor:debug-v0.20.0 entrypoint: [""] before_script: + - source scripts/utils.sh - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index 79dfc88d13..ef6c9b9c8f 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -1,7 +1,7 @@ .only-code-memory-job-base: extends: - .default-retry - - .default-cache + - .rails-cache - .default-before_script - .memory:rules @@ -39,12 +39,11 @@ memory-on-boot: - .only-code-memory-job-base - .use-pg11 stage: test - needs: ["setup-test-env", "compile-assets pull-cache"] + needs: ["setup-test-env", "compile-test-assets"] variables: NODE_ENV: "production" RAILS_ENV: "production" SETUP_DB: "true" - SKIP_STORAGE_VALIDATION: "true" # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 script: diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index 218ec7043d..a66e0d88db 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -3,11 +3,16 @@ pages: - .default-retry - .pages:rules stage: pages - dependencies: ["rspec:coverage", "karma", "gitlab:assets:compile pull-cache"] + dependencies: + - rspec:coverage + - coverage-frontend + - karma + - compile-production-assets script: - mv public/ .public/ - mkdir public/ - mv coverage/ public/coverage-ruby/ || true + - mv coverage-frontend/ public/coverage-frontend/ || true - mv coverage-javascript/ public/coverage-javascript/ || true - mv webpack-report/ public/webpack-report/ || true - cp .public/assets/application-*.css public/application.css || true diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index 40ef13dd92..20527b690a 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -1,12 +1,9 @@ .qa-job-base: extends: - .default-retry + - .qa-cache stage: test needs: [] - cache: - key: "qa-framework-jobs:v1" - paths: - - vendor/ruby before_script: - '[ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb' - cd qa/ @@ -22,11 +19,9 @@ qa:internal: qa:internal-as-if-foss: extends: - - .qa-job-base + - qa:internal - .qa:rules:as-if-foss - .as-if-foss - script: - - bundle exec rspec qa:selectors: extends: @@ -41,6 +36,16 @@ qa:selectors-as-if-foss: - .qa:rules:as-if-foss - .as-if-foss +update-qa-cache: + extends: + - .qa-job-base + - .shared:rules:update-cache + stage: prepare + script: + - echo "Cache has been updated and ready to be uploaded." + cache: + policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. + .package-and-qa-base: image: ruby:2.6-alpine stage: qa diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index e8087aebce..f73e0c1d50 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -1,6 +1,3 @@ -.rails:needs:setup-and-assets: - needs: ["setup-test-env", "compile-assets pull-cache"] - .rails-job-base: extends: - .default-retry @@ -35,32 +32,54 @@ setup-test-env: - tmp/tests/repositories - tmp/tests/second_storage when: always + +update-rails-cache: + extends: + - setup-test-env + - .shared:rules:update-cache + artifacts: {} # This job's purpose is only to update the cache. cache: + policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. + +.static-analysis-base: + extends: + - .default-retry + - .default-before_script + - .static-analysis-cache + needs: [] + variables: + SETUP_DB: "false" + ENABLE_SPRING: "1" + +update-static-analysis-cache: + extends: + - .static-analysis-base + - .shared:rules:update-cache + stage: prepare + script: + - rm -rf ./node_modules # We remove node_modules because there's no mechanism to remove stall entries. + - run_timed_command "retry yarn install --frozen-lockfile" + - bundle exec rubocop --parallel # For the moment we only cache `vendor/ruby/`, `node_modules/`, and `tmp/rubocop_cache` so we don't need to run all the tasks, + cache: + # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up but RuboCop has a mechanism + # for keeping only the N latest cache files, so we take advantage of it with `pull-push` and removing `node_modules` at the start of the job. policy: pull-push static-analysis: extends: - - .rails-job-base + - .static-analysis-base - .rails:rules:default-refs-code-backstage-qa - - .rails:needs:setup-and-assets stage: test - variables: - SETUP_DB: "false" - parallel: 2 + parallel: 4 script: + - run_timed_command "retry yarn install --frozen-lockfile" - scripts/static-analysis - cache: - key: "ruby-2.6.6-pg11-rubocop" - paths: - - vendor/ruby - - tmp/rubocop_cache - policy: pull-push downtime_check: extends: - .rails-job-base - .rails:rules:downtime_check - needs: ["setup-test-env"] + needs: [] stage: test variables: SETUP_DB: "false" @@ -70,7 +89,7 @@ downtime_check: .rspec-base: extends: .rails-job-base stage: test - needs: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache"] + needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets"] script: - run_timed_command "scripts/gitaly-test-build" - run_timed_command "scripts/gitaly-test-spawn" @@ -173,7 +192,7 @@ db:migrate-from-v12.10.0: db:rollback: extends: .db-job-base script: - - bundle exec rake db:migrate VERSION=20180101160629 + - bundle exec rake db:migrate VERSION=20181228175414 - bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true gitlab:setup: @@ -218,8 +237,6 @@ rspec:coverage: - memory-on-boot variables: SETUP_DB: "false" - cache: - policy: pull script: - bundle exec scripts/merge-simplecov - bundle exec scripts/gather-test-memory-data @@ -247,7 +264,7 @@ rspec:coverage: - .rails:rules:as-if-foss - .as-if-foss - .use-pg11 - needs: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache as-if-foss"] + needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets as-if-foss"] .rspec-ee-base-pg11: extends: @@ -323,3 +340,26 @@ db:rollback geo: - bundle exec rake geo:db:migrate # EE: default refs (MRs, master, schedules) jobs # ################################################## + +################################################## +# EE: Canonical MR pipelines +rspec foss-impact: + extends: + - .rspec-base + - .as-if-foss + - .rails:rules:ee-mr-only + - .use-pg11 + script: + - install_gitlab_gem + - run_timed_command "scripts/gitaly-test-build" + - run_timed_command "scripts/gitaly-test-spawn" + - source scripts/rspec_helpers.sh + - tooling/bin/find_foss_tests tmp/matching_foss_tests.txt + - rspec_matched_tests tmp/matching_foss_tests.txt "--tag ~quarantine --tag ~geo --tag ~level:migration" + artifacts: + expire_in: 7d + paths: + - tmp/matching_foss_tests.txt + - tmp/capybara/ +# EE: Merge Request pipelines +################################################## diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 153334e1af..65abb6c5cb 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -94,9 +94,9 @@ dependency_scanning: stage: test needs: [] variables: + DS_MAJOR_VERSION: 2 DS_EXCLUDED_PATHS: "qa/qa/ee/fixtures/secure_premade_reports,spec,ee/spec" # GitLab-specific script: - - export DS_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 @@ -138,7 +138,7 @@ dependency_scanning: ) \ --volume "$PWD:/code" \ --volume /var/run/docker.sock:/var/run/docker.sock \ - "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$DS_VERSION" /code + "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$DS_MAJOR_VERSION" /code artifacts: paths: - gl-dependency-scanning-report.json # GitLab-specific @@ -146,37 +146,38 @@ dependency_scanning: dependency_scanning: gl-dependency-scanning-report.json expire_in: 1 week # GitLab-specific -# We need to duplicate this job's definition because it seems it's impossible to -# override an included `only.refs`. -# See https://gitlab.com/gitlab-org/gitlab/issues/31371. -dast: - extends: - - .default-retry - - .reports:rules:dast - # 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" - variables: - # To be done in a later iteration - # DAST_USERNAME: "root" - # DAST_USERNAME_FIELD: "user[login]" - # DAST_PASSWORD_FIELD: "user[passowrd]" - DAST_VERSION: 1 - script: - - 'export DAST_WEBSITE="${DAST_WEBSITE:-$(cat environment_url.txt)}"' - # To be done in a later iteration - # - 'export DAST_AUTH_URL="${DAST_WEBSITE}/users/sign_in"' - # - 'export DAST_PASSWORD="${REVIEW_APPS_ROOT_PASSWORD}"' - - /analyze -t $DAST_WEBSITE - artifacts: - paths: - - gl-dast-report.json # GitLab-specific - reports: - dast: gl-dast-report.json - expire_in: 1 week # GitLab-specific +# Temporarily disabling review apps +## 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. +#dast: +# extends: +# - .default-retry +# - .reports:rules:dast +# # 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" +# variables: +# # To be done in a later iteration +# # DAST_USERNAME: "root" +# # DAST_USERNAME_FIELD: "user[login]" +# # DAST_PASSWORD_FIELD: "user[passowrd]" +# DAST_VERSION: 1 +# script: +# - 'export DAST_WEBSITE="${DAST_WEBSITE:-$(cat environment_url.txt)}"' +# # To be done in a later iteration +# # - 'export DAST_AUTH_URL="${DAST_WEBSITE}/users/sign_in"' +# # - 'export DAST_PASSWORD="${REVIEW_APPS_ROOT_PASSWORD}"' +# - /analyze -t $DAST_WEBSITE +# artifacts: +# paths: +# - gl-dast-report.json # GitLab-specific +# reports: +# dast: gl-dast-report.json +# expire_in: 1 week # GitLab-specific # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 # schedule:dast: diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index 46a281cd48..6898da95c1 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -1,13 +1,13 @@ build-qa-image: extends: - .use-kaniko - - .default-retry - .review:rules:build-qa-image stage: build-images needs: [] script: - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_REF_SLUG}" - /kaniko/executor --context=${CI_PROJECT_DIR} --dockerfile=${CI_PROJECT_DIR}/qa/Dockerfile --destination=${QA_IMAGE} --cache=true + retry: 2 review-cleanup: extends: @@ -27,24 +27,25 @@ review-cleanup: - ruby -rrubygems scripts/review_apps/automated_cleanup.rb - gcp_cleanup -review-build-cng: - extends: - - .default-retry - - .review:rules:review-build-cng - image: ruby:2.6-alpine - stage: review-prepare - before_script: - - source scripts/utils.sh - - install_api_client_dependencies_with_apk - - install_gitlab_gem - needs: - - job: gitlab:assets:compile pull-cache - 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"' +# Temporarily disabling review apps +#review-build-cng: +# extends: +# - .default-retry +# - .review:rules:review-build-cng +# image: ruby:2.6-alpine +# stage: review-prepare +# before_script: +# - source scripts/utils.sh +# - install_api_client_dependencies_with_apk +# - install_gitlab_gem +# needs: +# - job: compile-production-assets +# 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: @@ -53,43 +54,44 @@ review-build-cng: variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v3.3.3" + GITLAB_HELM_CHART_REF: "master" environment: name: review/${CI_COMMIT_REF_NAME} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} on_stop: review-stop auto_stop_in: 48 hours -review-deploy: - extends: - - .review-workflow-base - - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise - stage: review - dependencies: [] - resource_group: "review/${CI_COMMIT_REF_NAME}" - before_script: - - export GITLAB_SHELL_VERSION=$( environment_url.txt - - source ./scripts/utils.sh - - install_api_client_dependencies_with_apk - - source scripts/review_apps/review-apps.sh - script: - - check_kube_domain - - ensure_namespace - - 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 - when: always +# Temporarily disabling review apps +#review-deploy: +# extends: +# - .review-workflow-base +# - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise +# stage: review +# dependencies: [] +# resource_group: "review/${CI_COMMIT_REF_NAME}" +# before_script: +# - export GITLAB_SHELL_VERSION=$( environment_url.txt +# - source ./scripts/utils.sh +# - install_api_client_dependencies_with_apk +# - source scripts/review_apps/review-apps.sh +# script: +# - check_kube_domain +# - ensure_namespace +# - 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 +# when: always .review-stop-base: extends: .review-workflow-base @@ -122,109 +124,110 @@ review-stop: script: - delete_release -.review-qa-base: - extends: - - .default-retry - - .use-docker-in-docker - image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine-ruby-2.6 - stage: qa - # 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"] - variables: - QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa" - QA_CAN_TEST_GIT_PROTOCOL_V2: "false" - QA_DEBUG: "true" - GITLAB_USERNAME: "root" - GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" - GITLAB_ADMIN_USERNAME: "root" - GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" - GITHUB_ACCESS_TOKEN: "${REVIEW_APPS_QA_GITHUB_ACCESS_TOKEN}" - EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}" - before_script: - - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_REF_SLUG}" - - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" - - echo "${CI_ENVIRONMENT_URL}" - - echo "${QA_IMAGE}" - - source scripts/utils.sh - - install_api_client_dependencies_with_apk - - gem install gitlab-qa --no-document ${GITLAB_QA_VERSION:+ --version ${GITLAB_QA_VERSION}} - artifacts: - paths: - - ./qa/gitlab-qa-run-* - expire_in: 7 days - when: always - -review-qa-smoke: - extends: - - .review-qa-base - - .review:rules:review-qa-smoke - script: - - gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" - -review-qa-all: - extends: - - .review-qa-base - - .review:rules:mr-only-manual - parallel: 5 - script: - - export KNAPSACK_REPORT_PATH=knapsack/master_report.json - - export KNAPSACK_TEST_FILE_PATTERN=qa/specs/features/**/*_spec.rb - - gitlab-qa Test::Instance::Any "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" -- --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format html --out tmp/rspec.htm --color --format documentation - -review-performance: - extends: - - .default-retry - - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise - image: - name: sitespeedio/sitespeed.io:6.3.1 - entrypoint: [""] - stage: qa - # 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"] - before_script: - - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" - - echo "${CI_ENVIRONMENT_URL}" - - mkdir -p gitlab-exporter - - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js - - mkdir -p sitespeed-results - script: - - /start.sh --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}" - after_script: - - mv sitespeed-results/data/performance.json performance.json - artifacts: - paths: - - sitespeed-results/ - reports: - performance: performance.json - expire_in: 31d - -parallel-spec-reports: - extends: - - .review:rules:mr-only-manual - image: ruby:2.6-alpine - stage: post-qa - dependencies: ["review-qa-all"] - variables: - NEW_PARALLEL_SPECS_REPORT: qa/report-new.html - BASE_ARTIFACT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/qa/" - script: - - apk add --update build-base libxml2-dev libxslt-dev && rm -rf /var/cache/apk/* - - gem install nokogiri --no-document - - cd qa/gitlab-qa-run-*/gitlab-* - - ARTIFACT_DIRS=$(pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_) - - cd - - - '[[ -f $NEW_PARALLEL_SPECS_REPORT ]] || echo "{}" > ${NEW_PARALLEL_SPECS_REPORT}' - - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm - artifacts: - when: always - paths: - - qa/report-new.html - - qa/gitlab-qa-run-* - reports: - junit: qa/gitlab-qa-run-*/**/rspec-*.xml - expire_in: 31d +# Temporarily disabling review apps +#.review-qa-base: +# extends: +# - .default-retry +# - .use-docker-in-docker +# image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine-ruby-2.6 +# stage: qa +# # 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"] +# variables: +# QA_ARTIFACTS_DIR: "${CI_PROJECT_DIR}/qa" +# QA_CAN_TEST_GIT_PROTOCOL_V2: "false" +# QA_DEBUG: "true" +# GITLAB_USERNAME: "root" +# GITLAB_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" +# GITLAB_ADMIN_USERNAME: "root" +# GITLAB_ADMIN_PASSWORD: "${REVIEW_APPS_ROOT_PASSWORD}" +# GITHUB_ACCESS_TOKEN: "${REVIEW_APPS_QA_GITHUB_ACCESS_TOKEN}" +# EE_LICENSE: "${REVIEW_APPS_EE_LICENSE}" +# before_script: +# - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_REF_SLUG}" +# - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" +# - echo "${CI_ENVIRONMENT_URL}" +# - echo "${QA_IMAGE}" +# - source scripts/utils.sh +# - install_api_client_dependencies_with_apk +# - gem install gitlab-qa --no-document ${GITLAB_QA_VERSION:+ --version ${GITLAB_QA_VERSION}} +# artifacts: +# paths: +# - ./qa/gitlab-qa-run-* +# expire_in: 7 days +# when: always +# +#review-qa-smoke: +# extends: +# - .review-qa-base +# - .review:rules:review-qa-smoke +# script: +# - gitlab-qa Test::Instance::Smoke "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" +# +#review-qa-all: +# extends: +# - .review-qa-base +# - .review:rules:mr-only-manual +# parallel: 5 +# script: +# - export KNAPSACK_REPORT_PATH=knapsack/master_report.json +# - export KNAPSACK_TEST_FILE_PATTERN=qa/specs/features/**/*_spec.rb +# - gitlab-qa Test::Instance::Any "${QA_IMAGE}" "${CI_ENVIRONMENT_URL}" -- --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml --format html --out tmp/rspec.htm --color --format documentation +# +#review-performance: +# extends: +# - .default-retry +# - .review:rules:mr-and-schedule-auto-if-frontend-manual-otherwise +# image: +# name: sitespeedio/sitespeed.io:6.3.1 +# entrypoint: [""] +# stage: qa +# # 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"] +# before_script: +# - export CI_ENVIRONMENT_URL="$(cat environment_url.txt)" +# - echo "${CI_ENVIRONMENT_URL}" +# - mkdir -p gitlab-exporter +# - wget -O ./gitlab-exporter/index.js https://gitlab.com/gitlab-org/gl-performance/raw/master/index.js +# - mkdir -p sitespeed-results +# script: +# - /start.sh --plugins.add ./gitlab-exporter --outputFolder sitespeed-results "${CI_ENVIRONMENT_URL}" +# after_script: +# - mv sitespeed-results/data/performance.json performance.json +# artifacts: +# paths: +# - sitespeed-results/ +# reports: +# performance: performance.json +# expire_in: 31d +# +#parallel-spec-reports: +# extends: +# - .review:rules:mr-only-manual +# image: ruby:2.6-alpine +# stage: post-qa +# dependencies: ["review-qa-all"] +# variables: +# NEW_PARALLEL_SPECS_REPORT: qa/report-new.html +# BASE_ARTIFACT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/file/qa/" +# script: +# - apk add --update build-base libxml2-dev libxslt-dev && rm -rf /var/cache/apk/* +# - gem install nokogiri --no-document +# - cd qa/gitlab-qa-run-*/gitlab-* +# - ARTIFACT_DIRS=$(pwd |rev| awk -F / '{print $1,$2}' | rev | sed s_\ _/_) +# - cd - +# - '[[ -f $NEW_PARALLEL_SPECS_REPORT ]] || echo "{}" > ${NEW_PARALLEL_SPECS_REPORT}' +# - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm +# artifacts: +# when: always +# paths: +# - qa/report-new.html +# - qa/gitlab-qa-run-* +# reports: +# junit: qa/gitlab-qa-run-*/**/rspec-*.xml +# expire_in: 31d danger-review: extends: @@ -238,5 +241,3 @@ danger-review: - source scripts/utils.sh - retry yarn install --frozen-lockfile - danger --fail-on-errors=true --verbose - cache: - policy: pull diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 383aca0043..fbbb0391ec 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -37,6 +37,9 @@ .if-merge-request-title-as-if-foss: &if-merge-request-title-as-if-foss if: '$CI_MERGE_REQUEST_TITLE =~ /RUN AS-IF-FOSS/' +.if-merge-request-title-update-caches: &if-merge-request-title-update-caches + if: '$CI_MERGE_REQUEST_TITLE =~ /UPDATE CACHE/' + .if-security-merge-request: &if-security-merge-request if: '$CI_PROJECT_NAMESPACE == "gitlab-org/security" && $CI_MERGE_REQUEST_IID' @@ -49,6 +52,9 @@ .if-dot-com-gitlab-org-merge-request: &if-dot-com-gitlab-org-merge-request if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_MERGE_REQUEST_IID' +.if-dot-com-gitlab-org-and-security-merge-request: &if-dot-com-gitlab-org-and-security-merge-request + if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/security$)/ && $CI_MERGE_REQUEST_IID' + .if-dot-com-gitlab-org-and-security-tag: &if-dot-com-gitlab-org-and-security-tag if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/security$)/ && $CI_COMMIT_TAG' @@ -78,9 +84,11 @@ .frontend-patterns: &frontend-patterns - "{package.json,yarn.lock}" - - "{babel.config,jest.config}.js" + - "babel.config.js" + - "jest.config.{base,integration,unit}.js" - ".csscomb.json" - "Dockerfile.assets" + - "config/**/*.js" - "vendor/assets/**/*" - "{,ee/}{app/assets,app/helpers,app/presenters,app/views,locale,public,symbol}/**/*" @@ -93,7 +101,8 @@ .code-patterns: &code-patterns - "{package.json,yarn.lock}" - - "{babel.config,jest.config}.js" + - "babel.config.js" + - "jest.config.{base,integration,unit}.js" - ".csscomb.json" - "Dockerfile.assets" - "vendor/assets/**/*" @@ -113,7 +122,8 @@ .code-backstage-patterns: &code-backstage-patterns - "{package.json,yarn.lock}" - - "{babel.config,jest.config}.js" + - "babel.config.js" + - "jest.config.{base,integration,unit}.js" - ".csscomb.json" - "Dockerfile.assets" - "vendor/assets/**/*" @@ -135,7 +145,8 @@ .code-qa-patterns: &code-qa-patterns - "{package.json,yarn.lock}" - - "{babel.config,jest.config}.js" + - "babel.config.js" + - "jest.config.{base,integration,unit}.js" - ".csscomb.json" - "Dockerfile.assets" - "vendor/assets/**/*" @@ -154,7 +165,8 @@ .code-backstage-qa-patterns: &code-backstage-qa-patterns - "{package.json,yarn.lock}" - - "{babel.config,jest.config}.js" + - "babel.config.js" + - "jest.config.{base,integration,unit}.js" - ".csscomb.json" - "Dockerfile.assets" - "vendor/assets/**/*" @@ -177,6 +189,14 @@ - ".dockerignore" - "qa/**/*" +################ +# Shared rules # +################ +.shared:rules:update-cache: + rules: + - <<: *if-master-schedule-2-hourly + - <<: *if-merge-request-title-update-caches + #################### # Cache repo rules # #################### @@ -238,51 +258,21 @@ ################## # Frontend rules # ################## -# This job only runs on `master` since it pushes to the cache. -.frontend:rules:gitlab-assets-compile-pull-push-cache: - rules: - - <<: *if-not-canonical-namespace - when: never - - <<: *if-master-refs - changes: *code-backstage-qa-patterns - when: on_success - -.frontend:rules:gitlab-assets-compile-pull-cache: +.frontend:rules:compile-production-assets: rules: - <<: *if-not-canonical-namespace when: never - <<: *if-default-refs changes: *code-backstage-qa-patterns - when: on_success -.frontend:rules:compile-assets-pull-push-cache: +.frontend:rules:compile-test-assets: rules: - - <<: *if-master-refs - changes: *code-backstage-qa-patterns - when: on_success + - changes: *code-backstage-qa-patterns -# This job only runs on `master` since it pushes to the cache. -.frontend:rules:compile-assets-pull-push-cache-as-if-foss: +.frontend:rules:compile-test-assets-as-if-foss: rules: - <<: *if-not-ee when: never - - <<: *if-master-push - changes: *code-backstage-qa-patterns - - <<: *if-master-schedule-2-hourly - -.frontend:rules:compile-assets-pull-cache: - rules: - - <<: *if-default-refs - changes: *code-backstage-qa-patterns - when: on_success - -.frontend:rules:compile-assets-pull-cache-as-if-foss: - rules: - - <<: *if-not-ee - when: never - - <<: *if-master-push - changes: *code-backstage-qa-patterns - - <<: *if-master-schedule-2-hourly - <<: *if-security-merge-request changes: *code-backstage-qa-patterns - <<: *if-merge-request-title-as-if-foss @@ -293,15 +283,11 @@ rules: - <<: *if-default-refs changes: *code-backstage-patterns - when: on_success .frontend:rules:default-frontend-jobs-as-if-foss: rules: - <<: *if-not-ee when: never - - <<: *if-master-push - changes: *code-backstage-patterns - - <<: *if-master-schedule-2-hourly - <<: *if-security-merge-request changes: *code-backstage-patterns - <<: *if-merge-request-title-as-if-foss @@ -321,10 +307,8 @@ rules: - <<: *if-master-refs changes: *frontend-dependency-patterns - when: on_success - <<: *if-merge-request changes: *frontend-dependency-patterns - when: on_success .frontend:rules:qa-frontend-node-latest: rules: @@ -335,6 +319,12 @@ changes: *frontend-dependency-patterns allow_failure: true +.frontend:rules:bundle-size-review: + rules: + - if: '$DANGER_GITLAB_API_TOKEN && $CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"' + changes: *frontend-patterns + allow_failure: true + ################ # Memory rules # ################ @@ -368,9 +358,6 @@ rules: - <<: *if-not-ee when: never - - <<: *if-master-push - changes: *code-qa-patterns - - <<: *if-master-schedule-2-hourly - <<: *if-security-merge-request changes: *code-qa-patterns - <<: *if-merge-request-title-as-if-foss @@ -379,13 +366,13 @@ .qa:rules:package-and-qa: rules: - - <<: *if-dot-com-gitlab-org-merge-request + - <<: *if-dot-com-gitlab-org-and-security-merge-request changes: *ci-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-merge-request + - <<: *if-dot-com-gitlab-org-and-security-merge-request changes: *qa-patterns allow_failure: true - - <<: *if-dot-com-gitlab-org-merge-request + - <<: *if-dot-com-gitlab-org-and-security-merge-request changes: *code-patterns when: manual allow_failure: true @@ -416,9 +403,6 @@ rules: - <<: *if-not-ee when: never - - <<: *if-master-push - changes: *code-backstage-patterns - - <<: *if-master-schedule-2-hourly - <<: *if-security-merge-request changes: *code-backstage-patterns - <<: *if-merge-request-title-as-if-foss @@ -434,6 +418,17 @@ - <<: *if-master-refs changes: *code-backstage-patterns +.rails:rules:ee-mr-only: + rules: + - <<: *if-not-ee + when: never + - <<: *if-merge-request-title-as-if-foss + when: never + - <<: *if-security-merge-request + changes: *code-backstage-patterns + - <<: *if-dot-com-gitlab-org-merge-request + changes: *code-backstage-patterns + .rails:rules:downtime_check: rules: - <<: *if-merge-request @@ -505,7 +500,7 @@ rules: - <<: *if-not-ee when: never - - <<: *if-dot-com-gitlab-org-merge-request + - <<: *if-dot-com-gitlab-org-and-security-merge-request changes: *code-qa-patterns - <<: *if-dot-com-gitlab-org-schedule diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index 9be495f1ef..b878bec375 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -3,7 +3,7 @@ cache gems: extends: - .default-retry - - .default-cache + - .rails-cache - .default-before_script - .setup:rules:cache-gems stage: test diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 65cce76fc4..1764e9136a 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -3,11 +3,6 @@ TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache" before_script: - source scripts/utils.sh - cache: - key: tests_metadata - paths: - - knapsack/ - - rspec_flaky/ artifacts: expire_in: 31d paths: @@ -20,8 +15,6 @@ retrieve-tests-metadata: - .tests-metadata-state - .test-metadata:rules:retrieve-tests-metadata stage: prepare - cache: - policy: pull script: - source scripts/rspec_helpers.sh - retrieve_tests_metadata @@ -44,8 +37,6 @@ update-tests-metadata: - rspec-ee unit pg11 geo - rspec-ee integration pg11 geo - rspec-ee system pg11 geo - cache: - policy: push script: - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - source scripts/rspec_helpers.sh diff --git a/.gitlab/issue_templates/Acceptance_Testing.md b/.gitlab/issue_templates/Acceptance Testing.md similarity index 100% rename from .gitlab/issue_templates/Acceptance_Testing.md rename to .gitlab/issue_templates/Acceptance Testing.md diff --git a/.gitlab/issue_templates/Problem_Validation.md b/.gitlab/issue_templates/Problem Validation.md similarity index 100% rename from .gitlab/issue_templates/Problem_Validation.md rename to .gitlab/issue_templates/Problem Validation.md diff --git a/.gitlab/issue_templates/QA failure.md b/.gitlab/issue_templates/QA Failure.md similarity index 100% rename from .gitlab/issue_templates/QA failure.md rename to .gitlab/issue_templates/QA Failure.md diff --git a/.gitlab/issue_templates/Solution_validation b/.gitlab/issue_templates/Solution Validation.md similarity index 100% rename from .gitlab/issue_templates/Solution_validation rename to .gitlab/issue_templates/Solution Validation.md diff --git a/.gitlab/issue_templates/Test plan.md b/.gitlab/issue_templates/Test Plan.md similarity index 100% rename from .gitlab/issue_templates/Test plan.md rename to .gitlab/issue_templates/Test Plan.md diff --git a/.gitlab/merge_request_templates/Change documentation location.md b/.gitlab/merge_request_templates/Change Documentation Location.md similarity index 100% rename from .gitlab/merge_request_templates/Change documentation location.md rename to .gitlab/merge_request_templates/Change Documentation Location.md diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md index 72bfd2cdec..282e80d700 100644 --- a/.gitlab/merge_request_templates/Documentation.md +++ b/.gitlab/merge_request_templates/Documentation.md @@ -24,6 +24,8 @@ - ~"development guidelines" and ~"Description templates (.gitlab/\*)" when creating/updating issue and MR description templates. - [ ] Assign the [designated Technical Writer](https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments). +Do not add the ~"feature", ~"frontend", ~"backend", ~"bug", or ~"database" labels if you are only updating documentation. These labels will cause the MR to be added to code verification QA issues. + When applicable: - [ ] Update the [permissions table](https://docs.gitlab.com/ee/user/permissions.html). diff --git a/.gitlab/merge_request_templates/New static analysis check.md b/.gitlab/merge_request_templates/New Static Analysis Check.md similarity index 100% rename from .gitlab/merge_request_templates/New static analysis check.md rename to .gitlab/merge_request_templates/New Static Analysis Check.md diff --git a/.haml-lint.yml b/.haml-lint.yml index 399fa9656a..33a960f7ef 100644 --- a/.haml-lint.yml +++ b/.haml-lint.yml @@ -80,8 +80,8 @@ linters: ignored_cops: - Layout/BlockAlignment - Layout/EndAlignment + - Layout/LineLength - Lint/Void - - Metrics/LineLength - Naming/FileName - Style/AlignParameters - Style/BlockNesting @@ -92,7 +92,6 @@ linters: - Style/IfUnlessModifier - Style/IndentationWidth - Style/Next - - Style/TrailingBlankLines - Style/TrailingWhitespace - Style/WhileUntilModifier @@ -112,7 +111,7 @@ linters: - Layout/SpaceInsideArrayLiteralBrackets - Layout/SpaceInsideHashLiteralBraces - Layout/SpaceInsideStringInterpolation - - Layout/TrailingBlankLines + - Layout/TrailingEmptyLines - Lint/BooleanSymbol - Lint/LiteralInInterpolation - Lint/ParenthesesAsGroupedExpression diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index a79bba24ed..5bd7dc1883 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2020-04-20 07:11:26 +0000 using Haml-Lint version 0.34.0. +# on 2020-05-21 10:58:59 -0400 using Haml-Lint version 0.34.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -162,7 +162,6 @@ linters: - "app/views/projects/_home_panel.html.haml" - "app/views/projects/_import_project_pane.html.haml" - "app/views/projects/_issuable_by_email.html.haml" - - "app/views/projects/_md_preview.html.haml" - "app/views/projects/_readme.html.haml" - "app/views/projects/artifacts/_artifact.html.haml" - "app/views/projects/artifacts/_tree_file.html.haml" @@ -267,7 +266,6 @@ linters: - "app/views/projects/triggers/_index.html.haml" - "app/views/projects/triggers/_trigger.html.haml" - "app/views/projects/triggers/edit.html.haml" - - "app/views/projects/wikis/_pages_wiki_page.html.haml" - "app/views/search/results/_issue.html.haml" - "app/views/search/results/_note.html.haml" - "app/views/search/results/_snippet_blob.html.haml" @@ -277,6 +275,7 @@ linters: - "app/views/shared/_delete_label_modal.html.haml" - "app/views/shared/_group_form.html.haml" - "app/views/shared/_group_tips.html.haml" + - "app/views/shared/_md_preview.html.haml" - "app/views/shared/_milestone_expired.html.haml" - "app/views/shared/_no_password.html.haml" - "app/views/shared/_ping_consent.html.haml" @@ -313,6 +312,7 @@ linters: - "app/views/shared/snippets/_snippet.html.haml" - "app/views/shared/web_hooks/_form.html.haml" - "app/views/shared/web_hooks/_hook.html.haml" + - "app/views/shared/wikis/_pages_wiki_page.html.haml" - "app/views/u2f/_authenticate.html.haml" - "app/views/u2f/_register.html.haml" - "app/views/users/_deletion_guidance.html.haml" @@ -324,7 +324,6 @@ linters: - "ee/app/views/admin/geo/projects/_registry_never.html.haml" - "ee/app/views/admin/licenses/_upload_trial_license.html.haml" - "ee/app/views/admin/licenses/new.html.haml" - - "ee/app/views/admin/licenses/show.html.haml" - "ee/app/views/admin/monitoring/ee/_nav.html.haml" - "ee/app/views/admin/projects/_shared_runner_status.html.haml" - "ee/app/views/admin/users/_auditor_access_level_radio.html.haml" diff --git a/.markdownlint.json b/.markdownlint.json index 88e3d5f775..b4da68989f 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -43,8 +43,10 @@ "Consul", "Debian", "DevOps", + "Docker", "Elasticsearch", "Facebook", + "fastlane", "GDK", "Geo", "Git LFS", @@ -101,6 +103,7 @@ "OpenShift", "PgBouncer", "PostgreSQL", + "Praefect", "Prometheus", "Puma", "puma-worker-killer", diff --git a/.rubocop.yml b/.rubocop.yml index 3d013a650e..ed17799478 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,18 +2,21 @@ inherit_gem: gitlab-styles: - rubocop-default.yml -inherit_from: .rubocop_todo.yml require: - ./rubocop/rubocop - rubocop-rspec +inherit_from: + - .rubocop_todo.yml + - ./rubocop/rubocop-migrations.yml + inherit_mode: merge: - Include AllCops: TargetRubyVersion: 2.6 - TargetRailsVersion: 5.0 + TargetRailsVersion: 6.0 Exclude: - 'vendor/**/*' - 'node_modules/**/*' @@ -27,6 +30,7 @@ AllCops: - 'plugins/**/*' - 'file_hooks/**/*' CacheRootDirectory: tmp + MaxFilesInCache: 18000 Cop/AvoidKeywordArgumentsInSidekiqWorkers: Enabled: true @@ -178,6 +182,9 @@ Rails/ApplicationRecord: - ee/db/**/*.rb - ee/spec/**/*.rb +Cop/DefaultScope: + Enabled: true + Rails/FindBy: Enabled: true Include: @@ -186,6 +193,14 @@ Rails/FindBy: - 'spec/**/*.rb' - 'ee/spec/**/*.rb' +# This is currently exiting with a rubocop exception error and should be +# resolved hopefully a future update +# An error occurred while Rails/UniqueValidationWithoutIndex cop was inspecting +# app/models/abuse_report.rb:15:2. +# To see the complete backtrace run rubocop -d. +Rails/UniqueValidationWithoutIndex: + Enabled: false + # GitLab ################################################################### Gitlab/ModuleWithInstanceVariables: @@ -225,6 +240,7 @@ Gitlab/Json: - 'scripts/**/*' - 'lib/rspec_flaky/**/*' - 'lib/quality/**/*' + - 'lib/gitlab/danger/**/*' GitlabSecurity/PublicSend: Enabled: true @@ -240,10 +256,7 @@ GitlabSecurity/PublicSend: - 'ee/spec/**/*' Gitlab/DuplicateSpecLocation: - Exclude: - - ee/spec/lib/gitlab/gl_repository_spec.rb - - ee/spec/services/merge_requests/refresh_service_spec.rb - - ee/spec/services/ee/merge_requests/refresh_service_spec.rb + Enabled: true Cop/InjectEnterpriseEditionModule: Enabled: true @@ -259,12 +272,15 @@ Style/ReturnNil: Performance/RegexpMatch: Enabled: false -ActiveRecordAssociationReload: +Cop/ActiveRecordAssociationReload: Enabled: true Exclude: - 'spec/**/*' - 'ee/spec/**/*' +Gitlab/AvoidFeatureGet: + Enabled: true + Naming/PredicateName: Enabled: true Exclude: @@ -349,39 +365,17 @@ RSpec/LeakyConstantDeclaration: Exclude: - 'spec/db/schema_spec.rb' - 'spec/lib/feature_spec.rb' - - 'spec/lib/gitlab/ci/build/credentials/factory_spec.rb' - - 'spec/lib/gitlab/ci/config/entry/retry_spec.rb' - - 'spec/lib/gitlab/cluster/mixins/puma_cluster_spec.rb' - - 'spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb' - - 'spec/lib/gitlab/config/entry/factory_spec.rb' - 'spec/lib/gitlab/config/entry/simplifiable_spec.rb' - - 'spec/lib/gitlab/database/migration_helpers_spec.rb' - - 'spec/lib/gitlab/database/obsolete_ignored_columns_spec.rb' - - 'spec/lib/gitlab/database/with_lock_retries_spec.rb' - - 'spec/lib/gitlab/git/diff_collection_spec.rb' - - 'spec/lib/gitlab/import_export/import_test_coverage_spec.rb' - - 'spec/lib/gitlab/import_export/project/relation_factory_spec.rb' - - 'spec/lib/gitlab/jira_import/issues_importer_spec.rb' - - 'spec/lib/gitlab/no_cache_headers_spec.rb' - - 'spec/lib/gitlab/path_regex_spec.rb' - 'spec/lib/gitlab/quick_actions/dsl_spec.rb' - - 'spec/lib/gitlab/sidekiq_middleware/client_metrics_spec.rb' - - 'spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb' - 'spec/lib/marginalia_spec.rb' - 'spec/mailers/notify_spec.rb' - - 'spec/migrations/20191125114345_add_admin_mode_protected_path_spec.rb' - 'spec/models/concerns/batch_destroy_dependent_associations_spec.rb' - 'spec/models/concerns/bulk_insert_safe_spec.rb' - 'spec/models/concerns/bulk_insertable_associations_spec.rb' - 'spec/models/concerns/triggerable_hooks_spec.rb' - 'spec/models/repository_spec.rb' - - 'spec/requests/api/graphql/tasks/task_completion_status_spec.rb' - - 'spec/serializers/commit_entity_spec.rb' - 'spec/services/clusters/applications/check_installation_progress_service_spec.rb' - - 'spec/services/clusters/applications/check_uninstall_progress_service_spec.rb' - - 'spec/support/shared_contexts/spam_constants.rb' - 'spec/support/shared_examples/quick_actions/issuable/issuable_quick_actions_shared_examples.rb' - - 'spec/support_specs/matchers/exceed_query_limit_helpers_spec.rb' RSpec/EmptyLineAfterHook: Enabled: false @@ -452,4 +446,16 @@ Rails/TimeZone: - 'ee/app/services/**/*' - 'ee/spec/controllers/**/*' - 'ee/spec/services/**/*' + - 'app/models/**/*' + - 'spec/models/**/*' + - 'ee/app/models/**/*' + - 'ee/spec/models/**/*' +# WIP: See https://gitlab.com/gitlab-org/gitlab/-/issues/220040 +Rails/SaveBang: + Enabled: true + Include: + - 'spec/**/*.rb' + - 'ee/spec/**/*.rb' + - 'qa/spec/**/*.rb' + - 'qa/qa/specs/**/*.rb' diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index bd0f9184cd..9e3a54fa7e 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,30 +1,21 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2020-01-16 11:53:06 -0800 using RuboCop version 0.74.0. +# on 2020-05-20 16:32:14 -0400 using RuboCop version 0.82.0. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 299 +# Offense count: 308 # Cop supports --auto-correct. Capybara/CurrentPathExpectation: Enabled: false -# Offense count: 1432 +# Offense count: 1715 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: with_first_argument, with_fixed_indentation -Layout/AlignArguments: - Enabled: false - -# Offense count: 1630 -# Cop supports --auto-correct. -# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. -# SupportedHashRocketStyles: key, separator, table -# SupportedColonStyles: key, separator, table -# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit -Layout/AlignHash: +Layout/ArgumentAlignment: Enabled: false # Offense count: 13 @@ -41,7 +32,7 @@ Layout/ClosingHeredocIndentation: - 'spec/rubocop/cop/active_record_association_reload_spec.rb' - 'spec/services/task_list_toggle_service_spec.rb' -# Offense count: 9 +# Offense count: 13 # Cop supports --auto-correct. Layout/ClosingParenthesisIndentation: Exclude: @@ -52,7 +43,7 @@ Layout/ClosingParenthesisIndentation: - 'spec/support/helpers/stub_object_storage.rb' - 'spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb' -# Offense count: 69 +# Offense count: 72 # Cop supports --auto-correct. Layout/EmptyLinesAroundArguments: Exclude: @@ -60,46 +51,61 @@ Layout/EmptyLinesAroundArguments: - 'app/models/concerns/resolvable_discussion.rb' - 'app/models/diff_discussion.rb' - 'app/models/discussion.rb' - - 'ee/app/helpers/license_helper.rb' - 'ee/spec/models/geo/project_registry_spec.rb' - 'lib/banzai/pipeline/broadcast_message_pipeline.rb' - 'lib/banzai/pipeline/gfm_pipeline.rb' - 'lib/banzai/pipeline/single_line_pipeline.rb' - 'spec/features/markdown/copy_as_gfm_spec.rb' -# Offense count: 305 +# Offense count: 413 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: special_inside_parentheses, consistent, align_brackets -Layout/IndentFirstArrayElement: +Layout/FirstArrayElementIndentation: Enabled: false -# Offense count: 1005 +# Offense count: 1218 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: special_inside_parentheses, consistent, align_braces -Layout/IndentFirstHashElement: +Layout/FirstHashElementIndentation: Enabled: false # Offense count: 4 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: consistent, align_parentheses -Layout/IndentFirstParameter: +Layout/FirstParameterIndentation: Exclude: - 'lib/gitlab/cross_project_access.rb' - 'lib/gitlab/data_builder/push.rb' - 'spec/support/helpers/repo_helpers.rb' - 'spec/support/helpers/stub_object_storage.rb' -# Offense count: 54 +# Offense count: 2164 +# Cop supports --auto-correct. +# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle. +# SupportedHashRocketStyles: key, separator, table +# SupportedColonStyles: key, separator, table +# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit +Layout/HashAlignment: + Enabled: false + +# Offense count: 9396 +# Cop supports --auto-correct. +# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. +# URISchemes: http, https +Layout/LineLength: + Max: 1313 + +# Offense count: 94 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: aligned, indented Layout/MultilineOperationIndentation: Enabled: false -# Offense count: 10 +# Offense count: 9 # Cop supports --auto-correct. Layout/RescueEnsureAlignment: Exclude: @@ -107,21 +113,33 @@ Layout/RescueEnsureAlignment: - 'app/models/project.rb' - 'app/services/prometheus/proxy_service.rb' - 'app/workers/delete_stored_files_worker.rb' - - 'app/workers/reactive_caching_worker.rb' - 'config/initializers/1_settings.rb' - 'config/initializers/trusted_proxies.rb' - 'lib/gitlab/background_migration/archive_legacy_traces.rb' - 'lib/gitlab/highlight.rb' - 'lib/tasks/gitlab/lfs/migrate.rake' -# Offense count: 522 +# Offense count: 36 +# Cop supports --auto-correct. +Layout/SpaceAroundMethodCallOperator: + Enabled: false + +# Offense count: 2 +# Cop supports --auto-correct. +# Configuration parameters: AllowForAlignment. +Layout/SpaceBeforeFirstArg: + Exclude: + - 'spec/requests/api/runner_spec.rb' + - 'spec/support/shared_examples/requests/api/custom_attributes_shared_examples.rb' + +# Offense count: 642 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: require_no_space, require_space Layout/SpaceInLambdaLiteral: Enabled: false -# Offense count: 796 +# Offense count: 926 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. # SupportedStyles: space, no_space @@ -129,7 +147,7 @@ Layout/SpaceInLambdaLiteral: Layout/SpaceInsideBlockBraces: Enabled: false -# Offense count: 315 +# Offense count: 401 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: space, no_space @@ -153,12 +171,47 @@ Lint/DuplicateMethods: - 'lib/gitlab/git/tree.rb' - 'lib/gitlab/git/wiki_page.rb' -# Offense count: 122 +# Offense count: 157 # Configuration parameters: MaximumRangeSize. Lint/MissingCopEnableDirective: Enabled: false -# Offense count: 6 +# Offense count: 11 +# Cop supports --auto-correct. +Lint/NonDeterministicRequireOrder: + Exclude: + - 'ee/spec/spec_helper.rb' + - 'qa/spec/spec_helper.rb' + - 'spec/spec_helper.rb' + +# Offense count: 3 +# Configuration parameters: AllowedImplicitNamespaces. +# AllowedImplicitNamespaces: Gem +Lint/RaiseException: + Exclude: + - 'db/migrate/20190402150158_backport_enterprise_schema.rb' + - 'ee/spec/requests/api/helpers_spec.rb' + - 'spec/requests/api/helpers_spec.rb' + +# Offense count: 27 +# Cop supports --auto-correct. +Lint/RedundantCopDisableDirective: + Enabled: false + +# Offense count: 1 +# Cop supports --auto-correct. +Lint/SendWithMixinArgument: + Exclude: + - 'config/initializers/trusted_proxies.rb' + +# Offense count: 3 +Lint/StructNewOverride: + Exclude: + - 'app/presenters/sentry_error_presenter.rb' + - 'app/serializers/environment_serializer.rb' + - 'lib/gitlab/ci/pipeline/duration.rb' + +# Offense count: 7 Lint/UriEscapeUnescape: Exclude: - 'app/controllers/application_controller.rb' @@ -166,14 +219,20 @@ Lint/UriEscapeUnescape: - 'spec/lib/google_api/auth_spec.rb' - 'spec/requests/api/files_spec.rb' -# Offense count: 165 +# Offense count: 3 # Cop supports --auto-correct. -# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. -# URISchemes: http, https -Metrics/LineLength: - Max: 176 +Lint/UriRegexp: + Exclude: + - 'app/models/concerns/mentionable/reference_regexes.rb' + - 'app/services/projects/download_service.rb' + - 'lib/gitlab/ci/pipeline/chain/config/content/remote.rb' -# Offense count: 143 +# Offense count: 65 +# Cop supports --auto-correct. +Migration/DepartmentName: + Enabled: false + +# Offense count: 156 # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms. # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS Naming/FileName: @@ -190,43 +249,78 @@ Naming/HeredocDelimiterCase: - 'spec/support/helpers/repo_helpers.rb' - 'spec/support/helpers/seed_repo.rb' -# Offense count: 211 -# Configuration parameters: Blacklist. -# Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$)) +# Offense count: 239 +# Configuration parameters: ForbiddenDelimiters. +# ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$)) Naming/HeredocDelimiterNaming: Enabled: false -# Offense count: 139 +# Offense count: 5 +# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. +# AllowedNames: io, id, to, by, on, in, at, ip, db, os, pp +Naming/MethodParameterName: + Exclude: + - 'lib/gitlab/diff/inline_diff.rb' + - 'spec/support/helpers/key_generator_helper.rb' + +# Offense count: 162 # Cop supports --auto-correct. # Configuration parameters: PreferredName. Naming/RescuedExceptionsVariableName: Enabled: false -# Offense count: 9913 +# Offense count: 20 +# Cop supports --auto-correct. +Performance/Count: + Exclude: + - 'app/helpers/groups_helper.rb' + - 'app/services/merge_requests/add_context_service.rb' + - 'ee/lib/gitlab/geo/fdw.rb' + - 'ee/lib/gitlab/graphql/aggregations/epics/epic_node.rb' + - 'ee/spec/controllers/projects/feature_flags_controller_spec.rb' + - 'ee/spec/requests/api/feature_flags_spec.rb' + - 'lib/gitlab/sidekiq_status.rb' + - 'spec/lib/gitlab/conflict/file_spec.rb' + - 'spec/lib/gitlab/git/tree_spec.rb' + - 'spec/models/ci/build_spec.rb' + - 'spec/support/matchers/exceed_query_limit.rb' + +# Offense count: 25 +# Cop supports --auto-correct. +Performance/Detect: + Exclude: + - 'ee/spec/controllers/projects/dependencies_controller_spec.rb' + - 'ee/spec/controllers/projects/feature_flags_controller_spec.rb' + - 'ee/spec/requests/api/unleash_spec.rb' + - 'spec/lib/gitlab/git/tree_spec.rb' + - 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb' + - 'spec/models/event_spec.rb' + - 'spec/requests/api/jobs_spec.rb' + +# Offense count: 11832 # Configuration parameters: Prefixes. # Prefixes: when, with, without RSpec/ContextWording: Enabled: false -# Offense count: 879 +# Offense count: 1121 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: method_call, block RSpec/ExpectChange: Enabled: false -# Offense count: 660 +# Offense count: 751 RSpec/ExpectInHook: Enabled: false -# Offense count: 10 +# Offense count: 9 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: it_behaves_like, it_should_behave_like RSpec/ItBehavesLike: Exclude: - 'spec/lib/gitlab/git/commit_spec.rb' - - 'spec/lib/gitlab/git/repository_spec.rb' - 'spec/services/notification_service_spec.rb' # Offense count: 68 @@ -244,30 +338,28 @@ RSpec/LetBeforeExamples: - 'spec/rubocop/cop/migration/update_column_in_batches_spec.rb' - 'spec/serializers/pipeline_details_entity_spec.rb' -# Offense count: 2018 +# Offense count: 2188 # Cop supports --auto-correct. # Configuration parameters: Strict, EnforcedStyle, AllowedExplicitMatchers. # SupportedStyles: inflected, explicit RSpec/PredicateMatcher: Enabled: false -# Offense count: 584 +# Offense count: 635 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: and_return, block RSpec/ReturnFromStub: Enabled: false -# Offense count: 380 +# Offense count: 518 RSpec/ScatteredLet: Enabled: false -# Offense count: 8 +# Offense count: 4 RSpec/ScatteredSetup: Exclude: - - 'spec/lib/gitlab/bitbucket_import/importer_spec.rb' - 'spec/requests/api/jobs_spec.rb' - - 'spec/services/projects/create_service_spec.rb' # Offense count: 10 # Cop supports --auto-correct. @@ -284,67 +376,92 @@ Rails/ApplicationController: - 'spec/controllers/concerns/continue_params_spec.rb' - 'spec/lib/marginalia_spec.rb' -# Offense count: 8 +# Offense count: 3 # Cop supports --auto-correct. Rails/BelongsTo: Exclude: - 'app/models/deployment.rb' - 'app/models/environment.rb' - - 'ee/app/models/prometheus_alert.rb' - - 'ee/app/models/prometheus_alert_event.rb' -# Offense count: 151 +# Offense count: 71 +# Configuration parameters: Database, Include. +# SupportedDatabases: mysql, postgresql +# Include: db/migrate/*.rb +Rails/BulkChangeTable: + Enabled: false + +# Offense count: 208 # Configuration parameters: Include. # Include: db/migrate/*.rb Rails/CreateTableWithTimestamps: Enabled: false -# Offense count: 266 +# Offense count: 346 # Configuration parameters: EnforcedStyle. # SupportedStyles: slashes, arguments Rails/FilePath: Enabled: false -# Offense count: 211 +# Offense count: 264 # Configuration parameters: Include. # Include: app/models/**/*.rb Rails/HasManyOrHasOneDependent: Enabled: false -# Offense count: 431 +# Offense count: 467 # Configuration parameters: Include. # Include: app/helpers/**/*.rb Rails/HelperInstanceVariable: Enabled: false -# Offense count: 103 +# Offense count: 15 +# Cop supports --auto-correct. +Rails/IndexBy: + Exclude: + - 'app/models/ci/pipeline.rb' + - 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb' + - 'ee/app/services/projects/update_mirror_service.rb' + - 'ee/app/services/security/store_report_service.rb' + - 'ee/lib/ee/gitlab/auth/ldap/sync/group.rb' + - 'ee/lib/ee/gitlab/background_migration/backfill_version_data_from_gitaly.rb' + - 'ee/lib/gitlab/analytics/type_of_work/tasks_by_type.rb' + - 'ee/lib/gitlab/elastic/document_reference.rb' + - 'ee/lib/gitlab/group_plans_preloader.rb' + - 'lib/gitlab/database/count/reltuples_count_strategy.rb' + - 'lib/gitlab/language_detection.rb' + +# Offense count: 36 +# Cop supports --auto-correct. +Rails/IndexWith: + Enabled: false + +# Offense count: 105 # Configuration parameters: Include. # Include: app/models/**/*.rb Rails/InverseOf: Enabled: false -# Offense count: 51 +# Offense count: 55 # Configuration parameters: Include. # Include: app/controllers/**/*.rb Rails/LexicallyScopedActionFilter: Enabled: false -# Offense count: 4 +# Offense count: 3 # Cop supports --auto-correct. Rails/LinkToBlank: Exclude: - 'app/helpers/projects_helper.rb' - 'app/helpers/wiki_helper.rb' - 'ee/app/helpers/ee/user_callouts_helper.rb' - - 'ee/app/helpers/license_helper.rb' -# Offense count: 35 +# Offense count: 34 # Configuration parameters: Include. # Include: **/Rakefile, **/*.rake Rails/RakeEnvironment: Enabled: false -# Offense count: 868 +# Offense count: 926 # Configuration parameters: Blacklist, Whitelist. # Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters Rails/SkipsModelValidations: @@ -360,13 +477,18 @@ Security/YAMLLoad: - 'spec/initializers/secret_token_spec.rb' - 'spec/lib/gitlab/prometheus/additional_metrics_parser_spec.rb' -# Offense count: 34 -# Configuration parameters: EnforcedStyle. +# Offense count: 10 +# Configuration parameters: EnforcedStyle, AllowModifiersOnSymbols. # SupportedStyles: inline, group Style/AccessModifierDeclarations: - Enabled: false + Exclude: + - 'app/helpers/issues_helper.rb' + - 'app/helpers/lazy_image_tag_helper.rb' + - 'lib/gitlab/cache/request_cache.rb' + - 'lib/gitlab/request_profiler.rb' + - 'spec/support/forgery_protection.rb' -# Offense count: 127 +# Offense count: 148 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: percent_q, bare_percent @@ -379,7 +501,7 @@ Style/CommentedKeyword: - 'lib/tasks/gitlab/backup.rake' - 'spec/tasks/gitlab/backup_rake_spec.rb' -# Offense count: 6 +# Offense count: 5 # Cop supports --auto-correct. Style/EachWithObject: Exclude: @@ -388,9 +510,8 @@ Style/EachWithObject: - 'lib/gitlab/hook_data/issuable_builder.rb' - 'lib/gitlab/i18n/po_linter.rb' - 'lib/gitlab/import_export/members_mapper.rb' - - 'lib/gitlab/import_export/relation_factory.rb' -# Offense count: 41 +# Offense count: 46 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: empty, nil, both @@ -404,7 +525,7 @@ Style/EmptyLambdaParameter: - 'app/models/ci/build.rb' - 'app/models/ci/runner.rb' -# Offense count: 8 +# Offense count: 7 # Cop supports --auto-correct. Style/EmptyLiteral: Exclude: @@ -414,38 +535,66 @@ Style/EmptyLiteral: - 'spec/helpers/merge_requests_helper_spec.rb' - 'spec/lib/gitlab/workhorse_spec.rb' - 'spec/requests/api/jobs_spec.rb' - - 'spec/support/shared_examples/chat_slash_commands_shared_examples.rb' -# Offense count: 148 +# Offense count: 170 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: compact, expanded Style/EmptyMethod: Enabled: false -# Offense count: 346 +# Offense count: 431 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: format, sprintf, percent Style/FormatString: Enabled: false -# Offense count: 692 +# Offense count: 769 # Configuration parameters: MinBodyLength. Style/GuardClause: Enabled: false -# Offense count: 27 +# Offense count: 47 +# Cop supports --auto-correct. +Style/HashEachMethods: + Enabled: false + +# Offense count: 6 +# Cop supports --auto-correct. +Style/HashTransformKeys: + Exclude: + - 'ee/app/models/vulnerabilities/occurrence.rb' + - 'ee/spec/lib/gitlab/ci/templates/dependency_scanning_gitlab_ci_yaml_spec.rb' + - 'lib/banzai/filter/commit_trailers_filter.rb' + - 'lib/gitlab/analytics/cycle_analytics/stage_events.rb' + +# Offense count: 10 +# Cop supports --auto-correct. +Style/HashTransformValues: + Exclude: + - 'app/validators/addressable_url_validator.rb' + - 'config/initializers/action_dispatch_journey_formatter.rb' + - 'ee/app/helpers/compliance_management/compliance_framework/project_settings_helper.rb' + - 'ee/app/services/packages/nuget/metadata_extraction_service.rb' + - 'lib/gitlab/config/entry/configurable.rb' + - 'lib/gitlab/config/entry/node.rb' + - 'lib/gitlab/discussions_diff/file_collection.rb' + - 'lib/gitlab/error_tracking.rb' + - 'lib/rspec_flaky/flaky_examples_collection.rb' + - 'spec/lib/gitlab/database_importers/common_metrics/prometheus_metric_spec.rb' + +# Offense count: 31 # Configuration parameters: AllowIfModifier. Style/IfInsideElse: Enabled: false -# Offense count: 1474 +# Offense count: 1313 # Cop supports --auto-correct. Style/IfUnlessModifier: Enabled: false -# Offense count: 314 +# Offense count: 377 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: line_count_dependent, lambda, literal @@ -460,51 +609,49 @@ Style/MethodMissingSuper: Style/MissingRespondToMissing: Enabled: false -# Offense count: 6 +# Offense count: 5 Style/MixinUsage: Exclude: - 'spec/factories/ci/builds.rb' - 'spec/factories/ci/job_artifacts.rb' - 'spec/factories/lfs_objects.rb' - 'spec/factories/notes.rb' - - 'spec/lib/gitlab/import_export/project_tree_restorer_spec.rb' - 'spec/lib/gitlab/import_export/version_checker_spec.rb' -# Offense count: 4 +# Offense count: 2 # Cop supports --auto-correct. Style/MultilineIfModifier: Exclude: - - 'app/helpers/snippets_helper.rb' - 'app/services/ci/process_pipeline_service.rb' - 'lib/api/commit_statuses.rb' -# Offense count: 25 +# Offense count: 29 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, MinBodyLength. # SupportedStyles: skip_modifier_ifs, always Style/Next: Enabled: false -# Offense count: 71 +# Offense count: 89 # Cop supports --auto-correct. # Configuration parameters: EnforcedOctalStyle. # SupportedOctalStyles: zero_with_o, zero_only Style/NumericLiteralPrefix: Enabled: false -# Offense count: 234 +# Offense count: 255 # Cop supports --auto-correct. # Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods. # SupportedStyles: predicate, comparison Style/NumericPredicate: Enabled: false -# Offense count: 106 +# Offense count: 117 # Cop supports --auto-correct. Style/ParallelAssignment: Enabled: false -# Offense count: 1692 +# Offense count: 2035 # Cop supports --auto-correct. # Configuration parameters: PreferredDelimiters. Style/PercentLiteralDelimiters: @@ -526,51 +673,60 @@ Style/PerlBackrefs: - 'lib/gitlab/search_results.rb' - 'lib/gitlab/sherlock/query.rb' -# Offense count: 165 +# Offense count: 200 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: compact, exploded Style/RaiseArgs: Enabled: false -# Offense count: 221 +# Offense count: 246 # Cop supports --auto-correct. Style/RedundantFreeze: Enabled: false -# Offense count: 15 +# Offense count: 123 +# Cop supports --auto-correct. +Style/RedundantInterpolation: + Enabled: false + +# Offense count: 6 +# Cop supports --auto-correct. +Style/RedundantParentheses: + Exclude: + - 'ee/app/models/ee/merge_request.rb' + +# Offense count: 33 # Cop supports --auto-correct. # Configuration parameters: AllowMultipleReturnValues. Style/RedundantReturn: - Exclude: - - 'app/controllers/application_controller.rb' - - 'app/controllers/concerns/issuable_actions.rb' - - 'app/controllers/groups/application_controller.rb' - - 'app/controllers/omniauth_callbacks_controller.rb' - - 'app/controllers/profiles/keys_controller.rb' - - 'app/controllers/projects/application_controller.rb' - - 'app/services/access_token_validation_service.rb' - - 'lib/gitlab/utils.rb' - - 'lib/google_api/auth.rb' + Enabled: false -# Offense count: 739 +# Offense count: 801 # Cop supports --auto-correct. Style/RedundantSelf: Enabled: false -# Offense count: 80 +# Offense count: 2 +# Cop supports --auto-correct. +Style/RedundantSort: + Exclude: + - 'ee/app/presenters/packages/nuget/search_results_presenter.rb' + - 'ee/spec/presenters/packages/nuget/search_results_presenter_spec.rb' + +# Offense count: 120 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, AllowInnerSlashes. # SupportedStyles: slashes, percent_r, mixed Style/RegexpLiteral: Enabled: false -# Offense count: 42 +# Offense count: 46 # Cop supports --auto-correct. Style/RescueModifier: Enabled: false -# Offense count: 237 +# Offense count: 286 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: implicit, explicit @@ -592,28 +748,544 @@ Style/SingleLineMethods: Exclude: - 'lib/gitlab/ci/ansi2html.rb' -# Offense count: 94 +# Offense count: 102 # Cop supports --auto-correct. # Configuration parameters: . # SupportedStyles: use_perl_names, use_english_names Style/SpecialGlobalVars: EnforcedStyle: use_perl_names -# Offense count: 75 +# Offense count: 93 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. # SupportedStyles: single_quotes, double_quotes Style/StringLiteralsInInterpolation: Enabled: false -# Offense count: 216 +# Offense count: 233 # Cop supports --auto-correct. # Configuration parameters: IgnoredMethods. # IgnoredMethods: respond_to, define_method Style/SymbolProc: Enabled: false -# Offense count: 99 +# Offense count: 1478 # Cop supports --auto-correct. -Style/UnneededInterpolation: - Enabled: false +# Configuration parameters: AllowImplicitReturn, AllowedReceivers. +Rails/SaveBang: + Exclude: + - 'ee/spec/controllers/groups/epic_issues_controller_spec.rb' + - 'ee/spec/controllers/groups/epic_links_controller_spec.rb' + - 'ee/spec/controllers/groups/epics_controller_spec.rb' + - 'ee/spec/controllers/groups/roadmap_controller_spec.rb' + - 'ee/spec/controllers/projects/environments_controller_spec.rb' + - 'ee/spec/controllers/projects/issues_controller_spec.rb' + - 'ee/spec/controllers/projects/merge_requests/creations_controller_spec.rb' + - 'ee/spec/controllers/projects/merge_requests_controller_spec.rb' + - 'ee/spec/controllers/projects/service_desk_controller_spec.rb' + - 'ee/spec/controllers/projects/subscriptions_controller_spec.rb' + - 'ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb' + - 'ee/spec/controllers/subscriptions_controller_spec.rb' + - 'ee/spec/factories/merge_requests.rb' + - 'ee/spec/features/admin/geo/admin_geo_nodes_spec.rb' + - 'ee/spec/features/boards/scoped_issue_board_spec.rb' + - 'ee/spec/features/ci_shared_runner_warnings_spec.rb' + - 'ee/spec/features/dashboards/operations_spec.rb' + - 'ee/spec/features/issues/gfm_autocomplete_ee_spec.rb' + - 'ee/spec/features/merge_request/user_approves_spec.rb' + - 'ee/spec/features/merge_requests/user_views_all_merge_requests_spec.rb' + - 'ee/spec/features/projects/members/invite_group_and_members_spec.rb' + - 'ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb' + - 'ee/spec/features/projects/new_project_spec.rb' + - 'ee/spec/features/projects/settings/user_manages_approval_settings_spec.rb' + - 'ee/spec/features/projects/settings/user_manages_members_spec.rb' + - 'ee/spec/features/search/elastic/global_search_spec.rb' + - 'ee/spec/finders/epics_finder_spec.rb' + - 'ee/spec/frontend/fixtures/analytics.rb' + - 'ee/spec/helpers/application_helper_spec.rb' + - 'ee/spec/helpers/ee/issues_helper_spec.rb' + - 'ee/spec/initializers/fog_google_https_private_urls_spec.rb' + - 'ee/spec/lib/analytics/merge_request_metrics_calculator_spec.rb' + - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb' + - 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb' + - 'ee/spec/lib/ee/gitlab/background_migration/move_epic_issues_after_epics_spec.rb' + - 'ee/spec/lib/ee/gitlab/background_migration/populate_any_approval_rule_for_merge_requests_spec.rb' + - 'ee/spec/lib/ee/gitlab/background_migration/populate_any_approval_rule_for_projects_spec.rb' + - 'ee/spec/lib/ee/gitlab/checks/push_rules/commit_check_spec.rb' + - 'ee/spec/lib/ee/gitlab/ci/pipeline/quota/activity_spec.rb' + - 'ee/spec/lib/gitlab/auth/ldap/access_spec.rb' + - 'ee/spec/lib/gitlab/auth/o_auth/user_spec.rb' + - 'ee/spec/lib/gitlab/auth/saml/user_spec.rb' + - 'ee/spec/lib/gitlab/elastic/search_results_spec.rb' + - 'ee/spec/lib/gitlab/email/handler/ee/service_desk_handler_spec.rb' + - 'ee/spec/lib/gitlab/geo/jwt_request_decoder_spec.rb' + - 'ee/spec/lib/gitlab/geo/oauth/session_spec.rb' + - 'ee/spec/lib/gitlab/geo_spec.rb' + - 'ee/spec/lib/gitlab/git_access_spec.rb' + - 'ee/spec/mailers/notify_spec.rb' + - 'ee/spec/migrations/geo/migrate_ci_job_artifacts_to_separate_registry_spec.rb' + - 'ee/spec/migrations/geo/migrate_lfs_objects_to_separate_registry_spec.rb' + - 'ee/spec/migrations/schedule_project_any_approval_rule_migration_spec.rb' + - 'ee/spec/models/application_setting_spec.rb' + - 'ee/spec/models/approval_merge_request_rule_spec.rb' + - 'ee/spec/models/approval_state_spec.rb' + - 'ee/spec/models/burndown_spec.rb' + - 'ee/spec/models/ci/build_spec.rb' + - 'ee/spec/models/ci/pipeline_spec.rb' + - 'ee/spec/models/ci/subscriptions/project_spec.rb' + - 'ee/spec/models/concerns/deprecated_approvals_before_merge_spec.rb' + - 'ee/spec/models/concerns/elastic/note_spec.rb' + - 'ee/spec/models/ee/protected_branch_spec.rb' + - 'ee/spec/models/ee/protected_ref_access_spec.rb' + - 'ee/spec/models/ee/protected_ref_spec.rb' + - 'ee/spec/models/epic_spec.rb' + - 'ee/spec/models/geo/project_registry_spec.rb' + - 'ee/spec/models/geo_node_spec.rb' + - 'ee/spec/models/geo_node_status_spec.rb' + - 'ee/spec/models/group_spec.rb' + - 'ee/spec/models/issue_spec.rb' + - 'ee/spec/models/label_note_spec.rb' + - 'ee/spec/models/license_spec.rb' + - 'ee/spec/models/merge_request_spec.rb' + - 'ee/spec/models/operations/feature_flag_scope_spec.rb' + - 'ee/spec/models/operations/feature_flag_spec.rb' + - 'ee/spec/models/operations/feature_flags/strategy_spec.rb' + - 'ee/spec/models/operations/feature_flags/user_list_spec.rb' + - 'ee/spec/models/project_services/github_service_spec.rb' + - 'ee/spec/models/project_services/jenkins_service_spec.rb' + - 'ee/spec/models/project_spec.rb' + - 'ee/spec/models/scim_identity_spec.rb' + - 'ee/spec/models/scim_oauth_access_token_spec.rb' + - 'ee/spec/models/user_preference_spec.rb' + - 'ee/spec/models/user_spec.rb' + - 'ee/spec/models/visible_approvable_spec.rb' + - 'ee/spec/models/vulnerabilities/feedback_spec.rb' + - 'ee/spec/models/vulnerabilities/issue_link_spec.rb' + - 'ee/spec/policies/protected_branch_policy_spec.rb' + - 'ee/spec/presenters/audit_event_presenter_spec.rb' + - 'ee/spec/presenters/epic_presenter_spec.rb' + - 'ee/spec/presenters/packages/conan/package_presenter_spec.rb' + - 'ee/spec/requests/api/boards_spec.rb' + - 'ee/spec/requests/api/epic_issues_spec.rb' + - 'ee/spec/requests/api/epic_links_spec.rb' + - 'ee/spec/requests/api/epics_spec.rb' + - 'ee/spec/requests/api/geo_nodes_spec.rb' + - 'ee/spec/requests/api/geo_spec.rb' + - 'ee/spec/requests/api/graphql/group/epics_spec.rb' + - 'ee/spec/requests/api/graphql/mutations/epic_tree/reorder_spec.rb' + - 'ee/spec/requests/api/groups_spec.rb' + - 'ee/spec/requests/api/issues_spec.rb' + - 'ee/spec/requests/api/ldap_group_links_spec.rb' + - 'ee/spec/requests/api/maven_packages_spec.rb' + - 'ee/spec/requests/api/merge_request_approval_rules_spec.rb' + - 'ee/spec/requests/api/merge_request_approvals_spec.rb' + - 'ee/spec/requests/api/merge_requests_spec.rb' + - 'ee/spec/requests/api/project_approvals_spec.rb' + - 'ee/spec/requests/api/projects_spec.rb' + - 'ee/spec/requests/api/protected_branches_spec.rb' + - 'ee/spec/requests/api/scim_spec.rb' + - 'ee/spec/requests/api/todos_spec.rb' + - 'ee/spec/services/approval_rules/finalize_service_spec.rb' + - 'ee/spec/services/ci/register_job_service_spec.rb' + - 'ee/spec/services/ee/boards/issues/create_service_spec.rb' + - 'ee/spec/services/ee/issuable/clone/attributes_rewriter_spec.rb' + - 'ee/spec/services/ee/issuable/common_system_notes_service_spec.rb' + - 'ee/spec/services/ee/issues/update_service_spec.rb' + - 'ee/spec/services/ee/merge_requests/refresh_service_spec.rb' + - 'ee/spec/services/ee/merge_requests/update_service_spec.rb' + - 'ee/spec/services/ee/notes/quick_actions_service_spec.rb' + - 'ee/spec/services/ee/notification_service_spec.rb' + - 'ee/spec/services/ee/resource_events/change_weight_service_spec.rb' + - 'ee/spec/services/elastic/index_record_service_spec.rb' + - 'ee/spec/services/epic_links/create_service_spec.rb' + - 'ee/spec/services/epics/issue_promote_service_spec.rb' + - 'ee/spec/services/epics/tree_reorder_service_spec.rb' + - 'ee/spec/services/epics/update_dates_service_spec.rb' + - 'ee/spec/services/epics/update_service_spec.rb' + - 'ee/spec/services/geo/blob_verification_secondary_service_spec.rb' + - 'ee/spec/services/geo/metrics_update_service_spec.rb' + - 'ee/spec/services/geo/registry_consistency_service_spec.rb' + - 'ee/spec/services/geo/repository_verification_secondary_service_spec.rb' + - 'ee/spec/services/groups/autocomplete_service_spec.rb' + - 'ee/spec/services/ldap_group_reset_service_spec.rb' + - 'ee/spec/services/lfs/unlock_file_service_spec.rb' + - 'ee/spec/services/merge_requests/approval_service_spec.rb' + - 'ee/spec/services/merge_requests/remove_approval_service_spec.rb' + - 'ee/spec/services/merge_trains/refresh_merge_request_service_spec.rb' + - 'ee/spec/services/projects/after_rename_service_spec.rb' + - 'ee/spec/services/projects/update_service_spec.rb' + - 'ee/spec/services/quick_actions/interpret_service_spec.rb' + - 'ee/spec/services/slash_commands/global_slack_handler_spec.rb' + - 'ee/spec/services/start_pull_mirroring_service_spec.rb' + - 'ee/spec/services/status_page/trigger_publish_service_spec.rb' + - 'ee/spec/services/todo_service_spec.rb' + - 'ee/spec/services/update_build_minutes_service_spec.rb' + - 'ee/spec/support/shared_examples/lib/analytics/common_merge_request_metrics_refresh_shared_examples.rb' + - 'ee/spec/support/shared_examples/models/concerns/replicator_shared_examples.rb' + - 'ee/spec/support/shared_examples/models/member_shared_examples.rb' + - 'ee/spec/support/shared_examples/models/mentionable_shared_examples.rb' + - 'ee/spec/support/shared_examples/policies/protected_environments_shared_examples.rb' + - 'ee/spec/support/shared_examples/requests/api/project_approval_rules_api_shared_examples.rb' + - 'ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb' + - 'ee/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb' + - 'ee/spec/workers/adjourned_project_deletion_worker_spec.rb' + - 'ee/spec/workers/create_github_webhook_worker_spec.rb' + - 'ee/spec/workers/elastic_indexer_worker_spec.rb' + - 'ee/spec/workers/geo/container_repository_sync_dispatch_worker_spec.rb' + - 'ee/spec/workers/geo/file_download_dispatch_worker_spec.rb' + - 'ee/spec/workers/geo/repository_shard_sync_worker_spec.rb' + - 'ee/spec/workers/repository_import_worker_spec.rb' + - 'ee/spec/workers/update_all_mirrors_worker_spec.rb' + - 'qa/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb' + - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb' + - 'spec/controllers/abuse_reports_controller_spec.rb' + - 'spec/controllers/admin/impersonations_controller_spec.rb' + - 'spec/controllers/admin/runners_controller_spec.rb' + - 'spec/controllers/boards/issues_controller_spec.rb' + - 'spec/controllers/groups/runners_controller_spec.rb' + - 'spec/controllers/oauth/authorizations_controller_spec.rb' + - 'spec/controllers/omniauth_callbacks_controller_spec.rb' + - 'spec/controllers/profiles/emails_controller_spec.rb' + - 'spec/controllers/profiles/notifications_controller_spec.rb' + - 'spec/controllers/projects/artifacts_controller_spec.rb' + - 'spec/controllers/projects/cycle_analytics_controller_spec.rb' + - 'spec/controllers/projects/issues_controller_spec.rb' + - 'spec/controllers/projects/labels_controller_spec.rb' + - 'spec/controllers/projects/merge_requests_controller_spec.rb' + - 'spec/controllers/projects/milestones_controller_spec.rb' + - 'spec/controllers/projects/notes_controller_spec.rb' + - 'spec/controllers/projects/pipelines_controller_spec.rb' + - 'spec/controllers/projects/runners_controller_spec.rb' + - 'spec/controllers/projects_controller_spec.rb' + - 'spec/factories/ci/pipelines.rb' + - 'spec/factories/design_management/designs.rb' + - 'spec/factories/design_management/versions.rb' + - 'spec/factories/labels.rb' + - 'spec/factories/projects.rb' + - 'spec/features/admin/admin_mode/login_spec.rb' + - 'spec/features/admin/admin_runners_spec.rb' + - 'spec/features/admin/admin_users_impersonation_tokens_spec.rb' + - 'spec/features/admin/admin_users_spec.rb' + - 'spec/features/boards/sidebar_spec.rb' + - 'spec/features/calendar_spec.rb' + - 'spec/features/commits_spec.rb' + - 'spec/features/dashboard/datetime_on_tooltips_spec.rb' + - 'spec/features/dashboard/issuables_counter_spec.rb' + - 'spec/features/dashboard/project_member_activity_index_spec.rb' + - 'spec/features/dashboard/projects_spec.rb' + - 'spec/features/error_tracking/user_sees_error_index_spec.rb' + - 'spec/features/groups/members/request_access_spec.rb' + - 'spec/features/issues/bulk_assignment_labels_spec.rb' + - 'spec/features/issues/gfm_autocomplete_spec.rb' + - 'spec/features/issues/issue_sidebar_spec.rb' + - 'spec/features/issues/note_polling_spec.rb' + - 'spec/features/issues/user_creates_branch_and_merge_request_spec.rb' + - 'spec/features/issues/user_creates_confidential_merge_request_spec.rb' + - 'spec/features/issues/user_edits_issue_spec.rb' + - 'spec/features/issues/user_filters_issues_spec.rb' + - 'spec/features/issues/user_sees_live_update_spec.rb' + - 'spec/features/issues/user_sorts_issues_spec.rb' + - 'spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb' + - 'spec/features/merge_request/user_posts_diff_notes_spec.rb' + - 'spec/features/merge_request/user_resolves_diff_notes_and_discussions_resolve_spec.rb' + - 'spec/features/merge_request/user_sees_cherry_pick_modal_spec.rb' + - 'spec/features/merge_request/user_sees_merge_widget_spec.rb' + - 'spec/features/merge_requests/user_mass_updates_spec.rb' + - 'spec/features/profiles/emails_spec.rb' + - 'spec/features/profiles/password_spec.rb' + - 'spec/features/profiles/personal_access_tokens_spec.rb' + - 'spec/features/projects/features_visibility_spec.rb' + - 'spec/features/projects/jobs_spec.rb' + - 'spec/features/projects/members/user_requests_access_spec.rb' + - 'spec/features/projects/pages_lets_encrypt_spec.rb' + - 'spec/features/projects/pages_spec.rb' + - 'spec/features/projects/remote_mirror_spec.rb' + - 'spec/features/projects/services/user_activates_slack_notifications_spec.rb' + - 'spec/features/projects/settings/access_tokens_spec.rb' + - 'spec/features/projects/show/user_sees_deletion_failure_message_spec.rb' + - 'spec/features/projects/user_sees_sidebar_spec.rb' + - 'spec/features/projects/wiki/user_updates_wiki_page_spec.rb' + - 'spec/features/projects/wiki/users_views_asciidoc_page_with_includes_spec.rb' + - 'spec/features/security/project/private_access_spec.rb' + - 'spec/features/users/login_spec.rb' + - 'spec/features/users/show_spec.rb' + - 'spec/finders/autocomplete/move_to_project_finder_spec.rb' + - 'spec/finders/group_descendants_finder_spec.rb' + - 'spec/finders/issues_finder_spec.rb' + - 'spec/finders/merge_requests_finder_spec.rb' + - 'spec/finders/projects_finder_spec.rb' + - 'spec/finders/uploader_finder_spec.rb' + - 'spec/frontend/fixtures/issues.rb' + - 'spec/frontend/fixtures/merge_requests.rb' + - 'spec/graphql/mutations/merge_requests/set_locked_spec.rb' + - 'spec/graphql/mutations/merge_requests/set_wip_spec.rb' + - 'spec/graphql/resolvers/boards_resolver_spec.rb' + - 'spec/helpers/appearances_helper_spec.rb' + - 'spec/helpers/profiles_helper_spec.rb' + - 'spec/helpers/projects/alert_management_helper_spec.rb' + - 'spec/helpers/projects_helper_spec.rb' + - 'spec/helpers/visibility_level_helper_spec.rb' + - 'spec/initializers/active_record_locking_spec.rb' + - 'spec/initializers/fog_google_https_private_urls_spec.rb' + - 'spec/lib/after_commit_queue_spec.rb' + - 'spec/lib/backup/manager_spec.rb' + - 'spec/lib/banzai/reference_parser/external_issue_parser_spec.rb' + - 'spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb' + - 'spec/lib/gitlab/auth/ldap/user_spec.rb' + - 'spec/lib/gitlab/auth/o_auth/user_spec.rb' + - 'spec/lib/gitlab/auth/saml/user_spec.rb' + - 'spec/lib/gitlab/auth_spec.rb' + - 'spec/lib/gitlab/background_migration/backfill_deployment_clusters_from_deployments_spec.rb' + - 'spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb' + - 'spec/lib/gitlab/background_migration/backfill_project_settings_spec.rb' + - 'spec/lib/gitlab/background_migration/backfill_push_rules_id_in_projects_spec.rb' + - 'spec/lib/gitlab/background_migration/digest_column_spec.rb' + - 'spec/lib/gitlab/background_migration/encrypt_columns_spec.rb' + - 'spec/lib/gitlab/background_migration/fix_cross_project_label_links_spec.rb' + - 'spec/lib/gitlab/background_migration/fix_projects_without_prometheus_service_spec.rb' + - 'spec/lib/gitlab/background_migration/fix_user_namespace_names_spec.rb' + - 'spec/lib/gitlab/background_migration/fix_user_project_route_names_spec.rb' + - 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb' + - 'spec/lib/gitlab/background_migration/legacy_uploads_migrator_spec.rb' + - 'spec/lib/gitlab/background_migration/link_lfs_objects_projects_spec.rb' + - 'spec/lib/gitlab/background_migration/migrate_issue_trackers_sensitive_data_spec.rb' + - 'spec/lib/gitlab/background_migration/migrate_stage_index_spec.rb' + - 'spec/lib/gitlab/background_migration/migrate_users_bio_to_user_details_spec.rb' + - 'spec/lib/gitlab/background_migration/populate_canonical_emails_spec.rb' + - 'spec/lib/gitlab/background_migration/populate_merge_request_assignees_table_spec.rb' + - 'spec/lib/gitlab/background_migration/populate_user_highest_roles_table_spec.rb' + - 'spec/lib/gitlab/background_migration/recalculate_project_authorizations_spec.rb' + - 'spec/lib/gitlab/background_migration/remove_restricted_todos_spec.rb' + - 'spec/lib/gitlab/background_migration/set_confidential_note_events_on_services_spec.rb' + - 'spec/lib/gitlab/background_migration/set_confidential_note_events_on_webhooks_spec.rb' + - 'spec/lib/gitlab/bitbucket_server_import/importer_spec.rb' + - 'spec/lib/gitlab/ci/ansi2json/style_spec.rb' + - 'spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb' + - 'spec/lib/gitlab/cycle_analytics/events_spec.rb' + - 'spec/lib/gitlab/database/custom_structure_spec.rb' + - 'spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb' + - 'spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb' + - 'spec/lib/gitlab/git/remote_mirror_spec.rb' + - 'spec/lib/gitlab/git_access_spec.rb' + - 'spec/lib/gitlab/gitaly_client/repository_service_spec.rb' + - 'spec/lib/gitlab/import_export/avatar_saver_spec.rb' + - 'spec/lib/gitlab/import_export/design_repo_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb' + - 'spec/lib/gitlab/import_export/fork_spec.rb' + - 'spec/lib/gitlab/import_export/group/legacy_tree_saver_spec.rb' + - 'spec/lib/gitlab/import_export/importer_spec.rb' + - 'spec/lib/gitlab/import_export/lfs_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/lfs_saver_spec.rb' + - 'spec/lib/gitlab/import_export/members_mapper_spec.rb' + - 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/project/tree_saver_spec.rb' + - 'spec/lib/gitlab/import_export/repo_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/saver_spec.rb' + - 'spec/lib/gitlab/import_export/snippet_repo_saver_spec.rb' + - 'spec/lib/gitlab/import_export/snippets_repo_restorer_spec.rb' + - 'spec/lib/gitlab/import_export/snippets_repo_saver_spec.rb' + - 'spec/lib/gitlab/import_export/uploads_manager_spec.rb' + - 'spec/lib/gitlab/import_export/uploads_saver_spec.rb' + - 'spec/lib/gitlab/import_export/wiki_restorer_spec.rb' + - 'spec/lib/gitlab/lets_encrypt/client_spec.rb' + - 'spec/lib/gitlab/markdown_cache/active_record/extension_spec.rb' + - 'spec/lib/gitlab/markdown_cache/redis/store_spec.rb' + - 'spec/lib/gitlab/shard_health_cache_spec.rb' + - 'spec/mailers/notify_spec.rb' + - 'spec/migrations/20200122123016_backfill_project_settings_spec.rb' + - 'spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb' + - 'spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb' + - 'spec/migrations/20200406102120_backfill_deployment_clusters_from_deployments_spec.rb' + - 'spec/migrations/add_unique_constraint_to_approvals_user_id_and_merge_request_id_spec.rb' + - 'spec/migrations/backfill_and_add_not_null_constraint_to_released_at_column_on_releases_table_spec.rb' + - 'spec/migrations/backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps_spec.rb' + - 'spec/migrations/encrypt_plaintext_attributes_on_application_settings_spec.rb' + - 'spec/migrations/fill_file_store_lfs_objects_spec.rb' + - 'spec/migrations/fill_store_uploads_spec.rb' + - 'spec/migrations/fix_null_type_labels_spec.rb' + - 'spec/migrations/fix_pool_repository_source_project_id_spec.rb' + - 'spec/migrations/fix_wrong_pages_access_level_spec.rb' + - 'spec/migrations/insert_project_hooks_plan_limits_spec.rb' + - 'spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb' + - 'spec/migrations/schedule_link_lfs_objects_projects_spec.rb' + - 'spec/models/appearance_spec.rb' + - 'spec/models/application_setting_spec.rb' + - 'spec/models/ci/build_spec.rb' + - 'spec/models/ci/instance_variable_spec.rb' + - 'spec/models/ci/pipeline_spec.rb' + - 'spec/models/ci/runner_spec.rb' + - 'spec/models/clusters/applications/helm_spec.rb' + - 'spec/models/concerns/avatarable_spec.rb' + - 'spec/models/concerns/bulk_insertable_associations_spec.rb' + - 'spec/models/concerns/cache_markdown_field_spec.rb' + - 'spec/models/concerns/featurable_spec.rb' + - 'spec/models/concerns/issuable_spec.rb' + - 'spec/models/concerns/mentionable_spec.rb' + - 'spec/models/concerns/milestoneable_spec.rb' + - 'spec/models/concerns/routable_spec.rb' + - 'spec/models/concerns/subscribable_spec.rb' + - 'spec/models/concerns/token_authenticatable_spec.rb' + - 'spec/models/container_repository_spec.rb' + - 'spec/models/cycle_analytics/issue_spec.rb' + - 'spec/models/cycle_analytics/plan_spec.rb' + - 'spec/models/deploy_keys_project_spec.rb' + - 'spec/models/deploy_token_spec.rb' + - 'spec/models/deployment_spec.rb' + - 'spec/models/design_management/version_spec.rb' + - 'spec/models/diff_note_spec.rb' + - 'spec/models/email_spec.rb' + - 'spec/models/environment_spec.rb' + - 'spec/models/event_spec.rb' + - 'spec/models/fork_network_spec.rb' + - 'spec/models/generic_commit_status_spec.rb' + - 'spec/models/grafana_integration_spec.rb' + - 'spec/models/group_spec.rb' + - 'spec/models/hooks/system_hook_spec.rb' + - 'spec/models/hooks/web_hook_spec.rb' + - 'spec/models/identity_spec.rb' + - 'spec/models/issue_spec.rb' + - 'spec/models/key_spec.rb' + - 'spec/models/lfs_objects_project_spec.rb' + - 'spec/models/member_spec.rb' + - 'spec/models/members/group_member_spec.rb' + - 'spec/models/members/project_member_spec.rb' + - 'spec/models/merge_request_spec.rb' + - 'spec/models/milestone_spec.rb' + - 'spec/models/namespace_spec.rb' + - 'spec/models/note_spec.rb' + - 'spec/models/notification_setting_spec.rb' + - 'spec/models/pages_domain_spec.rb' + - 'spec/models/project_services/bamboo_service_spec.rb' + - 'spec/models/project_services/jira_service_spec.rb' + - 'spec/models/project_services/pipelines_email_service_spec.rb' + - 'spec/models/project_services/teamcity_service_spec.rb' + - 'spec/models/project_spec.rb' + - 'spec/models/project_team_spec.rb' + - 'spec/models/release_spec.rb' + - 'spec/models/remote_mirror_spec.rb' + - 'spec/models/resource_milestone_event_spec.rb' + - 'spec/models/route_spec.rb' + - 'spec/models/sentry_issue_spec.rb' + - 'spec/models/service_spec.rb' + - 'spec/models/snippet_spec.rb' + - 'spec/models/upload_spec.rb' + - 'spec/models/user_preference_spec.rb' + - 'spec/models/user_spec.rb' + - 'spec/models/wiki_page/meta_spec.rb' + - 'spec/models/wiki_page_spec.rb' + - 'spec/policies/ci/build_policy_spec.rb' + - 'spec/policies/ci/pipeline_policy_spec.rb' + - 'spec/policies/ci/pipeline_schedule_policy_spec.rb' + - 'spec/policies/merge_request_policy_spec.rb' + - 'spec/policies/project_policy_spec.rb' + - 'spec/requests/api/boards_spec.rb' + - 'spec/requests/api/deployments_spec.rb' + - 'spec/requests/api/environments_spec.rb' + - 'spec/requests/api/graphql/mutations/merge_requests/set_labels_spec.rb' + - 'spec/requests/api/graphql/user_query_spec.rb' + - 'spec/requests/api/graphql_spec.rb' + - 'spec/requests/api/group_milestones_spec.rb' + - 'spec/requests/api/internal/base_spec.rb' + - 'spec/requests/api/issues/get_group_issues_spec.rb' + - 'spec/requests/api/jobs_spec.rb' + - 'spec/requests/api/labels_spec.rb' + - 'spec/requests/api/members_spec.rb' + - 'spec/requests/api/merge_request_diffs_spec.rb' + - 'spec/requests/api/merge_requests_spec.rb' + - 'spec/requests/api/pipeline_schedules_spec.rb' + - 'spec/requests/api/project_import_spec.rb' + - 'spec/requests/api/projects_spec.rb' + - 'spec/requests/api/runners_spec.rb' + - 'spec/requests/api/snippets_spec.rb' + - 'spec/requests/git_http_spec.rb' + - 'spec/requests/profiles/notifications_controller_spec.rb' + - 'spec/requests/projects/cycle_analytics_events_spec.rb' + - 'spec/serializers/environment_status_entity_spec.rb' + - 'spec/serializers/merge_request_poll_widget_entity_spec.rb' + - 'spec/serializers/merge_request_widget_entity_spec.rb' + - 'spec/services/ci/create_pipeline_service_spec.rb' + - 'spec/services/ci/register_job_service_spec.rb' + - 'spec/services/ci/retry_build_service_spec.rb' + - 'spec/services/deployments/after_create_service_spec.rb' + - 'spec/services/design_management/generate_image_versions_service_spec.rb' + - 'spec/services/draft_notes/destroy_service_spec.rb' + - 'spec/services/emails/confirm_service_spec.rb' + - 'spec/services/groups/destroy_service_spec.rb' + - 'spec/services/groups/import_export/import_service_spec.rb' + - 'spec/services/issuable/clone/attributes_rewriter_spec.rb' + - 'spec/services/issuable/common_system_notes_service_spec.rb' + - 'spec/services/issues/close_service_spec.rb' + - 'spec/services/issues/create_service_spec.rb' + - 'spec/services/issues/export_csv_service_spec.rb' + - 'spec/services/issues/reopen_service_spec.rb' + - 'spec/services/issues/update_service_spec.rb' + - 'spec/services/labels/promote_service_spec.rb' + - 'spec/services/members/destroy_service_spec.rb' + - 'spec/services/merge_requests/conflicts/list_service_spec.rb' + - 'spec/services/merge_requests/create_service_spec.rb' + - 'spec/services/merge_requests/merge_service_spec.rb' + - 'spec/services/merge_requests/post_merge_service_spec.rb' + - 'spec/services/merge_requests/refresh_service_spec.rb' + - 'spec/services/merge_requests/update_service_spec.rb' + - 'spec/services/milestones/destroy_service_spec.rb' + - 'spec/services/milestones/promote_service_spec.rb' + - 'spec/services/milestones/transfer_service_spec.rb' + - 'spec/services/notification_recipients/build_service_spec.rb' + - 'spec/services/notification_service_spec.rb' + - 'spec/services/projects/after_rename_service_spec.rb' + - 'spec/services/projects/create_service_spec.rb' + - 'spec/services/projects/fork_service_spec.rb' + - 'spec/services/projects/move_access_service_spec.rb' + - 'spec/services/projects/move_project_group_links_service_spec.rb' + - 'spec/services/projects/overwrite_project_service_spec.rb' + - 'spec/services/projects/propagate_service_template_spec.rb' + - 'spec/services/projects/unlink_fork_service_spec.rb' + - 'spec/services/projects/update_pages_service_spec.rb' + - 'spec/services/projects/update_service_spec.rb' + - 'spec/services/quick_actions/interpret_service_spec.rb' + - 'spec/services/system_hooks_service_spec.rb' + - 'spec/services/system_note_service_spec.rb' + - 'spec/services/system_notes/issuables_service_spec.rb' + - 'spec/services/todo_service_spec.rb' + - 'spec/services/todos/destroy/confidential_issue_service_spec.rb' + - 'spec/services/users/destroy_service_spec.rb' + - 'spec/services/users/repair_ldap_blocked_service_spec.rb' + - 'spec/support/helpers/cycle_analytics_helpers.rb' + - 'spec/support/helpers/jira_service_helper.rb' + - 'spec/support/helpers/login_helpers.rb' + - 'spec/support/helpers/notification_helpers.rb' + - 'spec/support/helpers/stub_action_cable_connection.rb' + - 'spec/support/helpers/stub_object_storage.rb' + - 'spec/support/migrations_helpers/cluster_helpers.rb' + - 'spec/support/migrations_helpers/track_untracked_uploads_helpers.rb' + - 'spec/support/shared_contexts/finders/group_projects_finder_shared_contexts.rb' + - 'spec/support/shared_contexts/mailers/notify_shared_context.rb' + - 'spec/support/shared_examples/controllers/githubish_import_controller_shared_examples.rb' + - 'spec/support/shared_examples/controllers/sessionless_auth_controller_shared_examples.rb' + - 'spec/support/shared_examples/features/editable_merge_request_shared_examples.rb' + - 'spec/support/shared_examples/lib/gitlab/ci/ci_trace_shared_examples.rb' + - 'spec/support/shared_examples/models/diff_note_after_commit_shared_examples.rb' + - 'spec/support/shared_examples/models/member_shared_examples.rb' + - 'spec/support/shared_examples/models/members_notifications_shared_example.rb' + - 'spec/support/shared_examples/models/mentionable_shared_examples.rb' + - 'spec/support/shared_examples/models/relative_positioning_shared_examples.rb' + - 'spec/support/shared_examples/models/slack_mattermost_notifications_shared_examples.rb' + - 'spec/support/shared_examples/models/update_project_statistics_shared_examples.rb' + - 'spec/support/shared_examples/models/with_uploads_shared_examples.rb' + - 'spec/support/shared_examples/quick_actions/issuable/issuable_quick_actions_shared_examples.rb' + - 'spec/support/shared_examples/quick_actions/merge_request/merge_quick_action_shared_examples.rb' + - 'spec/support/shared_examples/requests/api/boards_shared_examples.rb' + - 'spec/support/shared_examples/services/common_system_notes_shared_examples.rb' + - 'spec/support/shared_examples/services/issuable_shared_examples.rb' + - 'spec/tasks/gitlab/web_hook_rake_spec.rb' + - 'spec/views/projects/imports/new.html.haml_spec.rb' + - 'spec/views/projects/merge_requests/show.html.haml_spec.rb' + - 'spec/views/shared/_label_row.html.haml_spec.rb' + - 'spec/workers/migrate_external_diffs_worker_spec.rb' + - 'spec/workers/namespaceless_project_destroy_worker_spec.rb' + - 'spec/workers/pages_domain_verification_worker_spec.rb' + - 'spec/workers/propagate_service_template_worker_spec.rb' + - 'spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb' + - 'spec/workers/repository_cleanup_worker_spec.rb' + - 'spec/workers/repository_import_worker_spec.rb' + - 'spec/workers/repository_update_remote_mirror_worker_spec.rb' diff --git a/.ruby-version b/.ruby-version index 57cf282ebb..338a5b5d8f 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.6.5 +2.6.6 diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md index 93ea5184a7..1fe9715d33 100644 --- a/CHANGELOG-EE.md +++ b/CHANGELOG-EE.md @@ -1,8 +1,11 @@ Please view this file on the master branch, on stable branches it's out of date. -## 13.0.5 (2020-06-04) +## 13.0.6 (2020-06-10) + +### Security (1 change) + +- Do not set fallback mirror user. -- No changes. ## 13.0.4 (2020-06-03) @@ -12,10 +15,6 @@ Please view this file on the master branch, on stable branches it's out of date. - No changes. -## 13.0.2 (2020-05-28) - -- No changes. - ## 13.0.1 (2020-05-27) ### Security (3 changes) @@ -351,6 +350,33 @@ Please view this file on the master branch, on stable branches it's out of date. - Translate unauthenticated user string for Audit Event. !31856 (Sashi Kumar) +## 12.10.11 (2020-06-10) + +### Security (1 change) + +- Do not set fallback mirror user. + + +## 12.10.8 (2020-05-28) + +### Fixed (1 change) + +- Geo: Fix empty synchronisation status when nothing is synchronised. !30710 + + +## 12.10.7 (2020-05-27) + +### Security (3 changes) + +- Change the mirror user along with pull mirror settings. +- Allow only users with a verified email to be member of a group when the group has restricted membership based on email domain. +- Do not auto-confirm email in Trial registration. + + +## 12.10.6 (2020-05-15) + +- No changes. + ## 12.10.5 (2020-05-13) ### Fixed (1 change) @@ -421,6 +447,22 @@ Please view this file on the master branch, on stable branches it's out of date. - Add health status counts to usage data. !28964 +## 12.9.10 (2020-06-10) + +### Security (1 change) + +- Do not set fallback mirror user. + + +## 12.9.8 (2020-05-27) + +### Security (3 changes) + +- Change the mirror user along with pull mirror settings. +- Allow only users with a verified email to be member of a group when the group has restricted membership based on email domain. +- Do not auto-confirm email in Trial registration. + + ## 12.9.6 (2020-05-05) - No changes. diff --git a/CHANGELOG.md b/CHANGELOG.md index a10f9b9284..196f184f92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,24 +2,498 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 13.1.0 (2020-06-22) + +### Removed (4 changes, 2 of them are from the community) + +- Remove deprecated dashboard & group milestone pages. !13237 +- Removed UltraAuth integration for OmniAuth. !29330 (Kartikey Tanna) +- Remove all search autocomplete for groups/projects/other. !31187 +- Remove temporary datepicker position fix as it is no longer required. !31836 (Arun Kumar Mohan) + +### Fixed (154 changes, 57 of them are from the community) + +- Fix 'Active' checkbox text in Pipeline Schedule form to be a label. !27054 (Jonston Chan) +- Fix back button when switching MR tabs. !29862 (Lee Tickett) +- Remove ability to scroll Issue while in Design View. !29881 +- Fix merge request note label URLs. !30428 (Lee Tickett) +- Fix default path when creating project from group template. !30597 (Lee Tickett) +- Group authorization refresh to consider shared groups. !31204 +- Fix group transfer service to deny moving group to its subgroup. !31495 (Abhisek Datta) +- Fix issuable listings with any label filter. !31729 +- Move prepend to last in ee-app-services. !31838 (Rajendra Kadam) +- Fallback to lowest visibility level in snippet visibility radio. !31847 (Jacopo Beschi @jacopo-beschi) +- Add class stubs and fix leaky constant alert in query limit helper spec. !31949 (Rajendra Kadam) +- Remove usage of spam constants in spec. !31959 (Rajendra Kadam) +- Fix leaky constant issue in uninstall progress service check. !32036 (Rajendra Kadam) +- Fix leaky constant issue in commit entity spec. !32039 (Rajendra Kadam) +- Fix leaky constant issue in task completion status spec. !32043 (Rajendra Kadam) +- Fix leaky constant issue in admin mode migration spec. !32074 (Rajendra Kadam) +- Fix leaky constant issue in sidekiq middleware server metric spec. !32104 (Rajendra Kadam) +- Fix leaky constant issue in sidekiq middleware client metric spec. !32108 (Rajendra Kadam) +- Fix leaky constant issue in path regex spec. !32115 (Rajendra Kadam) +- Fix leaky constant issue importer and cache headers spec. !32122 (Rajendra Kadam) +- Fix leaky constant issue in relation factory spec. !32129 (Rajendra Kadam) +- Fix leaky constant issue in test coverage spec. !32134 (Rajendra Kadam) +- Prevent emails to user on expiry of impersonation token. !32140 +- Fix leaky constant issue in diff collection spec. !32163 (Rajendra Kadam) +- Fix leaky constant issue in migration helpers, with lock retries and ignored cols spec. !32170 (Rajendra Kadam) +- Fix leaky constant issue in factory spec. !32174 (Rajendra Kadam) +- Fix leaky constant issue in creds factory spec. !32176 (Rajendra Kadam) +- Use applogger in project import state file. !32182 (Rajendra Kadam) +- Use applogger in project.rb. !32183 (Rajendra Kadam) +- Use applogger in chat_team.rb. !32184 (Rajendra Kadam) +- Use applogger in repository model. !32185 (Rajendra Kadam) +- Use applogger in build and ssh host key. !32187 (Rajendra Kadam) +- Use applogger in cache attrs and highest role ruby files. !32189 (Rajendra Kadam) +- Use applogger in legacy project and namespace. !32190 (Rajendra Kadam) +- Use applogger in base.rb. !32191 (Rajendra Kadam) +- Use applogger in usage ping and webhook service. !32192 (Rajendra Kadam) +- Use applogger in exclusive_lease_guard. !32194 (Rajendra Kadam) +- Use applogger in groups destroy service and label create service. !32195 (Rajendra Kadam) +- Use applogger in merge_service.rb. !32196 (Rajendra Kadam) +- Use applogger in project create service and after import service. !32198 (Rajendra Kadam) +- Use applogger in update stats service. !32200 (Rajendra Kadam) +- Use applogger in base attachment service. !32201 (Rajendra Kadam) +- Use applogger in export service. !32203 (Rajendra Kadam) +- Use applogger in akismet service. !32205 (Rajendra Kadam) +- Use applogger in file mover file. !32206 (Rajendra Kadam) +- Use applogger in commit signature worker. !32207 (Rajendra Kadam) +- Use applogger in delete user worker. !32209 (Rajendra Kadam) +- Use applogger in email receiver worker. !32211 (Rajendra Kadam) +- Use applogger in artifact worker. !32212 (Rajendra Kadam) +- Use applogger in new note worker. !32213 (Rajendra Kadam) +- Fix duplicate filename displayed in design todos. !32274 (Arun Kumar Mohan) +- Add value length validations for instance level variable. !32303 +- Resolve image overflow at releases list panel. !32307 +- Clean up shared/tmp folder after Import/Export. !32326 +- Fix creating release evidence if release is created via UI. !32441 +- GraphQL hasNextPage and hasPreviousPage return correct values. !32476 +- Fix loading and empty state styling for alerts list. !32531 +- Resolve incorrect x-axis padding on the Environments Dashboard. !32533 +- Fix time_tracking help link. !32552 +- Don't display confidential note icon on confidential issue public notes. !32571 +- Update container expiration policy database defaults. !32600 +- Fix rendering of emojis in status tooltips. !32604 +- Hid copy contents button when blob has rendering error. !32632 +- Avoid refresh to show endedAt after mutation. !32636 +- Fix for metrics creation when saving MR. !32668 +- Skip the individual JIRA issues if failed to import vs failing the whole batch. !32673 +- Hide "Import from Jira" option from non-entitled users. !32685 +- Fix broken help link on operations settings page. !32722 +- Allow different in bulk editing issues. !32734 +- Fix whitespace changes overgrowing the diff container. !32774 +- Improve spacing and wrapping of group actions buttons and stats in group list view. !32786 +- Fix "Broadcast Messages" table overflow and button alignment. !32801 +- Fix 404 when downloading a non-archive artifact. !32811 +- Make commits author button confirm to Pajamas specs. !32821 +- Fix filename duplication in design notes in activity feeds. !32823 (Arun Kumar Mohan) +- Prevent multiple Auto DevOps deployment jobs running concurrently when using manual rollout. !32824 +- Implement displaying downstream pipeline error details. !32844 +- Fix Runner heartbeats that results in considering them offline. !32851 +- Conan package registry support for the conan_export.tgz file. !32866 +- Fix plural message in account deletion section. !32868 +- Fix atomic processing bumping a lock_version. !32914 +- AsciiDoc: Add support for built-in alignment roles. !32928 (mnrvwl) +- Fix a bug where some Vue apps would be unable to load when DAG tab is disabled. !32966 +- Fix undefined error in Gitlab::Git::Diff. !32967 +- Fix spelling error on Ci::RunnersFinder. !32985 (Arthur de Lapertosa Lisboa) +- Fix polling for resource events. !33025 +- Fix broken CSS classes inside alert management list. !33038 +- Fix bug in snippet create mutation with non ActiveRecord errors. !33085 +- Fix overflow issue in MR and Issue comments. !33100 +- Fix alignment of button text on the Edit Release page. !33104 +- Deduplicate URL parameters when requesting merge request diffs which causes diffs load to fail. !33117 +- Fix tabbing through form fields in projects/new flow. !33209 +- Fix incorrect commit search results returned when searching with ref. !33216 +- Fix NoMethodError by using the correct method to report exceptions to Sentry. !33260 +- Fix KaTeX font paths. !33338 +- Resolve Fix Incomplete Kubernetes Cluster Status List. !33344 +- Fix auto-merge not running after discussions resolved. !33371 +- Fix bug in snippets updating only file_name or content. !33375 +- Fix invisible emoji modal on Set Status form when clicked the second time. !33398 +- vertically center action icon in the CI pipeline. !33427 (Nathanael Weber) +- Wrap auto merge parameters update in database transaction. !33471 +- Return 404 response when redirecting request with invalid url. !33492 +- Fix ambiguous string concatenation on CleanupProjectsWithMissingNamespace. !33497 +- Fix snippet repository import edge cases. !33506 +- Rust CI template: Replace --all with --workspace on cargo test. !33517 (Markus Becker) +- Make markdown textarea links tab-accessible. !33518 +- Pass hard delete option to snippets bulk destroy. !33520 +- Fix CI rules for ECS related jobs. !33527 +- Update GitLab Workhorse to v8.34.0. !33543 +- Fix snippet repository import fail with older export files. !33584 +- Web IDE: Create template files in the folder from which new file request was made. !33585 (Ashesh Vidyut) +- Improve header acccessibility. !33603 +- Remove non migrated snippets from failed imports. !33621 +- Prevent duplicate issues when importing from CSV. !33626 +- Fix sidebar spacing for alert details. !33630 +- Fix linking alerts to created issues for the Generic alerts intergration. !33647 +- Resolve spacing ux debt on Release assets form field. !33684 +- Fix pagination link header. !33714 (Max Wittig) +- Fix Value Stream Analytics summary when using non-english locale. !33717 +- Fix bug with variable substitution in alerts. !33772 +- Allow wiki pages with +<> characters in their title to be saved. !33803 +- Fix force_remove_source_branch not working in API. !33804 +- Fix prometheus alerts not being automatically created. !33806 +- Fix pagination for resource label events. !33821 +- Fix relative URL root in wiki_base_path. !33841 +- Return code navigation path for nil diff_refs. !33850 +- Record audit event when an admin creates a new SSH Key for a user via the API. !33859 (Rajendra Kadam) +- Do not create duplicate issues for exising Alert Management alerts. !33860 +- Add link text to collapsed left sidebar links for screen readers. !33866 +- Update text in error tracking list error message. !33872 +- Adjust wrong column reference for ResetMergeStatus (background job). !33899 +- Fixed dashboard YAML file validaiton for files which do not contain object as root element. !33935 +- Fix design note scrolling. !33939 +- Update validates_hostname gem with support for more TLDs. !34010 +- Update wording of addMultipleToDiscussionWarning. !34088 +- Show all storages in settings. !34093 +- Set author as nullable in snippet GraphQL Type. !34135 +- Fix rendering of very long paths in merge request file tree. !34153 +- Remove not null constraint from events tables. !34190 +- Ensure we always generate a valid wiki event URL. !34191 +- Send information about attached files to the GraphQL mutation. !34221 +- Update issue limits template to use minutes. !34254 +- Add route for the lost-and-found group and update the route of orphaned projects. !34285 +- GraphQL - properly handle pagination of millisecond-precision timestamps. !34352 +- Fix 500 error in BlobController#delete. !34367 +- Updated Auto DevOps with a fix to delete PostgreSQL PVC on environment cleanup, a fix for multiline K8S_SECRET variables, updated Helm to 2.16.7 and glibc to 2.31. !34399 (verenion) +- Fix issues with scroll on iOS / iPad OS. !34486 +- Fix order of integrations to be sorted alphabetically. !34501 +- Fix undefined method error. !34522 +- Use Keys::DestroyService for deleting an SSH key when an admin deletes a key via the API. !34535 (Rajendra Kadam) +- Removed default artifact name for Terraform template. !34557 +- Footer system message fix. +- Set experiementation cookie for GitLab domain only. +- Add DS detection of build.gradle.kts. + +### Changed (76 changes, 5 of them are from the community) + +- Add a GraphQL endpoint to fetch Jira projects through its REST API. !28190 +- Change legends in monitor dashboards to tabular layout. !30131 +- Move pipelines routing under /-/ scope. !30730 +- Set markdown toolbar to use hyphens for lists. !31426 +- Use sprites for comment icons on Commits. !31696 +- Rate limit project export by user. !31719 +- Reorder diffs compare versions dropdowns. !31770 (Gilang Gumilar) +- Enable the `in this group` action in the Search dropdown. !31939 +- Externalize i18n strings from ./app/views/shared/_promo.html.haml. !32109 (Gilang Gumilar) +- Add Usage Ping count for all searches. !32111 +- Add tags_count to container registry api and controller. !32141 +- Externalize i18n strings from ./app/views/shared/milestones/_sidebar.html.haml. !32150 (Gilang Gumilar) +- Externalize i18n strings from ./app/views/shared/milestones/_form_dates.html.haml. !32162 (Gilang Gumilar) +- Improve Container Registry UI header. !32424 +- Added node size to cluster index. !32435 +- Update operations metrics settings title and description to make them general. !32494 +- Track merge_requests_users usage data. !32562 +- Adds cluster CPU and Memory to cluster index. !32601 +- Allow the snippet create service to accept an array of files. !32649 +- Move review related controllers/workers outside EE. !32663 +- Move the Members section from settings to the side nav for projects. !32667 +- Show more context in unresolved jump button. !32737 +- Exclude extra.server fields from exceptions_json.log. !32770 +- Improve new/unknown sign-in email styling. !32808 +- Allow the snippet update service to accept an array of files. !32832 +- Add new issue link to email notification header. !32833 +- Bump cluster-applications to 0.17.0, which updates Runner to 0.17.0 and Cilium to 1.7.4. !32931 +- Update artifacts section to show when an artifact is locked. !32992 +- Include tag count in the image repository list. !33027 +- Clean up gitlab-shell install-from-source path. !33057 +- Increase LFS token default time to 2 hours. !33140 +- Add explicit mention of Merge request in Slack message. !33152 +- Expose `release_links.type` via API. !33154 +- Add link_type column to release_links table. !33156 +- Move broadcast notification dismiss button to the top. !33174 +- Remove null constraint for JID in GroupImportState. !33181 +- Added provider type icon to cluster list. !33196 +- Remove search icon from Project find file button. !33198 +- Refine SAST language detection by frameworks. !33226 +- Render Merge request reference as link. !33248 +- Upgrade to Gitaly v13.1.0-rc1. !33302 +- Show disabled suggestion button with tooltip message. !33357 +- Add update validations to SnippetInputAction. !33379 +- Add snippet DB visibility check in spec. !33388 (Jacopo Beschi @jacopo-beschi) +- Add Hugo logo to project templates. !33402 +- Add GitBook logo to project templates. !33403 +- Add GoMicro logo to project templates. !33404 +- Add Jekyll logo to project templates. !33405 +- Add Hexo logo to project templates. !33406 +- Rename Add Designs button. !33491 +- Add CPU, memory usage charts to self monitoring default dashboard. !33532 +- Add database migrations to design_management_designs.filename to enforce a 255 character limit, and modify any filenames that exceed that limit. !33565 +- Track Sentry error status updates with dedicated actions. !33623 +- Alert Managament: Change sorting order to have newest alerts first. !33642 +- Add blobs field to SnippetType in GraphQL. !33657 +- Format metrics column chart x axis dates. !33681 +- Style ToastUI contextual menus. !33719 +- Update Auto deploy image to v0.16.1, introducing support for AUTO_DEVOPS_DEPLOY_DEBUG. !33799 +- Add whether instance has Auto DevOps enabled to usage ping. !33811 +- Update local IP address and domain name allow list input label. !33812 +- Add date time format to the monitor stacked-column chart. !33814 +- Allow Tf Plan to genrate multiple reports. !33867 +- Remove async_merge_request_check_mergeability feature flag. !33917 +- Filter potentially-sensitive Sidekiq arguments from logs and Sentry. !33967 +- Update Static Site Editor toolbar to group inline-code and code-block buttons together. !34006 +- Set default values for SAST_EXCLUDED_PATHS and DS_EXCLUDED_PATHS. !34076 +- Add ability to filter self monitoring resource usage charts by instance name. !34084 +- Pick repository storage based on weight. !34095 +- Display error for YAML files that are too large. !34199 +- Change copy of webhooks / integration help text. !34301 +- Update board header icons. !34366 +- Show Redis instance in performance bar. !34377 +- Add secret detection template to Auto DevOps. !34467 +- Add allowed actions to snippet input action. !34499 +- Change from vendor specific to Gitlab. !34576 +- Assign alerts sidebar base. + +### Performance (19 changes, 1 of them is from the community) + +- Improve performance of commit search by limiting the number of results requested. !32260 +- Add GraphQL lookahead support. !32373 +- Update index_ci_builds_on_commit_id_and_artifacts_expireatandidpartial index for secret_detection. !32584 +- Add index on id and type for Snippets. !32885 +- Use build_stubbed to avoid interacting with the DB in todos helper specs. !32906 (Arun Kumar Mohan) +- Optimize SQL queries on Milestone index page. !32953 +- Add build report results data model. !32991 +- Adjust condition for partial indexes on services table. !33044 +- Add index to issues and epics on last_edited_by_id. !33075 +- Fix preconnect typo in rel link. !33255 +- Add project_id, user_id, status, ref index to ci_pipelines. !33290 +- Move migration related to ci_builds to post_deployment. !33416 +- Reduce redundant queries for Search API users scope. !33795 +- Speed up boot time in production. !33929 +- Harden CI pipelines usage data queries with an index. !34045 +- Add partial index on locked merge requets. !34127 +- Lazy load commit_date and authored_date on Commit. !34181 +- Optimize container repository for groups query. !34364 +- Enable CI Atomic Processing by default. + +### Added (149 changes, 14 of them are from the community) + +- Add rake task to verify encrypted data through secrets. !21851 +- User can apply multiple suggestions at the same time. !22439 (Jesse Hall) +- Resolve Add a button to assign users who have commented on an issue. !23883 +- Resolve Graph code coverage changes over time for a project. !26174 +- Add doc for custom validators in api styleguide. !26734 (Rajendra Kadam) +- Add Scheduled Job for Monitoring Monitor Group Demo Environments. !27360 +- Add setting to allow merge on skipped pipeline. !27490 (Mathieu Parent) +- Add dark theme (alpha). !28252 +- Show estimate on issues list. !28271 (Lee Tickett) +- Make Fixed Email Notification Generally Available. !28338 (jacopo-beschi) +- Add a link to the `renamed` viewer to fully expand the renamed file (if it's text). !28448 +- Focus and toggle metrics dashboard panels via keyboard. !28603 +- Remove `scoped_approval_rules` feature flag. !28864 (Lee Tickett) +- Create Group import UI for creating new Groups. !29271 +- Add finder for group-level runners. !29283 (Arthur de Lapertosa Lisboa) +- Allow customization of badge key_text and key_width. !29381 (Fabian Schneider @fabsrc) +- Support Workhorse directly uploading files to S3. !29389 +- Add frontend support for multiline comments. !29516 +- Support first_name and last_name attributes in LDAP user sync. !29542 +- Add link to status page detail view for status page published issues. !30249 +- Add metrics dashboard name to document title. !30392 +- Backfill StatusPage::Published incidents and enable a publish quick action for EE. !30906 +- Add missing Merge Request fields. !30935 +- Show build status on branch list. !30948 (Lee Tickett) +- Add mutation to create commits in GraphQL. !31102 +- Add GraphQL support for authored and assigned Merge Requests. !31227 +- Add usage data metrics for terraform states. !31280 +- Add usage data metrics for terraform reports. !31281 +- Add API endpoint for listing bridge jobs. !31370 (Abhijith Sivarajan) +- SpamVerdictService can call external spam check endpoint. !31449 +- Move Admin note feature to GitLab Core. !31457 (Rajendra) +- Add DAG serializer for pipelines controller. !31583 +- Save repository storages in application settings with weights. !31645 +- Add API endpoint for resource milestone events. !31720 +- Show import in progress screen for group imports. !31731 +- Add Verify/FailFast CI template. !31812 +- Improve Add/Remove Issue Labels API. !31864 (Lee Tickett) +- Add mutation to create a merge request in GraphQL. !31867 +- Add warning popup for Elastic Stack update. !31972 +- Add API support for sharing groups with groups. !32008 +- Add the container expiration policy attribute to the project GraphQL type. !32100 +- Add GraphQL support for project and group labels. !32113 +- Add number of database calls to Prometheus metrics and logs for sidekiq and request. !32131 +- Filter pipelines by status. !32151 +- Filter pipelines based on url query params. !32230 +- Add metrics for Redis usage during Sidekiq job execution. !32265 +- Add filters to merge request fields. !32328 +- Support reading .editorconfig files inside of the Web IDE. !32378 +- [Frontend] Resolvable design discussions. !32399 +- Table index added to `metrics_dashboard_annotations` for future pruning of stale metrics Annotations for metrics dashboards are now checked for valid start and end dates. !32433 +- Enable GitLab-Flavored Markdown processing for design links. !32446 +- Filter Pipelines by Tag Name. !32470 +- Adds sorting by column to alert management list. !32478 +- Add project specific repository storage API. !32493 +- Adapt Limitable for system-wide features. !32574 +- Add application limits to instance level CI/CD variables. !32575 +- Add model for project level security auto-fix settings. !32577 +- Expose Jira imported issues count in GraphQL. !32580 +- Organize alerts by status tabs. !32582 +- Add note to ECS CI template. !32597 +- Add metrics for Redis usage during web requests. !32605 +- Add database and GraphQL support for alert assignees. !32609 +- Set fingerprints and increment events count for Alert Management alerts. !32613 +- Process stuck jira import jobs. !32643 +- Allow user to add custom links to their metrics dashboard panels. !32646 +- Add tags to experimental queue selector attributes. !32651 +- Allow generic endpoint to receive alerts from external Prometheus. !32676 +- Customize the Cloud Native Buildpack builder used with Auto Build. !32691 +- Add timezone display to alert based issue start time. !32702 +- Display dates on metrics dashboards in UTC time zone. !32746 +- Store Todo resolution method. !32753 +- Add experience_level to user_preferences. !32784 +- Remove metrics dashboard annotations attached to time periods older than two weeks. !32838 +- Monitor:Health metrics instrumenation. !32846 +- Adds PostHog as a CI/CD Managed Application. !32856 +- Groups API has top_level_only option to exclude subgroups. !32870 +- Create operations_feature_flags_issues table. !32876 +- Add api.js methods to update issues and merge requests. !32893 +- Render user-defined links in dashboard yml file on metrics dashboard. !32895 +- Add accessibility report MR widget. !32902 +- Add a GraphQL mutation for toggling the resolved state of a Discussion. !32934 +- Add container expiration policy objects to the GraphQL API. !32944 +- Don't hide Commit tab in Web IDE when there are no changes yet. !32979 +- Add column for alert slack notifications. !33017 +- Add ability to insert an image via SSE. !33029 +- Add user root query to GraphQL API. !33041 +- Adds groupMembership and projectMembership to GraphQL API. !33049 +- Alerts list pagination. !33073 +- Add ApplicationSetting ui changes for repository_storages_weighted. !33096 +- Display confirmation modal when user exits SSE and there are unsaved changes. !33103 +- Add column dashboard_timezone to project_metrics_setting. !33120 +- Allow the assignment of alerts to users from the alert detail view. !33122 +- Add solarized dark for Web IDE. !33148 +- Add support for artifacts/exclude configuration. !33170 +- Add root users query to GraphQL API. !33195 +- Added validation for YAML files with metrics dashboard definitions. !33202 +- Create issue from alert. !33213 +- Add max import file size option. !33215 (Roger Meier) +- Add system note when assigning user to alert. !33217 +- Add count of alerts from all sources to usage ping. !33220 +- Add button to create an issue from an alert management alert. !33221 +- Add more detail to alert integration settings description. !33244 +- Add Evidence to Releases GraphQL endpoint. !33254 +- Add support for pasting images in the Web IDE. !33256 +- Add ProjectAccessToken table. !33272 +- Automatically resolve alert when associated issue closes. !33278 +- Add `link_type` to `ReleaseLink` GraphQL type. !33386 +- Add members to project graphQL endpoint. !33418 +- Update Static Site Editor WYSIWYG mode to hide front matter. !33441 +- Added delete action for Dashboard Annotations in GraphQL. !33468 +- Create graphQL endpoint for Jira users import. !33501 +- Support IAP protected prometheus installations. !33508 +- New instance-level variables UI. !33510 +- Provide `__range` variable for Prometheus queries. !33521 +- Add support for `git filter-repo` to repository cleanup. !33576 +- Close open reply input fields in the design view sidebar when leaving a new comment. !33587 +- Add dashboard schema validation warnings as metrics dashboard GraphQL field. !33592 +- Add time range to user-defined links in metrics dashboard. !33663 +- Increase events count for Prometheus alerts. !33706 +- Track pod logs refresh action. !33802 +- Add secret detection template. !33869 +- Add DAG visualization MVC. !33958 +- Introduce a feature flag for Vue-based UI for all import providers. !33980 +- Add sticky title on Issue pages. !33983 +- Allow Release asset links to be associated with a type. !33998 +- Support user-defined Grafana links in metrics dashboard. !34003 +- Adds AWS guidance to CI/CD > Add Variable modal. !34009 +- Show custom attributes within Admin Pages. !34017 (Roger Meier) +- Enable Slack notifications for alerts. !34038 +- Container expiration policy regular expressions are now validated. !34063 +- Add todo when alert is assigned to a user. !34104 +- Track merge requests submitted by Static Site Editor. !34105 +- Turn off alert issue creation by default. !34107 +- Add detailed logs of each Redis instance usage during job execution and web requests. !34110 +- Add API to schedule project repository storage moves. !34119 +- Add validation step on backend for metrics dashboard links. !34204 +- Track when Static Site Editor is initialized. !34215 +- Bring SAST to Core - brakeman. !34217 +- Mask key comments when exposing SSH/Deploy Keys via the API. !34255 +- Convert `:release` yaml to `release-cli` commands. !34261 +- Validate regex before sending them to CleanupContainerRepositoryWorker. !34282 +- Add secret_detection to DOWNLOADABLE_TYPES. !34313 +- Enable ability to assign alerts to users with corresponding system notes and todos. !34360 +- Enable CI Inheriting Env Variables feature. !34495 +- Show tooltip on error detail page when hovering over dates. !34506 +- Add native code intelligence. !34542 +- Bump cluster-applications version to v0.20.0. !34569 +- Add search argument for AlertStatusCountsResolver. !34596 +- Allow CI_JOB_TOKEN for authenticating to the Terraform state API. !34618 + +### Other (65 changes, 36 of them are from the community) + +- Improve fast-forward merge is not possible message. !22834 (Ben Bodenmiller) +- Remove unused WAF indexes from CI variables. !30021 +- Update the visual design of badges in some areas. !31646 +- Extract featurable concern from ProjectFeature. !31700 (Alexander Randa) +- Remove update function logic from list model. !31900 (nuwe1) +- Remove nextpage function logic from list model. !31904 (nuwe1) +- Squash database migrations prior to 2019 into one. !31936 +- Update deprecated slot syntax in app/assets/javascripts/reports/components/grouped_test_reports_app.vue. !31975 (Gilang Gumilar) +- Replace slot syntax for Vue 3 migration. !31987 (gaslan) +- Update deprecated slot syntax in ./app/assets/javascripts/pages/admin/projects/index/components/delete_project_modal.vue. !31994 (Gilang Gumilar) +- Update deprecated slot syntax in ./app/assets/javascripts/pages/projects/labels/components/promote_label_modal.vue. !31995 (Gilang Gumilar) +- Update deprecated slot syntax in ./app/assets/javascripts/clusters/components/remove_cluster_confirmation.vue. !32010 (Gilang Gumilar) +- Update deprecated slot syntax in ./app/assets/javascripts/environments/components/environments_app.vue. !32011 (Gilang Gumilar) +- Remove setLoadingState logic from issue model. !32226 (nuwe1) +- Remove addAssignee logic from issue model. !32231 (nuwe1) +- Remove addLabel Logic from issue models. !32233 (nuwe1) +- Remove addMilestone logic from issue model. !32235 (nuwe1) +- Remove destroy function logic from list model. !32237 (nuwe1) +- Remove findAssignee logic from issue model. !32238 (nuwe1) +- Remove findLabel logic from issue model. !32239 (nuwe1) +- Remove findIssue logic from list model. !32241 (nuwe1) +- Remove moveIssue logic from list model. !32242 (nuwe1) +- Remove newIssue logic from list model. !32244 (nuwe1) +- Remove removeAllAssignees logic from issue model. !32247 (nuwe1) +- Remove removeAssignee logic from issue model. !32248 (nuwe1) +- Clarify verbiage for stuck job messages. !32250 +- Remove removeLabel logic from issue model. !32251 (nuwe1) +- Remove removeLabels logic from issue model. !32252 (nuwe1) +- Remove removeMilestone logic from issue model. !32253 (nuwe1) +- Remove removeMultipleIssues logic from list model. !32254 (nuwe1) +- Remove setFetchingState logic from issue model. !32255 (nuwe1) +- Remove updateData logic from issue model. !32256 (nuwe1) +- Update U2F docs for Firefox 67+. !32289 (Takuya Noguchi) +- Update alert management mobile table alignment. !32295 +- Include available instance memory in usage ping. !32315 +- Moves merge request reviews into Core. !32558 +- Update GitLab Runner Helm Chart to 0.17.0. !32634 +- Add snowplow tracking for logs page. !32704 +- Extend "Remember me" token after each login. !32730 +- Assign alerts sidebar container fix. !32743 +- Add anchor for creating a branch. !32745 +- Tidy. !32759 (Lee Tickett) +- Less verbose JiraService error logs. !32847 +- Reduced padding and increased emphasis of titles within the epic tree. !32873 +- Remove obsolete users.ghost column. !32957 +- Move NoPrimary table def to last context in spec. !33015 (Rajendra Kadam) +- Document github rate limit behavior. !33090 +- Added build_id column to requirements_management_test_reports table. !33184 +- Add version history information on U2F support. !33229 (Takuya Noguchi) +- Convert IP spoofing errors into client errors. !33280 +- Update docs to reflect move web IDE Terminal and file sync to Core. !33419 +- Add hovering icon for sorting columns on alert management list. !33429 +- Avoid javascript for omniauth logins. !33459 (Diego Louzán) +- Add opacity transition to active design discussion pins. !33493 +- Update GitLab Runner Helm Chart to 0.17.1. !33504 +- Make project selector in various dashboard more translatable. !33771 +- Update Workhorse to v8.35.0. !33817 +- Remove FF hide_token_from_runners_api. !33947 +- Bump omniauth_openid_connect to 0.3.5. !34030 (Roger Meier) +- Specify tiers for SAML SSO at self-hosted plans. !34040 (Takuya Noguchi) +- Backfill failed imported snippet repositories. !34052 +- Use GitLab SVG icon for file attacher action. !34196 +- Add GraphQL snippet FileInputType. !34442 +- Update red hex values to match GitLab UI. !34544 +- Remove removeIssue logic from list model. (nuwe1) + + ## 13.0.6 (2020-06-10) - No changes. -## 13.0.5 (2020-06-04) - -### Fixed (4 changes) - -- Fix NoMethodError by using the correct method to report exceptions to Sentry. !33260 -- Fix bug in snippets updating only file_name or content. !33375 -- Fix ambiguous string concatenation on CleanupProjectsWithMissingNamespace. !33497 -- Fix linking alerts to created issues for the Generic alerts intergration. !33647 - -### Other (1 change) - -- Update GitLab Workhorse to v8.31.2. !33818 - - ## 13.0.4 (2020-06-03) ### Security (1 change) @@ -41,10 +515,6 @@ entry. - Fix close issue when user created the issue. !33294 -## 13.0.2 (2020-05-28) - -- No changes. - ## 13.0.1 (2020-05-27) ### Security (12 changes) @@ -632,6 +1102,49 @@ entry. - Use visitUrl in Alert management. !32414 +## 12.10.11 (2020-06-10) + +- No changes. + +## 12.10.8 (2020-05-28) + +### Fixed (2 changes) + +- Fix Geo replication for design thumbnails. !32703 +- Fix 404s downloading build artifacts. !32741 + + +## 12.10.7 (2020-05-27) + +### Security (14 changes) + +- Add an extra validation to Static Site Editor payload. +- Hide EKS secret key in admin integrations settings. +- Added data integrity check before updating a deploy key. +- Display only verified emails on notifications and profile page. +- Disable caching on repo/blobs/[sha]/raw endpoint. +- Require confirmed email address for GitLab OAuth authentication. +- Kubernetes cluster details page no longer exposes Service Token. +- Fix confirming unverified emails with soft email confirmation flow enabled. +- Disallow user to control PUT request using mermaid markdown in issue description. +- Check forked project permissions before allowing fork. +- Limit memory footprint of a command that generates ZIP artifacts metadata. +- Fix file enuming using Group Import. +- Prevent XSS in the monitoring dashboard. +- Use `gsub` instead of the Ruby `%` operator to perform variable substitution in Prometheus proxy API. + + +## 12.10.6 (2020-05-15) + +### Fixed (5 changes) + +- Fix duplicate index removal on ci_pipelines.project_id. !31043 +- Fix 500 on creating an invalid domains and verification. !31190 +- Fix incorrect number of errors returned when querying sentry errors. !31252 +- Add instance column to services table if it's missing. !31631 +- Fix incorrect regex used in FileUploader#extract_dynamic_path. !32271 + + ## 12.10.5 (2020-05-13) ### Added (1 change) @@ -1121,6 +1634,29 @@ entry. - Remove store_mentions! in Snippets::CreateService. !29581 (Sashi Kumar) +## 12.9.10 (2020-06-10) + +- No changes. + +## 12.9.8 (2020-05-27) + +### Security (13 changes) + +- Hide EKS secret key in admin integrations settings. +- Added data integrity check before updating a deploy key. +- Display only verified emails on notifications and profile page. +- Disable caching on repo/blobs/[sha]/raw endpoint. +- Require confirmed email address for GitLab OAuth authentication. +- Kubernetes cluster details page no longer exposes Service Token. +- Fix confirming unverified emails with soft email confirmation flow enabled. +- Disallow user to control PUT request using mermaid markdown in issue description. +- Check forked project permissions before allowing fork. +- Limit memory footprint of a command that generates ZIP artifacts metadata. +- Fix file enuming using Group Import. +- Prevent XSS in the monitoring dashboard. +- Use `gsub` instead of the Ruby `%` operator to perform variable substitution in Prometheus proxy API. + + ## 12.9.6 (2020-05-05) ### Fixed (1 change) diff --git a/Dangerfile b/Dangerfile index 7879c14b31..cc6ebc27d4 100644 --- a/Dangerfile +++ b/Dangerfile @@ -7,8 +7,16 @@ danger.import_plugin('danger/plugins/helper.rb') danger.import_plugin('danger/plugins/roulette.rb') danger.import_plugin('danger/plugins/changelog.rb') -unless helper.release_automation? - GitlabDanger.new(helper.gitlab_helper).rule_names.each do |file| - danger.import_dangerfile(path: File.join('danger', file)) - end +return if helper.release_automation? + +gitlab_danger = GitlabDanger.new(helper.gitlab_helper) + +gitlab_danger.rule_names.each do |file| + danger.import_dangerfile(path: File.join('danger', file)) +end + +anything_to_post = status_report.values.any? { |data| data.any? } + +if gitlab_danger.ci? && anything_to_post + markdown("**If needed, you can retry the [`danger-review` job](#{ENV['CI_JOB_URL']}) that generated this comment.**") end diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 6fe535b5ba..9e6fba6c2c 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -13.0.6 +203182ffe94da165d4ff81332b1b3fff9771e631 diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION index 67aee23940..ac565bc1ca 100644 --- a/GITLAB_SHELL_VERSION +++ b/GITLAB_SHELL_VERSION @@ -1 +1 @@ -13.2.0 +13.3.0 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index 594580cb92..13afb01d49 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.31.2 +8.35.0 diff --git a/Gemfile b/Gemfile index 9c8c5e8b30..5477ee3d18 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gem 'rails', '~> 6.0.3' +gem 'rails', '~> 6.0.3.1' gem 'bootsnap', '~> 1.4.6' @@ -43,8 +43,7 @@ gem 'omniauth-shibboleth', '~> 1.3.0' gem 'omniauth-twitter', '~> 1.4' gem 'omniauth_crowd', '~> 2.2.0' gem 'omniauth-authentiq', '~> 0.3.3' -gem 'omniauth_openid_connect', '~> 0.3.3' -gem "omniauth-ultraauth", '~> 0.0.2' +gem 'omniauth_openid_connect', '~> 0.3.5' gem 'omniauth-salesforce', '~> 1.0.5' gem 'rack-oauth2', '~> 1.9.3' gem 'jwt', '~> 2.1.0' @@ -64,7 +63,7 @@ gem 'attr_encrypted', '~> 3.1.0' gem 'u2f', '~> 0.2.1' # GitLab Pages -gem 'validates_hostname', '~> 1.0.6' +gem 'validates_hostname', '~> 1.0.10' gem 'rubyzip', '~> 2.0.0', require: 'zip' # GitLab Pages letsencrypt support gem 'acme-client', '~> 2.0.5' @@ -113,14 +112,14 @@ gem 'fog-aws', '~> 3.5' # Locked until fog-google resolves https://github.com/fog/fog-google/issues/421. # Also see config/initializers/fog_core_patch.rb. gem 'fog-core', '= 2.1.0' -gem 'fog-google', '~> 1.9' +gem 'fog-google', '~> 1.10' gem 'fog-local', '~> 0.6' gem 'fog-openstack', '~> 1.0' gem 'fog-rackspace', '~> 0.1.1' gem 'fog-aliyun', '~> 0.3' # for Google storage -gem 'google-api-client', '~> 0.23' +gem 'google-api-client', '~> 0.33' # for aws storage gem 'unf', '~> 0.1.4' @@ -343,7 +342,7 @@ group :development do end group :development, :test do - gem 'bullet', '~> 6.0.2', require: !!ENV['ENABLE_BULLET'] + gem 'bullet', '~> 6.0.2' gem 'pry-byebug', '~> 3.5.1', platform: :mri gem 'pry-rails', '~> 0.3.9' @@ -362,10 +361,10 @@ group :development, :test do gem 'spring', '~> 2.0.0' gem 'spring-commands-rspec', '~> 1.0.4' - gem 'gitlab-styles', '~> 3.2.0', require: false + gem 'gitlab-styles', '~> 4.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' + gem 'rubocop', '~> 0.82.0' + gem 'rubocop-performance', '~> 1.5.2' gem 'rubocop-rspec', '~> 1.37.0' gem 'scss_lint', '~> 0.56.0', require: false @@ -403,7 +402,6 @@ group :test do gem 'shoulda-matchers', '~> 4.0.1', require: false gem 'email_spec', '~> 2.2.0' - gem 'json-schema', '~> 2.8.0' gem 'webmock', '~> 3.5.1' gem 'rails-controller-testing' gem 'concurrent-ruby', '~> 1.1' @@ -454,7 +452,7 @@ group :ed25519 do end # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 13.0.0.pre.rc1' +gem 'gitaly', '~> 13.1.0.pre.rc1' gem 'grpc', '~> 1.24.0' @@ -498,3 +496,4 @@ gem 'valid_email', '~> 0.1' # JSON gem 'json', '~> 2.3.0' +gem 'json-schema', '~> 2.8.0' diff --git a/Gemfile.lock b/Gemfile.lock index ffff576e8b..319c4df3f9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,59 +6,59 @@ GEM ace-rails-ap (4.1.2) acme-client (2.0.5) faraday (~> 0.9, >= 0.9.1) - actioncable (6.0.3) - actionpack (= 6.0.3) + actioncable (6.0.3.1) + actionpack (= 6.0.3.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.0.3) - actionpack (= 6.0.3) - activejob (= 6.0.3) - activerecord (= 6.0.3) - activestorage (= 6.0.3) - activesupport (= 6.0.3) + actionmailbox (6.0.3.1) + actionpack (= 6.0.3.1) + activejob (= 6.0.3.1) + activerecord (= 6.0.3.1) + activestorage (= 6.0.3.1) + activesupport (= 6.0.3.1) mail (>= 2.7.1) - actionmailer (6.0.3) - actionpack (= 6.0.3) - actionview (= 6.0.3) - activejob (= 6.0.3) + actionmailer (6.0.3.1) + actionpack (= 6.0.3.1) + actionview (= 6.0.3.1) + activejob (= 6.0.3.1) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.0.3) - actionview (= 6.0.3) - activesupport (= 6.0.3) + actionpack (6.0.3.1) + actionview (= 6.0.3.1) + activesupport (= 6.0.3.1) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.0.3) - actionpack (= 6.0.3) - activerecord (= 6.0.3) - activestorage (= 6.0.3) - activesupport (= 6.0.3) + actiontext (6.0.3.1) + actionpack (= 6.0.3.1) + activerecord (= 6.0.3.1) + activestorage (= 6.0.3.1) + activesupport (= 6.0.3.1) nokogiri (>= 1.8.5) - actionview (6.0.3) - activesupport (= 6.0.3) + actionview (6.0.3.1) + activesupport (= 6.0.3.1) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (6.0.3) - activesupport (= 6.0.3) + activejob (6.0.3.1) + activesupport (= 6.0.3.1) globalid (>= 0.3.6) - activemodel (6.0.3) - activesupport (= 6.0.3) - activerecord (6.0.3) - activemodel (= 6.0.3) - activesupport (= 6.0.3) + activemodel (6.0.3.1) + activesupport (= 6.0.3.1) + activerecord (6.0.3.1) + activemodel (= 6.0.3.1) + activesupport (= 6.0.3.1) activerecord-explain-analyze (0.1.0) activerecord (>= 4) pg - activestorage (6.0.3) - actionpack (= 6.0.3) - activejob (= 6.0.3) - activerecord (= 6.0.3) + activestorage (6.0.3.1) + actionpack (= 6.0.3.1) + activejob (= 6.0.3.1) + activerecord (= 6.0.3.1) marcel (~> 0.3.1) - activesupport (6.0.3) + activesupport (6.0.3.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -286,7 +286,7 @@ GEM factory_bot_rails (5.1.0) factory_bot (~> 5.1.0) railties (>= 4.2.0) - faraday (0.15.4) + faraday (0.17.3) multipart-post (>= 1.2, < 3) faraday-http-cache (2.0.0) faraday (~> 0.8) @@ -330,11 +330,11 @@ GEM excon (~> 0.58) formatador (~> 0.2) mime-types - fog-google (1.9.1) + fog-google (1.10.0) fog-core (<= 2.1.0) fog-json (~> 1.2) fog-xml (~> 0.1.0) - google-api-client (~> 0.23.0) + google-api-client (>= 0.32, < 0.34) fog-json (1.2.0) fog-core multi_json (~> 1.10) @@ -377,7 +377,7 @@ GEM po_to_json (>= 1.0.0) rails (>= 3.2.0) git (1.5.0) - gitaly (13.0.0.pre.rc1) + gitaly (13.1.0.pre.rc1) grpc (~> 1.0) github-markup (1.7.0) gitlab-chronic (0.10.5) @@ -400,11 +400,11 @@ GEM gitlab-puma (>= 2.7, < 5) gitlab-sidekiq-fetcher (0.5.2) sidekiq (~> 5) - gitlab-styles (3.2.0) - rubocop (~> 0.74.0) + gitlab-styles (4.2.0) + rubocop (~> 0.82.0) rubocop-gitlab-security (~> 0.1.0) - rubocop-performance (~> 1.4.1) - rubocop-rails (~> 2.0) + rubocop-performance (~> 1.5.2) + rubocop-rails (~> 2.5) rubocop-rspec (~> 1.36) gitlab_chronic_duration (0.10.6.2) numerizer (~> 0.2) @@ -419,23 +419,24 @@ GEM actionpack (>= 3.0) multi_json request_store (>= 1.0) - google-api-client (0.23.4) + google-api-client (0.33.2) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.5, < 0.7.0) + googleauth (~> 0.9) httpclient (>= 2.8.1, < 3.0) - mime-types (~> 3.0) + mini_mime (~> 1.0) representable (~> 3.0) retriable (>= 2.0, < 4.0) + signet (~> 0.12) google-protobuf (3.8.0) googleapis-common-protos-types (1.0.4) google-protobuf (~> 3.0) - googleauth (0.6.6) - faraday (~> 0.12) + googleauth (0.12.0) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.4, < 3.0) - memoist (~> 0.12) + memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) - signet (~> 0.7) + signet (~> 0.14) gpgme (2.0.20) mini_portile2 (~> 2.3) grape (1.1.0) @@ -529,7 +530,7 @@ GEM mime-types (~> 3.0) multi_xml (>= 0.5.2) httpclient (2.8.3) - i18n (1.8.2) + i18n (1.8.3) concurrent-ruby (~> 1.0) i18n_data (0.8.0) icalendar (2.4.1) @@ -604,7 +605,7 @@ GEM ruby_dep (~> 1.2) locale (2.1.2) lockbox (0.3.3) - lograge (0.10.0) + lograge (0.11.2) actionpack (>= 4) activesupport (>= 4) railties (>= 4) @@ -661,8 +662,8 @@ GEM shellany (~> 0.0) numerizer (0.2.0) oauth (0.5.4) - oauth2 (1.4.1) - faraday (>= 0.8, < 0.16.0) + oauth2 (1.4.4) + faraday (>= 0.8, < 2.0) jwt (>= 1.0, < 3.0) multi_json (~> 1.3) multi_xml (~> 0.5) @@ -722,13 +723,11 @@ GEM omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack - omniauth-ultraauth (0.0.2) - omniauth_openid_connect (~> 0.3.0) omniauth_crowd (2.2.3) activesupport nokogiri (>= 1.4.4) omniauth (~> 1.0) - omniauth_openid_connect (0.3.3) + omniauth_openid_connect (0.3.5) addressable (~> 2.5) omniauth (~> 1.9) openid_connect (~> 1.1) @@ -750,7 +749,7 @@ GEM orm_adapter (0.5.0) os (1.0.0) parallel (1.19.1) - parser (2.7.0.4) + parser (2.7.1.2) ast (~> 2.4.0) parslet (1.8.2) peek (1.1.0) @@ -803,20 +802,20 @@ GEM rack-test (1.1.0) rack (>= 1.0, < 3) rack-timeout (0.5.1) - rails (6.0.3) - actioncable (= 6.0.3) - actionmailbox (= 6.0.3) - actionmailer (= 6.0.3) - actionpack (= 6.0.3) - actiontext (= 6.0.3) - actionview (= 6.0.3) - activejob (= 6.0.3) - activemodel (= 6.0.3) - activerecord (= 6.0.3) - activestorage (= 6.0.3) - activesupport (= 6.0.3) + rails (6.0.3.1) + actioncable (= 6.0.3.1) + actionmailbox (= 6.0.3.1) + actionmailer (= 6.0.3.1) + actionpack (= 6.0.3.1) + actiontext (= 6.0.3.1) + actionview (= 6.0.3.1) + activejob (= 6.0.3.1) + activemodel (= 6.0.3.1) + activerecord (= 6.0.3.1) + activestorage (= 6.0.3.1) + activesupport (= 6.0.3.1) bundler (>= 1.3.0) - railties (= 6.0.3) + railties (= 6.0.3.1) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.4) actionpack (>= 5.0.1.x) @@ -830,9 +829,9 @@ GEM rails-i18n (6.0.0) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 7) - railties (6.0.3) - actionpack (= 6.0.3) - activesupport (= 6.0.3) + railties (6.0.3.1) + actionpack (= 6.0.3.1) + activesupport (= 6.0.3.1) method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) @@ -888,6 +887,7 @@ GEM mime-types (>= 1.16, < 4.0) netrc (~> 0.8) retriable (3.1.2) + rexml (3.2.4) rinku (2.0.0) rotp (2.1.2) rouge (3.19.0) @@ -931,18 +931,20 @@ GEM pg rails sqlite3 - rubocop (0.74.0) + rubocop (0.82.0) jaro_winkler (~> 1.5.1) parallel (~> 1.10) - parser (>= 2.6) + parser (>= 2.7.0.1) rainbow (>= 2.2.2, < 4.0) + rexml ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 1.7) + unicode-display_width (>= 1.4.0, < 2.0) rubocop-gitlab-security (0.1.1) rubocop (>= 0.51) - rubocop-performance (1.4.1) + rubocop-performance (1.5.2) rubocop (>= 0.71.0) - rubocop-rails (2.4.0) + rubocop-rails (2.5.2) + activesupport rack (>= 1.1) rubocop (>= 0.72.0) rubocop-rspec (1.37.0) @@ -1009,9 +1011,9 @@ GEM sidekiq-cron (1.0.4) fugit (~> 1.1) sidekiq (>= 4.2.1) - signet (0.11.0) + signet (0.14.0) addressable (~> 2.3) - faraday (~> 0.9) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simple_po_parser (1.1.2) @@ -1083,7 +1085,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.7.5) - unicode-display_width (1.6.0) + unicode-display_width (1.7.0) unicode_plot (0.0.4) enumerable-statistics (>= 2.0.1) unicode_utils (1.4.0) @@ -1113,7 +1115,7 @@ GEM validate_url (1.0.8) activemodel (>= 3.0.0) public_suffix - validates_hostname (1.0.6) + validates_hostname (1.0.10) activerecord (>= 3.0) activesupport (>= 3.0) version_sorter (2.2.4) @@ -1223,7 +1225,7 @@ DEPENDENCIES fog-aliyun (~> 0.3) fog-aws (~> 3.5) fog-core (= 2.1.0) - fog-google (~> 1.9) + fog-google (~> 1.10) fog-local (~> 0.6) fog-openstack (~> 1.0) fog-rackspace (~> 0.1.1) @@ -1234,7 +1236,7 @@ DEPENDENCIES gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly (~> 13.0.0.pre.rc1) + gitaly (~> 13.1.0.pre.rc1) github-markup (~> 1.7.0) gitlab-chronic (~> 0.10.5) gitlab-labkit (= 0.12.0) @@ -1245,11 +1247,11 @@ 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.2.0) + gitlab-styles (~> 4.2.0) gitlab_chronic_duration (~> 0.10.6.2) gitlab_omniauth-ldap (~> 2.1.1) gon (~> 6.2) - google-api-client (~> 0.23) + google-api-client (~> 0.33) google-protobuf (~> 3.8.0) gpgme (~> 2.0.19) grape (~> 1.1.0) @@ -1317,9 +1319,8 @@ DEPENDENCIES omniauth-saml (~> 1.10) omniauth-shibboleth (~> 1.3.0) omniauth-twitter (~> 1.4) - omniauth-ultraauth (~> 0.0.2) omniauth_crowd (~> 2.2.0) - omniauth_openid_connect (~> 0.3.3) + omniauth_openid_connect (~> 0.3.5) org-ruby (~> 0.9.12) parallel (~> 1.19) peek (~> 1.1) @@ -1335,7 +1336,7 @@ DEPENDENCIES rack-oauth2 (~> 1.9.3) rack-proxy (~> 0.6.0) rack-timeout - rails (~> 6.0.3) + rails (~> 6.0.3.1) rails-controller-testing rails-i18n (~> 6.0) rainbow (~> 3.0) @@ -1358,8 +1359,8 @@ DEPENDENCIES rspec-retry (~> 0.6.1) rspec_junit_formatter rspec_profiling (~> 0.0.5) - rubocop (~> 0.74.0) - rubocop-performance (~> 1.4.1) + rubocop (~> 0.82.0) + rubocop-performance (~> 1.5.2) rubocop-rspec (~> 1.37.0) ruby-fogbugz (~> 0.2.1) ruby-prof (~> 1.3.0) @@ -1400,7 +1401,7 @@ DEPENDENCIES unicorn-worker-killer (~> 0.4.4) unleash (~> 0.1.5) valid_email (~> 0.1) - validates_hostname (~> 1.0.6) + validates_hostname (~> 1.0.10) version_sorter (~> 2.2.4) vmstat (~> 2.3.0) webmock (~> 3.5.1) diff --git a/VERSION b/VERSION index 6fe535b5ba..e6ba351366 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -13.0.6 +13.1.0 diff --git a/app/assets/images/aws_logo.svg b/app/assets/images/aws_logo.svg new file mode 100644 index 0000000000..e028fd1b1c --- /dev/null +++ b/app/assets/images/aws_logo.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/app/assets/images/experienced.svg b/app/assets/images/experienced.svg new file mode 100644 index 0000000000..1c93cfcf1e --- /dev/null +++ b/app/assets/images/experienced.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/images/learn-gitlab-avatar.jpg b/app/assets/images/learn-gitlab-avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65ec29444cb1e39648bd5a4672a4fb0e6d241019 GIT binary patch literal 4237 zcmbtWby!r}7C#eoNXh^+f`kYXLxUhKAp!zJD$>#d(j_S(%^)3$Gqixir4dOf>5>wM zvSg*069@8$SEi(DQIY^X=xZ4=;#<25zOa_4Iv2UgcC18K9Ng2mqhr~rA0-h)%Des z)bwpkO>KgGgI~Ou0sX%d5IO*Q;^%_^2#5;+(}N)NAVL=aCmO&I5HS>ggoG3XC4+#; z3A4m-{kCu6|8)M3!X=wzX9w!vNDl+xYdHrS- zPF+~`O<3I>lU>*%07_uRFnm$_#>TN|=@h>qrp~mDi@#?(d&&b;q1bl7RQRhec?1mI>}pp? z`H|i6o~&3Y`@tFRpaQ_=QV#yQbL|Ug{@Q}2NOSNus6r>!hP@B6s}~Y7a9Y0^)Cj;T zjLw1!aIDzrOzm|+06Qh^J&tWZhc>lu%=?BB>82kQ zwVRhyGvk#E01~AV!|Vx5Hvs^`dRX-3V@TNlg!a$tuQag}6Y(oc|CJ^v2`MpgWWTcn zru*YfnPXYi%6uO0mHQ@VE;H)`ht*?~5b%hDoe|^F5=Y@@H_49d( zH6a9`q^$Es$|ZA5qRocz<8*~=*Er^2f2lbR4~N~c^*2);%fvO}mr;|_U0XmP!Oz1@sy+rP*Z=>RYY1SO$_Kq(==@qviA01|ozQo4(x%8X2$ zTu6Nb&+q~#|JtRgv`FJ4< z)MQ#3GtC<pVvPQ%ah?ox48l?4VqKk?!Psx+2bk_ zd&V;9zi?pxo`c`QjEOtUw&sZD)BD!hSnAOasI1mF>0^DDv9p#fhwi#+Ei&kQWS@G| z)o=Z*Q4?ums(epi6_rUfC*9QCukp+j-D=;iRfY&OR0Y4t#;Fx=T9zEw)YWItj{||< z>Di9ACY4bWK2P_rype?jByx>5^|3YOqQaD4ZB)e$+4>qy*oJEkS$6r-_z9;P%%^>F z805;FG2@^6}(0HPAg9L(pFOH|6&*j(X;k;dP@L&R+SBhE^_!u z-+e!o)%lQ8X{1*160JQSQqYy$iZWTff}!HGp9GNqS`nj|;pbkQ)@W6TF|3_#J`ye) z3awA;;oJOq?MlA0rpQ$-=l3w?V|=`u5aM013LGn5$&Qdt(s$`pHnrJfh7kZ-y}gdf z3?Cn=)v{v$lPB}RNh&#c_fARObr$L#r>(qCd-p8y{D}F&jix{q-_Mp3RDCvDebsUWZ%yNP9mp*8?b4+WO%bmBnDd-wYfQlqc1IF7BMTBs5%E5> z6(eIJgvv?rbj*FtFm$^G!Ay*?q!b@Z`~$b6APb3ryU_yvy`YccM?#J9Z+H&sMKikd ze|!=<9AB94wqy&M)4Jc-*knX~jt}>0^Xh?_0M_EvdjGE}*=Y=wxH#N2wS0YUpOOHq z#ohJut_`&J??+OQ$Do4-wC~%BBwX7Vu-_?eA)8^Xp|#m3<& zGwI|vk~`G`@$kr`0Dv}1U!syJ@RX#4m#LQS>N?8(z7!eVIR`^zM828cda0C+DO#5& zM>CF#St^B1T41h6rBJ->bh*Mgrz{qW9$gJ(SeMGs;DzlPmL4Oy20a(Jy>A3(n%>Ds zIZ0N$IxB=Ib3fu$JCG`BC@E-b5UYRh_oH4awZ$z!t*_5EdVaP|Pzl1|MyAG=pFG(_`O2WrZ8wQSK>qM>IZk6ow96(xwp<5bW_d-z@y7h|5V=Y#Yu} zQ(72ZB!({Ho;Tlax`*YB7Ga4a?&IocgO{SD<7%U_hRxxVVRE#~ua3+nFx7eZlo7R+ zQN|9WLSPE(w7`~Bq9_{)+n36(YwTrW#Vk^of`}Bc?q+}7LXZszO7GIKG?;C!AHI}( zO|ZZBt(hjb|J9fs%ryYqDq6GeZk1+dZ@c*Tx90uVZG&S zH!KF0f;`!)`Az8@4USH@vmQWtVsQY2X&cpS>z%#=sDZZNL3?Uur}XQy(#QoN{|{b< zOK9rRydjb*ax+_*E!A~j^R1ZN0n#a1jU%b%%CAKoG8r7~+qE<^By3Ap$2@JnC&qE5 z`9Kl)*`v`R18L{`%aco@o3-s2bfyjZITP&u{8TjTxiZ|DSp)QQm{>vx(-RMB2vNW! zzshc+5D#hqO3!dnl!Q*1k&}xQc}w5G+Ec|aJf-08atA~_mwy^;J`gq`vwN-#B(^cO zy&zxli^k_vYt202u#Pd}*(Q-=@pb1(HMX85>E&j3R}uYG$BcUsHre0%>P@m%Pb{IGn#7733;d|VyDofc zN&xC6-S;($mV`0R+pXyk=b$y81Rk2?ZdvkumpAaqjCyKHIx2lp|`Sb7D%3p zsc<@e>wSc|{q$YJj~^kZvcQ`!QFdbZ_hr#T?LO2MO%A8VHK#T&?-^wZ?DE1&RIx4}?*Z1VA%=PUON}#bdeamvF6I7&qZ_ z0k;iP4P=y0@~=E_?kv>tR+a7$8Q67RSh(WYzZ^Cb7Gf?v|& z$B-W6B{>F^DK!NW156AqpRa^5p?v`py)WUOLPMXEpAz$qB%68tDq;h<7QH>`>ELP0 zH()Q1T&j2`%lg^VL@10j)a%xqUXXBR#*(b?>=F>Nq&CV&T83Z+ecva0+c@o@#jM1o7iu@fuTep`%Slh_(md1$8hl% z-#kf?Dg|P^A(B97 z=L0>|7##_GC#>s?09>Tcn`E-X0VvUz$R5}XigHRGwpDl;AH6oR?%1z8IWaZCV{Psf zt=$VvWLC9HJvM}BKA3?w zjWEMYaQa45Br9j6%C{lBjbr2OlSc|U1G3MPWzN#<3oY)-MFCKmdwkC05}h_J4t_jt zdsD4skA17d$F83wDR%CVZ{!;`*H4=uD}2R;^DZlC8PLjSTXTI?52SNZjelVwM@^Qw z)cD8+Cs=nqdM8;U6Wj%Alwo%I*~CQ?28?iqsdvXftu{KNAc zI`#1de0*S)Gn_-_R!q@I(nF) zm6uUP&bum)-IHf|C~bTuYiTTct7lQ2QMM;A|IRAtV6jY{VI^fB2*&m9Gge|t3=igNhZ(Q^Xg|iy%U(=RImGzV58+Iy{@Ykv~!EFl2GKYD) zCbTm%MO;4(inSs?EGH;Z0wVKS&6 zQ%f7_zmnm$H9)fGf~KlOY~vS-TO8dt><;rN|^Z%pY|h; literal 0 HcmV?d00001 diff --git a/app/assets/images/novice.svg b/app/assets/images/novice.svg new file mode 100644 index 0000000000..c6744fa455 --- /dev/null +++ b/app/assets/images/novice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/javascripts/alert_management/components/alert_details.vue b/app/assets/javascripts/alert_management/components/alert_details.vue index 89db7db77d..ed6b4b7fdb 100644 --- a/app/assets/javascripts/alert_management/components/alert_details.vue +++ b/app/assets/javascripts/alert_management/components/alert_details.vue @@ -2,31 +2,32 @@ import * as Sentry from '@sentry/browser'; import { GlAlert, + GlBadge, GlIcon, GlLoadingIcon, - GlDropdown, - GlDropdownItem, GlSprintf, GlTabs, GlTab, GlButton, GlTable, } from '@gitlab/ui'; -import createFlash from '~/flash'; import { s__ } from '~/locale'; import query from '../graphql/queries/details.query.graphql'; import { fetchPolicies } from '~/lib/graphql'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; -import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; -import { ALERTS_SEVERITY_LABELS } from '../constants'; -import updateAlertStatus from '../graphql/mutations/update_alert_status.graphql'; +import highlightCurrentUser from '~/behaviors/markdown/highlight_current_user'; +import initUserPopovers from '~/user_popovers'; +import { ALERTS_SEVERITY_LABELS, trackAlertsDetailsViewsOptions } from '../constants'; +import createIssueQuery from '../graphql/mutations/create_issue_from_alert.graphql'; +import { visitUrl, joinPaths } from '~/lib/utils/url_utility'; +import Tracking from '~/tracking'; +import { toggleContainerClasses } from '~/lib/utils/dom_utils'; +import SystemNote from './system_notes/system_note.vue'; +import AlertSidebar from './alert_sidebar.vue'; + +const containerEl = document.querySelector('.page-with-contextual-sidebar'); export default { - statuses: { - TRIGGERED: s__('AlertManagement|Triggered'), - ACKNOWLEDGED: s__('AlertManagement|Acknowledged'), - RESOLVED: s__('AlertManagement|Resolved'), - }, i18n: { errorMsg: s__( 'AlertManagement|There was an error displaying the alert. Please refresh the page to try again.', @@ -38,19 +39,19 @@ export default { }, severityLabels: ALERTS_SEVERITY_LABELS, components: { + GlBadge, GlAlert, GlIcon, GlLoadingIcon, GlSprintf, - GlDropdown, - GlDropdownItem, GlTab, GlTabs, GlButton, GlTable, TimeAgoTooltip, + AlertSidebar, + SystemNote, }, - mixins: [glFeatureFlagsMixin()], props: { alertId: { type: String, @@ -60,7 +61,7 @@ export default { type: String, required: true, }, - newIssuePath: { + projectIssuesPath: { type: String, required: true, }, @@ -85,7 +86,15 @@ export default { }, }, data() { - return { alert: null, errored: false, isErrorDismissed: false }; + return { + alert: null, + errored: false, + isErrorDismissed: false, + createIssueError: '', + issueCreationInProgress: false, + sidebarCollapsed: false, + sidebarErrorMessage: '', + }; }, computed: { loading() { @@ -100,38 +109,92 @@ export default { return this.errored && !this.isErrorDismissed; }, }, + mounted() { + this.trackPageViews(); + toggleContainerClasses(containerEl, { + 'issuable-bulk-update-sidebar': true, + 'right-sidebar-expanded': true, + }); + }, + updated() { + this.$nextTick(() => { + highlightCurrentUser(this.$el.querySelectorAll('.gfm-project_member')); + initUserPopovers(this.$el.querySelectorAll('.js-user-link')); + }); + }, methods: { dismissError() { this.isErrorDismissed = true; + this.sidebarErrorMessage = ''; }, - updateAlertStatus(status) { + toggleSidebar() { + this.sidebarCollapsed = !this.sidebarCollapsed; + toggleContainerClasses(containerEl, { + 'right-sidebar-collapsed': this.sidebarCollapsed, + 'right-sidebar-expanded': !this.sidebarCollapsed, + }); + }, + handleAlertSidebarError(errorMessage) { + this.errored = true; + this.sidebarErrorMessage = errorMessage; + }, + createIssue() { + this.issueCreationInProgress = true; + this.$apollo .mutate({ - mutation: updateAlertStatus, + mutation: createIssueQuery, variables: { - iid: this.alertId, - status: status.toUpperCase(), + iid: this.alert.iid, projectPath: this.projectPath, }, }) - .catch(() => { - createFlash( - s__( - 'AlertManagement|There was an error while updating the status of the alert. Please try again.', - ), - ); + .then(({ data: { createAlertIssue: { errors, issue } } }) => { + if (errors?.length) { + [this.createIssueError] = errors; + this.issueCreationInProgress = false; + } else if (issue) { + visitUrl(this.issuePath(issue.iid)); + } + }) + .catch(error => { + this.createIssueError = error; + this.issueCreationInProgress = false; }); }, + issuePath(issueId) { + return joinPaths(this.projectIssuesPath, issueId); + }, + trackPageViews() { + const { category, action } = trackAlertsDetailsViewsOptions; + Tracking.event(category, action); + }, + alertRefresh() { + this.$apollo.queries.alert.refetch(); + }, }, }; + diff --git a/app/assets/javascripts/alert_management/components/alert_management_list.vue b/app/assets/javascripts/alert_management/components/alert_management_list.vue index 74fc19ff3d..37901c21f9 100644 --- a/app/assets/javascripts/alert_management/components/alert_management_list.vue +++ b/app/assets/javascripts/alert_management/components/alert_management_list.vue @@ -10,23 +10,41 @@ import { GlDropdownItem, GlTabs, GlTab, + GlBadge, + GlPagination, } from '@gitlab/ui'; import createFlash from '~/flash'; import { s__ } from '~/locale'; import { joinPaths, visitUrl } from '~/lib/utils/url_utility'; +import { fetchPolicies } from '~/lib/graphql'; import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue'; -import getAlerts from '../graphql/queries/getAlerts.query.graphql'; -import { ALERTS_STATUS, ALERTS_STATUS_TABS, ALERTS_SEVERITY_LABELS } from '../constants'; -import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; +import getAlerts from '../graphql/queries/get_alerts.query.graphql'; +import getAlertsCountByStatus from '../graphql/queries/get_count_by_status.query.graphql'; +import { + ALERTS_STATUS_TABS, + ALERTS_SEVERITY_LABELS, + DEFAULT_PAGE_SIZE, + trackAlertListViewsOptions, + trackAlertStatusUpdateOptions, +} from '../constants'; import updateAlertStatus from '../graphql/mutations/update_alert_status.graphql'; -import { capitalizeFirstCharacter } from '~/lib/utils/text_utility'; +import { convertToSnakeCase } from '~/lib/utils/text_utility'; +import Tracking from '~/tracking'; -const tdClass = 'table-col d-flex d-md-table-cell align-items-center'; +const tdClass = 'table-col gl-display-flex d-md-table-cell gl-align-items-center'; +const thClass = 'gl-hover-bg-blue-50'; const bodyTrClass = - 'gl-border-1 gl-border-t-solid gl-border-gray-100 hover-bg-blue-50 hover-gl-cursor-pointer hover-gl-border-b-solid hover-gl-border-blue-200'; + 'gl-border-1 gl-border-t-solid gl-border-gray-100 gl-hover-bg-blue-50 gl-hover-cursor-pointer gl-hover-border-b-solid gl-hover-border-blue-200'; + +const initialPaginationState = { + currentPage: 1, + prevPageCursor: '', + nextPageCursor: '', + firstPageSize: DEFAULT_PAGE_SIZE, + lastPageSize: null, +}; export default { - bodyTrClass, i18n: { noAlertsMsg: s__( "AlertManagement|No alerts available to display. If you think you're seeing this message in error, refresh the page.", @@ -40,40 +58,54 @@ export default { key: 'severity', label: s__('AlertManagement|Severity'), tdClass: `${tdClass} rounded-top text-capitalize`, + thClass, + sortable: true, }, { key: 'startedAt', label: s__('AlertManagement|Start time'), + thClass: `${thClass} js-started-at`, tdClass, + sortable: true, }, { key: 'endedAt', label: s__('AlertManagement|End time'), + thClass, tdClass, + sortable: true, }, { key: 'title', label: s__('AlertManagement|Alert'), - thClass: 'w-30p', + thClass: `${thClass} w-30p gl-pointer-events-none`, tdClass, + sortable: false, }, { key: 'eventCount', label: s__('AlertManagement|Events'), - thClass: 'text-right event-count', - tdClass: `${tdClass} text-md-right event-count`, + thClass: `${thClass} text-right gl-pr-9 w-3rem`, + tdClass: `${tdClass} text-md-right`, + sortable: true, + }, + { + key: 'assignees', + label: s__('AlertManagement|Assignees'), + tdClass, }, { key: 'status', - thClass: 'w-15p', + thClass: `${thClass} w-15p`, label: s__('AlertManagement|Status'), tdClass: `${tdClass} rounded-bottom`, + sortable: true, }, ], statuses: { - [ALERTS_STATUS.TRIGGERED]: s__('AlertManagement|Triggered'), - [ALERTS_STATUS.ACKNOWLEDGED]: s__('AlertManagement|Acknowledged'), - [ALERTS_STATUS.RESOLVED]: s__('AlertManagement|Resolved'), + TRIGGERED: s__('AlertManagement|Triggered'), + ACKNOWLEDGED: s__('AlertManagement|Acknowledged'), + RESOLVED: s__('AlertManagement|Resolved'), }, severityLabels: ALERTS_SEVERITY_LABELS, statusTabs: ALERTS_STATUS_TABS, @@ -89,8 +121,9 @@ export default { GlIcon, GlTabs, GlTab, + GlBadge, + GlPagination, }, - mixins: [glFeatureFlagsMixin()], props: { projectPath: { type: String, @@ -115,33 +148,63 @@ export default { }, apollo: { alerts: { + fetchPolicy: fetchPolicies.CACHE_AND_NETWORK, query: getAlerts, variables() { return { projectPath: this.projectPath, statuses: this.statusFilter, + sort: this.sort, + firstPageSize: this.pagination.firstPageSize, + lastPageSize: this.pagination.lastPageSize, + prevPageCursor: this.pagination.prevPageCursor, + nextPageCursor: this.pagination.nextPageCursor, }; }, update(data) { - return data.project.alertManagementAlerts.nodes; + const { alertManagementAlerts: { nodes: list = [], pageInfo = {} } = {} } = + data.project || {}; + + return { + list, + pageInfo, + }; }, error() { this.errored = true; }, }, + alertsCount: { + query: getAlertsCountByStatus, + variables() { + return { + projectPath: this.projectPath, + }; + }, + update(data) { + return data.project?.alertManagementAlertStatusCounts; + }, + }, }, data() { return { - alerts: null, errored: false, isAlertDismissed: false, isErrorAlertDismissed: false, - statusFilter: this.$options.statusTabs[4].filters, + sort: 'STARTED_AT_DESC', + statusFilter: [], + filteredByStatus: '', + pagination: initialPaginationState, + sortBy: 'startedAt', + sortDesc: true, + sortDirection: 'desc', }; }, computed: { showNoAlertsMsg() { - return !this.errored && !this.loading && !this.alerts?.length && !this.isAlertDismissed; + return ( + !this.errored && !this.loading && this.alertsCount?.all === 0 && !this.isAlertDismissed + ); }, showErrorMsg() { return this.errored && !this.isErrorAlertDismissed; @@ -149,12 +212,43 @@ export default { loading() { return this.$apollo.queries.alerts.loading; }, + hasAlerts() { + return this.alerts?.list?.length; + }, + tbodyTrClass() { + return !this.loading && this.hasAlerts ? bodyTrClass : ''; + }, + showPaginationControls() { + return Boolean(this.prevPage || this.nextPage); + }, + alertsForCurrentTab() { + return this.alertsCount ? this.alertsCount[this.filteredByStatus.toLowerCase()] : 0; + }, + prevPage() { + return Math.max(this.pagination.currentPage - 1, 0); + }, + nextPage() { + const nextPage = this.pagination.currentPage + 1; + return nextPage > Math.ceil(this.alertsForCurrentTab / DEFAULT_PAGE_SIZE) ? null : nextPage; + }, + }, + mounted() { + this.trackPageViews(); }, methods: { filterAlertsByStatus(tabIndex) { - this.statusFilter = this.$options.statusTabs[tabIndex].filters; + this.resetPagination(); + const { filters, status } = this.$options.statusTabs[tabIndex]; + this.statusFilter = filters; + this.filteredByStatus = status; + }, + fetchSortedData({ sortBy, sortDesc }) { + const sortingDirection = sortDesc ? 'DESC' : 'ASC'; + const sortingColumn = convertToSnakeCase(sortBy).toUpperCase(); + + this.resetPagination(); + this.sort = `${sortingColumn}_${sortingDirection}`; }, - capitalizeFirstCharacter, updateAlertStatus(status, iid) { this.$apollo .mutate({ @@ -166,7 +260,10 @@ export default { }, }) .then(() => { + this.trackStatusUpdate(status); this.$apollo.queries.alerts.refetch(); + this.$apollo.queries.alertsCount.refetch(); + this.resetPagination(); }) .catch(() => { createFlash( @@ -179,6 +276,42 @@ export default { navigateToAlertDetails({ iid }) { return visitUrl(joinPaths(window.location.pathname, iid, 'details')); }, + trackPageViews() { + const { category, action } = trackAlertListViewsOptions; + Tracking.event(category, action); + }, + trackStatusUpdate(status) { + const { category, action, label } = trackAlertStatusUpdateOptions; + Tracking.event(category, action, { label, property: status }); + }, + getAssignees(assignees) { + // TODO: Update to show list of assignee(s) after https://gitlab.com/gitlab-org/gitlab/-/issues/218405 + return assignees.nodes?.length > 0 + ? assignees.nodes[0]?.username + : s__('AlertManagement|Unassigned'); + }, + handlePageChange(page) { + const { startCursor, endCursor } = this.alerts.pageInfo; + + if (page > this.pagination.currentPage) { + this.pagination = { + ...initialPaginationState, + nextPageCursor: endCursor, + currentPage: page, + }; + } else { + this.pagination = { + lastPageSize: DEFAULT_PAGE_SIZE, + firstPageSize: null, + prevPageCursor: startCursor, + nextPageCursor: '', + currentPage: page, + }; + } + }, + resetPagination() { + this.pagination = initialPaginationState; + }, }, }; @@ -192,10 +325,13 @@ export default { {{ $options.i18n.errorMsg }} - + @@ -205,13 +341,19 @@ export default { + + + + + + +import SidebarHeader from './sidebar/sidebar_header.vue'; +import SidebarTodo from './sidebar/sidebar_todo.vue'; +import SidebarStatus from './sidebar/sidebar_status.vue'; +import SidebarAssignees from './sidebar/sidebar_assignees.vue'; + +export default { + components: { + SidebarAssignees, + SidebarHeader, + SidebarTodo, + SidebarStatus, + }, + props: { + sidebarCollapsed: { + type: Boolean, + required: true, + }, + projectPath: { + type: String, + required: true, + }, + alert: { + type: Object, + required: true, + }, + }, + computed: { + sidebarCollapsedClass() { + return this.sidebarCollapsed ? 'right-sidebar-collapsed' : 'right-sidebar-expanded'; + }, + }, +}; + + + diff --git a/app/assets/javascripts/alert_management/components/sidebar/sidebar_assignee.vue b/app/assets/javascripts/alert_management/components/sidebar/sidebar_assignee.vue new file mode 100644 index 0000000000..df07038151 --- /dev/null +++ b/app/assets/javascripts/alert_management/components/sidebar/sidebar_assignee.vue @@ -0,0 +1,51 @@ + + + diff --git a/app/assets/javascripts/alert_management/components/sidebar/sidebar_assignees.vue b/app/assets/javascripts/alert_management/components/sidebar/sidebar_assignees.vue new file mode 100644 index 0000000000..453a390166 --- /dev/null +++ b/app/assets/javascripts/alert_management/components/sidebar/sidebar_assignees.vue @@ -0,0 +1,278 @@ + + + diff --git a/app/assets/javascripts/alert_management/components/sidebar/sidebar_header.vue b/app/assets/javascripts/alert_management/components/sidebar/sidebar_header.vue new file mode 100644 index 0000000000..047793d8ce --- /dev/null +++ b/app/assets/javascripts/alert_management/components/sidebar/sidebar_header.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/assets/javascripts/alert_management/components/sidebar/sidebar_status.vue b/app/assets/javascripts/alert_management/components/sidebar/sidebar_status.vue new file mode 100644 index 0000000000..89dbbedd9c --- /dev/null +++ b/app/assets/javascripts/alert_management/components/sidebar/sidebar_status.vue @@ -0,0 +1,189 @@ + + + diff --git a/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue b/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue new file mode 100644 index 0000000000..87090165f8 --- /dev/null +++ b/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue @@ -0,0 +1,29 @@ + + + + diff --git a/app/assets/javascripts/alert_management/components/system_notes/system_note.vue b/app/assets/javascripts/alert_management/components/system_notes/system_note.vue new file mode 100644 index 0000000000..9042d51aec --- /dev/null +++ b/app/assets/javascripts/alert_management/components/system_notes/system_note.vue @@ -0,0 +1,46 @@ + + + diff --git a/app/assets/javascripts/alert_management/constants.js b/app/assets/javascripts/alert_management/constants.js index 9df01d9d0b..b9670466c0 100644 --- a/app/assets/javascripts/alert_management/constants.js +++ b/app/assets/javascripts/alert_management/constants.js @@ -9,38 +9,59 @@ export const ALERTS_SEVERITY_LABELS = { UNKNOWN: s__('AlertManagement|Unknown'), }; -export const ALERTS_STATUS = { - OPEN: 'OPEN', - TRIGGERED: 'TRIGGERED', - ACKNOWLEDGED: 'ACKNOWLEDGED', - RESOLVED: 'RESOLVED', - ALL: 'ALL', -}; - export const ALERTS_STATUS_TABS = [ { title: s__('AlertManagement|Open'), - status: ALERTS_STATUS.OPEN, - filters: [ALERTS_STATUS.TRIGGERED, ALERTS_STATUS.ACKNOWLEDGED], + status: 'OPEN', + filters: ['TRIGGERED', 'ACKNOWLEDGED'], }, { title: s__('AlertManagement|Triggered'), - status: ALERTS_STATUS.TRIGGERED, - filters: [ALERTS_STATUS.TRIGGERED], + status: 'TRIGGERED', + filters: 'TRIGGERED', }, { title: s__('AlertManagement|Acknowledged'), - status: ALERTS_STATUS.ACKNOWLEDGED, - filters: [ALERTS_STATUS.ACKNOWLEDGED], + status: 'ACKNOWLEDGED', + filters: 'ACKNOWLEDGED', }, { title: s__('AlertManagement|Resolved'), - status: ALERTS_STATUS.RESOLVED, - filters: [ALERTS_STATUS.RESOLVED], + status: 'RESOLVED', + filters: 'RESOLVED', }, { title: s__('AlertManagement|All alerts'), - status: ALERTS_STATUS.ALL, - filters: [ALERTS_STATUS.TRIGGERED, ALERTS_STATUS.ACKNOWLEDGED, ALERTS_STATUS.RESOLVED], + status: 'ALL', + filters: ['TRIGGERED', 'ACKNOWLEDGED', 'RESOLVED'], }, ]; + +/* eslint-disable @gitlab/require-i18n-strings */ + +/** + * Tracks snowplow event when user views alerts list + */ +export const trackAlertListViewsOptions = { + category: 'Alert Management', + action: 'view_alerts_list', +}; + +/** + * Tracks snowplow event when user views alert details + */ +export const trackAlertsDetailsViewsOptions = { + category: 'Alert Management', + action: 'view_alert_details', +}; + +/** + * Tracks snowplow event when alert status is updated + */ +export const trackAlertStatusUpdateOptions = { + category: 'Alert Management', + action: 'update_alert_status', + label: 'Status', +}; + +export const DEFAULT_PAGE_SIZE = 10; diff --git a/app/assets/javascripts/alert_management/details.js b/app/assets/javascripts/alert_management/details.js index d3523e0a29..aa8a839ea3 100644 --- a/app/assets/javascripts/alert_management/details.js +++ b/app/assets/javascripts/alert_management/details.js @@ -8,7 +8,7 @@ Vue.use(VueApollo); export default selector => { const domEl = document.querySelector(selector); - const { alertId, projectPath, newIssuePath } = domEl.dataset; + const { alertId, projectPath, projectIssuesPath } = domEl.dataset; const apolloProvider = new VueApollo({ defaultClient: createDefaultClient( @@ -39,7 +39,7 @@ export default selector => { props: { alertId, projectPath, - newIssuePath, + projectIssuesPath, }, }); }, diff --git a/app/assets/javascripts/alert_management/graphql/fragments/alert_note.fragment.graphql b/app/assets/javascripts/alert_management/graphql/fragments/alert_note.fragment.graphql new file mode 100644 index 0000000000..c72300e975 --- /dev/null +++ b/app/assets/javascripts/alert_management/graphql/fragments/alert_note.fragment.graphql @@ -0,0 +1,16 @@ +#import "~/graphql_shared/fragments/author.fragment.graphql" + +fragment AlertNote on Note { + id + author { + id + state + ...Author + } + body + bodyHtml + createdAt + discussion { + id + } +} diff --git a/app/assets/javascripts/alert_management/graphql/fragments/detailItem.fragment.graphql b/app/assets/javascripts/alert_management/graphql/fragments/detail_item.fragment.graphql similarity index 53% rename from app/assets/javascripts/alert_management/graphql/fragments/detailItem.fragment.graphql rename to app/assets/javascripts/alert_management/graphql/fragments/detail_item.fragment.graphql index df802616e9..cbe7e169be 100644 --- a/app/assets/javascripts/alert_management/graphql/fragments/detailItem.fragment.graphql +++ b/app/assets/javascripts/alert_management/graphql/fragments/detail_item.fragment.graphql @@ -1,4 +1,5 @@ -#import "./listItem.fragment.graphql" +#import "./list_item.fragment.graphql" +#import "./alert_note.fragment.graphql" fragment AlertDetailItem on AlertManagementAlert { ...AlertListItem @@ -8,4 +9,9 @@ fragment AlertDetailItem on AlertManagementAlert { description updatedAt details + notes { + nodes { + ...AlertNote + } + } } diff --git a/app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql b/app/assets/javascripts/alert_management/graphql/fragments/list_item.fragment.graphql similarity index 65% rename from app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql rename to app/assets/javascripts/alert_management/graphql/fragments/list_item.fragment.graphql index fffe07b0cf..746c4435f3 100644 --- a/app/assets/javascripts/alert_management/graphql/fragments/listItem.fragment.graphql +++ b/app/assets/javascripts/alert_management/graphql/fragments/list_item.fragment.graphql @@ -6,4 +6,10 @@ fragment AlertListItem on AlertManagementAlert { startedAt endedAt eventCount + issueIid + assignees { + nodes { + username + } + } } diff --git a/app/assets/javascripts/alert_management/graphql/mutations/alert_set_assignees.graphql b/app/assets/javascripts/alert_management/graphql/mutations/alert_set_assignees.graphql new file mode 100644 index 0000000000..efeaf8fa37 --- /dev/null +++ b/app/assets/javascripts/alert_management/graphql/mutations/alert_set_assignees.graphql @@ -0,0 +1,15 @@ +mutation($projectPath: ID!, $assigneeUsernames: [String!]!, $iid: String!) { + alertSetAssignees( + input: { iid: $iid, assigneeUsernames: $assigneeUsernames, projectPath: $projectPath } + ) { + errors + alert { + iid + assignees { + nodes { + username + } + } + } + } +} diff --git a/app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql b/app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql new file mode 100644 index 0000000000..664596ab88 --- /dev/null +++ b/app/assets/javascripts/alert_management/graphql/mutations/create_issue_from_alert.graphql @@ -0,0 +1,8 @@ +mutation ($projectPath: ID!, $iid: String!) { + createAlertIssue(input: { iid: $iid, projectPath: $projectPath }) { + errors + issue { + iid + } + } +} diff --git a/app/assets/javascripts/alert_management/graphql/mutations/update_alert_status.graphql b/app/assets/javascripts/alert_management/graphql/mutations/update_alert_status.graphql index 009ae0b293..09151f233f 100644 --- a/app/assets/javascripts/alert_management/graphql/mutations/update_alert_status.graphql +++ b/app/assets/javascripts/alert_management/graphql/mutations/update_alert_status.graphql @@ -4,6 +4,7 @@ mutation ($projectPath: ID!, $status: AlertManagementStatus!, $iid: String!) { alert { iid, status, + endedAt } } } diff --git a/app/assets/javascripts/alert_management/graphql/queries/details.query.graphql b/app/assets/javascripts/alert_management/graphql/queries/details.query.graphql index 7c77715fad..c02b8accdd 100644 --- a/app/assets/javascripts/alert_management/graphql/queries/details.query.graphql +++ b/app/assets/javascripts/alert_management/graphql/queries/details.query.graphql @@ -1,4 +1,4 @@ -#import "../fragments/detailItem.fragment.graphql" +#import "../fragments/detail_item.fragment.graphql" query alertDetails($fullPath: ID!, $alertId: String) { project(fullPath: $fullPath) { diff --git a/app/assets/javascripts/alert_management/graphql/queries/getAlerts.query.graphql b/app/assets/javascripts/alert_management/graphql/queries/getAlerts.query.graphql deleted file mode 100644 index 54b66389d5..0000000000 --- a/app/assets/javascripts/alert_management/graphql/queries/getAlerts.query.graphql +++ /dev/null @@ -1,11 +0,0 @@ -#import "../fragments/listItem.fragment.graphql" - -query getAlerts($projectPath: ID!, $statuses: [AlertManagementStatus!]) { - project(fullPath: $projectPath) { - alertManagementAlerts(statuses: $statuses) { - nodes { - ...AlertListItem - } - } - } -} diff --git a/app/assets/javascripts/alert_management/graphql/queries/get_alerts.query.graphql b/app/assets/javascripts/alert_management/graphql/queries/get_alerts.query.graphql new file mode 100644 index 0000000000..1d3c3c83cc --- /dev/null +++ b/app/assets/javascripts/alert_management/graphql/queries/get_alerts.query.graphql @@ -0,0 +1,32 @@ +#import "../fragments/list_item.fragment.graphql" + +query getAlerts( + $projectPath: ID!, + $statuses: [AlertManagementStatus!], + $sort: AlertManagementAlertSort, + $firstPageSize: Int, + $lastPageSize: Int, + $prevPageCursor: String = "" + $nextPageCursor: String = "" +) { + project(fullPath: $projectPath, ) { + alertManagementAlerts( + statuses: $statuses, + sort: $sort, + first: $firstPageSize + last: $lastPageSize, + after: $nextPageCursor, + before: $prevPageCursor + ) { + nodes { + ...AlertListItem + }, + pageInfo { + hasNextPage + endCursor + hasPreviousPage + startCursor + } + } + } +} diff --git a/app/assets/javascripts/alert_management/graphql/queries/get_count_by_status.query.graphql b/app/assets/javascripts/alert_management/graphql/queries/get_count_by_status.query.graphql new file mode 100644 index 0000000000..1143050200 --- /dev/null +++ b/app/assets/javascripts/alert_management/graphql/queries/get_count_by_status.query.graphql @@ -0,0 +1,11 @@ +query getAlertsCount($projectPath: ID!) { + project(fullPath: $projectPath) { + alertManagementAlertStatusCounts { + all + open + acknowledged + resolved + triggered + } + } +} diff --git a/app/assets/javascripts/alert_management/services/index.js b/app/assets/javascripts/alert_management/services/index.js deleted file mode 100644 index 787603d3e7..0000000000 --- a/app/assets/javascripts/alert_management/services/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import axios from '~/lib/utils/axios_utils'; - -export default { - getAlertManagementList({ endpoint }) { - return axios.get(endpoint); - }, -}; 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 410c5c00e8..ac30b08687 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,26 +1,37 @@ + + diff --git a/app/assets/javascripts/batch_comments/components/draft_note.vue b/app/assets/javascripts/batch_comments/components/draft_note.vue new file mode 100644 index 0000000000..963d104b6b --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/draft_note.vue @@ -0,0 +1,113 @@ + + diff --git a/app/assets/javascripts/batch_comments/components/drafts_count.vue b/app/assets/javascripts/batch_comments/components/drafts_count.vue new file mode 100644 index 0000000000..f1180760c4 --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/drafts_count.vue @@ -0,0 +1,15 @@ + + diff --git a/app/assets/javascripts/batch_comments/components/inline_draft_comment_row.vue b/app/assets/javascripts/batch_comments/components/inline_draft_comment_row.vue new file mode 100644 index 0000000000..385725cd10 --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/inline_draft_comment_row.vue @@ -0,0 +1,32 @@ + + + diff --git a/app/assets/javascripts/batch_comments/components/parallel_draft_comment_row.vue b/app/assets/javascripts/batch_comments/components/parallel_draft_comment_row.vue new file mode 100644 index 0000000000..68fd20e56b --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/parallel_draft_comment_row.vue @@ -0,0 +1,45 @@ + + + diff --git a/app/assets/javascripts/batch_comments/components/preview_dropdown.vue b/app/assets/javascripts/batch_comments/components/preview_dropdown.vue new file mode 100644 index 0000000000..195e1b7ec5 --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/preview_dropdown.vue @@ -0,0 +1,111 @@ + + + diff --git a/app/assets/javascripts/batch_comments/components/preview_item.vue b/app/assets/javascripts/batch_comments/components/preview_item.vue new file mode 100644 index 0000000000..22495eb4d7 --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/preview_item.vue @@ -0,0 +1,143 @@ + + + diff --git a/app/assets/javascripts/batch_comments/components/publish_button.vue b/app/assets/javascripts/batch_comments/components/publish_button.vue new file mode 100644 index 0000000000..f4dc0f04dc --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/publish_button.vue @@ -0,0 +1,55 @@ + + + diff --git a/app/assets/javascripts/batch_comments/components/review_bar.vue b/app/assets/javascripts/batch_comments/components/review_bar.vue new file mode 100644 index 0000000000..b0e8b80670 --- /dev/null +++ b/app/assets/javascripts/batch_comments/components/review_bar.vue @@ -0,0 +1,70 @@ + + diff --git a/app/assets/javascripts/batch_comments/constants.js b/app/assets/javascripts/batch_comments/constants.js new file mode 100644 index 0000000000..b309c339fc --- /dev/null +++ b/app/assets/javascripts/batch_comments/constants.js @@ -0,0 +1,3 @@ +export const CHANGES_TAB = 'diffs'; +export const DISCUSSION_TAB = 'notes'; +export const SHOW_TAB = 'show'; diff --git a/app/assets/javascripts/batch_comments/index.js b/app/assets/javascripts/batch_comments/index.js new file mode 100644 index 0000000000..e06285c0b3 --- /dev/null +++ b/app/assets/javascripts/batch_comments/index.js @@ -0,0 +1,24 @@ +import Vue from 'vue'; +import { mapActions } from 'vuex'; +import store from '~/mr_notes/stores'; +import ReviewBar from './components/review_bar.vue'; + +// eslint-disable-next-line import/prefer-default-export +export const initReviewBar = () => { + const el = document.getElementById('js-review-bar'); + + // eslint-disable-next-line no-new + new Vue({ + el, + store, + mounted() { + this.fetchDrafts(); + }, + methods: { + ...mapActions('batchComments', ['fetchDrafts']), + }, + render(createElement) { + return createElement(ReviewBar); + }, + }); +}; diff --git a/app/assets/javascripts/batch_comments/mixins/resolved_status.js b/app/assets/javascripts/batch_comments/mixins/resolved_status.js index 3bbbaa86b5..2517fb198f 100644 --- a/app/assets/javascripts/batch_comments/mixins/resolved_status.js +++ b/app/assets/javascripts/batch_comments/mixins/resolved_status.js @@ -1,9 +1,58 @@ -import { sprintf, __ } from '~/locale'; +import { mapGetters } from 'vuex'; +import { sprintf, s__, __ } from '~/locale'; export default { + props: { + discussionId: { + type: String, + required: false, + default: null, + }, + resolveDiscussion: { + type: Boolean, + required: false, + default: false, + }, + isDraft: { + type: Boolean, + required: false, + default: false, + }, + }, computed: { + ...mapGetters(['isDiscussionResolved']), + resolvedStatusMessage() { + let message; + const discussionResolved = this.isDiscussionResolved( + this.draft ? this.draft.discussion_id : this.discussionId, + ); + const discussionToBeResolved = this.draft + ? this.draft.resolve_discussion + : this.resolveDiscussion; + + if (discussionToBeResolved && discussionResolved && !this.$options.showStaysResolved) { + return undefined; + } + + if (discussionToBeResolved) { + message = discussionResolved + ? s__('MergeRequests|Thread stays resolved') + : s__('MergeRequests|Thread will be resolved'); + } else if (discussionResolved) { + message = s__('MergeRequests|Thread will be unresolved'); + } else if (this.$options.showStaysResolved) { + message = s__('MergeRequests|Thread stays unresolved'); + } + + return message; + }, + componentClasses() { + return this.resolveDiscussion ? 'is-resolving-discussion' : 'is-unresolving-discussion'; + }, resolveButtonTitle() { - let title = __('Mark comment as resolved'); + if (this.isDraft || this.discussionId) return this.resolvedStatusMessage; + + let title = __('Mark as resolved'); if (this.resolvedBy) { title = sprintf(__('Resolved by %{name}'), { name: this.resolvedBy.name }); @@ -12,4 +61,5 @@ export default { return title; }, }, + showStaysResolved: true, }; diff --git a/app/assets/javascripts/batch_comments/services/drafts_service.js b/app/assets/javascripts/batch_comments/services/drafts_service.js new file mode 100644 index 0000000000..36d2f8df61 --- /dev/null +++ b/app/assets/javascripts/batch_comments/services/drafts_service.js @@ -0,0 +1,33 @@ +import axios from '~/lib/utils/axios_utils'; + +export default { + createNewDraft(endpoint, data) { + const postData = { ...data, draft_note: data.note }; + delete postData.note; + + return axios.post(endpoint, postData); + }, + deleteDraft(endpoint, draftId) { + return axios.delete(`${endpoint}/${draftId}`); + }, + publishDraft(endpoint, draftId) { + return axios.post(endpoint, { id: draftId }); + }, + addDraftToDiscussion(endpoint, data) { + return axios.post(endpoint, data); + }, + fetchDrafts(endpoint) { + return axios.get(endpoint); + }, + publish(endpoint) { + return axios.post(endpoint); + }, + discard(endpoint) { + return axios.delete(endpoint); + }, + update(endpoint, { draftId, note, resolveDiscussion, position }) { + return axios.put(`${endpoint}/${draftId}`, { + draft_note: { note, resolve_discussion: resolveDiscussion, position }, + }); + }, +}; diff --git a/app/assets/javascripts/batch_comments/stores/index.js b/app/assets/javascripts/batch_comments/stores/index.js new file mode 100644 index 0000000000..08dc9ea70f --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/index.js @@ -0,0 +1,14 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import batchComments from './modules/batch_comments'; + +Vue.use(Vuex); + +export const createStore = () => + new Vuex.Store({ + modules: { + batchComments: batchComments(), + }, + }); + +export default createStore(); diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js new file mode 100644 index 0000000000..1ef012696c --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/actions.js @@ -0,0 +1,151 @@ +import flash from '~/flash'; +import { __ } from '~/locale'; +import { scrollToElement } from '~/lib/utils/common_utils'; +import service from '../../../services/drafts_service'; +import * as types from './mutation_types'; +import { CHANGES_TAB, DISCUSSION_TAB, SHOW_TAB } from '../../../constants'; + +export const saveDraft = ({ dispatch }, draft) => + dispatch('saveNote', { ...draft, isDraft: true }, { root: true }); + +export const addDraftToDiscussion = ({ commit }, { endpoint, data }) => + service + .addDraftToDiscussion(endpoint, data) + .then(res => res.data) + .then(res => { + commit(types.ADD_NEW_DRAFT, res); + return res; + }) + .catch(() => { + flash(__('An error occurred adding a draft to the thread.')); + }); + +export const createNewDraft = ({ commit }, { endpoint, data }) => + service + .createNewDraft(endpoint, data) + .then(res => res.data) + .then(res => { + commit(types.ADD_NEW_DRAFT, res); + return res; + }) + .catch(() => { + flash(__('An error occurred adding a new draft.')); + }); + +export const deleteDraft = ({ commit, getters }, draft) => + service + .deleteDraft(getters.getNotesData.draftsPath, draft.id) + .then(() => { + commit(types.DELETE_DRAFT, draft.id); + }) + .catch(() => flash(__('An error occurred while deleting the comment'))); + +export const fetchDrafts = ({ commit, getters }) => + service + .fetchDrafts(getters.getNotesData.draftsPath) + .then(res => res.data) + .then(data => commit(types.SET_BATCH_COMMENTS_DRAFTS, data)) + .catch(() => flash(__('An error occurred while fetching pending comments'))); + +export const publishSingleDraft = ({ commit, dispatch, getters }, draftId) => { + commit(types.REQUEST_PUBLISH_DRAFT, draftId); + + service + .publishDraft(getters.getNotesData.draftsPublishPath, draftId) + .then(() => dispatch('updateDiscussionsAfterPublish')) + .then(() => commit(types.RECEIVE_PUBLISH_DRAFT_SUCCESS, draftId)) + .catch(() => commit(types.RECEIVE_PUBLISH_DRAFT_ERROR, draftId)); +}; + +export const publishReview = ({ commit, dispatch, getters }) => { + commit(types.REQUEST_PUBLISH_REVIEW); + + return service + .publish(getters.getNotesData.draftsPublishPath) + .then(() => dispatch('updateDiscussionsAfterPublish')) + .then(() => commit(types.RECEIVE_PUBLISH_REVIEW_SUCCESS)) + .catch(() => commit(types.RECEIVE_PUBLISH_REVIEW_ERROR)); +}; + +export const updateDiscussionsAfterPublish = ({ dispatch, getters, rootGetters }) => + dispatch('fetchDiscussions', { path: getters.getNotesData.discussionsPath }, { root: true }).then( + () => + dispatch('diffs/assignDiscussionsToDiff', rootGetters.discussionsStructuredByLineCode, { + root: true, + }), + ); + +export const discardReview = ({ commit, getters }) => { + commit(types.REQUEST_DISCARD_REVIEW); + + return service + .discard(getters.getNotesData.draftsDiscardPath) + .then(() => commit(types.RECEIVE_DISCARD_REVIEW_SUCCESS)) + .catch(() => commit(types.RECEIVE_DISCARD_REVIEW_ERROR)); +}; + +export const updateDraft = ( + { commit, getters }, + { note, noteText, resolveDiscussion, position, callback }, +) => + service + .update(getters.getNotesData.draftsPath, { + draftId: note.id, + note: noteText, + resolveDiscussion, + position: JSON.stringify(position), + }) + .then(res => res.data) + .then(data => commit(types.RECEIVE_DRAFT_UPDATE_SUCCESS, data)) + .then(callback) + .catch(() => flash(__('An error occurred while updating the comment'))); + +export const scrollToDraft = ({ dispatch, rootGetters }, draft) => { + const discussion = draft.discussion_id && rootGetters.getDiscussion(draft.discussion_id); + const tab = + draft.file_hash || (discussion && discussion.diff_discussion) ? CHANGES_TAB : SHOW_TAB; + const tabEl = tab === CHANGES_TAB ? CHANGES_TAB : DISCUSSION_TAB; + const draftID = `note_${draft.id}`; + const el = document.querySelector(`#${tabEl} #${draftID}`); + + dispatch('closeReviewDropdown'); + + window.location.hash = draftID; + + if (window.mrTabs.currentAction !== tab) { + window.mrTabs.tabShown(tab); + } + + if (discussion) { + dispatch('expandDiscussion', { discussionId: discussion.id }, { root: true }); + } + + if (el) { + setTimeout(() => scrollToElement(el.closest('.draft-note-component'))); + } +}; + +export const toggleReviewDropdown = ({ dispatch, state }) => { + if (state.showPreviewDropdown) { + dispatch('closeReviewDropdown'); + } else { + dispatch('openReviewDropdown'); + } +}; + +export const openReviewDropdown = ({ commit }) => commit(types.OPEN_REVIEW_DROPDOWN); +export const closeReviewDropdown = ({ commit }) => commit(types.CLOSE_REVIEW_DROPDOWN); + +export const expandAllDiscussions = ({ dispatch, state }) => + state.drafts + .filter(draft => draft.discussion_id) + .forEach(draft => { + dispatch('expandDiscussion', { discussionId: draft.discussion_id }, { root: true }); + }); + +export const toggleResolveDiscussion = ({ commit }, draftId) => { + commit(types.TOGGLE_RESOLVE_DISCUSSION, draftId); +}; + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js new file mode 100644 index 0000000000..43f43c983a --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/getters.js @@ -0,0 +1,87 @@ +import { parallelLineKey, showDraftOnSide } from '../../../utils'; + +export const draftsCount = state => state.drafts.length; + +export const getNotesData = (state, getters, rootState, rootGetters) => rootGetters.getNotesData; + +export const hasDrafts = state => state.drafts.length > 0; + +export const draftsPerDiscussionId = state => + state.drafts.reduce((acc, draft) => { + if (draft.discussion_id) { + acc[draft.discussion_id] = draft; + } + + return acc; + }, {}); + +export const draftsPerFileHashAndLine = state => + state.drafts.reduce((acc, draft) => { + if (draft.file_hash) { + if (!acc[draft.file_hash]) { + acc[draft.file_hash] = {}; + } + + acc[draft.file_hash][draft.line_code] = draft; + } + + return acc; + }, {}); + +export const shouldRenderDraftRow = (state, getters) => (diffFileSha, line) => + Boolean( + diffFileSha in getters.draftsPerFileHashAndLine && + getters.draftsPerFileHashAndLine[diffFileSha][line.line_code], + ); + +export const shouldRenderParallelDraftRow = (state, getters) => (diffFileSha, line) => { + const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; + const [lkey, rkey] = [parallelLineKey(line, 'left'), parallelLineKey(line, 'right')]; + + return draftsForFile ? Boolean(draftsForFile[lkey] || draftsForFile[rkey]) : false; +}; + +export const hasParallelDraftLeft = (state, getters) => (diffFileSha, line) => { + const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; + const lkey = parallelLineKey(line, 'left'); + + return draftsForFile ? Boolean(draftsForFile[lkey]) : false; +}; + +export const hasParallelDraftRight = (state, getters) => (diffFileSha, line) => { + const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; + const rkey = parallelLineKey(line, 'left'); + + return draftsForFile ? Boolean(draftsForFile[rkey]) : false; +}; + +export const shouldRenderDraftRowInDiscussion = (state, getters) => discussionId => + typeof getters.draftsPerDiscussionId[discussionId] !== 'undefined'; + +export const draftForDiscussion = (state, getters) => discussionId => + getters.draftsPerDiscussionId[discussionId] || {}; + +export const draftForLine = (state, getters) => (diffFileSha, line, side = null) => { + const draftsForFile = getters.draftsPerFileHashAndLine[diffFileSha]; + + const key = side !== null ? parallelLineKey(line, side) : line.line_code; + + if (draftsForFile) { + const draft = draftsForFile[key]; + if (draft && showDraftOnSide(line, side)) { + return draft; + } + } + return {}; +}; + +export const draftsForFile = state => diffFileSha => + state.drafts.filter(draft => draft.file_hash === diffFileSha); + +export const isPublishingDraft = state => draftId => + state.currentlyPublishingDrafts.indexOf(draftId) !== -1; + +export const sortedDrafts = state => [...state.drafts].sort((a, b) => a.id > b.id); + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/index.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/index.js new file mode 100644 index 0000000000..81dab0566c --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/index.js @@ -0,0 +1,12 @@ +import state from './state'; +import mutations from './mutations'; +import * as actions from './actions'; +import * as getters from './getters'; + +export default () => ({ + namespaced: true, + state: state(), + mutations, + actions, + getters, +}); diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutation_types.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutation_types.js new file mode 100644 index 0000000000..c8f0658c21 --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutation_types.js @@ -0,0 +1,23 @@ +export const ENABLE_BATCH_COMMENTS = 'ENABLE_BATCH_COMMENTS'; +export const ADD_NEW_DRAFT = 'ADD_NEW_DRAFT'; +export const DELETE_DRAFT = 'DELETE_DRAFT'; +export const SET_BATCH_COMMENTS_DRAFTS = 'SET_BATCH_COMMENTS_DRAFTS'; + +export const REQUEST_PUBLISH_DRAFT = 'REQUEST_PUBLISH_DRAFT'; +export const RECEIVE_PUBLISH_DRAFT_SUCCESS = 'RECEIVE_PUBLISH_DRAFT_SUCCESS'; +export const RECEIVE_PUBLISH_DRAFT_ERROR = 'RECEIVE_PUBLISH_DRAFT_ERROR'; + +export const REQUEST_PUBLISH_REVIEW = 'REQUEST_PUBLISH_REVIEW'; +export const RECEIVE_PUBLISH_REVIEW_SUCCESS = 'RECEIVE_PUBLISH_REVIEW_SUCCESS'; +export const RECEIVE_PUBLISH_REVIEW_ERROR = 'RECEIVE_PUBLISH_REVIEW_ERROR'; + +export const REQUEST_DISCARD_REVIEW = 'REQUEST_DISCARD_REVIEW'; +export const RECEIVE_DISCARD_REVIEW_SUCCESS = 'RECEIVE_DISCARD_REVIEW_SUCCESS'; +export const RECEIVE_DISCARD_REVIEW_ERROR = 'RECEIVE_DISCARD_REVIEW_ERROR'; + +export const RECEIVE_DRAFT_UPDATE_SUCCESS = 'RECEIVE_DRAFT_UPDATE_SUCCESS'; + +export const OPEN_REVIEW_DROPDOWN = 'OPEN_REVIEW_DROPDOWN'; +export const CLOSE_REVIEW_DROPDOWN = 'CLOSE_REVIEW_DROPDOWN'; + +export const TOGGLE_RESOLVE_DISCUSSION = 'TOGGLE_RESOLVE_DISCUSSION'; diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js new file mode 100644 index 0000000000..81ceef7b16 --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/mutations.js @@ -0,0 +1,81 @@ +import * as types from './mutation_types'; + +const processDraft = draft => ({ + ...draft, + isDraft: true, +}); + +export default { + [types.ADD_NEW_DRAFT](state, draft) { + state.drafts.push(processDraft(draft)); + }, + + [types.DELETE_DRAFT](state, draftId) { + state.drafts = state.drafts.filter(draft => draft.id !== draftId); + }, + + [types.SET_BATCH_COMMENTS_DRAFTS](state, drafts) { + state.drafts = drafts.map(processDraft); + }, + + [types.REQUEST_PUBLISH_DRAFT](state, draftId) { + state.currentlyPublishingDrafts.push(draftId); + }, + [types.RECEIVE_PUBLISH_DRAFT_SUCCESS](state, draftId) { + state.currentlyPublishingDrafts = state.currentlyPublishingDrafts.filter( + publishingDraftId => publishingDraftId !== draftId, + ); + state.drafts = state.drafts.filter(d => d.id !== draftId); + }, + [types.RECEIVE_PUBLISH_DRAFT_ERROR](state, draftId) { + state.currentlyPublishingDrafts = state.currentlyPublishingDrafts.filter( + publishingDraftId => publishingDraftId !== draftId, + ); + }, + + [types.REQUEST_PUBLISH_REVIEW](state) { + state.isPublishing = true; + }, + [types.RECEIVE_PUBLISH_REVIEW_SUCCESS](state) { + state.isPublishing = false; + state.drafts = []; + }, + [types.RECEIVE_PUBLISH_REVIEW_ERROR](state) { + state.isPublishing = false; + }, + [types.REQUEST_DISCARD_REVIEW](state) { + state.isDiscarding = true; + }, + [types.RECEIVE_DISCARD_REVIEW_SUCCESS](state) { + state.isDiscarding = false; + state.drafts = []; + }, + [types.RECEIVE_DISCARD_REVIEW_ERROR](state) { + state.isDiscarding = false; + }, + [types.RECEIVE_DRAFT_UPDATE_SUCCESS](state, data) { + const index = state.drafts.findIndex(draft => draft.id === data.id); + + if (index >= 0) { + state.drafts.splice(index, 1, processDraft(data)); + } + }, + [types.OPEN_REVIEW_DROPDOWN](state) { + state.showPreviewDropdown = true; + }, + [types.CLOSE_REVIEW_DROPDOWN](state) { + state.showPreviewDropdown = false; + }, + [types.TOGGLE_RESOLVE_DISCUSSION](state, draftId) { + state.drafts = state.drafts.map(draft => { + if (draft.id === draftId) { + return { + ...draft, + resolve_discussion: !draft.resolve_discussion, + }; + } + + return draft; + }); + }, +}; diff --git a/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js new file mode 100644 index 0000000000..80c710deab --- /dev/null +++ b/app/assets/javascripts/batch_comments/stores/modules/batch_comments/state.js @@ -0,0 +1,9 @@ +export default () => ({ + withBatchComments: true, + isDraftsFetched: false, + drafts: [], + isPublishing: false, + currentlyPublishingDrafts: [], + isDiscarding: false, + showPreviewDropdown: false, +}); diff --git a/app/assets/javascripts/batch_comments/utils.js b/app/assets/javascripts/batch_comments/utils.js new file mode 100644 index 0000000000..cf4f7af0eb --- /dev/null +++ b/app/assets/javascripts/batch_comments/utils.js @@ -0,0 +1,35 @@ +import { getFormData } from '~/diffs/store/utils'; + +export const getDraftReplyFormData = data => ({ + endpoint: data.notesData.draftsPath, + data, +}); + +export const getDraftFormData = params => ({ + endpoint: params.notesData.draftsPath, + data: getFormData(params), +}); + +export const parallelLineKey = (line, side) => (line[side] ? line[side].line_code : ''); + +export const showDraftOnSide = (line, side) => { + // inline mode + if (side === null) { + return true; + } + + // parallel + if (side === 'left' || side === 'right') { + const otherSide = side === 'left' ? 'right' : 'left'; + const thisCode = (line[side] && line[side].line_code) || ''; + const otherCode = (line[otherSide] && line[otherSide].line_code) || ''; + + // either the lineCodes are different + // or if they're the same, only show on the left side + if (thisCode !== otherCode || (side === 'left' && thisCode === otherCode)) { + return true; + } + } + + return false; +}; diff --git a/app/assets/javascripts/behaviors/markdown/render_mermaid.js b/app/assets/javascripts/behaviors/markdown/render_mermaid.js index 057cdb6cc4..e4c69a114e 100644 --- a/app/assets/javascripts/behaviors/markdown/render_mermaid.js +++ b/app/assets/javascripts/behaviors/markdown/render_mermaid.js @@ -25,9 +25,10 @@ function importMermaidModule() { return import(/* webpackChunkName: 'mermaid' */ 'mermaid') .then(mermaid => { let theme = 'neutral'; + const ideDarkThemes = ['dark', 'solarized-dark']; if ( - window.gon?.user_color_scheme === 'dark' && + ideDarkThemes.includes(window.gon?.user_color_scheme) && // if on the Web IDE page document.querySelector('.ide') ) { diff --git a/app/assets/javascripts/blob/components/blob_content.vue b/app/assets/javascripts/blob/components/blob_content.vue index 4f433bd8df..eb7f45cba6 100644 --- a/app/assets/javascripts/blob/components/blob_content.vue +++ b/app/assets/javascripts/blob/components/blob_content.vue @@ -66,6 +66,7 @@ export default { ref="contentViewer" :content="content" :type="activeViewer.fileType" + data-qa-selector="file_content" /> diff --git a/app/assets/javascripts/blob/components/blob_header.vue b/app/assets/javascripts/blob/components/blob_header.vue index e5e01caa9a..76c5779f3a 100644 --- a/app/assets/javascripts/blob/components/blob_header.vue +++ b/app/assets/javascripts/blob/components/blob_header.vue @@ -30,6 +30,11 @@ export default { required: false, default: SIMPLE_BLOB_VIEWER, }, + hasRenderError: { + type: Boolean, + required: false, + default: false, + }, }, data() { return { @@ -75,6 +80,7 @@ export default { v-if="showDefaultActions" :raw-path="blob.rawPath" :active-viewer="viewer" + :has-render-error="hasRenderError" @copy="proxyCopyRequest" /> diff --git a/app/assets/javascripts/blob/components/blob_header_default_actions.vue b/app/assets/javascripts/blob/components/blob_header_default_actions.vue index 63ae70a37f..62fef108b4 100644 --- a/app/assets/javascripts/blob/components/blob_header_default_actions.vue +++ b/app/assets/javascripts/blob/components/blob_header_default_actions.vue @@ -27,6 +27,11 @@ export default { default: SIMPLE_BLOB_VIEWER, required: false, }, + hasRenderError: { + type: Boolean, + required: false, + default: false, + }, }, computed: { downloadUrl() { @@ -44,11 +49,13 @@ export default { diff --git a/app/assets/javascripts/boards/components/board_column.vue b/app/assets/javascripts/boards/components/board_column.vue index fb854616a0..0ed7579e8e 100644 --- a/app/assets/javascripts/boards/components/board_column.vue +++ b/app/assets/javascripts/boards/components/board_column.vue @@ -1,33 +1,22 @@ + + diff --git a/app/assets/javascripts/boards/components/board_delete.js b/app/assets/javascripts/boards/components/board_delete.js index cc15dc82db..b74234a2e3 100644 --- a/app/assets/javascripts/boards/components/board_delete.js +++ b/app/assets/javascripts/boards/components/board_delete.js @@ -1,8 +1,15 @@ import $ from 'jquery'; import Vue from 'vue'; +import { GlButton, GlTooltipDirective } from '@gitlab/ui'; import { __ } from '~/locale'; export default Vue.extend({ + components: { + GlButton, + }, + directives: { + GlTooltip: GlTooltipDirective, + }, props: { list: { type: Object, diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue index c4e2c398d4..4270ad5783 100644 --- a/app/assets/javascripts/boards/components/board_list.vue +++ b/app/assets/javascripts/boards/components/board_list.vue @@ -104,7 +104,7 @@ export default { }, }, created() { - eventHub.$on(`hide-issue-form-${this.list.id}`, this.toggleForm); + eventHub.$on(`toggle-issue-form-${this.list.id}`, this.toggleForm); eventHub.$on(`scroll-board-list-${this.list.id}`, this.scrollToTop); }, mounted() { @@ -381,7 +381,7 @@ export default { this.$refs.list.addEventListener('scroll', this.onScroll); }, beforeDestroy() { - eventHub.$off(`hide-issue-form-${this.list.id}`, this.toggleForm); + eventHub.$off(`toggle-issue-form-${this.list.id}`, this.toggleForm); eventHub.$off(`scroll-board-list-${this.list.id}`, this.scrollToTop); this.$refs.list.removeEventListener('scroll', this.onScroll); }, diff --git a/app/assets/javascripts/boards/components/board_list_header.vue b/app/assets/javascripts/boards/components/board_list_header.vue new file mode 100644 index 0000000000..eb12617a66 --- /dev/null +++ b/app/assets/javascripts/boards/components/board_list_header.vue @@ -0,0 +1,291 @@ + + + diff --git a/app/assets/javascripts/boards/components/board_new_issue.vue b/app/assets/javascripts/boards/components/board_new_issue.vue index deebe12210..c72fb7b30f 100644 --- a/app/assets/javascripts/boards/components/board_new_issue.vue +++ b/app/assets/javascripts/boards/components/board_new_issue.vue @@ -92,7 +92,7 @@ export default { }, cancel() { this.title = ''; - eventHub.$emit(`hide-issue-form-${this.list.id}`); + eventHub.$emit(`toggle-issue-form-${this.list.id}`); }, setSelectedProject(selectedProject) { this.selectedProject = selectedProject; diff --git a/app/assets/javascripts/boards/components/board_sidebar.js b/app/assets/javascripts/boards/components/board_sidebar.js index c895315881..056a7b4821 100644 --- a/app/assets/javascripts/boards/components/board_sidebar.js +++ b/app/assets/javascripts/boards/components/board_sidebar.js @@ -54,7 +54,7 @@ export default Vue.extend({ return this.issue.milestone ? this.issue.milestone.title : __('No milestone'); }, canRemove() { - return !this.list.preset; + return !this.list?.preset; }, hasLabels() { return this.issue.labels && this.issue.labels.length; diff --git a/app/assets/javascripts/boards/components/issue_card_inner.vue b/app/assets/javascripts/boards/components/issue_card_inner.vue index a589fb325b..f2e198eaed 100644 --- a/app/assets/javascripts/boards/components/issue_card_inner.vue +++ b/app/assets/javascripts/boards/components/issue_card_inner.vue @@ -147,7 +147,7 @@ export default {