From 510528bb68ef17d6627285384ba38cf8d8b33a8c Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Thu, 26 Dec 2019 22:10:19 +0530 Subject: [PATCH] New upstream version 12.5.4 --- .gitignore | 2 + .gitlab-ci.yml | 4 +- .gitlab/CODEOWNERS | 8 +- .gitlab/ci/cng.gitlab-ci.yml | 3 +- .gitlab/ci/docs.gitlab-ci.yml | 15 +- .gitlab/ci/frontend.gitlab-ci.yml | 10 +- .gitlab/ci/global.gitlab-ci.yml | 217 +- .gitlab/ci/memory.gitlab-ci.yml | 2 +- .gitlab/ci/notifications.gitlab-ci.yml | 29 - .gitlab/ci/pages.gitlab-ci.yml | 5 +- .gitlab/ci/qa.gitlab-ci.yml | 29 +- .gitlab/ci/rails.gitlab-ci.yml | 36 +- .gitlab/ci/releases.gitlab-ci.yml | 22 + .gitlab/ci/reports.gitlab-ci.yml | 8 +- .gitlab/ci/review.gitlab-ci.yml | 100 +- .gitlab/ci/setup.gitlab-ci.yml | 7 +- .gitlab/ci/test-metadata.gitlab-ci.yml | 4 +- .../Security developer workflow.md | 2 +- .../merge_request_templates/Documentation.md | 2 +- .haml-lint_todo.yml | 4 - .overcommit.yml.example | 17 +- .rubocop.yml | 5 +- .rubocop_todo.yml | 7 - CHANGELOG-EE.md | 99 +- CHANGELOG.md | 379 +- GITALY_SERVER_VERSION | 2 +- GITLAB_ELASTICSEARCH_INDEXER_VERSION | 2 +- GITLAB_PAGES_VERSION | 2 +- Gemfile | 47 +- Gemfile.lock | 196 +- Guardfile | 43 + PROCESS.md | 2 +- VERSION | 2 +- .../images/cluster_app_logos/crossplane.png | Bin 0 -> 1850 bytes .../cluster_app_logos/elastic_stack.png | Bin 0 -> 2919 bytes app/assets/javascripts/api.js | 25 +- .../javascripts/behaviors/preview_markdown.js | 40 +- .../blob/file_template_mediator.js | 6 +- .../boards/components/board_form.vue | 4 +- .../boards/components/board_list.vue | 3 +- .../boards/components/boards_selector.vue | 4 +- .../boards/components/issue_card_inner.vue | 4 +- .../boards/components/modal/index.vue | 3 +- app/assets/javascripts/boards/index.js | 4 + app/assets/javascripts/boards/models/list.js | 4 +- .../javascripts/boards/stores/getters.js | 3 + app/assets/javascripts/boards/stores/index.js | 6 +- app/assets/javascripts/boards/stores/state.js | 2 +- .../javascripts/boards/toggle_labels.js | 1 + .../javascripts/clusters/clusters_bundle.js | 52 +- .../clusters/components/applications.vue | 191 +- .../components/crossplane_provider_stack.vue | 93 + ...install_application_confirmation_modal.vue | 12 +- app/assets/javascripts/clusters/constants.js | 13 +- .../clusters/services/clusters_service.js | 2 + .../clusters/stores/clusters_store.js | 43 +- app/assets/javascripts/commit/image_file.js | 236 +- .../javascripts/compare_autocomplete.js | 18 +- .../components/project_form_group.vue | 2 +- .../contributors/components/contributors.vue | 227 + app/assets/javascripts/contributors/index.js | 23 + .../services/contributors_service.js | 7 + .../contributors/stores/actions.js | 20 + .../contributors/stores/getters.js | 33 + .../javascripts/contributors/stores/index.js | 18 + .../contributors/stores/mutation_types.js | 3 + .../contributors/stores/mutations.js | 17 + .../javascripts/contributors/stores/state.js | 5 + app/assets/javascripts/contributors/utils.js | 30 + .../components/cluster_form_dropdown.vue | 99 +- .../components/create_eks_cluster.vue | 24 + .../eks_cluster_configuration_form.vue | 182 +- .../components/region_dropdown.vue | 63 - .../components/service_credentials_form.vue | 140 +- .../create_cluster/eks_cluster/constants.js | 7 +- .../create_cluster/eks_cluster/index.js | 45 +- .../services/aws_services_facade.js | 132 +- .../eks_cluster/store/actions.js | 84 +- .../create_cluster/eks_cluster/store/index.js | 15 +- .../eks_cluster/store/mutation_types.js | 9 + .../eks_cluster/store/mutations.js | 32 + .../create_cluster/eks_cluster/store/state.js | 19 +- .../gke_cluster_namespace/index.js | 0 .../create_cluster/init_create_cluster.js | 37 + .../components/stage_card_list_item.vue | 44 - .../components/stage_nav_item.vue | 36 +- .../diffs/components/diff_content.vue | 2 + .../diffs/components/diff_file.vue | 13 +- app/assets/javascripts/dropzone_input.js | 2 +- .../components/error_details.vue | 141 + .../components/error_tracking_list.vue | 56 +- .../error_tracking/components/stacktrace.vue | 33 + .../components/stacktrace_entry.vue | 110 + .../javascripts/error_tracking/details.js | 25 + .../error_tracking/{index.js => list.js} | 0 .../error_tracking/services/index.js | 2 +- .../error_tracking/store/details/actions.js | 63 + .../error_tracking/store/details/getters.js | 3 + .../store/details/mutation_types.js | 4 + .../error_tracking/store/details/mutations.js | 16 + .../error_tracking/store/details/state.js | 6 + .../javascripts/error_tracking/store/index.js | 33 +- .../store/{ => list}/actions.js | 4 +- .../error_tracking/store/list/getters.js | 4 + .../store/{ => list}/mutation_types.js | 0 .../store/{ => list}/mutations.js | 0 .../error_tracking/store/list/state.js | 5 + .../components/app.vue | 31 +- .../components/error_tracking_form.vue | 45 +- .../error_tracking_settings/store/actions.js | 3 + .../store/mutation_types.js | 1 + .../store/mutations.js | 3 + .../error_tracking_settings/store/state.js | 1 + .../available_dropdown_mappings.js | 19 + .../filtered_search_dropdown_manager.js | 11 +- .../filtered_search_manager.js | 1 + .../issuable_filtered_search_token_keys.js | 44 +- app/assets/javascripts/flash.js | 2 +- .../frequent_items/store/mutations.js | 3 +- app/assets/javascripts/gl_dropdown.js | 4 +- .../components/grafana_integration.vue | 103 + .../javascripts/grafana_integration/index.js | 14 + .../grafana_integration/store/actions.js | 42 + .../grafana_integration/store/index.js | 16 + .../store/mutation_types.js | 3 + .../grafana_integration/store/mutations.js | 13 + .../grafana_integration/store/state.js | 8 + app/assets/javascripts/group.js | 24 + .../javascripts/helpers/monitor_helper.js | 44 +- .../javascripts/ide/components/jobs/stage.vue | 3 +- .../ide/components/preview/clientside.vue | 3 + .../ide/components/repo_editor.vue | 1 + app/assets/javascripts/ide/services/index.js | 31 +- .../javascripts/ide/stores/actions/file.js | 27 +- .../ide/stores/actions/merge_request.js | 16 +- .../javascripts/ide/stores/actions/tree.js | 7 +- app/assets/javascripts/ide/stores/getters.js | 12 +- app/assets/javascripts/ide/stores/index.js | 2 + .../ide/stores/modules/clientside/actions.js | 12 + .../ide/stores/modules/clientside/index.js | 6 + app/assets/javascripts/ide/stores/utils.js | 9 + .../issuable_bulk_update_sidebar.js | 19 +- .../issuables_list/components/issuable.vue | 335 + .../components/issuables_list_app.vue | 277 + .../javascripts/issuables_list/constants.js | 33 + .../javascripts/issuables_list/eventhub.js | 5 + .../javascripts/issuables_list/index.js | 24 + app/assets/javascripts/issue.js | 15 +- .../javascripts/jobs/components/log/log.vue | 33 +- app/assets/javascripts/jobs/store/utils.js | 2 +- app/assets/javascripts/labels_select.js | 159 +- app/assets/javascripts/lib/graphql.js | 6 +- .../javascripts/lib/utils/chart_utils.js | 17 + .../javascripts/lib/utils/datetime_utility.js | 58 +- app/assets/javascripts/lib/utils/notify.js | 8 +- .../javascripts/lib/utils/number_utils.js | 33 + .../javascripts/lib/utils/text_utility.js | 23 +- .../javascripts/lib/utils/tick_formats.js | 39 - app/assets/javascripts/line_highlighter.js | 17 +- app/assets/javascripts/main.js | 20 - app/assets/javascripts/manual_ordering.js | 6 +- app/assets/javascripts/merge_request.js | 26 +- .../monitoring/components/charts/anomaly.vue | 227 + .../monitoring/components/charts/heatmap.vue | 73 + .../components/charts/time_series.vue | 96 +- .../monitoring/components/dashboard.vue | 232 +- .../date_time_picker/date_time_picker.vue | 28 +- .../monitoring/components/embed.vue | 7 +- .../monitoring/components/graph_group.vue | 2 +- .../monitoring/components/panel_type.vue | 27 +- .../components/shared/prometheus_header.vue | 15 + .../javascripts/monitoring/constants.js | 15 + .../monitoring/monitoring_bundle.js | 7 - .../javascripts/monitoring/stores/actions.js | 54 +- .../monitoring/stores/mutation_types.js | 3 +- .../monitoring/stores/mutations.js | 38 +- .../javascripts/monitoring/stores/state.js | 6 +- .../javascripts/monitoring/stores/utils.js | 6 - app/assets/javascripts/monitoring/utils.js | 19 +- .../javascripts/network/branch_graph.js | 193 +- app/assets/javascripts/new_branch_form.js | 42 +- app/assets/javascripts/new_commit_form.js | 5 +- app/assets/javascripts/notes.js | 108 +- .../components/diff_discussion_header.vue | 133 + .../notes/components/note_header.vue | 1 + .../notes/components/noteable_discussion.vue | 111 +- .../notes/components/notes_app.vue | 13 +- .../mixins/description_version_history.js | 12 + .../javascripts/notes/stores/actions.js | 16 + .../notes/stores/collapse_utils.js | 44 +- .../pages/admin/abuse_reports/index.js | 7 +- .../javascripts/pages/admin/clusters/index.js | 20 +- app/assets/javascripts/pages/groups/index.js | 20 +- .../javascripts/pages/groups/issues/index.js | 3 + .../new/fetch_group_path_availability.js | 7 + .../pages/groups/new/group_path_validator.js | 91 + .../javascripts/pages/groups/new/index.js | 6 + .../pages/projects/blob/show/index.js | 1 + .../pages/projects/clusters/new/index.js | 13 - .../pages/projects/clusters/show/index.js | 2 +- .../pages/projects/commit/show/index.js | 1 + .../projects/error_tracking/details/index.js | 5 + .../pages/projects/error_tracking/index.js | 5 - .../projects/error_tracking/index/index.js | 5 + .../pages/projects/graphs/show/index.js | 26 +- .../graphs/show/stat_graph_contributors.js | 140 - .../show/stat_graph_contributors_graph.js | 379 - .../show/stat_graph_contributors_util.js | 143 - .../javascripts/pages/projects/index.js | 19 +- .../merge_requests/init_merge_request_show.js | 2 + .../pages/projects/network/network.js | 31 +- .../pages/projects/pages_domains/form.js | 20 +- .../projects/pipelines/test_report/index.js | 2 + .../javascripts/pages/projects/project.js | 5 - .../settings/operations/show/index.js | 2 + .../permissions/components/settings_panel.vue | 83 +- .../javascripts/pages/projects/show/index.js | 2 +- .../pages/projects/tree/show/index.js | 2 +- .../javascripts/pages/sessions/new/index.js | 14 + .../components/add_request.vue | 48 + .../components/performance_bar_app.vue | 3 + .../javascripts/performance_bar/index.js | 14 + .../components/graph/action_component.vue | 2 +- .../components/pipelines_table_row.vue | 6 +- .../components/test_reports/test_reports.vue | 81 + .../test_reports/test_suite_table.vue | 108 + .../components/test_reports/test_summary.vue | 116 + .../test_reports/test_summary_table.vue | 129 + app/assets/javascripts/pipelines/constants.js | 6 + .../pipelines/pipeline_details_bundle.js | 25 +- .../pipelines/stores/test_reports/actions.js | 30 + .../pipelines/stores/test_reports/getters.js | 23 + .../pipelines/stores/test_reports/index.js | 15 + .../stores/test_reports/mutation_types.js | 4 + .../stores/test_reports/mutations.js | 19 + .../pipelines/stores/test_reports/state.js | 6 + .../pipelines/stores/test_reports/utils.js | 36 + .../privacy_policy_update_callout.js | 8 - app/assets/javascripts/profile/gl_crop.js | 29 +- app/assets/javascripts/project_find_file.js | 49 +- app/assets/javascripts/project_select.js | 109 +- .../javascripts/projects/project_new.js | 4 + .../components/collapsible_container.vue | 33 +- .../registry/components/table_registry.vue | 95 +- app/assets/javascripts/registry/constants.js | 19 +- .../javascripts/registry/stores/actions.js | 6 +- .../javascripts/registry/stores/mutations.js | 32 +- .../releases/detail/components/app.vue | 46 +- .../javascripts/releases/detail/index.js | 2 +- .../releases/detail/store/state.js | 1 + .../list/components/release_block.vue | 22 +- .../list/components/release_block_footer.vue | 112 + .../reports/components/issue_status_icon.vue | 2 +- .../reports/components/report_item.vue | 1 + .../components/directory_download_links.vue | 47 + .../repository/components/last_commit.vue | 58 +- .../repository/components/preview/index.vue | 49 + .../repository/components/table/index.vue | 109 +- .../repository/components/table/row.vue | 41 +- .../components/tree_action_link.vue | 28 + .../repository/components/tree_content.vue | 115 + app/assets/javascripts/repository/graphql.js | 6 + app/assets/javascripts/repository/index.js | 84 +- app/assets/javascripts/repository/log_tree.js | 22 +- .../javascripts/repository/pages/index.vue | 21 +- .../javascripts/repository/pages/tree.vue | 24 +- .../queries/commit.fragment.graphql | 8 + .../queries/getCommit.query.graphql | 9 +- .../queries/getCommits.query.graphql | 9 +- .../repository/queries/getFiles.query.graphql | 1 + .../queries/getReadme.query.graphql | 5 + .../queries/pathLastCommit.query.graphql | 21 +- app/assets/javascripts/repository/router.js | 2 +- .../javascripts/repository/utils/commit.js | 13 + .../javascripts/repository/utils/dom.js | 4 + .../javascripts/repository/utils/readme.js | 21 + .../javascripts/repository/utils/title.js | 8 +- app/assets/javascripts/right_sidebar.js | 52 +- app/assets/javascripts/search_autocomplete.js | 82 +- .../javascripts/{raven => sentry}/index.js | 8 +- .../sentry_config.js} | 60 +- .../subscriptions/sidebar_subscriptions.vue | 2 + .../subscriptions/subscriptions.vue | 26 +- .../sidebar/stores/sidebar_store.js | 4 + app/assets/javascripts/sourcegraph/index.js | 28 + app/assets/javascripts/sourcegraph/load.js | 6 + app/assets/javascripts/tree.js | 14 +- app/assets/javascripts/user_popovers.js | 5 + .../components/states/mr_widget_rebase.vue | 8 +- .../content_viewer/content_viewer.vue | 6 + .../viewers/markdown_viewer.vue | 6 + .../components/diff_viewer/diff_viewer.vue | 12 + .../viewers/image_diff/two_up_viewer.vue | 12 + .../diff_viewer/viewers/image_diff_viewer.vue | 10 + .../vue_shared/components/file_row.vue | 2 +- .../vue_shared/components/icon.vue | 2 +- .../components/issue/issue_assignees.vue | 51 +- .../vue_shared/components/markdown/header.vue | 4 +- .../markdown/suggestion_diff_header.vue | 2 +- .../components/notes/system_note.vue | 29 +- .../project_selector/project_selector.vue | 42 +- .../vue_shared/components/slot_switch.vue | 35 + .../vue_shared/components/split_button.vue | 76 + .../components/time_ago_tooltip.vue | 2 +- .../components/user_popover/user_popover.vue | 4 +- app/assets/javascripts/zen_mode.js | 32 +- .../stylesheets/bootstrap_migration.scss | 7 +- app/assets/stylesheets/framework.scss | 2 +- .../framework/ci_variable_list.scss | 10 + app/assets/stylesheets/framework/common.scss | 16 + .../stylesheets/framework/dropdowns.scss | 3 +- app/assets/stylesheets/framework/files.scss | 4 + app/assets/stylesheets/framework/filters.scss | 18 +- app/assets/stylesheets/framework/flash.scss | 88 +- app/assets/stylesheets/framework/layout.scss | 3 +- .../stylesheets/framework/memory_graph.scss | 6 +- app/assets/stylesheets/framework/modal.scss | 13 +- .../framework/responsive_tables.scss | 11 + .../stylesheets/framework/snippets.scss | 7 +- .../stylesheets/framework/variables.scss | 27 + .../framework/vue_transitions.scss | 24 + app/assets/stylesheets/mailer.scss | 117 + .../stylesheets/mailer_client_specific.scss | 65 + app/assets/stylesheets/pages/boards.scss | 10 +- .../stylesheets/pages/error_details.scss | 18 + .../pages/experimental_separate_sign_up.scss | 1 + app/assets/stylesheets/pages/graph.scss | 15 - app/assets/stylesheets/pages/milestone.scss | 7 +- app/assets/stylesheets/pages/notes.scss | 11 + app/assets/stylesheets/pages/pipelines.scss | 12 +- app/assets/stylesheets/pages/projects.scss | 1 + app/assets/stylesheets/pages/reports.scss | 1 - app/assets/stylesheets/pages/stat_graph.scss | 62 - app/assets/stylesheets/performance_bar.scss | 14 +- app/assets/stylesheets/utilities.scss | 10 + .../admin/abuse_reports_controller.rb | 5 +- .../admin/applications_controller.rb | 2 +- app/controllers/admin/groups_controller.rb | 2 +- .../admin/identities_controller.rb | 4 +- app/controllers/admin/keys_controller.rb | 4 +- app/controllers/admin/labels_controller.rb | 2 +- app/controllers/admin/projects_controller.rb | 2 +- app/controllers/admin/spam_logs_controller.rb | 2 +- app/controllers/admin/users_controller.rb | 2 +- app/controllers/application_controller.rb | 46 +- app/controllers/boards/issues_controller.rb | 5 +- .../clusters/applications_controller.rb | 2 +- .../clusters/clusters_controller.rb | 100 +- .../concerns/confirm_email_warning.rb | 2 +- .../concerns/issuable_collections.rb | 2 +- app/controllers/concerns/lfs_request.rb | 4 +- app/controllers/concerns/metrics_dashboard.rb | 39 +- app/controllers/concerns/milestone_actions.rb | 8 +- app/controllers/concerns/preview_markdown.rb | 30 +- .../redirects_for_missing_path_on_tree.rb | 17 + app/controllers/concerns/renders_commits.rb | 13 +- app/controllers/concerns/routable_actions.rb | 2 +- app/controllers/concerns/sourcegraph_gon.rb | 30 + app/controllers/dashboard/todos_controller.rb | 4 +- app/controllers/groups/boards_controller.rb | 2 +- .../groups/group_links_controller.rb | 34 + app/controllers/groups/labels_controller.rb | 2 +- .../registry/repositories_controller.rb | 2 +- app/controllers/groups_controller.rb | 12 +- app/controllers/health_controller.rb | 12 +- app/controllers/help_controller.rb | 2 +- .../ldap/omniauth_callbacks_controller.rb | 4 +- .../notification_settings_controller.rb | 18 +- .../oauth/applications_controller.rb | 2 +- .../authorized_applications_controller.rb | 2 +- .../omniauth_callbacks_controller.rb | 2 +- .../profiles/preferences_controller.rb | 3 +- .../profiles/u2f_registrations_controller.rb | 2 +- app/controllers/projects/blame_controller.rb | 5 +- app/controllers/projects/blob_controller.rb | 5 +- app/controllers/projects/boards_controller.rb | 2 +- app/controllers/projects/commit_controller.rb | 1 + .../projects/environments_controller.rb | 7 +- .../projects/error_tracking_controller.rb | 72 +- .../projects/grafana_api_controller.rb | 5 + app/controllers/projects/issues_controller.rb | 1 + app/controllers/projects/labels_controller.rb | 2 +- .../projects/lfs_api_controller.rb | 2 +- .../merge_requests/creations_controller.rb | 8 +- .../merge_requests/diffs_controller.rb | 5 +- .../projects/merge_requests_controller.rb | 28 +- app/controllers/projects/pages_controller.rb | 2 +- .../projects/pages_domains_controller.rb | 19 +- .../projects/pipelines_controller.rb | 22 +- .../projects/releases_controller.rb | 40 +- .../settings/operations_controller.rb | 2 +- app/controllers/projects/tags_controller.rb | 2 +- app/controllers/projects/tree_controller.rb | 8 +- .../projects/usage_ping_controller.rb | 13 + app/controllers/projects/wikis_controller.rb | 2 +- app/controllers/projects_controller.rb | 3 +- app/controllers/registrations_controller.rb | 22 +- app/controllers/sessions_controller.rb | 14 +- app/controllers/users_controller.rb | 10 +- app/finders/abuse_reports_finder.rb | 18 + app/finders/admin/projects_finder.rb | 4 +- app/finders/branches_finder.rb | 51 +- app/finders/container_repositories_finder.rb | 40 +- app/finders/git_refs_finder.rb | 56 + app/finders/group_descendants_finder.rb | 2 +- app/finders/issuable_finder.rb | 4 + app/finders/projects_finder.rb | 5 +- app/finders/prometheus_metrics_finder.rb | 129 + app/finders/releases_finder.rb | 6 +- app/finders/tags_finder.rb | 28 +- app/finders/todos_finder.rb | 28 +- app/graphql/gitlab_schema.rb | 4 +- .../mutations/merge_requests/set_assignees.rb | 48 + .../mutations/merge_requests/set_labels.rb | 53 + .../mutations/merge_requests/set_locked.rb | 29 + .../mutations/merge_requests/set_milestone.rb | 30 + .../merge_requests/set_subscription.rb | 26 + app/graphql/mutations/todos/base.rb | 17 + app/graphql/mutations/todos/mark_done.rb | 38 + app/graphql/resolvers/base_resolver.rb | 8 + .../resolvers/commit_pipelines_resolver.rb | 13 + app/graphql/types/base_enum.rb | 13 + app/graphql/types/commit_type.rb | 42 +- app/graphql/types/extended_issue_type.rb | 14 - app/graphql/types/group_type.rb | 15 +- app/graphql/types/issue_sort_enum.rb | 4 + app/graphql/types/issue_type.rb | 84 +- app/graphql/types/label_type.rb | 14 +- app/graphql/types/merge_request_type.rb | 156 +- app/graphql/types/metadata_type.rb | 6 +- app/graphql/types/milestone_type.rb | 23 +- .../types/mutation_operation_mode_enum.rb | 14 + app/graphql/types/mutation_type.rb | 6 + app/graphql/types/namespace_type.rb | 34 +- app/graphql/types/project_statistics_type.rb | 21 +- app/graphql/types/project_type.rb | 141 +- app/graphql/types/repository_type.rb | 12 +- app/graphql/types/task_completion_status.rb | 6 +- app/graphql/types/todo_target_enum.rb | 8 +- app/graphql/types/todo_type.rb | 3 +- app/graphql/types/tree/entry_type.rb | 1 + app/graphql/types/user_type.rb | 14 +- app/helpers/application_helper.rb | 9 + app/helpers/application_settings_helper.rb | 25 +- app/helpers/auth_helper.rb | 14 + app/helpers/blob_helper.rb | 12 +- app/helpers/builds_helper.rb | 4 +- app/helpers/clusters_helper.rb | 24 +- app/helpers/dashboard_helper.rb | 13 +- app/helpers/environments_helper.rb | 1 + app/helpers/gitlab_routing_helper.rb | 2 +- app/helpers/issuables_helper.rb | 5 +- app/helpers/markup_helper.rb | 13 +- app/helpers/milestones_helper.rb | 67 +- app/helpers/projects/error_tracking_helper.rb | 9 + app/helpers/projects_helper.rb | 4 + app/helpers/releases_helper.rb | 3 +- app/helpers/repository_languages_helper.rb | 2 +- app/helpers/search_helper.rb | 12 +- app/helpers/services_helper.rb | 2 +- app/helpers/sessions_helper.rb | 16 + app/helpers/snippets_helper.rb | 81 +- app/helpers/sourcegraph_helper.rb | 27 + app/helpers/tab_helper.rb | 18 - app/helpers/tree_helper.rb | 18 + app/helpers/users_helper.rb | 9 + app/helpers/visibility_level_helper.rb | 4 +- app/mailers/emails/members.rb | 37 +- app/mailers/emails/pipelines.rb | 5 +- app/mailers/emails/releases.rb | 8 +- app/mailers/previews/notify_preview.rb | 6 +- app/models/abuse_report.rb | 4 + .../cycle_analytics/project_stage.rb | 19 + app/models/application_setting.rb | 54 +- .../application_setting_implementation.rb | 14 +- app/models/award_emoji.rb | 5 +- app/models/aws/role.rb | 6 + app/models/ci/build.rb | 63 +- app/models/ci/build_metadata.rb | 1 + app/models/ci/pipeline.rb | 91 +- .../clusters/applications/cert_manager.rb | 2 +- .../clusters/applications/crossplane.rb | 60 + .../clusters/applications/elastic_stack.rb | 108 + app/models/clusters/applications/ingress.rb | 73 +- app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/cluster.rb | 67 +- app/models/clusters/clusters_hierarchy.rb | 41 +- .../clusters/concerns/application_core.rb | 18 + app/models/clusters/instance.rb | 4 + app/models/clusters/providers/aws.rb | 26 +- app/models/clusters/providers/gcp.rb | 4 + app/models/commit_status_enums.rb | 4 +- .../analytics/cycle_analytics/stage.rb | 66 +- app/models/concerns/ci/metadatable.rb | 4 + app/models/concerns/ci/processable.rb | 8 + app/models/concerns/deployment_platform.rb | 2 +- app/models/concerns/issuable.rb | 4 +- app/models/concerns/milestoneish.rb | 4 + app/models/concerns/noteable.rb | 4 - app/models/concerns/protected_ref.rb | 4 +- .../concerns/storage/legacy_namespace.rb | 40 +- app/models/concerns/subscribable.rb | 8 + app/models/concerns/worker_attributes.rb | 46 + app/models/container_repository.rb | 5 +- app/models/dashboard_group_milestone.rb | 4 + app/models/deployment.rb | 33 + app/models/deployment_merge_request.rb | 6 + app/models/description_version.rb | 4 + app/models/environment.rb | 16 + .../project_error_tracking_setting.rb | 23 + app/models/global_milestone.rb | 6 +- app/models/grafana_integration.rb | 6 + app/models/group.rb | 51 +- app/models/group_group_link.rb | 23 + app/models/import_export_upload.rb | 1 + app/models/issue.rb | 24 +- app/models/lfs_object.rb | 5 + app/models/merge_request.rb | 114 +- app/models/merge_request_diff.rb | 17 +- app/models/milestone.rb | 3 +- app/models/notification_reason.rb | 4 +- app/models/pages_domain.rb | 2 + app/models/project.rb | 43 +- app/models/project_ci_cd_setting.rb | 3 + .../chat_message/pipeline_message.rb | 30 +- .../chat_message/push_message.rb | 16 +- app/models/project_services/data_fields.rb | 2 +- .../project_services/prometheus_service.rb | 25 +- app/models/project_snippet.rb | 7 - app/models/project_wiki.rb | 6 - app/models/prometheus_metric.rb | 6 + app/models/protected_branch.rb | 2 +- app/models/release.rb | 13 + app/models/releases/source.rb | 4 +- app/models/service.rb | 1 + app/models/todo.rb | 7 +- app/models/user.rb | 12 +- app/models/wiki_page.rb | 5 - app/models/zoom_meeting.rb | 26 + app/policies/base_policy.rb | 8 +- app/policies/group_policy.rb | 6 +- app/policies/personal_snippet_policy.rb | 4 +- app/policies/project_policy.rb | 15 +- app/policies/project_snippet_policy.rb | 2 +- app/policies/todo_policy.rb | 1 + app/presenters/clusterable_presenter.rb | 16 + app/presenters/commit_status_presenter.rb | 6 +- .../instance_clusterable_presenter.rb | 20 + app/presenters/project_presenter.rb | 22 +- app/presenters/release_presenter.rb | 57 + app/presenters/todo_presenter.rb | 2 - app/serializers/cluster_application_entity.rb | 2 + .../container_repositories_serializer.rb | 4 + app/serializers/diff_file_base_entity.rb | 8 + app/serializers/diff_file_entity.rb | 20 +- .../error_tracking/detailed_error_entity.rb | 27 + .../detailed_error_serializer.rb | 7 + .../error_tracking/error_event_entity.rb | 7 + .../error_tracking/error_event_serializer.rb | 7 + .../issuable_sidebar_extras_entity.rb | 9 + app/serializers/issue_board_entity.rb | 1 - app/serializers/job_artifact_report_entity.rb | 2 +- app/serializers/merge_request_diff_entity.rb | 2 + .../merge_request_poll_widget_entity.rb | 6 + app/serializers/note_entity.rb | 2 + .../projects/serverless/service_entity.rb | 42 +- app/services/base_service.rb | 12 +- .../ci/compare_reports_base_service.rb | 5 + app/services/ci/create_pipeline_service.rb | 7 +- .../ci/find_exposed_artifacts_service.rb | 70 + ...nerate_exposed_artifacts_report_service.rb | 30 + app/services/ci/register_job_service.rb | 79 +- .../clusters/applications/base_service.rb | 16 +- .../clusters/aws/fetch_credentials_service.rb | 56 + .../clusters/aws/finalize_creation_service.rb | 139 + .../clusters/aws/provision_service.rb | 85 + app/services/clusters/aws/proxy_service.rb | 134 + .../aws/verify_provision_status_service.rb | 50 + app/services/clusters/destroy_service.rb | 34 + ...reate_or_update_service_account_service.rb | 32 + .../clusters/kubernetes/kubernetes.rb | 2 + app/services/clusters/update_service.rb | 50 +- app/services/cohorts_service.rb | 2 +- app/services/commits/change_service.rb | 5 +- app/services/commits/create_service.rb | 13 +- app/services/concerns/git/logger.rb | 10 + app/services/create_branch_service.rb | 2 +- .../deployments/after_create_service.rb | 9 + .../link_merge_requests_service.rb | 66 + app/services/deployments/update_service.rb | 17 +- app/services/error_tracking/base_service.rb | 66 + .../error_tracking/issue_details_service.rb | 15 + .../issue_latest_event_service.rb | 15 + .../error_tracking/list_issues_service.rb | 42 +- .../error_tracking/list_projects_service.rb | 52 +- .../groups/group_links/create_service.rb | 29 + .../groups/group_links/destroy_service.rb | 26 + .../groups/import_export/export_service.rb | 71 + app/services/groups/transfer_service.rb | 4 +- app/services/groups/update_service.rb | 5 +- app/services/issuable_base_service.rb | 2 +- app/services/issues/update_service.rb | 2 - app/services/issues/zoom_link_service.rb | 75 +- app/services/merge_requests/base_service.rb | 13 + app/services/merge_requests/build_service.rb | 8 + .../merge_requests/ff_merge_service.rb | 14 +- .../merge_requests/merge_base_service.rb | 26 +- app/services/merge_requests/merge_service.rb | 16 + .../push_options_handler_service.rb | 43 +- app/services/merge_requests/rebase_service.rb | 6 +- .../merge_requests/refresh_service.rb | 7 +- app/services/merge_requests/squash_service.rb | 4 +- app/services/merge_requests/update_service.rb | 4 +- .../working_copy_base_service.rb | 26 - .../dashboard/custom_metric_embed_service.rb | 9 +- .../dashboard/grafana_metric_embed_service.rb | 160 + .../dashboard/project_dashboard_service.rb | 3 +- .../dashboard/system_dashboard_service.rb | 3 +- app/services/notes/create_service.rb | 15 + app/services/notes/post_process_service.rb | 2 + .../notification_recipient_service.rb | 4 +- app/services/preview_markdown_service.rb | 10 +- .../delete_tags_service.rb | 36 +- .../hashed_storage/base_attachment_service.rb | 33 +- .../hashed_storage/base_repository_service.rb | 2 +- .../migrate_attachments_service.rb | 48 +- .../hashed_storage/migration_service.rb | 12 +- .../rollback_attachments_service.rb | 7 +- .../hashed_storage/rollback_service.rb | 18 +- .../projects/import_export/export_service.rb | 2 +- .../projects/lfs_pointers/lfs_link_service.rb | 26 +- app/services/projects/transfer_service.rb | 2 + app/services/quick_actions/target_service.rb | 2 + app/services/system_note_service.rb | 87 +- .../system_notes/merge_requests_service.rb | 145 + app/services/users/signup_service.rb | 34 + app/services/zoom_notes_service.rb | 42 - .../same_project_association_validator.rb | 21 + app/validators/zoom_url_validator.rb | 13 + app/views/admin/abuse_reports/index.html.haml | 18 +- .../application_settings/_ci_cd.html.haml | 6 + .../admin/application_settings/_eks.html.haml | 31 + .../application_settings/_outbound.html.haml | 4 +- .../application_settings/_plantuml.html.haml | 41 +- .../_repository_mirrors_form.html.haml | 4 +- .../application_settings/_snowplow.html.haml | 11 +- .../_sourcegraph.html.haml | 38 + .../_third_party_offers.html.haml | 28 +- .../integrations.html.haml | 33 +- .../application_settings/network.html.haml | 2 +- .../application_settings/repository.html.haml | 4 +- app/views/admin/dashboard/index.html.haml | 37 +- app/views/admin/sessions/_new_base.html.haml | 2 +- .../admin/sessions/_signin_box.html.haml | 2 +- .../admin/sessions/_tabs_normal.html.haml | 2 +- app/views/admin/sessions/new.html.haml | 2 +- app/views/admin/users/show.html.haml | 2 +- .../ci/group_variables/_content.html.haml | 1 + .../ci/group_variables/_header.html.haml | 5 + app/views/ci/group_variables/_index.html.haml | 13 + .../_variable_header.html.haml | 5 + app/views/ci/variables/_header.html.haml | 2 +- app/views/ci/variables/_index.html.haml | 5 + .../_url_query_variable_row.html.haml | 28 + .../clusters/_advanced_settings.html.haml | 21 + app/views/clusters/clusters/_banner.html.haml | 6 +- .../_gcp_signup_offer_banner.html.haml | 2 +- .../clusters/clusters/aws/_new.html.haml | 23 + .../_cloud_provider_button.html.haml | 6 +- .../_cloud_provider_selector.html.haml | 6 +- .../clusters/clusters/eks/_index.html.haml | 2 - .../clusters/clusters/gcp/_form.html.haml | 13 +- .../clusters/clusters/gcp/_new.html.haml | 7 + app/views/clusters/clusters/index.html.haml | 2 +- app/views/clusters/clusters/new.html.haml | 33 +- app/views/clusters/clusters/show.html.haml | 2 + .../clusters/clusters/user/_form.html.haml | 8 +- .../clusters/clusters/user/_header.html.haml | 2 +- .../_zero_authorized_projects.html.haml | 2 +- app/views/devise/sessions/new.html.haml | 6 +- app/views/devise/shared/_signin_box.html.haml | 2 +- app/views/devise/shared/_tabs_ldap.html.haml | 2 +- app/views/errors/not_found.html.haml | 2 +- app/views/groups/issues.html.haml | 8 +- app/views/groups/milestones/show.html.haml | 2 +- .../groups/settings/ci_cd/show.html.haml | 3 +- app/views/help/_shortcuts.html.haml | 2 +- app/views/import/manifest/_form.html.haml | 2 +- app/views/layouts/_flash.html.haml | 2 +- app/views/layouts/_head.html.haml | 4 +- app/views/layouts/_mailer.html.haml | 72 +- app/views/layouts/_page.html.haml | 2 - .../header/_current_user_dropdown.html.haml | 9 +- app/views/layouts/header/_default.html.haml | 4 +- .../layouts/header/_help_dropdown.html.haml | 4 +- app/views/layouts/nav/_dashboard.html.haml | 27 +- .../layouts/nav/sidebar/_group.html.haml | 10 +- .../layouts/nav/sidebar/_project.html.haml | 12 +- .../member_access_denied_email.html.haml | 11 +- .../member_access_granted_email.html.haml | 16 +- .../member_access_requested_email.html.haml | 9 +- .../member_invite_accepted_email.html.haml | 13 +- .../member_invite_declined_email.html.haml | 11 +- .../notify/member_invited_email.html.haml | 27 +- .../preferences/_sourcegraph.html.haml | 26 + app/views/profiles/preferences/show.html.haml | 3 + app/views/profiles/show.html.haml | 2 +- app/views/projects/_export.html.haml | 2 +- app/views/projects/_files.html.haml | 6 +- app/views/projects/_home_panel.html.haml | 2 +- ...e_request_merge_options_settings.html.haml | 6 + app/views/projects/blame/show.html.haml | 2 +- app/views/projects/blob/_header.html.haml | 15 +- .../projects/blob/_markdown_buttons.html.haml | 2 +- app/views/projects/buttons/_clone.html.haml | 2 - .../projects/buttons/_download.html.haml | 13 +- .../buttons/_download_links.html.haml | 6 +- app/views/projects/compare/_form.html.haml | 10 +- .../_confirm_rollback_modal.html.haml | 2 +- .../environments/empty_logs.html.haml | 14 + ...mpty.html.haml => empty_metrics.html.haml} | 4 +- .../projects/error_tracking/details.html.haml | 4 + app/views/projects/graphs/show.html.haml | 28 +- app/views/projects/issues/_issue.html.haml | 3 +- app/views/projects/labels/index.html.haml | 2 +- .../merge_requests/_how_to_merge.html.haml | 2 +- .../creations/_new_submit.html.haml | 10 - .../projects/merge_requests/edit.html.haml | 1 - app/views/projects/milestones/show.html.haml | 53 +- .../mirrors/_authentication_method.html.haml | 10 +- .../mirrors/_mirror_repos_form.html.haml | 4 +- app/views/projects/pages/_access.html.haml | 6 + app/views/projects/pages/_list.html.haml | 4 +- app/views/projects/pages/show.html.haml | 36 +- .../pages_domains/_certificate.html.haml | 79 +- .../projects/pages_domains/_dns.html.haml | 33 + .../projects/pages_domains/_form.html.haml | 73 +- .../_lets_encrypt_callout.html.haml | 13 + .../projects/pages_domains/edit.html.haml | 15 +- .../projects/pages_domains/new.html.haml | 1 - .../projects/pages_domains/show.html.haml | 2 +- .../projects/pipelines/_with_tabs.html.haml | 14 +- app/views/projects/pipelines/new.html.haml | 7 + app/views/projects/pipelines/show.html.haml | 3 +- .../shared/_branches_list.html.haml | 3 +- app/views/projects/services/_form.html.haml | 1 - app/views/projects/services/_index.html.haml | 2 +- app/views/projects/services/edit.html.haml | 3 +- .../projects/settings/ci_cd/_form.html.haml | 2 +- .../projects/settings/ci_cd/show.html.haml | 3 +- .../operations/_grafana_integration.html.haml | 2 + .../settings/operations/show.html.haml | 1 + app/views/projects/show.html.haml | 2 +- app/views/projects/tree/_readme.html.haml | 2 +- .../projects/tree/_tree_header.html.haml | 12 +- app/views/projects/tree/show.html.haml | 3 +- app/views/registrations/welcome.html.haml | 15 +- app/views/search/_category.html.haml | 2 +- app/views/search/_results.html.haml | 1 + app/views/search/results/_blob.html.haml | 4 +- app/views/search/results/_blob_data.html.haml | 2 +- .../search/results/_snippet_blob.html.haml | 2 +- .../search/results/_snippet_title.html.haml | 5 +- app/views/search/results/_wiki_blob.html.haml | 2 +- app/views/shared/_clone_panel.html.haml | 3 - app/views/shared/_field.html.haml | 4 +- app/views/shared/_group_form.html.haml | 7 +- .../shared/_mobile_clone_panel.html.haml | 2 +- .../_personal_access_tokens_form.html.haml | 1 - app/views/shared/_service_settings.html.haml | 2 +- .../form_elements/_description.html.haml | 3 +- app/views/shared/issuable/_form.html.haml | 4 +- .../shared/issuable/_search_bar.html.haml | 307 +- app/views/shared/issuable/_sidebar.html.haml | 8 +- .../issuable/form/_branch_chooser.html.haml | 31 +- .../issuable/form/_merge_params.html.haml | 14 +- .../members/_access_request_links.html.haml | 2 +- .../shared/milestones/_description.html.haml | 8 + app/views/shared/milestones/_header.html.haml | 38 + .../shared/milestones/_milestone.html.haml | 14 +- .../shared/milestones/_sidebar.html.haml | 21 + app/views/shared/milestones/_tabs.html.haml | 47 +- app/views/shared/milestones/_top.html.haml | 56 +- .../shared/notifications/_button.html.haml | 6 +- .../_custom_notifications.html.haml | 3 + .../notifications/_new_button.html.haml | 2 +- app/views/shared/projects/_list.html.haml | 2 +- .../runners/_runner_description.html.haml | 2 +- app/views/shared/snippets/_blob.html.haml | 3 +- app/views/shared/snippets/_embed.html.haml | 2 +- app/views/shared/snippets/_header.html.haml | 2 +- app/views/shared/snippets/_snippet.html.haml | 5 +- app/workers/all_queues.yml | 4 + app/workers/authorized_projects_worker.rb | 1 + app/workers/build_finished_worker.rb | 2 + app/workers/build_hooks_worker.rb | 1 + app/workers/build_queue_worker.rb | 2 + app/workers/build_success_worker.rb | 1 + app/workers/chat_notification_worker.rb | 5 + app/workers/ci/build_schedule_worker.rb | 1 + app/workers/cluster_install_app_worker.rb | 2 + app/workers/cluster_patch_app_worker.rb | 2 + .../cluster_project_configure_worker.rb | 2 + app/workers/cluster_provision_worker.rb | 8 +- app/workers/cluster_upgrade_app_worker.rb | 2 + ...luster_wait_for_app_installation_worker.rb | 3 + ...ster_wait_for_ingress_ip_address_worker.rb | 2 + .../clusters/applications/uninstall_worker.rb | 2 + .../wait_for_uninstall_app_worker.rb | 3 + app/workers/clusters/cleanup/app_worker.rb | 16 + .../cleanup/project_namespace_worker.rb | 16 + .../cleanup/service_account_worker.rb | 16 + .../gitlab/github_import/object_importer.rb | 1 + app/workers/create_pipeline_worker.rb | 2 + app/workers/deployments/finished_worker.rb | 1 + app/workers/deployments/success_worker.rb | 1 + app/workers/email_receiver_worker.rb | 1 + app/workers/emails_on_push_worker.rb | 2 + app/workers/expire_build_artifacts_worker.rb | 19 - app/workers/expire_job_cache_worker.rb | 1 + app/workers/expire_pipeline_cache_worker.rb | 2 + app/workers/gitlab_shell_worker.rb | 5 +- app/workers/group_export_worker.rb | 15 + .../hashed_storage/project_migrate_worker.rb | 2 +- app/workers/import_issues_csv_worker.rb | 1 + .../notification_service_worker.rb | 1 + app/workers/merge_worker.rb | 1 + .../prune_aggregation_schedules_worker.rb | 1 + app/workers/new_issue_worker.rb | 2 + app/workers/new_merge_request_worker.rb | 2 + app/workers/new_note_worker.rb | 2 + app/workers/new_release_worker.rb | 2 +- app/workers/object_pool/join_worker.rb | 2 + .../pages_domain_removal_cron_worker.rb | 1 + app/workers/pipeline_hooks_worker.rb | 2 + app/workers/pipeline_metrics_worker.rb | 2 + app/workers/pipeline_notification_worker.rb | 3 + app/workers/pipeline_process_worker.rb | 1 + app/workers/pipeline_schedule_worker.rb | 1 + app/workers/pipeline_success_worker.rb | 1 + app/workers/pipeline_update_worker.rb | 1 + app/workers/post_receive.rb | 2 + app/workers/process_commit_worker.rb | 1 + app/workers/project_cache_worker.rb | 3 + app/workers/project_export_worker.rb | 1 + app/workers/project_service_worker.rb | 1 + app/workers/reactive_caching_worker.rb | 8 + .../remove_expired_group_links_worker.rb | 4 + app/workers/remove_expired_members_worker.rb | 1 + app/workers/repository_import_worker.rb | 1 + .../repository_update_remote_mirror_worker.rb | 2 + app/workers/stage_update_worker.rb | 1 + app/workers/stuck_ci_jobs_worker.rb | 15 + app/workers/stuck_import_jobs_worker.rb | 1 + ..._head_pipeline_for_merge_request_worker.rb | 2 + app/workers/update_merge_requests_worker.rb | 2 + .../wait_for_cluster_creation_worker.rb | 8 +- app/workers/web_hook_worker.rb | 2 + bin/secpick | 2 +- ...g-push-events-in-chat-msg-integration.yaml | 5 + config/application.rb | 11 +- config/dependency_decisions.yml | 6 + config/gitlab.yml.example | 24 +- config/initializers/0_inflections.rb | 19 +- config/initializers/1_settings.rb | 15 +- config/initializers/7_prometheus_metrics.rb | 11 +- config/initializers/database_config.rb | 18 + config/initializers/health_check.rb | 12 + config/initializers/lograge.rb | 10 + .../rack_attack_git_basic_auth.rb | 22 +- config/initializers/rack_attack_logging.rb | 6 +- config/initializers/rack_attack_new.rb | 65 +- config/initializers/validate_puma.rb | 5 + config/locales/en.yml | 1 + config/puma.example.development.rb | 10 +- config/routes.rb | 9 +- config/routes/group.rb | 2 + config/routes/project.rb | 83 +- config/routes/user.rb | 3 +- config/sidekiq_queues.yml | 3 + config/webpack.config.js | 7 +- core-js/internals/shared.js | 2 +- core-js/internals/use-symbol-as-uid.js | 2 +- core-js/internals/well-known-symbol.js | 2 +- core-js/modules/es.symbol.js | 16 +- core-js/package.json | 2 +- danger/commit_messages/Dangerfile | 10 +- db/fixtures/development/02_users.rb | 77 + db/fixtures/development/03_project.rb | 303 +- db/fixtures/development/04_labels.rb | 2 +- db/fixtures/development/05_users.rb | 34 - db/fixtures/development/06_teams.rb | 6 +- db/fixtures/development/07_milestones.rb | 2 +- db/fixtures/development/10_merge_requests.rb | 8 +- db/fixtures/development/11_keys.rb | 2 +- db/fixtures/development/12_snippets.rb | 2 +- db/fixtures/development/14_pipelines.rb | 2 +- .../development/16_protected_branches.rb | 2 +- db/fixtures/development/17_cycle_analytics.rb | 2 +- db/fixtures/development/19_environments.rb | 2 +- db/fixtures/development/23_spam_logs.rb | 2 +- db/fixtures/development/24_forks.rb | 4 +- .../20180215181245_users_name_lower_index.rb | 6 +- ...20180504195842_project_name_lower_index.rb | 6 +- ...20180902070406_create_group_group_links.rb | 32 + .../20190703171157_add_sourcing_epic_dates.rb | 10 + ...90703171555_add_sourcing_epic_dates_fks.rb | 25 + ...3_remove_rendundant_index_from_releases.rb | 7 +- ...h_configuration_to_application_settings.rb | 21 + ...526_create_packages_conan_file_metadata.rb | 18 + ...918104731_add_cleanup_status_to_cluster.rb | 21 + ...35_add_cleanup_status_reason_to_cluster.rb | 12 + .../20190930153535_create_zoom_meetings.rb | 24 + ...ate_clusters_applications_elastic_stack.rb | 22 + ...5155_add_self_managed_prometheus_alerts.rb | 1 - ...61031_add_mark_for_deletion_to_projects.rb | 11 + ...d_mark_for_deletion_indexes_to_projects.rb | 19 + ...d_pendo_enabled_to_application_settings.rb | 15 + ...0_add_pendo_url_to_application_settings.rb | 9 + ...8_add_productivity_analytics_start_date.rb | 11 + ..._fill_productivity_analytics_start_date.rb | 31 + ...0244_add_geo_design_repository_counters.rb | 16 + ...exposed_artifacts_to_ci_builds_metadata.rb | 13 + ...i_builds_metadata_has_exposed_artifacts.rb | 17 + ...lu_registry_url_to_application_settings.rb | 9 + ...djourned_period_to_application_settings.rb | 11 + ...add_squash_commit_sha_to_merge_requests.rb | 9 + ...esign_management_version_user_to_author.rb | 17 + ...hor_index_to_design_management_versions.rb | 17 + ...931_remove_index_on_snippets_project_id.rb | 7 +- ...133352_create_ci_subscriptions_projects.rb | 21 + ...reate_users_security_dashboard_projects.rb | 15 + ...e_source_branch_after_merge_to_projects.rb | 17 + ...017134513_add_deployment_merge_requests.rb | 33 + ...create_clusters_applications_crossplane.rb | 19 + ...ests_index_on_target_project_and_branch.rb | 19 + ...191023152913_add_default_and_free_plans.rb | 29 + ...191024134020_add_index_to_zoom_meetings.rb | 17 + ..._default_project_and_snippet_visibility.rb | 15 + ...d_setup_for_company_to_user_preferences.rb | 9 + ...ame_snowplow_site_id_to_snowplow_app_id.rb | 17 + ...29125305_create_packages_conan_metadata.rb | 16 + ...901_add_enabled_to_grafana_integrations.rb | 23 + .../20191030135044_create_plan_limits.rb | 14 + .../20191030152934_move_limits_from_plans.rb | 17 + ...2917_replace_index_on_metrics_merged_at.rb | 19 + ...eks_credentials_to_application_settings.rb | 14 + ...license_details_to_application_settings.rb | 11 + ...4558_add_report_type_to_vulnerabilities.rb | 9 + ...652_add_index_on_deployments_updated_at.rb | 18 + ..._sourcegraph_admin_and_user_preferences.rb | 17 + ...ndex_to_projects_on_marked_for_deletion.rb | 17 + ...9_add_group_id_to_import_export_uploads.rb | 9 + ...1_add_group_fk_to_import_export_uploads.rb | 19 + .../20191111121500_default_ci_config_path.rb | 13 + ...hed_markdown_version_to_vulnerabilities.rb | 9 + ...indexes_for_projects_api_default_params.rb | 19 + ...ojects_api_default_params_authenticated.rb | 19 + ...232338_ensure_no_empty_milestone_titles.rb | 18 + ..._resolved_attributes_to_vulnerabilities.rb | 15 + ...ey_on_resolved_by_id_to_vulnerabilities.rb | 19 + ...091425_create_vulnerability_issue_links.rb | 23 + ..._self_monitoring_project_alerting_token.rb | 68 +- ...chedule_productivity_analytics_backfill.rb | 2 +- ...3_schedule_epic_issues_after_epics_move.rb | 35 + ...3850_fix_any_approver_rule_for_projects.rb | 51 + ...anagement_version_user_to_author_rename.rb | 17 + ...edule_fix_gitlab_com_pages_access_level.rb | 17 + ...7180026_drop_ci_build_trace_sections_id.rb | 19 + ...2_remove_empty_github_service_templates.rb | 28 + ...5_nullify_feature_flag_plaintext_tokens.rb | 39 + ...cation_settings_snowplow_site_id_rename.rb | 17 + ..._remove_pendo_from_application_settings.rb | 19 + ...20191031112603_remove_limits_from_plans.rb | 17 + ...625_set_report_type_for_vulnerabilities.rb | 26 + ...1105140942_add_indices_to_abuse_reports.rb | 17 + ..._vulnerabilities_title_html_to_nullable.rb | 9 + ...4_set_resolved_state_on_vulnerabilities.rb | 31 + db/schema.rb | 197 +- doc/README.md | 33 +- doc/administration/audit_events.md | 4 + doc/administration/auth/ldap.md | 34 + .../background_verification.md | 5 +- .../geo/replication/configuration.md | 12 +- .../geo/replication/database.md | 5 +- doc/administration/geo/replication/index.md | 8 +- .../geo/replication/object_storage.md | 2 +- .../geo/replication/troubleshooting.md | 143 +- .../geo/replication/using_a_geo_server.md | 8 +- .../replication/version_specific_updates.md | 18 + doc/administration/git_annex.md | 242 + doc/administration/gitaly/index.md | 56 +- doc/administration/gitaly/praefect.md | 173 +- .../high_availability/README.md | 220 +- .../high_availability/consul.md | 17 + .../high_availability/database.md | 87 +- .../high_availability/pgbouncer.md | 49 +- doc/administration/high_availability/redis.md | 2 +- doc/administration/incoming_email.md | 4 +- doc/administration/index.md | 20 +- doc/administration/integration/plantuml.md | 2 +- doc/administration/job_logs.md | 25 +- .../lfs/img}/git-annex-branches.png | Bin .../lfs/img/lfs-icon.png | Bin doc/administration/lfs/lfs_administration.md | 273 + .../lfs/manage_large_binaries_with_git_lfs.md | 266 + .../lfs/migrate_from_git_annex_to_git_lfs.md | 254 + doc/administration/logs.md | 40 + .../index.md | 3 +- .../performance/img/performance_bar.png | Bin 33642 -> 71317 bytes .../monitoring/performance/performance_bar.md | 13 +- .../monitoring/prometheus/index.md | 25 + doc/administration/operations/index.md | 3 + .../operations/sidekiq_memory_killer.md | 4 +- .../packages/container_registry.md | 8 +- doc/administration/pages/index.md | 119 +- .../repository_storage_paths.md | 4 +- .../repository_storage_types.md | 14 +- doc/administration/timezone.md | 37 + .../gitlab_rails_cheat_sheet.md | 4 +- doc/administration/uploads.md | 4 +- doc/api/api_resources.md | 6 +- doc/api/audit_events.md | 116 +- doc/api/branches.md | 2 +- doc/api/commits.md | 29 + doc/api/deployments.md | 29 +- doc/api/epic_links.md | 32 +- doc/api/epics.md | 40 +- doc/api/feature_flag_specs.md | 291 + doc/api/feature_flags.md | 308 + doc/api/geo_nodes.md | 12 + doc/api/graphql/index.md | 5 + .../graphql/reference/gitlab_schema.graphql | 5422 +++++ doc/api/graphql/reference/gitlab_schema.json | 18749 ++++++++++++++++ doc/api/graphql/reference/index.md | 496 +- doc/api/group_clusters.md | 34 +- doc/api/groups.md | 4 + doc/api/issues.md | 21 +- doc/api/license.md | 5 + doc/api/merge_requests.md | 24 +- doc/api/packages.md | 45 +- doc/api/pages_domains.md | 71 +- doc/api/project_clusters.md | 39 +- doc/api/projects.md | 20 + doc/api/releases/index.md | 2 +- doc/api/scim.md | 5 +- doc/api/search.md | 22 + doc/api/services.md | 5 +- doc/api/settings.md | 16 +- doc/api/sidekiq_metrics.md | 6 +- doc/api/tags.md | 2 +- doc/api/users.md | 4 +- doc/api/visual_review_discussions.md | 40 + doc/api/vulnerabilities.md | 114 +- doc/api/vulnerability_findings.md | 128 + doc/ci/README.md | 2 +- doc/ci/chatops/README.md | 5 + .../bitbucket_integration.md | 2 +- .../github_integration.md | 4 +- doc/ci/ci_cd_for_external_repos/index.md | 4 +- doc/ci/docker/using_docker_build.md | 25 +- doc/ci/environments.md | 11 +- doc/ci/environments/environments_dashboard.md | 51 + .../img/environments_dashboard_v12_5.png | Bin 0 -> 30989 bytes doc/ci/examples/deployment/README.md | 4 +- .../index.md | 4 +- .../laravel_with_gitlab_and_envoy/index.md | 2 +- .../pipelines_junit_test_report_ui_v12_5.png | Bin 0 -> 15957 bytes doc/ci/interactive_web_terminal/index.md | 2 +- doc/ci/introduction/index.md | 14 +- doc/ci/junit_test_reports.md | 24 + .../merge_trains/index.md | 4 +- doc/ci/multi_project_pipelines.md | 7 +- doc/ci/pipelines.md | 34 +- doc/ci/quick_start/README.md | 4 +- doc/ci/variables/README.md | 33 +- doc/ci/variables/deprecated_variables.md | 14 +- .../img/inherited_group_variables_v12_5.png | Bin 0 -> 73965 bytes doc/ci/variables/predefined_variables.md | 210 +- doc/ci/yaml/README.md | 250 +- doc/development/README.md | 3 +- doc/development/api_graphql_styleguide.md | 94 +- doc/development/architecture.md | 2 +- doc/development/changelog.md | 5 +- doc/development/chatops_on_gitlabcom.md | 2 +- doc/development/code_review.md | 6 +- doc/development/contributing/index.md | 4 + .../contributing/issue_workflow.md | 2 +- .../contributing/merge_request_workflow.md | 6 +- doc/development/creating_enums.md | 15 + doc/development/database_debugging.md | 2 +- doc/development/database_review.md | 7 + doc/development/documentation/index.md | 4 +- .../documentation/site_architecture/index.md | 155 +- .../site_architecture/release_process.md | 241 + doc/development/documentation/styleguide.md | 19 +- doc/development/documentation/workflow.md | 2 +- doc/development/ee_features.md | 40 +- doc/development/event_tracking/index.md | 4 - .../fe_guide/development_process.md | 2 +- doc/development/fe_guide/graphql.md | 8 + doc/development/fe_guide/style_guide_js.md | 12 + doc/development/fe_guide/style_guide_scss.md | 2 +- doc/development/feature_flags/controls.md | 8 + doc/development/feature_flags/development.md | 19 +- doc/development/geo.md | 29 +- doc/development/git_object_deduplication.md | 2 +- doc/development/gitaly.md | 7 +- doc/development/gotchas.md | 70 + doc/development/i18n/externalization.md | 5 +- doc/development/i18n/merging_translations.md | 28 +- doc/development/i18n/translation.md | 2 +- doc/development/kubernetes.md | 51 + doc/development/lfs.md | 2 +- .../merge_request_performance_guidelines.md | 179 +- doc/development/migration_style_guide.md | 2 +- doc/development/packages.md | 108 +- doc/development/pipelines.md | 71 +- doc/development/policies.md | 15 + doc/development/profiling.md | 4 + doc/development/rake_tasks.md | 20 +- doc/development/repository_mirroring.md | 2 +- doc/development/sidekiq_style_guide.md | 228 +- .../testing_guide/best_practices.md | 29 +- .../end_to_end/best_practices.md | 28 + .../testing_guide/end_to_end/feature_flags.md | 27 + .../testing_guide/end_to_end/flows.md | 56 + .../testing_guide/end_to_end/index.md | 2 + .../testing_guide/end_to_end/page_objects.md | 59 + doc/development/testing_guide/flaky_tests.md | 1 + .../testing_guide/frontend_testing.md | 77 + doc/development/testing_guide/review_apps.md | 8 +- .../understanding_explain_plans.md | 37 + doc/development/utilities.md | 114 +- doc/gitlab-basics/README.md | 3 +- doc/gitlab-basics/feature_branch_workflow.md | 35 + doc/gitlab-basics/fork-project.md | 2 +- doc/gitlab-basics/start-using-git.md | 2 +- doc/install/README.md | 2 +- doc/install/aws/index.md | 2 +- doc/install/installation.md | 28 +- doc/install/openshift_and_gitlab/index.md | 2 - doc/install/requirements.md | 2 +- doc/integration/README.md | 88 +- doc/integration/bitbucket.md | 7 +- doc/integration/elasticsearch.md | 9 + .../img/sourcegraph_admin_v12_5.png | Bin 0 -> 61520 bytes .../img/sourcegraph_demo_v12_5.png | Bin 0 -> 97025 bytes .../img/sourcegraph_popover_v12_5.png | Bin 0 -> 27925 bytes .../sourcegraph_user_preferences_v12_5.png | Bin 0 -> 37710 bytes doc/integration/saml.md | 2 +- doc/integration/slash_commands.md | 1 + doc/integration/sourcegraph.md | 129 + doc/integration/ultra_auth.md | 2 +- doc/intro/README.md | 4 +- doc/policy/maintenance.md | 67 +- doc/raketasks/backup_restore.md | 2 +- doc/raketasks/cleanup.md | 2 +- doc/security/webhooks.md | 19 +- doc/ssh/README.md | 2 +- doc/topics/autodevops/index.md | 301 +- doc/topics/autodevops/quick_start_guide.md | 6 +- doc/topics/git/index.md | 8 +- doc/topics/git/migrate_to_git_lfs/index.md | 6 +- doc/topics/gitlab_flow.md | 330 + doc/{workflow => topics}/img/gitlab_flow.png | Bin .../img/gitlab_flow_ci_mr.png} | Bin .../img/gitlab_flow_close_issue_mr.png} | Bin .../img/gitlab_flow_environment_branches.png} | Bin .../img/gitlab_flow_four_stages.png} | Bin .../img/gitlab_flow_git_pull.png} | Bin .../img/gitlab_flow_gitdashflow.png} | Bin .../img/gitlab_flow_github_flow.png} | Bin .../img/gitlab_flow_good_commit.png} | Bin .../img/gitlab_flow_merge_commits.png} | Bin .../img/gitlab_flow_merge_request.png} | Bin .../img/gitlab_flow_messy_flow.png} | Bin .../img/gitlab_flow_mr_inline_comments.png} | Bin .../img/gitlab_flow_production_branch.png} | Bin .../img/gitlab_flow_rebase.png} | Bin .../img/gitlab_flow_release_branches.png} | Bin .../img/gitlab_flow_remove_checkbox.png} | Bin doc/topics/index.md | 1 + doc/university/README.md | 2 +- doc/university/support/README.md | 2 +- doc/university/training/gitlab_flow.md | 2 +- doc/update/README.md | 8 +- .../activating_deactivating_users.md | 66 + .../admin_area/blocking_unblocking_users.md | 48 + doc/user/admin_area/diff_limits.md | 2 +- doc/user/admin_area/index.md | 4 +- .../admin_area/monitoring/health_check.md | 63 +- .../settings/account_and_limit_settings.md | 2 +- .../settings/continuous_integration.md | 18 + doc/user/admin_area/settings/email.md | 2 +- .../settings/img/two_factor_grace_period.png | Bin 0 -> 17591 bytes doc/user/admin_area/settings/index.md | 1 + .../settings/sign_in_restrictions.md | 56 + .../admin_area/settings/usage_statistics.md | 4 +- .../visibility_and_access_controls.md | 2 +- doc/user/analytics/cycle_analytics.md | 54 +- doc/user/analytics/productivity_analytics.md | 11 +- .../container_scanning/index.md | 71 +- doc/user/application_security/dast/index.md | 30 + .../img/dependency_list_v12_4.png | Bin 0 -> 137591 bytes .../dependency_list/index.md | 2 +- .../dependency_scanning/index.md | 71 +- doc/user/application_security/index.md | 38 +- .../license_compliance/index.md | 16 +- .../application_security/sast/analyzers.md | 7 +- doc/user/application_security/sast/index.md | 45 +- .../img/group_security_dashboard_v12_3.png | Bin 61667 -> 0 bytes .../img/group_security_dashboard_v12_4.png | Bin 0 -> 62965 bytes .../security_dashboard/index.md | 4 +- doc/user/clusters/applications.md | 207 +- doc/user/clusters/crossplane.md | 292 + ...tings-cluster-management-project-v12_5.png | Bin 0 -> 66251 bytes doc/user/clusters/management_project.md | 46 +- doc/user/group/clusters/index.md | 17 +- .../epics/img/epic_view_roadmap_v12.3.png | Bin doc/user/group/epics/img/epic_view_v12.3.png | Bin .../group/epics/img/epics_list_view_v12.3.png | Bin 39450 -> 0 bytes .../group/epics/img/epics_list_view_v12.5.png | Bin 0 -> 442541 bytes doc/user/group/epics/index.md | 67 +- doc/user/group/index.md | 21 +- doc/user/group/roadmap/index.md | 2 +- doc/user/group/saml_sso/index.md | 57 +- doc/user/group/saml_sso/scim_setup.md | 31 +- doc/user/group/subgroups/index.md | 2 +- .../img/todos_add_todo_sidebar.png | Bin doc/{workflow => user}/img/todos_icon.png | Bin doc/{workflow => user}/img/todos_index.png | Bin .../img/todos_mark_done_sidebar.png | Bin .../img/todos_todo_list_item.png} | Bin .../img/incident_management_settings.png | Bin 0 -> 45533 bytes doc/user/incident_management/index.md | 131 + doc/user/index.md | 19 +- doc/user/markdown.md | 8 +- ...ndex_operations_dashboard_top_bar_icon.png | Bin 3922 -> 0 bytes doc/user/operations_dashboard/index.md | 11 +- doc/user/packages/dependency_proxy/index.md | 2 +- doc/user/packages/npm_registry/index.md | 18 + doc/user/permissions.md | 10 +- doc/user/profile/account/delete_account.md | 57 - .../img/notification_global_settings.png | Bin .../img/notification_group_settings.png | Bin .../img/notification_project_settings.png | Bin doc/user/profile/index.md | 2 +- doc/user/profile/notifications.md | 231 + doc/user/profile/preferences.md | 15 +- .../project/clusters/add_remove_clusters.md | 767 + .../eks_and_gitlab/img/create_dns.png | Bin 23923 -> 0 bytes .../eks_and_gitlab/img/create_project.png | Bin 30568 -> 0 bytes .../eks_and_gitlab/img/deploy_apps.png | Bin 82157 -> 0 bytes .../project/clusters/eks_and_gitlab/index.md | 281 +- .../{eks_and_gitlab => }/img/add_cluster.png | Bin .../{eks_and_gitlab => }/img/environment.png | Bin .../img/kubernetes_pod_logs_v12_4.png | Bin 393690 -> 0 bytes .../img/kubernetes_pod_logs_v12_5.png | Bin 0 -> 183707 bytes .../{eks_and_gitlab => }/img/pipeline.png | Bin .../{eks_and_gitlab => }/img/rbac.png | Bin .../img/sidebar_menu_pod_logs_v12_5.png | Bin 0 -> 13681 bytes doc/user/project/clusters/index.md | 442 +- .../project/clusters/kubernetes_pod_logs.md | 32 +- doc/user/project/clusters/runbooks/index.md | 4 +- doc/user/project/clusters/serverless/index.md | 140 +- ...rs_approval_new_protected_branch_v12_4.png | Bin ...owners_approval_protected_branch_v12_4.png | Bin .../img/time_tracking_example_v12_2.png | Bin .../img/time_tracking_sidebar_v8_16.png | Bin doc/user/project/import/gitea.md | 2 - doc/user/project/import/github.md | 2 +- doc/user/project/index.md | 3 +- .../project/integrations/generic_alerts.md | 8 +- .../integrations/gitlab_slack_application.md | 3 +- .../img/embed_metrics_issue_template.png | Bin 0 -> 146220 bytes .../integrations/img/grafana_panel_v12_5.png | Bin 0 -> 44193 bytes .../img/grafana_sharing_dialog_v12_5.png | Bin 0 -> 41203 bytes .../integrations/img/heatmap_panel_type.png | Bin 0 -> 8272 bytes .../img/http_proxy_access_v12_5.png | Bin 0 -> 47813 bytes ...rometheus_dashboard_anomaly_panel_type.png | Bin 0 -> 41015 bytes .../img/rendered_grafana_embed_v12_5.png | Bin 0 -> 61194 bytes .../img/select_query_variables_v12_5.png | Bin 0 -> 7368 bytes doc/user/project/integrations/jira.md | 3 +- .../project/integrations/project_services.md | 2 +- doc/user/project/integrations/prometheus.md | 156 +- .../prometheus_library/nginx_ingress.md | 2 +- .../prometheus_library/nginx_ingress_vts.md | 2 +- doc/user/project/issue_board.md | 2 +- .../project/issues/associate_zoom_meeting.md | 42 + doc/user/project/issues/csv_export.md | 4 +- doc/user/project/issues/design_management.md | 22 +- doc/user/project/issues/due_dates.md | 2 +- .../project/issues/img/issue_weight.png} | Bin .../issues/img/select_all_designs_v12_4.png | Bin 1325569 -> 0 bytes .../issues/img/zoom-quickaction-button.png | Bin 117097 -> 53418 bytes .../project/issues/issue_data_and_actions.md | 18 +- doc/user/project/issues/issue_weight.md | 25 + doc/user/project/labels.md | 4 +- .../project/merge_requests/code_quality.md | 14 +- .../merge_requests/creating_merge_requests.md | 156 + .../approvals_premium_project_edit_v12_3.png | Bin 21908 -> 0 bytes .../approvals_premium_project_edit_v12_5.png | Bin 0 -> 21293 bytes .../img/mr_approvals_by_code_owners_v12_4.png | Bin doc/user/project/merge_requests/index.md | 658 +- .../merge_requests/merge_request_approvals.md | 6 +- .../merge_when_pipeline_succeeds.md | 5 + .../reviewing_and_managing_merge_requests.md | 251 + doc/user/project/merge_requests/versions.md | 11 + doc/user/project/milestones/index.md | 61 +- doc/user/project/operations/error_tracking.md | 19 +- doc/user/project/operations/feature_flags.md | 31 +- .../operations/img/error_details_v12_5.png | Bin 0 -> 522760 bytes .../operations/img/error_tracking_list.png | Bin 60762 -> 760603 bytes .../index.md | 16 + .../lets_encrypt_integration.md | 19 +- .../getting_started/fork_sample_project.md | 61 + .../new_or_existing_website.md | 45 + .../getting_started/pages_bundled_template.md | 29 + .../project/pages/getting_started_part_one.md | 53 +- .../project/pages/getting_started_part_two.md | 171 +- .../pages/img/new_project_for_pages_v12_5.png | Bin 0 -> 71618 bytes .../pages/img/pages_workflow_v12_5.png | Bin 0 -> 29541 bytes doc/user/project/pages/index.md | 93 +- doc/user/project/pages/introduction.md | 35 +- .../pages/lets_encrypt_for_gitlab_pages.md | 4 +- .../project/pages/pages_access_control.md | 48 + doc/user/project/protected_branches.md | 11 +- doc/user/project/push_options.md | 30 + .../releases/img/edit_release_page_v12_5.png | Bin 0 -> 150927 bytes .../milestone_list_with_releases_v12_5.png | Bin 0 -> 45454 bytes .../img/milestone_with_releases_v12_5.png | Bin 0 -> 67529 bytes .../project/releases/img/new_tag_12_5.png} | Bin .../img/release_edit_button_v12_5.png | Bin 0 -> 87472 bytes .../img/release_with_milestone_v12_5.png | Bin 0 -> 20197 bytes .../project/releases/img/tags_12_5.png} | Bin doc/user/project/releases/index.md | 131 + doc/user/project/repository/file_finder.md | 45 + .../project/repository/forking_workflow.md | 55 + .../img/file_finder_find_button.png | Bin .../repository}/img/file_finder_find_file.png | Bin .../img/forking_workflow_branch_select.png} | Bin .../img/forking_workflow_choose_namespace.png | Bin .../img/forking_workflow_fork_button.png | Bin .../img/forking_workflow_merge_request.png} | Bin .../img/forking_workflow_path_taken_error.png | Bin ..._mirroring_copy_ssh_public_key_button.png} | Bin .../img/repository_mirroring_force_update.png | Bin ...pository_mirroring_pull_settings_lower.png | Bin ...pository_mirroring_pull_settings_upper.png | Bin .../repository_mirroring_push_settings.png | Bin doc/user/project/repository/index.md | 5 +- .../repository/repository_mirroring.md | 430 + doc/user/project/settings/index.md | 7 +- doc/user/project/time_tracking.md | 92 + doc/user/search/advanced_search_syntax.md | 2 + .../search/img/issue_search_filter_v12_5.png | Bin 0 -> 504590 bytes doc/user/search/index.md | 11 +- doc/user/shortcuts.md | 135 + doc/user/todos.md | 142 + doc/workflow/README.md | 55 +- doc/workflow/file_finder.md | 44 +- doc/workflow/forking_workflow.md | 54 +- doc/workflow/git_annex.md | 239 +- doc/workflow/git_lfs.md | 4 +- doc/workflow/gitlab_flow.md | 329 +- doc/workflow/issue_weight.md | 24 +- doc/workflow/lfs/lfs_administration.md | 272 +- .../lfs/manage_large_binaries_with_git_lfs.md | 265 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 255 +- doc/workflow/notifications.md | 175 +- doc/workflow/releases.md | 25 +- doc/workflow/repository_mirroring.md | 427 +- doc/workflow/shortcuts.md | 133 +- doc/workflow/time_tracking.md | 90 +- doc/workflow/timezone.md | 40 +- doc/workflow/todos.md | 141 +- doc/workflow/workflow.md | 34 +- jest.config.js | 39 +- lib/api/api.rb | 2 + lib/api/branches.rb | 2 +- lib/api/commits.rb | 6 +- lib/api/deployments.rb | 2 +- lib/api/entities.rb | 66 +- lib/api/group_clusters.rb | 1 + lib/api/group_container_repositories.rb | 4 +- lib/api/group_export.rb | 34 + lib/api/helpers.rb | 17 + lib/api/helpers/internal_helpers.rb | 3 +- lib/api/helpers/pagination.rb | 249 +- lib/api/helpers/projects_helpers.rb | 3 +- lib/api/internal/base.rb | 2 +- lib/api/merge_requests.rb | 12 +- lib/api/pages_domains.rb | 14 +- lib/api/project_clusters.rb | 1 + lib/api/project_container_repositories.rb | 11 +- lib/api/projects.rb | 6 +- lib/api/releases.rb | 2 +- lib/api/settings.rb | 15 +- lib/api/sidekiq_metrics.rb | 3 +- .../filter/inline_grafana_metrics_filter.rb | 76 + .../filter/inline_metrics_redactor_filter.rb | 89 +- lib/banzai/filter/video_link_filter.rb | 2 +- lib/banzai/pipeline/ascii_doc_pipeline.rb | 3 + lib/banzai/pipeline/gfm_pipeline.rb | 1 + lib/bitbucket/representation/pull_request.rb | 5 +- lib/container_registry/client.rb | 2 +- lib/declarative_policy.rb | 9 +- lib/feature/gitaly.rb | 3 +- .../post_deployment_migration_generator.rb | 2 +- lib/gitlab.rb | 12 + .../cycle_analytics/base_query_builder.rb | 2 + .../cycle_analytics/data_collector.rb | 2 + .../cycle_analytics/records_fetcher.rb | 2 + .../analytics/cycle_analytics/stage_events.rb | 18 +- .../stage_events/code_stage_start.rb | 2 +- .../stage_events/issue_created.rb | 2 +- .../issue_first_mentioned_in_commit.rb | 8 +- .../stage_events/issue_stage_end.rb | 4 +- .../stage_events/merge_request_created.rb | 2 +- ...ge_request_first_deployed_to_production.rb | 4 +- .../merge_request_last_build_finished.rb | 8 +- .../merge_request_last_build_started.rb | 8 +- .../stage_events/merge_request_merged.rb | 8 +- .../stage_events/metrics_based_stage_event.rb | 17 + .../stage_events/plan_stage_start.rb | 5 +- .../stage_events/production_stage_end.rb | 2 +- .../stage_events/simple_stage_event.rb | 13 - .../stage_events/stage_event.rb | 4 + lib/gitlab/auth/ip_rate_limiter.rb | 19 +- lib/gitlab/auth/ldap/config.rb | 8 + .../legacy_upload_mover.rb | 1 + .../legacy_uploads_migrator.rb | 2 +- ...populate_untracked_uploads_dependencies.rb | 2 +- lib/gitlab/ci/ansi2json/converter.rb | 97 +- lib/gitlab/ci/ansi2json/line.rb | 7 +- lib/gitlab/ci/ansi2json/state.rb | 4 +- lib/gitlab/ci/ansi2json/style.rb | 21 +- lib/gitlab/ci/build/context/base.rb | 35 + lib/gitlab/ci/build/context/build.rb | 41 + lib/gitlab/ci/build/context/global.rb | 41 + lib/gitlab/ci/build/policy/changes.rb | 2 +- lib/gitlab/ci/build/policy/kubernetes.rb | 2 +- lib/gitlab/ci/build/policy/refs.rb | 2 +- lib/gitlab/ci/build/policy/specification.rb | 2 +- lib/gitlab/ci/build/policy/variables.rb | 4 +- lib/gitlab/ci/build/rules.rb | 14 +- lib/gitlab/ci/build/rules/rule.rb | 4 +- lib/gitlab/ci/build/rules/rule/clause.rb | 2 +- .../ci/build/rules/rule/clause/changes.rb | 2 +- .../ci/build/rules/rule/clause/exists.rb | 2 +- lib/gitlab/ci/build/rules/rule/clause/if.rb | 7 +- lib/gitlab/ci/config/entry/artifacts.rb | 17 +- lib/gitlab/ci/config/entry/boolean.rb | 20 + lib/gitlab/ci/config/entry/commands.rb | 4 +- lib/gitlab/ci/config/entry/default.rb | 34 +- lib/gitlab/ci/config/entry/files.rb | 26 + lib/gitlab/ci/config/entry/job.rb | 67 +- lib/gitlab/ci/config/entry/key.rb | 45 +- lib/gitlab/ci/config/entry/need.rb | 44 + lib/gitlab/ci/config/entry/needs.rb | 55 + lib/gitlab/ci/config/entry/prefix.rb | 20 + lib/gitlab/ci/config/entry/root.rb | 5 +- lib/gitlab/ci/config/entry/rules/rule.rb | 15 +- lib/gitlab/ci/config/entry/script.rb | 6 +- lib/gitlab/ci/config/entry/workflow.rb | 25 + lib/gitlab/ci/config/normalizer.rb | 20 +- lib/gitlab/ci/pipeline/chain/base.rb | 2 +- lib/gitlab/ci/pipeline/chain/build.rb | 2 - lib/gitlab/ci/pipeline/chain/command.rb | 4 +- .../ci/pipeline/chain/config/content.rb | 59 + .../ci/pipeline/chain/config/process.rb | 41 + .../pipeline/chain/evaluate_workflow_rules.rb | 50 + lib/gitlab/ci/pipeline/chain/populate.rb | 21 +- .../chain/remove_unwanted_chat_jobs.rb | 6 +- lib/gitlab/ci/pipeline/chain/seed.rb | 64 + .../ci/pipeline/chain/validate/config.rb | 33 - lib/gitlab/ci/pipeline/seed/build.rb | 47 +- lib/gitlab/ci/pipeline/seed/build/cache.rb | 77 + lib/gitlab/ci/status/build/failed.rb | 4 +- .../templates/Jobs/Code-Quality.gitlab-ci.yml | 2 +- .../DAST-Default-Branch-Deploy.gitlab-ci.yml | 10 +- .../ci/templates/Jobs/Deploy.gitlab-ci.yml | 2 +- .../Security/Container-Scanning.gitlab-ci.yml | 13 +- .../Dependency-Scanning.gitlab-ci.yml | 67 + .../ci/templates/Security/SAST.gitlab-ci.yml | 69 +- lib/gitlab/ci/yaml_processor.rb | 46 +- .../cleanup/orphan_job_artifact_files.rb | 11 +- lib/gitlab/cluster/lifecycle_events.rb | 77 +- lib/gitlab/cluster/mixins/puma_cluster.rb | 6 +- .../cluster/mixins/unicorn_http_server.rb | 19 +- .../cluster/puma_worker_killer_initializer.rb | 13 +- lib/gitlab/config/entry/configurable.rb | 29 +- lib/gitlab/config/entry/factory.rb | 20 +- lib/gitlab/config/entry/inheritable.rb | 40 + lib/gitlab/config/entry/node.rb | 4 + lib/gitlab/config/entry/simplifiable.rb | 11 +- lib/gitlab/config/entry/validatable.rb | 21 +- lib/gitlab/config/entry/validators.rb | 39 +- .../cycle_analytics/group_stage_summary.rb | 7 +- .../cycle_analytics/summary/group/base.rb | 5 +- .../cycle_analytics/summary/group/deploy.rb | 3 +- .../cycle_analytics/summary/group/issue.rb | 16 +- lib/gitlab/daemon.rb | 9 +- lib/gitlab/danger/helper.rb | 16 +- lib/gitlab/danger/teammate.rb | 5 +- lib/gitlab/data_builder/deployment.rb | 8 +- lib/gitlab/data_builder/push.rb | 30 +- lib/gitlab/database/migration_helpers.rb | 17 +- .../v1/rename_namespaces.rb | 10 +- .../self_monitoring/project/create_service.rb | 53 +- lib/gitlab/devise_failure.rb | 8 + lib/gitlab/error_tracking/detailed_error.rb | 31 + lib/gitlab/error_tracking/error_event.rb | 11 + lib/gitlab/etag_caching/router.rb | 4 +- lib/gitlab/exception_log_formatter.rb | 20 + lib/gitlab/experimentation.rb | 69 +- lib/gitlab/favicon.rb | 2 +- lib/gitlab/file_finder.rb | 17 +- lib/gitlab/git/commit.rb | 4 - lib/gitlab/git/repository.rb | 11 +- lib/gitlab/git/wiki.rb | 8 - lib/gitlab/git_access_result/custom_action.rb | 6 +- lib/gitlab/gitaly_client.rb | 27 +- lib/gitlab/gitaly_client/commit_service.rb | 45 +- lib/gitlab/gitaly_client/namespace_service.rb | 19 +- lib/gitlab/gitaly_client/operation_service.rb | 2 +- lib/gitlab/gitaly_client/wiki_service.rb | 12 - lib/gitlab/gon_helper.rb | 3 - lib/gitlab/gpg.rb | 49 +- .../grape_logging/loggers/exception_logger.rb | 25 + .../graphql/authorize/instrumentation.rb | 6 +- lib/gitlab/graphql/connections.rb | 6 +- .../filterable_array_connection.rb | 17 + .../keyset/conditions/base_condition.rb | 40 + .../keyset/conditions/not_null_condition.rb | 57 + .../keyset/conditions/null_condition.rb | 41 + .../graphql/connections/keyset/connection.rb | 153 + .../keyset/legacy_keyset_connection.rb | 66 + .../graphql/connections/keyset/order_info.rb | 78 + .../connections/keyset/query_builder.rb | 68 + .../graphql/connections/keyset_connection.rb | 85 - lib/gitlab/graphql/filterable_array.rb | 14 + .../loaders/pipeline_for_sha_loader.rb | 25 - lib/gitlab/health_checks/master_check.rb | 66 + lib/gitlab/import_export.rb | 14 +- lib/gitlab/import_export/config.rb | 5 +- lib/gitlab/import_export/file_importer.rb | 2 +- .../import_export/group_import_export.yml | 36 + .../group_project_object_builder.rb | 11 +- lib/gitlab/import_export/group_tree_saver.rb | 55 + lib/gitlab/import_export/import_export.yml | 3 + .../import_export/project_tree_restorer.rb | 228 +- .../import_export/project_tree_saver.rb | 31 +- lib/gitlab/import_export/reader.rb | 27 +- lib/gitlab/import_export/relation_factory.rb | 20 +- .../import_export/relation_rename_service.rb | 2 +- .../import_export/relation_tree_saver.rb | 27 + lib/gitlab/import_export/saver.rb | 18 +- lib/gitlab/import_export/shared.rb | 40 +- lib/gitlab/instrumentation_helper.rb | 44 + .../kubernetes/config_maps/aws_node_auth.rb | 46 + lib/gitlab/kubernetes/helm.rb | 4 +- lib/gitlab/kubernetes/helm/install_command.rb | 2 +- lib/gitlab/metrics/dashboard/errors.rb | 5 + lib/gitlab/metrics/dashboard/finder.rb | 3 + lib/gitlab/metrics/dashboard/processor.rb | 3 + .../metrics/dashboard/service_selector.rb | 5 + .../stages/common_metrics_inserter.rb | 2 +- .../dashboard/stages/grafana_formatter.rb | 224 + .../stages/project_metrics_inserter.rb | 2 +- lib/gitlab/metrics/dashboard/url.rb | 46 +- lib/gitlab/metrics/exporter/web_exporter.rb | 25 +- .../metrics/requests_rack_middleware.rb | 4 +- lib/gitlab/pagination/base.rb | 32 + lib/gitlab/pagination/offset_pagination.rb | 77 + lib/gitlab/project_authorizations.rb | 30 +- lib/gitlab/project_template.rb | 3 +- lib/gitlab/prometheus/internal.rb | 45 + lib/gitlab/prometheus/metric_group.rb | 16 +- .../queries/knative_invocation_query.rb | 13 +- lib/gitlab/quick_actions/issuable_actions.rb | 2 +- lib/gitlab/quick_actions/issue_actions.rb | 22 +- lib/gitlab/redis/wrapper.rb | 2 + lib/gitlab/regex.rb | 15 +- lib/gitlab/search/found_blob.rb | 54 +- lib/gitlab/seeder.rb | 65 + lib/gitlab/serializer/pagination.rb | 5 +- lib/gitlab/setup_helper.rb | 5 + lib/gitlab/shell.rb | 12 - lib/gitlab/sidekiq_daemon/monitor.rb | 6 + .../sidekiq_logging/structured_logger.rb | 11 +- lib/gitlab/sidekiq_middleware/metrics.rb | 49 +- lib/gitlab/slash_commands/command.rb | 1 + lib/gitlab/slash_commands/issue_comment.rb | 55 + .../slash_commands/presenters/access.rb | 4 + .../presenters/issue_comment.rb | 43 + .../slash_commands/presenters/note_base.rb | 48 + lib/gitlab/sourcegraph.rb | 26 + lib/gitlab/sql/union.rb | 2 +- lib/gitlab/task_helpers.rb | 18 +- lib/gitlab/tracking.rb | 7 +- lib/gitlab/usage_data.rb | 24 +- .../usage_data_counters/web_ide_counter.rb | 14 +- lib/gitlab/utils/deep_size.rb | 4 + lib/gitlab/wiki_file_finder.rb | 6 +- lib/gitlab/workhorse.rb | 1 + lib/google_api/cloud_platform/client.rb | 4 +- lib/grafana/client.rb | 14 +- lib/prometheus/pid_provider.rb | 10 +- lib/quality/kubernetes_client.rb | 14 +- lib/quality/test_level.rb | 8 + lib/sentry/client.rb | 128 +- lib/tasks/dev.rake | 4 + lib/tasks/gitlab/graphql.rake | 42 +- lib/tasks/gitlab/seed.rake | 2 +- lib/tasks/gitlab/shell.rake | 2 +- lib/tasks/gitlab/uploads/legacy.rake | 2 +- locale/ar_SA/gitlab.po | 4 +- locale/bg/gitlab.po | 4 +- locale/bn_BD/gitlab.po | 4 +- locale/bn_IN/gitlab.po | 4 +- locale/ca_ES/gitlab.po | 4 +- locale/cs_CZ/gitlab.po | 4 +- locale/cy_GB/gitlab.po | 4 +- locale/da_DK/gitlab.po | 4 +- locale/de/gitlab.po | 4 +- locale/el_GR/gitlab.po | 4 +- locale/eo/gitlab.po | 4 +- locale/es/gitlab.po | 4 +- locale/et_EE/gitlab.po | 4 +- locale/fa_IR/gitlab.po | 4 +- locale/fil_PH/gitlab.po | 4 +- locale/fr/gitlab.po | 4 +- locale/gitlab.pot | 1135 +- locale/gl_ES/gitlab.po | 4 +- locale/he_IL/gitlab.po | 4 +- locale/hi_IN/gitlab.po | 4 +- locale/hr_HR/gitlab.po | 4 +- locale/hu_HU/gitlab.po | 4 +- locale/id_ID/gitlab.po | 4 +- locale/it/gitlab.po | 4 +- locale/ja/gitlab.po | 4 +- locale/ka_GE/gitlab.po | 4 +- locale/ko/gitlab.po | 4 +- locale/mn_MN/gitlab.po | 4 +- locale/nb_NO/gitlab.po | 4 +- locale/nl_NL/gitlab.po | 4 +- locale/pa_IN/gitlab.po | 4 +- locale/pl_PL/gitlab.po | 4 +- locale/pt_BR/gitlab.po | 4 +- locale/pt_PT/gitlab.po | 4 +- locale/ro_RO/gitlab.po | 4 +- locale/ru/gitlab.po | 4 +- locale/sk_SK/gitlab.po | 4 +- locale/sq_AL/gitlab.po | 4 +- locale/sr_CS/gitlab.po | 4 +- locale/sr_SP/gitlab.po | 4 +- locale/sv_SE/gitlab.po | 4 +- locale/sw_KE/gitlab.po | 4 +- locale/tr_TR/gitlab.po | 4 +- locale/uk/gitlab.po | 4 +- locale/vi_VN/gitlab.po | 4 +- locale/zh_CN/gitlab.po | 4 +- locale/zh_HK/gitlab.po | 4 +- locale/zh_TW/gitlab.po | 4 +- package.json | 20 +- qa/Gemfile | 9 +- qa/Gemfile.lock | 13 +- qa/qa.rb | 24 + qa/qa/flow/login.rb | 38 + qa/qa/page/admin/overview/users/show.rb | 10 + .../settings/component/outbound_requests.rb | 33 + qa/qa/page/admin/settings/network.rb | 7 + qa/qa/page/base.rb | 52 +- qa/qa/page/component/select2.rb | 8 + qa/qa/page/dashboard/projects.rb | 4 + qa/qa/page/dashboard/welcome.rb | 17 + qa/qa/page/element.rb | 10 +- qa/qa/page/file/shared/commit_button.rb | 4 + qa/qa/page/group/show.rb | 10 + qa/qa/page/main/menu.rb | 2 +- qa/qa/page/project/issue/index.rb | 4 + qa/qa/page/project/issue/show.rb | 14 +- qa/qa/page/project/pipeline/index.rb | 12 + qa/qa/page/project/settings/ci_cd.rb | 2 + qa/qa/page/project/sub_menus/settings.rb | 9 + qa/qa/resource/base.rb | 11 +- qa/qa/resource/group.rb | 5 +- qa/qa/resource/issue.rb | 4 + qa/qa/resource/members.rb | 4 + qa/qa/resource/merge_request.rb | 2 - qa/qa/resource/project.rb | 5 +- qa/qa/resource/runner.rb | 1 - qa/qa/resource/sandbox.rb | 2 + qa/qa/resource/user.rb | 19 +- qa/qa/runtime/api/client.rb | 19 +- qa/qa/runtime/browser.rb | 20 +- qa/qa/runtime/env.rb | 4 + qa/qa/runtime/feature.rb | 40 +- qa/qa/runtime/fixtures.rb | 2 +- qa/qa/runtime/user.rb | 4 + qa/qa/scenario/shared_attributes.rb | 1 + qa/qa/service/docker_run/jenkins.rb | 43 + qa/qa/service/docker_run/maven.rb | 44 + .../login_via_instance_wide_saml_sso_spec.rb | 4 +- .../1_manage/project/dashboard_images_spec.rb | 57 + .../issue/check_mentions_for_xss_spec.rb | 11 +- .../2_plan/issue/close_issue_spec.rb | 3 +- .../collapse_comments_in_discussions_spec.rb | 3 +- .../2_plan/issue/comment_issue_spec.rb | 3 +- .../2_plan/issue/create_issue_spec.rb | 22 +- .../issue/filter_issue_comments_spec.rb | 3 +- .../2_plan/issue/issue_suggestions_spec.rb | 3 +- .../browser_ui/2_plan/issue/mentions_spec.rb | 3 +- .../view_merge_request_diff_patch_spec.rb | 7 +- .../repository/add_file_template_spec.rb | 19 +- .../add_list_delete_branches_spec.rb | 26 +- .../3_create/repository/clone_spec.rb | 6 +- .../user_views_commit_diff_patch_spec.rb | 9 +- .../web_ide/add_file_template_spec.rb | 17 +- .../deploy_key/clone_using_deploy_key_spec.rb | 5 + .../create_project_with_auto_devops_spec.rb | 3 +- .../non_devops/performance_bar_spec.rb | 2 +- qa/qa/specs/loop_runner.rb | 21 + qa/qa/specs/runner.rb | 2 + qa/qa/support/api.rb | 16 +- qa/qa/vendor/github/page/login.rb | 10 +- qa/qa/vendor/jenkins/page/base.rb | 24 + qa/qa/vendor/jenkins/page/configure.rb | 48 + qa/qa/vendor/jenkins/page/configure_job.rb | 62 + qa/qa/vendor/jenkins/page/login.rb | 31 + qa/qa/vendor/jenkins/page/new_credentials.rb | 50 + qa/qa/vendor/jenkins/page/new_job.rb | 38 + qa/qa/vendor/saml_idp/page/login.rb | 16 +- qa/spec/page/element_spec.rb | 18 + qa/spec/resource/base_spec.rb | 2 + qa/spec/spec_helper.rb | 20 +- rubocop/cop/rspec/any_instance_of.rb | 78 + rubocop/rubocop.rb | 1 + scripts/lint-doc.sh | 3 +- scripts/notify-slack | 14 - scripts/review_apps/automated_cleanup.rb | 36 +- scripts/review_apps/base-config.yaml | 70 +- scripts/review_apps/review-apps.sh | 98 +- scripts/static-analysis | 38 +- scripts/sync-stable-branch.sh | 32 + scripts/trigger-build | 35 +- .../abuse_reports_controller_spec.rb | 4 +- .../admin/clusters_controller_spec.rb | 156 +- .../admin/identities_controller_spec.rb | 8 +- .../admin/spam_logs_controller_spec.rb | 6 +- .../admin/users_controller_spec.rb | 2 +- .../application_controller_spec.rb | 34 +- .../concerns/confirm_email_warning_spec.rb | 2 +- .../concerns/metrics_dashboard_spec.rb | 47 +- ...redirects_for_missing_path_on_tree_spec.rb | 33 + .../concerns/renders_commits_spec.rb | 60 + .../concerns/sourcegraph_gon_spec.rb | 118 + .../authorizations_controller_spec.rb | 5 +- .../groups/clusters_controller_spec.rb | 146 +- .../groups/group_links_controller_spec.rb | 114 + .../groups/milestones_controller_spec.rb | 18 + spec/controllers/groups_controller_spec.rb | 8 +- spec/controllers/health_controller_spec.rb | 134 - .../import/gitlab_controller_spec.rb | 5 +- .../import/phabricator_controller_spec.rb | 2 +- .../omniauth_callbacks_controller_spec.rb | 8 + spec/controllers/metrics_controller_spec.rb | 4 +- .../projects/blame_controller_spec.rb | 19 +- .../projects/blob_controller_spec.rb | 15 +- .../projects/clusters_controller_spec.rb | 146 +- .../projects/discussions_controller_spec.rb | 16 +- .../projects/environments_controller_spec.rb | 4 +- .../error_tracking_controller_spec.rb | 202 +- .../projects/grafana_api_controller_spec.rb | 71 + .../projects/issues_controller_spec.rb | 2 +- .../projects/jobs_controller_spec.rb | 18 +- .../projects/labels_controller_spec.rb | 18 + .../projects/mattermosts_controller_spec.rb | 13 +- .../creations_controller_spec.rb | 4 +- .../merge_requests/diffs_controller_spec.rb | 22 +- .../merge_requests_controller_spec.rb | 246 +- .../projects/mirrors_controller_spec.rb | 4 - .../projects/notes_controller_spec.rb | 10 +- .../projects/pages_domains_controller_spec.rb | 62 +- .../projects/pipelines_controller_spec.rb | 6 +- .../project_members_controller_spec.rb | 8 +- .../prometheus/metrics_controller_spec.rb | 4 +- .../projects/releases_controller_spec.rb | 167 +- .../serverless/functions_controller_spec.rb | 94 +- .../settings/ci_cd_controller_spec.rb | 8 +- .../settings/operations_controller_spec.rb | 3 +- .../projects/snippets_controller_spec.rb | 12 +- .../projects/tree_controller_spec.rb | 20 +- .../projects/usage_ping_controller_spec.rb | 64 + spec/controllers/projects_controller_spec.rb | 28 +- .../registrations_controller_spec.rb | 94 + spec/controllers/sessions_controller_spec.rb | 58 + spec/controllers/snippets_controller_spec.rb | 12 +- spec/controllers/users_controller_spec.rb | 46 +- spec/db/schema_spec.rb | 48 +- spec/dependencies/omniauth_saml_spec.rb | 4 +- spec/factories/ci/pipelines.rb | 44 +- spec/factories/clusters/applications/helm.rb | 9 + spec/factories/clusters/clusters.rb | 20 + .../clusters/platforms/kubernetes.rb | 2 +- spec/factories/clusters/providers/aws.rb | 3 +- spec/factories/clusters/providers/gcp.rb | 2 +- spec/factories/commit_statuses.rb | 2 +- spec/factories/deployments.rb | 4 + .../error_tracking/detailed_error.rb | 29 + spec/factories/error_tracking/error_event.rb | 18 + spec/factories/grafana_integrations.rb | 3 +- spec/factories/group_group_links.rb | 9 + spec/factories/issues.rb | 1 + spec/factories/merge_requests.rb | 13 + spec/factories/projects.rb | 5 +- spec/factories/zoom_meetings.rb | 18 + .../admin/admin_abuse_reports_spec.rb | 24 + spec/features/admin/admin_projects_spec.rb | 5 +- spec/features/admin/admin_settings_spec.rb | 31 +- spec/features/admin/admin_users_spec.rb | 4 +- spec/features/admin/clusters/eks_spec.rb | 29 + spec/features/calendar_spec.rb | 10 +- ...installing_applications_shared_examples.rb | 31 + spec/features/commits_spec.rb | 37 +- spec/features/container_registry_spec.rb | 2 +- spec/features/cycle_analytics_spec.rb | 10 +- spec/features/dashboard/projects_spec.rb | 3 +- spec/features/explore/groups_spec.rb | 4 + spec/features/global_search_spec.rb | 4 +- spec/features/groups/clusters/eks_spec.rb | 35 + spec/features/groups/clusters/user_spec.rb | 8 +- ...ith_external_authorization_service_spec.rb | 4 +- spec/features/groups/issues_spec.rb | 4 + spec/features/groups/milestone_spec.rb | 141 +- spec/features/groups_spec.rb | 20 +- spec/features/import/manifest_import_spec.rb | 2 +- .../internal_references_spec.rb | 4 +- .../markdown_references/jira_spec.rb | 6 +- spec/features/issuables/sorting_list_spec.rb | 24 +- .../filtered_search/dropdown_hint_spec.rb | 11 +- .../filtered_search/dropdown_release_spec.rb | 55 + spec/features/issues/notes_on_issues_spec.rb | 2 +- ...r_creates_branch_and_merge_request_spec.rb | 4 +- ...creates_confidential_merge_request_spec.rb | 2 +- .../issues/user_creates_issue_spec.rb | 13 - .../issues/user_toggles_subscription_spec.rb | 1 - spec/features/markdown/metrics_spec.rb | 74 +- .../maintainer_edits_fork_spec.rb | 6 +- .../user_accepts_merge_request_spec.rb | 2 +- ...ommits_from_memebers_who_can_merge_spec.rb | 6 +- .../user_comments_on_diff_spec.rb | 3 + .../user_creates_image_diff_notes_spec.rb | 3 + .../user_creates_merge_request_spec.rb | 7 +- .../user_edits_merge_request_spec.rb | 2 +- .../merge_request/user_expands_diff_spec.rb | 4 + .../user_merges_merge_request_spec.rb | 2 +- ...r_merges_only_if_pipeline_succeeds_spec.rb | 4 +- ...user_merges_when_pipeline_succeeds_spec.rb | 2 +- .../user_posts_diff_notes_spec.rb | 3 + .../user_resolves_conflicts_spec.rb | 5 +- ...diff_notes_and_discussions_resolve_spec.rb | 6 + .../user_reverts_merge_request_spec.rb | 6 +- .../user_sees_avatar_on_diff_notes_spec.rb | 7 +- .../user_sees_cherry_pick_modal_spec.rb | 2 +- .../user_sees_deployment_widget_spec.rb | 4 +- .../merge_request/user_sees_diff_spec.rb | 10 +- .../user_sees_merge_request_pipelines_spec.rb | 10 +- .../user_sees_merge_widget_spec.rb | 63 +- ...sees_mr_with_deleted_source_branch_spec.rb | 3 + ...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 +- .../merge_request/user_sees_versions_spec.rb | 4 + .../user_suggests_changes_on_diff_spec.rb | 3 + .../user_toggles_whitespace_changes_spec.rb | 3 + .../merge_request/user_views_diffs_spec.rb | 3 + .../user_squashes_merge_request_spec.rb | 8 +- .../milestones/user_views_milestones_spec.rb | 27 + ...late_new_pipeline_vars_with_params_spec.rb | 32 + spec/features/profile_spec.rb | 2 +- .../profiles/user_edit_profile_spec.rb | 4 +- spec/features/project_group_variables_spec.rb | 60 + .../projects/badges/pipeline_badge_spec.rb | 8 +- spec/features/projects/blobs/edit_spec.rb | 21 +- spec/features/projects/clusters/eks_spec.rb | 3 +- spec/features/projects/clusters/gcp_spec.rb | 6 +- spec/features/projects/clusters/user_spec.rb | 8 +- .../projects/commit/cherry_pick_spec.rb | 6 +- .../commits/user_browses_commits_spec.rb | 10 +- spec/features/projects/compare_spec.rb | 8 +- .../projects/environments/environment_spec.rb | 5 +- .../environments/environments_spec.rb | 4 +- .../projects/features_visibility_spec.rb | 8 +- ...files_sort_submodules_with_folders_spec.rb | 4 +- ...project_owner_creates_license_file_spec.rb | 3 +- ...eate_license_file_in_empty_project_spec.rb | 2 +- .../projects/files/user_browses_files_spec.rb | 24 +- .../files/user_browses_lfs_files_spec.rb | 2 - .../files/user_creates_directory_spec.rb | 4 +- .../projects/files/user_creates_files_spec.rb | 20 +- .../projects/files/user_deletes_files_spec.rb | 4 +- .../projects/files/user_edits_files_spec.rb | 9 +- .../files/user_reads_pipeline_status_spec.rb | 4 +- .../files/user_replaces_files_spec.rb | 4 +- .../projects/files/user_uploads_files_spec.rb | 4 +- spec/features/projects/fork_spec.rb | 4 +- .../features/projects/forks/fork_list_spec.rb | 2 +- spec/features/projects/graph_spec.rb | 6 - .../import_export/export_file_spec.rb | 6 +- .../import_export/import_file_spec.rb | 8 +- spec/features/projects/jobs_spec.rb | 4 +- .../projects/labels/search_labels_spec.rb | 2 +- .../members/member_leaves_project_spec.rb | 2 +- .../members/user_requests_access_spec.rb | 2 - .../projects/milestones/milestone_spec.rb | 106 +- .../projects/pages_lets_encrypt_spec.rb | 49 +- spec/features/projects/pages_spec.rb | 115 +- .../projects/pipelines/pipeline_spec.rb | 30 +- .../projects/pipelines/pipelines_spec.rb | 26 +- .../settings/operations_settings_spec.rb | 25 + ...er_manages_merge_requests_settings_spec.rb | 23 + .../user_sees_collaboration_links_spec.rb | 23 +- .../user_sees_last_commit_ci_status_spec.rb | 8 +- .../user_sees_setup_shortcut_buttons_spec.rb | 6 +- spec/features/projects/tree/tree_show_spec.rb | 1 - spec/features/projects/view_on_env_spec.rb | 10 +- spec/features/projects_spec.rb | 20 +- spec/features/raven_js_spec.rb | 27 - .../user_uses_header_search_field_spec.rb | 26 +- .../security/project/internal_access_spec.rb | 8 +- .../security/project/private_access_spec.rb | 8 +- .../security/project/public_access_spec.rb | 8 +- spec/features/sentry_js_spec.rb | 28 + spec/features/signed_commits_spec.rb | 26 +- .../tags/developer_deletes_tag_spec.rb | 6 +- spec/features/unsubscribe_links_spec.rb | 2 +- spec/features/user_sees_revert_modal_spec.rb | 2 +- .../features/users/anonymous_sessions_spec.rb | 41 + spec/features/users/login_spec.rb | 2 +- spec/features/users/signup_spec.rb | 10 +- spec/finders/abuse_reports_finder_spec.rb | 27 + spec/finders/branches_finder_spec.rb | 58 +- .../container_repositories_finder_spec.rb | 58 +- spec/finders/issues_finder_spec.rb | 14 + spec/finders/merge_requests_finder_spec.rb | 12 + spec/finders/projects_finder_spec.rb | 45 +- .../finders/prometheus_metrics_finder_spec.rb | 144 + spec/finders/releases_finder_spec.rb | 33 +- spec/finders/tags_finder_spec.rb | 38 + spec/finders/todos_finder_spec.rb | 88 +- spec/fixtures/api/schemas/cluster_status.json | 2 + .../merge_request_sidebar_extras.json | 2 + .../api/schemas/error_tracking/error.json | 20 +- .../error_tracking/error_detailed.json | 45 + .../error_tracking/error_stack_trace.json | 14 + .../error_tracking/issue_detailed.json | 11 + .../error_tracking/issue_stack_trace.json | 11 + .../api/schemas/public_api/v4/blobs.json | 3 +- .../public_api/v4/pages_domain/basic.json | 3 +- .../public_api/v4/pages_domain/detail.json | 3 +- .../api/schemas/public_api/v4/release.json | 5 +- .../v4/release/release_for_guest.json | 5 +- spec/fixtures/api/schemas/release.json | 3 +- spec/fixtures/grafana/dashboard_response.json | 764 + .../fixtures/grafana/datasource_response.json | 21 + .../grafana/expected_grafana_embed.json | 27 + spec/fixtures/grafana/proxy_response.json | 459 + .../simplified_dashboard_response.json | 40 + spec/fixtures/group_export.tar.gz | Bin 0 -> 4551 bytes .../import_export/{ => complex}/project.json | 79 +- .../project.json} | 0 .../project.json} | 0 .../project.json} | 0 .../metrics/dashboard/schemas/metrics.json | 1 - .../metrics/dashboard/schemas/panels.json | 1 - spec/frontend/api_spec.js | 20 + .../components/issue_time_estimate_spec.js | 81 + spec/frontend/boards/issue_card_spec.js | 307 + spec/frontend/boards/stores/getters_spec.js | 21 + .../frontend/clusters/clusters_bundle_spec.js | 26 +- .../clusters/components/applications_spec.js | 157 +- .../crossplane_provider_stack_spec.js | 78 + spec/frontend/clusters/services/mock_data.js | 27 + .../clusters/stores/clusters_store_spec.js | 43 + .../project_form_group_spec.js.snap | 4 +- .../__snapshots__/contributors_spec.js.snap | 47 + .../component/contributors_spec.js | 69 + .../contributors/store/actions_spec.js | 60 + .../contributors/store/getters_spec.js | 73 + .../contributors/store/mutations_spec.js | 40 + spec/frontend/contributors/utils_spec.js | 21 + .../components/cluster_form_dropdown_spec.js | 44 +- .../components/create_eks_cluster_spec.js | 91 + .../eks_cluster_configuration_form_spec.js | 181 +- .../components/region_dropdown_spec.js | 55 - .../service_credentials_form_spec.js | 117 + .../services/aws_services_facade_spec.js | 152 + .../eks_cluster/store/actions_spec.js | 248 +- .../eks_cluster/store/mutations_spec.js | 113 +- .../gke_cluster_namespace_spec.js | 4 +- .../init_create_cluster_spec.js | 73 + .../cycle_analytics/stage_nav_item_spec.js | 44 +- spec/frontend/environment.js | 6 + .../components/error_details_spec.js | 105 + .../components/error_tracking_list_spec.js | 15 +- .../components/stacktrace_entry_spec.js | 49 + .../components/stacktrace_spec.js | 45 + .../store/details/actions_spec.js | 94 + .../store/details/getters_spec.js | 13 + .../error_tracking/store/list/getters_spec.js | 33 + .../store/{ => list}/mutation_spec.js | 4 +- .../components/error_tracking_form_spec.js | 25 +- .../store/actions_spec.js | 16 +- spec/frontend/fixtures/merge_requests.rb | 18 +- .../fixtures/static/environments_logs.html | 4 +- .../frontend/fixtures/static/signin_tabs.html | 3 + spec/frontend/fixtures/u2f.rb | 4 +- .../grafana_integration_spec.js.snap | 101 + .../components/grafana_integration_spec.js | 125 + .../store/mutations_spec.js | 35 + spec/frontend/helpers/monitor_helper_spec.js | 82 + .../jobs/__snapshots__/stage_spec.js.snap | 61 + .../ide/components/jobs/stage_spec.js | 86 + .../ide/components/preview/clientside_spec.js | 20 +- spec/frontend/ide/services/index_spec.js | 83 + .../stores/modules/clientside/actions_spec.js | 39 + .../issuables_list_app_spec.js.snap | 15 + .../components/issuable_spec.js | 345 + .../components/issuables_list_app_spec.js | 410 + .../issuables_list/issuable_list_test_data.js | 72 + spec/frontend/issue_show/helpers.js | 10 + spec/frontend/jobs/components/log/log_spec.js | 4 +- spec/frontend/jobs/store/utils_spec.js | 20 +- spec/frontend/lib/utils/chart_utils_spec.js | 11 + .../lib/utils/datetime_utility_spec.js | 47 +- .../frontend/lib/utils/number_utility_spec.js | 40 + spec/frontend/lib/utils/text_utility_spec.js | 13 + .../monitoring/charts/time_series_spec.js | 154 +- .../components/charts/anomaly_spec.js | 303 + .../date_time_picker/date_time_picker_spec.js | 10 + spec/frontend/monitoring/embed/embed_spec.js | 4 +- spec/frontend/monitoring/embed/mock_data.js | 4 +- spec/frontend/monitoring/mock_data.js | 465 + spec/frontend/monitoring/panel_type_spec.js | 166 + .../monitoring/store/actions_spec.js | 277 +- .../monitoring/store/mutations_spec.js | 127 +- .../monitoring/store/utils_spec.js | 0 .../notes/components/comment_form_spec.js | 331 + .../components/diff_discussion_header_spec.js | 141 + .../components/discussion_actions_spec.js | 2 +- .../notes/components/discussion_notes_spec.js | 6 +- .../notes/components/note_app_spec.js | 26 +- spec/frontend/notes/mock_data.js | 1255 ++ .../components/add_request_spec.js | 62 + .../pipelines/graph/action_component_spec.js | 75 + .../pipelines/pipeline_triggerer_spec.js | 5 +- .../pipelines/pipelines_table_row_spec.js | 136 +- .../pipelines/test_reports/mock_data.js | 123 + .../test_reports/stores/actions_spec.js | 109 + .../test_reports/stores/getters_spec.js | 54 + .../test_reports/stores/mutations_spec.js | 63 + .../test_reports/test_reports_spec.js | 64 + .../test_reports/test_suite_table_spec.js | 77 + .../test_reports/test_summary_spec.js | 78 + .../test_reports/test_summary_table_spec.js | 54 + spec/frontend/project_find_file_spec.js | 37 +- .../components/collapsible_container_spec.js | 53 +- .../components/table_registry_spec.js | 119 +- .../releases/detail/components/app_spec.js | 19 +- .../__snapshots__/release_block_spec.js.snap | 332 - .../components/release_block_footer_spec.js | 163 + .../list/components/release_block_spec.js | 33 +- spec/frontend/releases/mock_data.js | 4 +- .../directory_download_links_spec.js.snap | 75 + .../__snapshots__/last_commit_spec.js.snap | 56 +- .../directory_download_links_spec.js | 29 + .../repository/components/last_commit_spec.js | 4 +- .../preview/__snapshots__/index_spec.js.snap | 36 + .../components/preview/index_spec.js | 49 + .../table/__snapshots__/row_spec.js.snap | 2 + .../repository/components/table/index_spec.js | 72 +- .../repository/components/table/row_spec.js | 25 +- .../components/tree_content_spec.js | 71 + spec/frontend/repository/log_tree_spec.js | 27 +- spec/frontend/repository/pages/index_spec.js | 42 + spec/frontend/repository/pages/tree_spec.js | 60 + spec/frontend/repository/utils/commit_spec.js | 30 + spec/frontend/repository/utils/dom_spec.js | 20 + spec/frontend/repository/utils/readme_spec.js | 33 + spec/frontend/repository/utils/title_spec.js | 4 +- .../raven => frontend/sentry}/index_spec.js | 20 +- spec/frontend/sentry/sentry_config_spec.js | 214 + .../assignees/assignee_avatar_link_spec.js | 1 + .../assignees/collapsed_assignee_list_spec.js | 1 + .../uncollapsed_assignee_list_spec.js | 1 + .../__snapshots__/split_button_spec.js.snap | 37 + .../vue_shared/components/commit_spec.js | 113 +- .../viewers/image_viewer_spec.js | 45 + .../components/issue/issue_assignees_spec.js | 191 +- .../components/notes/placeholder_note_spec.js | 2 +- .../components/notes/system_note_spec.js | 2 +- .../vue_shared/components/slot_switch_spec.js | 56 + .../components/split_button_spec.js | 104 + .../components/table_pagination_spec.js | 175 +- .../user_avatar/user_avatar_image_spec.js | 108 + .../user_popover/user_popover_spec.js | 186 + spec/graphql/features/authorization_spec.rb | 3 +- spec/graphql/gitlab_schema_spec.rb | 2 +- .../merge_requests/set_assignees_spec.rb | 106 + .../merge_requests/set_labels_spec.rb | 77 + .../merge_requests/set_locked_spec.rb | 49 + .../merge_requests/set_milestone_spec.rb | 53 + .../merge_requests/set_subscription_spec.rb | 42 + .../graphql/mutations/todos/mark_done_spec.rb | 66 + spec/graphql/resolvers/base_resolver_spec.rb | 24 + .../commit_pipelines_resolver_spec.rb | 53 + .../graphql/resolvers/issues_resolver_spec.rb | 42 +- spec/graphql/types/base_enum_spec.rb | 24 + spec/graphql/types/commit_type_spec.rb | 2 +- .../graphql/types/extended_issue_type_spec.rb | 21 - spec/graphql/types/issue_sort_enum_spec.rb | 13 + spec/graphql/types/issue_type_spec.rb | 2 +- spec/graphql/types/label_type_spec.rb | 2 +- spec/graphql/types/project_type_spec.rb | 3 +- spec/graphql/types/tree/blob_type_spec.rb | 2 +- .../graphql/types/tree/submodule_type_spec.rb | 2 +- .../types/tree/tree_entry_type_spec.rb | 2 +- spec/helpers/application_helper_spec.rb | 4 +- .../application_settings_helper_spec.rb | 23 + spec/helpers/auth_helper_spec.rb | 17 + spec/helpers/clusters_helper_spec.rb | 56 + spec/helpers/dashboard_helper_spec.rb | 63 +- spec/helpers/environments_helper_spec.rb | 1 + spec/helpers/gitlab_routing_helper_spec.rb | 6 + spec/helpers/issuables_helper_spec.rb | 55 +- spec/helpers/markup_helper_spec.rb | 37 +- .../projects/error_tracking_helper_spec.rb | 17 + spec/helpers/projects_helper_spec.rb | 18 + spec/helpers/releases_helper_spec.rb | 14 + spec/helpers/search_helper_spec.rb | 47 + spec/helpers/snippets_helper_spec.rb | 210 +- spec/helpers/sourcegraph_helper_spec.rb | 64 + spec/helpers/users_helper_spec.rb | 4 + spec/initializers/6_validations_spec.rb | 2 + spec/initializers/action_mailer_hooks_spec.rb | 2 + spec/initializers/asset_proxy_setting_spec.rb | 2 + .../attr_encrypted_no_db_connection_spec.rb | 2 + spec/initializers/database_config_spec.rb | 73 + .../direct_upload_support_spec.rb | 2 + spec/initializers/doorkeeper_spec.rb | 2 + .../fog_google_https_private_urls_spec.rb | 2 + spec/initializers/lograge_spec.rb | 48 + .../rest-client-hostname_override_spec.rb | 2 + spec/initializers/secret_token_spec.rb | 2 + spec/initializers/settings_spec.rb | 2 + spec/initializers/trusted_proxies_spec.rb | 2 + spec/initializers/zz_metrics_spec.rb | 2 + spec/javascripts/boards/board_card_spec.js | 2 + .../boards/board_list_common_spec.js | 15 +- spec/javascripts/boards/board_list_spec.js | 320 +- .../boards/components/boards_selector_spec.js | 7 +- .../components/issue_time_estimate_spec.js | 70 - spec/javascripts/boards/issue_card_spec.js | 292 - spec/javascripts/bootstrap_jquery_spec.js | 14 +- .../ajax_variable_list_spec.js | 2 +- .../diffs/components/diff_file_spec.js | 49 +- .../diffs/mock_data/diff_file_unreadable.js | 244 + spec/javascripts/dropzone_input_spec.js | 88 +- .../frequent_items/components/app_spec.js | 2 +- spec/javascripts/frequent_items/mock_data.js | 4 +- .../frequent_items/store/actions_spec.js | 7 +- .../stat_graph_contributors_graph_spec.js | 152 - .../graphs/stat_graph_contributors_spec.js | 28 - .../stat_graph_contributors_util_spec.js | 298 - .../ide/components/jobs/stage_spec.js | 95 - .../ide/components/repo_editor_spec.js | 4 +- .../ide/stores/actions/file_spec.js | 56 +- .../ide/stores/actions/merge_request_spec.js | 28 +- .../ide/stores/actions/tree_spec.js | 18 +- spec/javascripts/ide/stores/getters_spec.js | 57 +- .../ide/stores/modules/commit/actions_spec.js | 6 +- spec/javascripts/ide/stores/utils_spec.js | 30 + spec/javascripts/issue_show/helpers.js | 11 +- .../lib/utils/tick_formats_spec.js | 40 - spec/javascripts/merge_request_spec.js | 32 +- spec/javascripts/merge_request_tabs_spec.js | 14 +- .../monitoring/charts/heatmap_spec.js | 69 + .../monitoring/components/dashboard_spec.js | 444 +- spec/javascripts/monitoring/mock_data.js | 1097 +- .../javascripts/monitoring/panel_type_spec.js | 79 - .../shared/prometheus_header_spec.js | 26 + spec/javascripts/monitoring/utils_spec.js | 38 +- .../notes/components/comment_form_spec.js | 301 - .../components/noteable_discussion_spec.js | 114 +- spec/javascripts/notes/mock_data.js | 1256 +- .../notes/stores/collapse_utils_spec.js | 10 - .../pipelines/graph/action_component_spec.js | 81 - spec/javascripts/raven/raven_config_spec.js | 254 - spec/javascripts/search_autocomplete_spec.js | 68 +- .../javascripts/sidebar/subscriptions_spec.js | 21 + spec/javascripts/signin_tabs_memoizer_spec.js | 46 + spec/javascripts/syntax_highlight_spec.js | 8 +- spec/javascripts/test_bundle.js | 33 +- spec/javascripts/u2f/mock_u2f_device.js | 18 +- .../content_viewer/content_viewer_spec.js | 26 + .../diff_viewer/diff_viewer_spec.js | 74 +- .../viewers/image_diff_viewer_spec.js | 45 +- .../vue_shared/components/icon_spec.js | 13 + .../project_selector/project_selector_spec.js | 9 +- .../user_avatar/user_avatar_image_spec.js | 120 - .../user_popover/user_popover_spec.js | 167 - spec/lib/api/helpers/pagination_spec.rb | 401 +- spec/lib/api/helpers_spec.rb | 14 + spec/lib/backup/repository_spec.rb | 2 +- .../banzai/filter/asset_proxy_filter_spec.rb | 2 + .../inline_grafana_metrics_filter_spec.rb | 71 + .../inline_metrics_redactor_filter_spec.rb | 54 +- .../banzai/filter/video_link_filter_spec.rb | 2 +- .../representation/pull_request_spec.rb | 1 + spec/lib/container_registry/client_spec.rb | 12 +- spec/lib/gitlab/asciidoc_spec.rb | 92 +- spec/lib/gitlab/auth/ldap/auth_hash_spec.rb | 4 +- spec/lib/gitlab/auth/ldap/config_spec.rb | 19 + spec/lib/gitlab/auth/ldap/person_spec.rb | 4 +- .../legacy_upload_mover_spec.rb | 15 +- .../legacy_uploads_migrator_spec.rb | 12 +- .../schedule_calculate_wiki_sizes_spec.rb | 2 +- spec/lib/gitlab/badge/pipeline/status_spec.rb | 2 +- .../bare_repository_import/importer_spec.rb | 2 +- spec/lib/gitlab/checks/lfs_integrity_spec.rb | 2 +- spec/lib/gitlab/ci/ansi2json/style_spec.rb | 1 + spec/lib/gitlab/ci/ansi2json_spec.rb | 71 +- .../lib/gitlab/ci/build/context/build_spec.rb | 26 + .../gitlab/ci/build/context/global_spec.rb | 25 + .../gitlab/ci/build/policy/variables_spec.rb | 4 +- spec/lib/gitlab/ci/build/rules/rule_spec.rb | 4 +- spec/lib/gitlab/ci/build/rules_spec.rb | 14 +- .../gitlab/ci/config/entry/artifacts_spec.rb | 86 + spec/lib/gitlab/ci/config/entry/cache_spec.rb | 77 +- .../gitlab/ci/config/entry/commands_spec.rb | 67 +- .../gitlab/ci/config/entry/default_spec.rb | 16 +- spec/lib/gitlab/ci/config/entry/files_spec.rb | 54 + spec/lib/gitlab/ci/config/entry/job_spec.rb | 31 +- spec/lib/gitlab/ci/config/entry/key_spec.rb | 98 +- spec/lib/gitlab/ci/config/entry/need_spec.rb | 36 + spec/lib/gitlab/ci/config/entry/needs_spec.rb | 84 + .../lib/gitlab/ci/config/entry/prefix_spec.rb | 28 + spec/lib/gitlab/ci/config/entry/root_spec.rb | 16 +- .../gitlab/ci/config/entry/rules/rule_spec.rb | 120 +- spec/lib/gitlab/ci/config/entry/rules_spec.rb | 57 +- .../lib/gitlab/ci/config/entry/script_spec.rb | 67 +- .../gitlab/ci/config/entry/workflow_spec.rb | 76 + spec/lib/gitlab/ci/config/normalizer_spec.rb | 104 +- .../gitlab/ci/pipeline/chain/build_spec.rb | 7 +- .../chain/evaluate_workflow_rules_spec.rb | 60 + .../gitlab/ci/pipeline/chain/populate_spec.rb | 57 +- .../chain/remove_unwanted_chat_jobs_spec.rb | 34 +- .../lib/gitlab/ci/pipeline/chain/seed_spec.rb | 161 + .../ci/pipeline/chain/validate/config_spec.rb | 148 - .../ci/pipeline/seed/build/cache_spec.rb | 261 + .../lib/gitlab/ci/pipeline/seed/build_spec.rb | 104 +- spec/lib/gitlab/ci/status/composite_spec.rb | 2 + spec/lib/gitlab/ci/trace/stream_spec.rb | 10 +- spec/lib/gitlab/ci/yaml_processor_spec.rb | 346 +- .../cleanup/orphan_job_artifact_files_spec.rb | 9 +- .../cluster/mixins/puma_cluster_spec.rb | 29 +- .../mixins/unicorn_http_server_spec.rb | 37 +- .../lib/gitlab/cycle_analytics/events_spec.rb | 6 +- .../group_stage_summary_spec.rb | 16 + .../gitlab/cycle_analytics/usage_data_spec.rb | 2 +- spec/lib/gitlab/danger/helper_spec.rb | 13 +- spec/lib/gitlab/danger/teammate_spec.rb | 18 +- .../gitlab/data_builder/deployment_spec.rb | 7 + spec/lib/gitlab/data_builder/push_spec.rb | 26 + .../gitlab/database/migration_helpers_spec.rb | 1 - .../project/create_service_spec.rb | 9 - spec/lib/gitlab/devise_failure_spec.rb | 35 + .../hook/smime_signature_interceptor_spec.rb | 2 + .../gitlab/exclusive_lease_helpers_spec.rb | 2 + spec/lib/gitlab/exclusive_lease_spec.rb | 2 + spec/lib/gitlab/experimentation_spec.rb | 277 +- .../external_authorization/access_spec.rb | 2 + .../external_authorization/cache_spec.rb | 2 + .../external_authorization/client_spec.rb | 2 + .../external_authorization/logger_spec.rb | 2 + .../external_authorization/response_spec.rb | 2 + .../lib/gitlab/external_authorization_spec.rb | 2 + .../gitlab/fake_application_settings_spec.rb | 2 + spec/lib/gitlab/favicon_spec.rb | 2 + spec/lib/gitlab/file_detector_spec.rb | 2 + spec/lib/gitlab/file_finder_spec.rb | 6 +- spec/lib/gitlab/fogbugz_import/client_spec.rb | 2 + .../lib/gitlab/gfm/reference_rewriter_spec.rb | 2 + spec/lib/gitlab/gfm/uploads_rewriter_spec.rb | 2 + spec/lib/gitlab/git/commit_spec.rb | 18 +- spec/lib/gitlab/git_access_spec.rb | 2 + spec/lib/gitlab/git_access_wiki_spec.rb | 2 + spec/lib/gitlab/git_ref_validator_spec.rb | 2 + spec/lib/gitlab/git_spec.rb | 2 + .../gitlab/gitaly_client/blob_service_spec.rb | 2 + .../gitaly_client/blobs_stitcher_spec.rb | 2 + .../gitaly_client/cleanup_service_spec.rb | 2 + .../gitaly_client/commit_service_spec.rb | 2 + .../conflict_files_stitcher_spec.rb | 2 + .../gitaly_client/conflicts_service_spec.rb | 2 + spec/lib/gitlab/gitaly_client/diff_spec.rb | 2 + .../gitaly_client/diff_stitcher_spec.rb | 2 + .../health_check_service_spec.rb | 2 + .../gitaly_client/operation_service_spec.rb | 8 +- .../gitlab/gitaly_client/ref_service_spec.rb | 2 + .../gitaly_client/remote_service_spec.rb | 2 + .../gitaly_client/repository_service_spec.rb | 2 + .../gitaly_client/storage_settings_spec.rb | 2 + spec/lib/gitlab/gitaly_client/util_spec.rb | 2 + .../gitlab/gitaly_client/wiki_service_spec.rb | 2 + spec/lib/gitlab/gitaly_client_spec.rb | 4 + .../github_import/bulk_importing_spec.rb | 2 + spec/lib/gitlab/github_import/caching_spec.rb | 2 + spec/lib/gitlab/github_import/client_spec.rb | 2 + .../importer/diff_note_importer_spec.rb | 2 + .../importer/diff_notes_importer_spec.rb | 2 + .../issue_and_label_links_importer_spec.rb | 2 + .../importer/issue_importer_spec.rb | 2 + .../importer/issues_importer_spec.rb | 2 + .../importer/label_links_importer_spec.rb | 2 + .../importer/labels_importer_spec.rb | 2 + .../importer/lfs_object_importer_spec.rb | 2 + .../importer/lfs_objects_importer_spec.rb | 2 + .../importer/milestones_importer_spec.rb | 2 + .../importer/note_importer_spec.rb | 2 + .../importer/notes_importer_spec.rb | 2 + .../importer/pull_request_importer_spec.rb | 2 + .../importer/pull_requests_importer_spec.rb | 2 + .../importer/releases_importer_spec.rb | 2 + .../importer/repository_importer_spec.rb | 2 + .../github_import/issuable_finder_spec.rb | 2 + .../gitlab/github_import/label_finder_spec.rb | 2 + .../github_import/markdown_text_spec.rb | 2 + .../github_import/milestone_finder_spec.rb | 2 + .../gitlab/github_import/page_counter_spec.rb | 2 + .../github_import/parallel_importer_spec.rb | 2 + .../github_import/parallel_scheduling_spec.rb | 2 + .../representation/diff_note_spec.rb | 2 + .../representation/expose_attribute_spec.rb | 2 + .../representation/issue_spec.rb | 2 + .../github_import/representation/note_spec.rb | 2 + .../representation/pull_request_spec.rb | 2 + .../representation/to_hash_spec.rb | 2 + .../github_import/representation/user_spec.rb | 2 + .../github_import/representation_spec.rb | 2 + .../github_import/sequential_importer_spec.rb | 2 + .../gitlab/github_import/user_finder_spec.rb | 2 + spec/lib/gitlab/github_import_spec.rb | 2 + spec/lib/gitlab/gl_repository_spec.rb | 2 + .../gpg/invalid_gpg_signature_updater_spec.rb | 10 +- spec/lib/gitlab/gpg_spec.rb | 98 +- .../loggers/exception_logger_spec.rb | 49 + .../filterable_array_connection_spec.rb | 26 + .../conditions/not_null_condition_spec.rb | 56 + .../keyset/conditions/null_condition_spec.rb | 42 + .../connections/keyset/connection_spec.rb | 281 + .../keyset/legacy_keyset_connection_spec.rb | 127 + .../connections/keyset/order_info_spec.rb | 81 + .../connections/keyset/query_builder_spec.rb | 108 + .../connections/keyset_connection_spec.rb | 117 - .../loaders/pipeline_for_sha_loader_spec.rb | 20 - spec/lib/gitlab/group_search_results_spec.rb | 2 + .../gitlab/hashed_storage/migrator_spec.rb | 8 +- .../gitlab/health_checks/master_check_spec.rb | 49 + spec/lib/gitlab/highlight_spec.rb | 2 + spec/lib/gitlab/http_io_spec.rb | 2 + spec/lib/gitlab/http_spec.rb | 2 + spec/lib/gitlab/i18n_spec.rb | 2 + spec/lib/gitlab/identifier_spec.rb | 2 + spec/lib/gitlab/import_export/all_models.yml | 13 + .../fast_hash_serializer_spec.rb | 4 - spec/lib/gitlab/import_export/fork_spec.rb | 2 +- .../group_project_object_builder_spec.rb | 36 +- .../import_export/group_tree_saver_spec.rb | 180 + .../import_export/import_export_spec.rb | 6 +- .../project_tree_restorer_spec.rb | 130 +- .../import_export/project_tree_saver_spec.rb | 1 - .../relation_rename_service_spec.rb | 17 +- .../import_export/relation_tree_saver_spec.rb | 42 + .../import_export/safe_model_attributes.yml | 13 +- spec/lib/gitlab/import_export/saver_spec.rb | 2 +- spec/lib/gitlab/import_export/shared_spec.rb | 2 +- spec/lib/gitlab/import_sources_spec.rb | 2 + spec/lib/gitlab/incoming_email_spec.rb | 2 + .../gitlab/insecure_key_fingerprint_spec.rb | 2 + .../lib/gitlab/instrumentation_helper_spec.rb | 37 + spec/lib/gitlab/issuable_metadata_spec.rb | 2 + spec/lib/gitlab/issuable_sorter_spec.rb | 2 + .../gitlab/issuables_count_for_state_spec.rb | 2 + spec/lib/gitlab/job_waiter_spec.rb | 2 + spec/lib/gitlab/json_logger_spec.rb | 2 + .../config_maps/aws_node_auth_spec.rb | 33 + .../kubernetes/helm/install_command_spec.rb | 27 - spec/lib/gitlab/kubernetes/helm/pod_spec.rb | 2 +- spec/lib/gitlab/kubernetes_spec.rb | 2 + spec/lib/gitlab/language_detection_spec.rb | 2 + spec/lib/gitlab/lazy_spec.rb | 2 + .../gitlab/metrics/dashboard/finder_spec.rb | 4 +- .../metrics/dashboard/processor_spec.rb | 8 + .../dashboard/service_selector_spec.rb | 11 + .../stages/grafana_formatter_spec.rb | 106 + spec/lib/gitlab/metrics/dashboard/url_spec.rb | 85 +- .../metrics/exporter/web_exporter_spec.rb | 78 +- .../metrics/requests_rack_middleware_spec.rb | 4 +- .../pagination/offset_pagination_spec.rb | 215 + .../project_creator_spec.rb | 2 +- .../lib/gitlab/project_authorizations_spec.rb | 167 +- .../lib/gitlab/project_search_results_spec.rb | 14 +- spec/lib/gitlab/project_template_spec.rb | 3 +- spec/lib/gitlab/prometheus/internal_spec.rb | 108 + .../queries/knative_invocation_query_spec.rb | 13 +- spec/lib/gitlab/regex_spec.rb | 19 + spec/lib/gitlab/search/found_blob_spec.rb | 24 +- spec/lib/gitlab/shell_spec.rb | 78 +- .../sidekiq_logging/structured_logger_spec.rb | 2 +- .../correlation_logger_spec.rb | 2 +- .../gitlab/sidekiq_middleware/metrics_spec.rb | 113 +- .../lib/gitlab/slash_commands/command_spec.rb | 5 + .../slash_commands/issue_comment_spec.rb | 117 + .../slash_commands/presenters/access_spec.rb | 10 + .../presenters/issue_comment_spec.rb | 37 + spec/lib/gitlab/sourcegraph_spec.rb | 66 + spec/lib/gitlab/sql/recursive_cte_spec.rb | 2 +- spec/lib/gitlab/sql/union_spec.rb | 4 +- spec/lib/gitlab/tracking_spec.rb | 19 +- .../web_ide_counter_spec.rb | 34 +- spec/lib/gitlab/usage_data_spec.rb | 52 +- spec/lib/gitlab/user_access_spec.rb | 2 +- spec/lib/gitlab/utils/deep_size_spec.rb | 6 + .../gitlab/visibility_level_checker_spec.rb | 2 + spec/lib/gitlab/wiki_file_finder_spec.rb | 2 +- spec/lib/gitlab_spec.rb | 42 + .../google_api/cloud_platform/client_spec.rb | 3 +- spec/lib/grafana/client_spec.rb | 26 +- spec/lib/omni_auth/strategies/saml_spec.rb | 2 + spec/lib/prometheus/pid_provider_spec.rb | 12 +- spec/lib/quality/helm_client_spec.rb | 20 + spec/lib/quality/kubernetes_client_spec.rb | 52 +- spec/lib/quality/test_level_spec.rb | 26 + spec/lib/sentry/client_spec.rb | 9 + spec/mailers/abuse_report_mailer_spec.rb | 2 + spec/mailers/emails/merge_requests_spec.rb | 2 + spec/mailers/emails/pages_domains_spec.rb | 2 + spec/mailers/emails/profile_spec.rb | 2 + spec/mailers/emails/releases_spec.rb | 1 + spec/mailers/notify_spec.rb | 2 + spec/mailers/repository_check_mailer_spec.rb | 2 + ...nfidential_note_events_on_services_spec.rb | 4 +- spec/migrations/active_record/schema_spec.rb | 2 + .../add_default_and_free_plans_spec.rb | 34 + .../add_foreign_keys_to_todos_spec.rb | 2 + ...to_project_mirror_data_foreign_key_spec.rb | 2 + ...es_access_level_to_project_feature_spec.rb | 2 + .../add_pipeline_build_foreign_key_spec.rb | 2 + ...int_to_project_features_project_id_spec.rb | 2 + ...mmits_count_for_merge_request_diff_spec.rb | 2 + ...ll_store_project_full_path_in_repo_spec.rb | 8 +- ...ault_value_for_dsa_key_restriction_spec.rb | 2 + .../cleanup_build_stage_migration_spec.rb | 2 + .../cleanup_environments_external_url_spec.rb | 2 + .../cleanup_stages_position_migration_spec.rb | 2 + ...ssing_namespace_for_internal_users_spec.rb | 2 + .../drop_duplicate_protected_tags_spec.rb | 2 + ...nqueue_verify_pages_domain_workers_spec.rb | 2 + ...l_empty_finished_at_in_deployments_spec.rb | 2 + spec/migrations/fill_file_store_spec.rb | 4 +- ..._productivity_analytics_start_date_spec.rb | 39 + .../fix_wrong_pages_access_level_spec.rb | 4 +- .../generate_lets_encrypt_private_key_spec.rb | 2 + .../generate_missing_routes_spec.rb | 2 + ...ter_configure_worker_sidekiq_queue_spec.rb | 2 + ...reate_trace_artifact_sidekiq_queue_spec.rb | 2 + ..._legacy_artifacts_to_job_artifacts_spec.rb | 4 +- ...bject_storage_upload_sidekiq_queue_spec.rb | 2 + ...ate_storage_migrator_sidekiq_queue_spec.rb | 2 + ...ne_for_merge_request_sidekiq_queue_spec.rb | 2 + .../migrations/move_limits_from_plans_spec.rb | 37 + ..._empty_extern_uid_auth0_identities_spec.rb | 2 + ...ove_empty_github_service_templates_spec.rb | 55 + .../remove_redundant_pipeline_stages_spec.rb | 2 + ...reschedule_builds_stages_migration_spec.rb | 2 + ...mmits_count_for_merge_request_diff_spec.rb | 2 + ...dule_digest_personal_access_tokens_spec.rb | 4 +- ...time_for_pages_domain_certificates_spec.rb | 4 +- .../schedule_runners_token_encryption_spec.rb | 2 + ...nfidential_note_events_on_webhooks_spec.rb | 4 +- .../schedule_stages_index_migration_spec.rb | 2 + .../schedule_sync_issuables_state_id_spec.rb | 4 +- .../schedule_to_archive_legacy_traces_spec.rb | 4 +- .../migrations/truncate_user_fullname_spec.rb | 2 + .../cycle_analytics/project_stage_spec.rb | 10 +- spec/models/application_setting_spec.rb | 79 + spec/models/aws/role_spec.rb | 52 + spec/models/ci/build_spec.rb | 143 +- spec/models/ci/build_trace_chunk_spec.rb | 54 +- spec/models/ci/pipeline_spec.rb | 319 +- .../applications/cert_manager_spec.rb | 2 +- .../clusters/applications/crossplane_spec.rb | 57 + .../applications/elastic_stack_spec.rb | 179 + .../clusters/applications/ingress_spec.rb | 38 +- spec/models/clusters/cluster_spec.rb | 160 +- .../clusters/clusters_hierarchy_spec.rb | 40 +- spec/models/clusters/providers/aws_spec.rb | 62 +- spec/models/clusters/providers/gcp_spec.rb | 16 +- spec/models/commit_status_spec.rb | 4 +- .../concerns/deployment_platform_spec.rb | 20 +- spec/models/concerns/from_union_spec.rb | 6 +- spec/models/concerns/noteable_spec.rb | 44 - spec/models/concerns/redactable_spec.rb | 38 - spec/models/concerns/subscribable_spec.rb | 56 + spec/models/container_repository_spec.rb | 32 + spec/models/deployment_merge_request_spec.rb | 14 + spec/models/deployment_spec.rb | 80 + spec/models/environment_spec.rb | 189 +- spec/models/environment_status_spec.rb | 2 +- .../project_error_tracking_setting_spec.rb | 22 + spec/models/evidence_spec.rb | 2 +- spec/models/grafana_integration_spec.rb | 31 + spec/models/group_group_link_spec.rb | 36 + spec/models/group_spec.rb | 122 + spec/models/hooks/system_hook_spec.rb | 2 +- spec/models/issue_spec.rb | 13 + spec/models/lfs_object_spec.rb | 12 + spec/models/merge_request_diff_spec.rb | 8 + spec/models/merge_request_spec.rb | 262 +- spec/models/milestone_spec.rb | 11 + spec/models/namespace_spec.rb | 38 + spec/models/personal_snippet_spec.rb | 19 + spec/models/project_import_state_spec.rb | 2 +- .../chat_message/pipeline_message_spec.rb | 39 + .../chat_message/push_message_spec.rb | 6 +- .../project_services/data_fields_spec.rb | 18 + .../project_services/irker_service_spec.rb | 2 +- .../prometheus_service_spec.rb | 31 + spec/models/project_snippet_spec.rb | 21 + spec/models/project_spec.rb | 82 +- spec/models/release_spec.rb | 20 +- spec/models/releases/source_spec.rb | 2 +- spec/models/remote_mirror_spec.rb | 2 +- spec/models/service_spec.rb | 20 + spec/models/shard_spec.rb | 3 +- spec/models/snippet_spec.rb | 37 - spec/models/spam_log_spec.rb | 2 +- spec/models/todo_spec.rb | 47 + spec/models/user_spec.rb | 24 +- spec/models/wiki_page_spec.rb | 11 - spec/models/zoom_meeting_spec.rb | 154 + .../application_setting/term_policy_spec.rb | 2 + spec/policies/base_policy_spec.rb | 43 +- spec/policies/ci/build_policy_spec.rb | 2 + spec/policies/ci/pipeline_policy_spec.rb | 2 + .../ci/pipeline_schedule_policy_spec.rb | 2 + spec/policies/ci/trigger_policy_spec.rb | 2 + spec/policies/clusters/cluster_policy_spec.rb | 2 + spec/policies/deploy_key_policy_spec.rb | 2 + spec/policies/deploy_token_policy_spec.rb | 2 + spec/policies/environment_policy_spec.rb | 2 + spec/policies/global_policy_spec.rb | 2 + spec/policies/group_policy_spec.rb | 2 + spec/policies/issuable_policy_spec.rb | 2 + spec/policies/issue_policy_spec.rb | 2 + spec/policies/merge_request_policy_spec.rb | 2 + spec/policies/namespace_policy_spec.rb | 2 + spec/policies/note_policy_spec.rb | 2 + spec/policies/personal_snippet_policy_spec.rb | 32 +- spec/policies/project_policy_spec.rb | 27 + spec/policies/project_snippet_policy_spec.rb | 2 + spec/policies/protected_branch_policy_spec.rb | 2 + .../resource_label_event_policy_spec.rb | 2 + spec/policies/user_policy_spec.rb | 2 + spec/presenters/ci/bridge_presenter_spec.rb | 2 + spec/presenters/ci/build_presenter_spec.rb | 4 +- .../ci/build_runner_presenter_spec.rb | 2 + .../ci/group_variable_presenter_spec.rb | 2 + spec/presenters/ci/pipeline_presenter_spec.rb | 2 + spec/presenters/ci/trigger_presenter_spec.rb | 2 + spec/presenters/ci/variable_presenter_spec.rb | 2 + .../clusters/cluster_presenter_spec.rb | 2 + .../commit_status_presenter_spec.rb | 2 + .../metric_presenter_spec.rb | 2 + .../group_clusterable_presenter_spec.rb | 6 + .../presenters/group_member_presenter_spec.rb | 2 + .../instance_clusterable_presenter_spec.rb | 37 + .../merge_request_presenter_spec.rb | 2 + .../project_clusterable_presenter_spec.rb | 6 + .../project_member_presenter_spec.rb | 2 + spec/presenters/project_presenter_spec.rb | 62 +- .../settings/deploy_keys_presenter_spec.rb | 2 + spec/presenters/release_presenter_spec.rb | 101 + spec/requests/api/access_requests_spec.rb | 2 + spec/requests/api/applications_spec.rb | 2 + spec/requests/api/avatar_spec.rb | 2 + spec/requests/api/award_emoji_spec.rb | 2 + spec/requests/api/badges_spec.rb | 2 + spec/requests/api/boards_spec.rb | 2 + spec/requests/api/branches_spec.rb | 23 +- spec/requests/api/broadcast_messages_spec.rb | 2 + spec/requests/api/commit_statuses_spec.rb | 6 +- spec/requests/api/commits_spec.rb | 45 +- spec/requests/api/deploy_keys_spec.rb | 2 + spec/requests/api/deployments_spec.rb | 91 +- spec/requests/api/discussions_spec.rb | 2 + spec/requests/api/doorkeeper_access_spec.rb | 2 + spec/requests/api/environments_spec.rb | 2 + spec/requests/api/events_spec.rb | 2 + spec/requests/api/features_spec.rb | 17 +- spec/requests/api/files_spec.rb | 2 + .../graphql/current_user/todos_query_spec.rb | 48 + .../api/graphql/current_user_query_spec.rb | 33 + .../api/graphql/gitlab_schema_spec.rb | 2 + .../merge_requests/set_assignees_spec.rb | 134 + .../merge_requests/set_labels_spec.rb | 108 + .../merge_requests/set_locked_spec.rb | 79 + .../merge_requests/set_milestone_spec.rb | 66 + .../merge_requests/set_subscription_spec.rb | 63 + .../mutations/merge_requests/set_wip_spec.rb | 2 + .../graphql/mutations/todos/mark_done_spec.rb | 97 + .../api/graphql/project/issues_spec.rb | 141 +- .../api/graphql/project/merge_request_spec.rb | 2 + .../api/graphql/project_query_spec.rb | 2 + spec/requests/api/group_boards_spec.rb | 2 + spec/requests/api/group_clusters_spec.rb | 21 +- .../api/group_container_repositories_spec.rb | 10 +- spec/requests/api/group_export_spec.rb | 94 + spec/requests/api/group_milestones_spec.rb | 2 + spec/requests/api/group_variables_spec.rb | 2 + spec/requests/api/groups_spec.rb | 2 + spec/requests/api/helpers_spec.rb | 2 + spec/requests/api/import_github_spec.rb | 2 + spec/requests/api/internal/base_spec.rb | 12 +- spec/requests/api/jobs_spec.rb | 10 +- spec/requests/api/keys_spec.rb | 2 + spec/requests/api/labels_spec.rb | 2 + spec/requests/api/lint_spec.rb | 2 + spec/requests/api/markdown_spec.rb | 2 + spec/requests/api/members_spec.rb | 16 +- spec/requests/api/merge_request_diffs_spec.rb | 2 + spec/requests/api/merge_requests_spec.rb | 75 +- spec/requests/api/namespaces_spec.rb | 2 + spec/requests/api/notes_spec.rb | 2 + .../api/notification_settings_spec.rb | 2 + spec/requests/api/oauth_tokens_spec.rb | 2 + .../api/pages/internal_access_spec.rb | 2 + .../requests/api/pages/private_access_spec.rb | 2 + spec/requests/api/pages/public_access_spec.rb | 2 + spec/requests/api/pages_domains_spec.rb | 96 +- spec/requests/api/pipeline_schedules_spec.rb | 2 + spec/requests/api/pipelines_spec.rb | 2 +- spec/requests/api/project_clusters_spec.rb | 21 +- .../project_container_repositories_spec.rb | 9 + spec/requests/api/project_events_spec.rb | 2 + spec/requests/api/project_export_spec.rb | 4 +- spec/requests/api/project_hooks_spec.rb | 2 + spec/requests/api/project_import_spec.rb | 4 +- spec/requests/api/project_milestones_spec.rb | 2 + spec/requests/api/project_snapshots_spec.rb | 2 + spec/requests/api/project_snippets_spec.rb | 2 + spec/requests/api/project_templates_spec.rb | 2 + spec/requests/api/projects_spec.rb | 119 +- spec/requests/api/protected_branches_spec.rb | 2 + spec/requests/api/protected_tags_spec.rb | 2 + spec/requests/api/releases_spec.rb | 2 + spec/requests/api/repositories_spec.rb | 2 + spec/requests/api/runner_spec.rb | 6 +- spec/requests/api/runners_spec.rb | 2 + spec/requests/api/search_spec.rb | 3 + spec/requests/api/services_spec.rb | 6 +- spec/requests/api/settings_spec.rb | 82 +- spec/requests/api/sidekiq_metrics_spec.rb | 6 + spec/requests/api/snippets_spec.rb | 2 + spec/requests/api/system_hooks_spec.rb | 2 + spec/requests/api/tags_spec.rb | 2 + spec/requests/api/templates_spec.rb | 2 + spec/requests/api/todos_spec.rb | 2 + spec/requests/api/triggers_spec.rb | 2 + spec/requests/api/users_spec.rb | 34 +- spec/requests/api/variables_spec.rb | 2 + spec/requests/api/version_spec.rb | 2 + spec/requests/api/wikis_spec.rb | 2 + spec/requests/git_http_spec.rb | 36 +- .../groups/milestones_controller_spec.rb | 2 + .../registry/repositories_controller_spec.rb | 36 + spec/requests/health_controller_spec.rb | 227 + spec/requests/jwt_controller_spec.rb | 2 + spec/requests/lfs_locks_api_spec.rb | 2 + spec/requests/oauth_tokens_spec.rb | 2 + spec/requests/openid_connect_spec.rb | 2 + .../projects/cycle_analytics_events_spec.rb | 10 +- spec/requests/rack_attack_global_spec.rb | 4 +- spec/requests/request_profiler_spec.rb | 2 + spec/routing/admin_routing_spec.rb | 2 + spec/routing/environments_spec.rb | 2 + spec/routing/group_routing_spec.rb | 2 + spec/routing/import_routing_spec.rb | 2 + spec/routing/notifications_routing_spec.rb | 2 + spec/routing/openid_connect_spec.rb | 2 + spec/routing/project_routing_spec.rb | 8 + spec/routing/routing_spec.rb | 29 + .../avoid_break_from_strong_memoize_spec.rb | 2 + .../cop/avoid_return_from_blocks_spec.rb | 2 + spec/rubocop/cop/destroy_all_spec.rb | 2 + .../cop/gitlab/finder_with_find_by_spec.rb | 2 + spec/rubocop/cop/gitlab/httparty_spec.rb | 2 + .../module_with_instance_variables_spec.rb | 2 + .../cop/gitlab/predicate_memoization_spec.rb | 2 + .../group_public_or_visible_to_user_spec.rb | 2 + .../cop/include_sidekiq_worker_spec.rb | 2 + ...ine_break_around_conditional_block_spec.rb | 2 + .../add_concurrent_foreign_key_spec.rb | 2 + .../migration/add_concurrent_index_spec.rb | 2 + .../cop/migration/add_reference_spec.rb | 2 + .../cop/migration/add_timestamps_spec.rb | 2 + spec/rubocop/cop/migration/datetime_spec.rb | 2 + spec/rubocop/cop/migration/hash_index_spec.rb | 2 + .../cop/migration/remove_column_spec.rb | 2 + .../migration/remove_concurrent_index_spec.rb | 2 + .../cop/migration/remove_index_spec.rb | 2 + ...reversible_add_column_with_default_spec.rb | 2 + .../migration/safer_boolean_column_spec.rb | 2 + spec/rubocop/cop/migration/timestamps_spec.rb | 2 + .../update_column_in_batches_spec.rb | 2 + .../cop/migration/update_large_table_spec.rb | 2 + spec/rubocop/cop/project_path_helper_spec.rb | 2 + .../rubocop/cop/rspec/any_instance_of_spec.rb | 61 + spec/rubocop/cop/rspec/env_assignment_spec.rb | 2 + .../factories_in_migration_specs_spec.rb | 2 + .../rubocop/cop/sidekiq_options_queue_spec.rb | 2 + spec/serializers/blob_entity_spec.rb | 12 +- .../serializers/diff_file_base_entity_spec.rb | 15 +- spec/serializers/diff_file_entity_spec.rb | 7 +- .../issuable_sidebar_extras_entity_spec.rb | 20 + .../job_artifact_report_entity_spec.rb | 2 +- .../merge_request_diff_entity_spec.rb | 19 +- .../merge_request_widget_entity_spec.rb | 22 + .../pipeline_details_entity_spec.rb | 2 +- spec/serializers/pipeline_serializer_spec.rb | 2 +- ...rge_when_pipeline_succeeds_service_spec.rb | 5 +- .../ci/cancel_user_pipelines_service_spec.rb | 2 +- .../ci/create_pipeline_service/cache_spec.rb | 168 + .../ci/create_pipeline_service/rules_spec.rb | 272 +- .../ci/create_pipeline_service_spec.rb | 114 +- .../ci/find_exposed_artifacts_service_spec.rb | 147 + .../ci/process_pipeline_service_spec.rb | 22 +- spec/services/ci/register_job_service_spec.rb | 51 + .../applications/create_service_spec.rb | 28 + .../aws/fetch_credentials_service_spec.rb | 68 + .../aws/finalize_creation_service_spec.rb | 124 + .../clusters/aws/provision_service_spec.rb | 131 + .../clusters/aws/proxy_service_spec.rb | 210 + .../verify_provision_status_service_spec.rb | 76 + .../services/clusters/destroy_service_spec.rb | 56 + ...create_or_update_namespace_service_spec.rb | 2 + ..._or_update_service_account_service_spec.rb | 45 + spec/services/clusters/update_service_spec.rb | 127 + .../assigns_merge_params_spec.rb | 2 + spec/services/create_branch_service_spec.rb | 15 + .../deployments/after_create_service_spec.rb | 34 + .../link_merge_requests_service_spec.rb | 121 + .../deployments/update_service_spec.rb | 52 +- .../issue_details_service_spec.rb | 48 + .../issue_latest_event_service_spec.rb | 48 + .../list_issues_service_spec.rb | 91 +- .../list_projects_service_spec.rb | 2 +- .../services/git/branch_hooks_service_spec.rb | 2 +- spec/services/git/branch_push_service_spec.rb | 20 +- spec/services/groups/destroy_service_spec.rb | 18 +- .../groups/group_links/create_service_spec.rb | 119 + .../group_links/destroy_service_spec.rb | 63 + .../import_export/export_service_spec.rb | 55 + spec/services/groups/transfer_service_spec.rb | 30 +- spec/services/groups/update_service_spec.rb | 61 +- .../import_export_clean_up_service_spec.rb | 2 +- spec/services/issues/close_service_spec.rb | 6 +- spec/services/issues/update_service_spec.rb | 40 +- .../services/issues/zoom_link_service_spec.rb | 172 +- spec/services/members/destroy_service_spec.rb | 2 +- .../add_todo_when_build_fails_service_spec.rb | 4 +- .../merge_requests/build_service_spec.rb | 34 +- .../merge_requests/close_service_spec.rb | 2 +- .../create_from_issue_service_spec.rb | 24 +- .../merge_requests/create_service_spec.rb | 6 +- .../merge_requests/ff_merge_service_spec.rb | 57 +- .../merge_requests/merge_service_spec.rb | 106 +- .../merge_to_ref_service_spec.rb | 8 +- .../push_options_handler_service_spec.rb | 10 +- .../merge_requests/rebase_service_spec.rb | 2 +- .../merge_requests/refresh_service_spec.rb | 80 +- .../merge_requests/reopen_service_spec.rb | 2 +- ...ed_discussion_notification_service_spec.rb | 2 +- .../merge_requests/update_service_spec.rb | 20 +- .../grafana_metric_embed_service_spec.rb | 177 + .../project_dashboard_service_spec.rb | 3 +- .../system_dashboard_service_spec.rb | 3 +- .../statistics_refresher_service_spec.rb | 2 +- spec/services/notification_service_spec.rb | 25 +- .../projects/after_rename_service_spec.rb | 2 +- .../delete_tags_service_spec.rb | 47 +- .../services/projects/destroy_service_spec.rb | 18 +- spec/services/projects/fork_service_spec.rb | 2 +- .../base_attachment_service_spec.rb | 56 + .../migrate_attachments_service_spec.rb | 32 +- .../migrate_repository_service_spec.rb | 2 +- .../hashed_storage/migration_service_spec.rb | 22 +- .../rollback_attachments_service_spec.rb | 2 +- .../rollback_repository_service_spec.rb | 2 +- .../hashed_storage/rollback_service_spec.rb | 17 +- .../import_export/export_service_spec.rb | 2 +- .../lfs_pointers/lfs_link_service_spec.rb | 30 +- spec/services/projects/update_service_spec.rb | 4 +- spec/services/system_note_service_spec.rb | 252 +- .../system_notes/issuables_service_spec.rb | 2 +- .../merge_requests_service_spec.rb | 243 + spec/services/users/signup_service_spec.rb | 64 + spec/services/zoom_notes_service_spec.rb | 81 - spec/sidekiq/cron/job_gem_dependency_spec.rb | 2 + spec/spec_helper.rb | 5 + spec/support/capybara.rb | 6 +- ...uth_callbacks_controller_shared_context.rb | 8 +- .../test_generation.rb | 2 +- spec/support/database_cleaner.rb | 33 + spec/support/generate-seed-repo-rb | 7 +- .../helpers/access_matchers_helpers.rb | 95 + .../helpers/cycle_analytics_helpers.rb | 2 +- .../helpers/filtered_search_helpers.rb | 4 + spec/support/helpers/grafana_api_helpers.rb | 41 + spec/support/helpers/graphql_helpers.rb | 21 +- spec/support/helpers/kubernetes_helpers.rb | 218 +- spec/support/helpers/login_helpers.rb | 2 +- spec/support/helpers/smime_helper.rb | 2 + spec/support/helpers/stub_experiments.rb | 14 +- spec/support/helpers/stub_gitlab_calls.rb | 9 +- spec/support/helpers/test_env.rb | 41 +- spec/support/import_export/common_util.rb | 7 + .../matchers/access_matchers_for_request.rb | 53 + .../matchers/access_matchers_generic.rb | 66 + spec/support/matchers/db_schema_matchers.rb | 32 + .../prepare-gitlab-git-test-for-commit | 1 + .../ci/auto_merge_merge_requests_examples.rb | 40 + .../container_repositories_shared_examples.rb | 8 + .../cycle_analytics_event_shared_examples.rb | 3 +- .../cycle_analytics_stage_shared_examples.rb | 137 +- ...rchive_download_buttons_shared_examples.rb | 7 +- spec/support/shared_examples/file_finder.rb | 10 +- .../graphql/connection_paged_nodes.rb | 28 + .../graphql/sort_enum_shared_examples.rb | 7 + .../entry/key_validations_shared_examples.rb | 81 + .../config/inheritable_shared_examples.rb | 105 + ...equests_rendering_a_single_diff_version.rb | 17 + .../cluster_application_helm_cert_examples.rb | 4 - .../issuable_shared_examples.rb | 0 .../concerns/redactable_shared_examples.rb | 39 + .../models/with_uploads_shared_examples.rb | 2 +- .../zoom_quick_actions_shared_examples.rb | 43 +- .../merge_quick_action_shared_examples.rb | 2 +- .../requests/api/discussions.rb | 23 + .../shared_examples/requests/api/notes.rb | 2 +- .../requests/rack_attack_shared_examples.rb | 4 +- .../serializers/diff_file_entity_examples.rb | 33 +- .../error_tracking_service_shared_examples.rb | 89 + .../updating_mentions_shared_examples.rb | 26 +- spec/support/sidekiq.rb | 21 +- spec/support/unpack-gitlab-git-test | 6 +- spec/tasks/gitlab/shell_rake_spec.rb | 2 +- spec/tasks/gitlab/task_helpers_spec.rb | 27 +- .../background_move_worker_spec.rb | 8 +- .../integrations.html.haml_spec.rb | 34 + .../devise/sessions/new.html.haml_spec.rb | 71 + spec/views/layouts/_head.html.haml_spec.rb | 2 +- .../preferences/show.html.haml_spec.rb | 72 + spec/views/profiles/show.html.haml_spec.rb | 1 + .../clusters/gcp/_form.html.haml_spec.rb | 38 + .../_confirm_rollback_modal_spec.html_spec.rb | 2 +- .../merge_requests/_commits.html.haml_spec.rb | 2 +- .../pages_domains/show.html.haml_spec.rb | 34 - spec/views/projects/show.html.haml_spec.rb | 41 + .../tree/_tree_header.html.haml_spec.rb | 2 + .../projects/tree/show.html.haml_spec.rb | 48 +- spec/workers/cluster_provision_worker_spec.rb | 13 +- spec/workers/every_sidekiq_worker_spec.rb | 37 +- .../expire_build_artifacts_worker_spec.rb | 51 - spec/workers/group_export_worker_spec.rb | 29 + .../hashed_storage/migrator_worker_spec.rb | 2 +- .../hashed_storage/rollbacker_worker_spec.rb | 2 +- spec/workers/merge_worker_spec.rb | 1 + spec/workers/new_note_worker_spec.rb | 19 +- ...ges_domain_ssl_renewal_cron_worker_spec.rb | 2 +- spec/workers/pipeline_schedule_worker_spec.rb | 2 +- spec/workers/process_commit_worker_spec.rb | 3 +- spec/workers/project_cache_worker_spec.rb | 2 +- .../remove_expired_group_links_worker_spec.rb | 57 +- .../single_repository_worker_spec.rb | 8 +- spec/workers/stuck_ci_jobs_worker_spec.rb | 21 +- spec/workers/stuck_merge_jobs_worker_spec.rb | 2 +- .../wait_for_cluster_creation_worker_spec.rb | 15 +- vendor/aws/cloudformation/eks_cluster.yaml | 340 + vendor/crossplane/values.yaml | 0 vendor/elastic_stack/values.yaml | 47 + vendor/gitignore/C++.gitignore | 0 vendor/gitignore/Java.gitignore | 0 vendor/ingress/modsecurity.conf | 274 + .../serverless_framework.tar.gz | Bin 0 -> 92193 bytes yarn.lock | 1654 +- 2910 files changed, 92827 insertions(+), 25855 deletions(-) delete mode 100644 .gitlab/ci/notifications.gitlab-ci.yml create mode 100644 .gitlab/ci/releases.gitlab-ci.yml create mode 100644 Guardfile create mode 100644 app/assets/images/cluster_app_logos/crossplane.png create mode 100644 app/assets/images/cluster_app_logos/elastic_stack.png create mode 100644 app/assets/javascripts/boards/stores/getters.js create mode 100644 app/assets/javascripts/boards/toggle_labels.js create mode 100644 app/assets/javascripts/clusters/components/crossplane_provider_stack.vue create mode 100644 app/assets/javascripts/contributors/components/contributors.vue create mode 100644 app/assets/javascripts/contributors/index.js create mode 100644 app/assets/javascripts/contributors/services/contributors_service.js create mode 100644 app/assets/javascripts/contributors/stores/actions.js create mode 100644 app/assets/javascripts/contributors/stores/getters.js create mode 100644 app/assets/javascripts/contributors/stores/index.js create mode 100644 app/assets/javascripts/contributors/stores/mutation_types.js create mode 100644 app/assets/javascripts/contributors/stores/mutations.js create mode 100644 app/assets/javascripts/contributors/stores/state.js create mode 100644 app/assets/javascripts/contributors/utils.js delete mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/region_dropdown.vue rename app/assets/javascripts/{projects => create_cluster}/gke_cluster_namespace/index.js (100%) create mode 100644 app/assets/javascripts/create_cluster/init_create_cluster.js delete mode 100644 app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue create mode 100644 app/assets/javascripts/error_tracking/components/error_details.vue create mode 100644 app/assets/javascripts/error_tracking/components/stacktrace.vue create mode 100644 app/assets/javascripts/error_tracking/components/stacktrace_entry.vue create mode 100644 app/assets/javascripts/error_tracking/details.js rename app/assets/javascripts/error_tracking/{index.js => list.js} (100%) create mode 100644 app/assets/javascripts/error_tracking/store/details/actions.js create mode 100644 app/assets/javascripts/error_tracking/store/details/getters.js create mode 100644 app/assets/javascripts/error_tracking/store/details/mutation_types.js create mode 100644 app/assets/javascripts/error_tracking/store/details/mutations.js create mode 100644 app/assets/javascripts/error_tracking/store/details/state.js rename app/assets/javascripts/error_tracking/store/{ => list}/actions.js (95%) create mode 100644 app/assets/javascripts/error_tracking/store/list/getters.js rename app/assets/javascripts/error_tracking/store/{ => list}/mutation_types.js (100%) rename app/assets/javascripts/error_tracking/store/{ => list}/mutations.js (100%) create mode 100644 app/assets/javascripts/error_tracking/store/list/state.js create mode 100644 app/assets/javascripts/grafana_integration/components/grafana_integration.vue create mode 100644 app/assets/javascripts/grafana_integration/index.js create mode 100644 app/assets/javascripts/grafana_integration/store/actions.js create mode 100644 app/assets/javascripts/grafana_integration/store/index.js create mode 100644 app/assets/javascripts/grafana_integration/store/mutation_types.js create mode 100644 app/assets/javascripts/grafana_integration/store/mutations.js create mode 100644 app/assets/javascripts/grafana_integration/store/state.js create mode 100644 app/assets/javascripts/ide/stores/modules/clientside/actions.js create mode 100644 app/assets/javascripts/ide/stores/modules/clientside/index.js create mode 100644 app/assets/javascripts/issuables_list/components/issuable.vue create mode 100644 app/assets/javascripts/issuables_list/components/issuables_list_app.vue create mode 100644 app/assets/javascripts/issuables_list/constants.js create mode 100644 app/assets/javascripts/issuables_list/eventhub.js create mode 100644 app/assets/javascripts/issuables_list/index.js delete mode 100644 app/assets/javascripts/lib/utils/tick_formats.js create mode 100644 app/assets/javascripts/monitoring/components/charts/anomaly.vue create mode 100644 app/assets/javascripts/monitoring/components/charts/heatmap.vue create mode 100644 app/assets/javascripts/monitoring/components/shared/prometheus_header.vue create mode 100644 app/assets/javascripts/notes/components/diff_discussion_header.vue create mode 100644 app/assets/javascripts/notes/mixins/description_version_history.js create mode 100644 app/assets/javascripts/pages/groups/new/fetch_group_path_availability.js create mode 100644 app/assets/javascripts/pages/groups/new/group_path_validator.js delete mode 100644 app/assets/javascripts/pages/projects/clusters/new/index.js create mode 100644 app/assets/javascripts/pages/projects/error_tracking/details/index.js delete mode 100644 app/assets/javascripts/pages/projects/error_tracking/index.js create mode 100644 app/assets/javascripts/pages/projects/error_tracking/index/index.js delete mode 100644 app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors.js delete mode 100644 app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_graph.js delete mode 100644 app/assets/javascripts/pages/projects/graphs/show/stat_graph_contributors_util.js create mode 100644 app/assets/javascripts/pages/projects/pipelines/test_report/index.js create mode 100644 app/assets/javascripts/performance_bar/components/add_request.vue create mode 100644 app/assets/javascripts/pipelines/components/test_reports/test_reports.vue create mode 100644 app/assets/javascripts/pipelines/components/test_reports/test_suite_table.vue create mode 100644 app/assets/javascripts/pipelines/components/test_reports/test_summary.vue create mode 100644 app/assets/javascripts/pipelines/components/test_reports/test_summary_table.vue create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/actions.js create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/getters.js create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/index.js create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/mutation_types.js create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/mutations.js create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/state.js create mode 100644 app/assets/javascripts/pipelines/stores/test_reports/utils.js delete mode 100644 app/assets/javascripts/privacy_policy_update_callout.js create mode 100644 app/assets/javascripts/releases/list/components/release_block_footer.vue create mode 100644 app/assets/javascripts/repository/components/directory_download_links.vue create mode 100644 app/assets/javascripts/repository/components/preview/index.vue create mode 100644 app/assets/javascripts/repository/components/tree_action_link.vue create mode 100644 app/assets/javascripts/repository/components/tree_content.vue create mode 100644 app/assets/javascripts/repository/queries/commit.fragment.graphql create mode 100644 app/assets/javascripts/repository/queries/getReadme.query.graphql create mode 100644 app/assets/javascripts/repository/utils/commit.js create mode 100644 app/assets/javascripts/repository/utils/dom.js create mode 100644 app/assets/javascripts/repository/utils/readme.js rename app/assets/javascripts/{raven => sentry}/index.js (76%) rename app/assets/javascripts/{raven/raven_config.js => sentry/sentry_config.js} (63%) create mode 100644 app/assets/javascripts/sourcegraph/index.js create mode 100644 app/assets/javascripts/sourcegraph/load.js create mode 100644 app/assets/javascripts/vue_shared/components/slot_switch.vue create mode 100644 app/assets/javascripts/vue_shared/components/split_button.vue create mode 100644 app/assets/stylesheets/mailer.scss create mode 100644 app/assets/stylesheets/mailer_client_specific.scss create mode 100644 app/assets/stylesheets/pages/error_details.scss delete mode 100644 app/assets/stylesheets/pages/stat_graph.scss create mode 100644 app/controllers/concerns/redirects_for_missing_path_on_tree.rb create mode 100644 app/controllers/concerns/sourcegraph_gon.rb create mode 100644 app/controllers/groups/group_links_controller.rb create mode 100644 app/controllers/projects/usage_ping_controller.rb create mode 100644 app/finders/abuse_reports_finder.rb create mode 100644 app/finders/git_refs_finder.rb create mode 100644 app/finders/prometheus_metrics_finder.rb create mode 100644 app/graphql/mutations/merge_requests/set_assignees.rb create mode 100644 app/graphql/mutations/merge_requests/set_labels.rb create mode 100644 app/graphql/mutations/merge_requests/set_locked.rb create mode 100644 app/graphql/mutations/merge_requests/set_milestone.rb create mode 100644 app/graphql/mutations/merge_requests/set_subscription.rb create mode 100644 app/graphql/mutations/todos/base.rb create mode 100644 app/graphql/mutations/todos/mark_done.rb create mode 100644 app/graphql/resolvers/commit_pipelines_resolver.rb delete mode 100644 app/graphql/types/extended_issue_type.rb create mode 100644 app/graphql/types/mutation_operation_mode_enum.rb create mode 100644 app/helpers/sourcegraph_helper.rb create mode 100644 app/models/clusters/applications/crossplane.rb create mode 100644 app/models/clusters/applications/elastic_stack.rb create mode 100644 app/models/deployment_merge_request.rb create mode 100644 app/models/group_group_link.rb create mode 100644 app/models/zoom_meeting.rb create mode 100644 app/presenters/release_presenter.rb create mode 100644 app/serializers/error_tracking/detailed_error_entity.rb create mode 100644 app/serializers/error_tracking/detailed_error_serializer.rb create mode 100644 app/serializers/error_tracking/error_event_entity.rb create mode 100644 app/serializers/error_tracking/error_event_serializer.rb create mode 100644 app/services/ci/find_exposed_artifacts_service.rb create mode 100644 app/services/ci/generate_exposed_artifacts_report_service.rb create mode 100644 app/services/clusters/aws/fetch_credentials_service.rb create mode 100644 app/services/clusters/aws/finalize_creation_service.rb create mode 100644 app/services/clusters/aws/provision_service.rb create mode 100644 app/services/clusters/aws/proxy_service.rb create mode 100644 app/services/clusters/aws/verify_provision_status_service.rb create mode 100644 app/services/clusters/destroy_service.rb create mode 100644 app/services/concerns/git/logger.rb create mode 100644 app/services/deployments/link_merge_requests_service.rb create mode 100644 app/services/error_tracking/base_service.rb create mode 100644 app/services/error_tracking/issue_details_service.rb create mode 100644 app/services/error_tracking/issue_latest_event_service.rb create mode 100644 app/services/groups/group_links/create_service.rb create mode 100644 app/services/groups/group_links/destroy_service.rb create mode 100644 app/services/groups/import_export/export_service.rb delete mode 100644 app/services/merge_requests/working_copy_base_service.rb create mode 100644 app/services/metrics/dashboard/grafana_metric_embed_service.rb create mode 100644 app/services/system_notes/merge_requests_service.rb create mode 100644 app/services/users/signup_service.rb delete mode 100644 app/services/zoom_notes_service.rb create mode 100644 app/validators/same_project_association_validator.rb create mode 100644 app/validators/zoom_url_validator.rb create mode 100644 app/views/admin/application_settings/_eks.html.haml create mode 100644 app/views/admin/application_settings/_sourcegraph.html.haml create mode 100644 app/views/ci/group_variables/_content.html.haml create mode 100644 app/views/ci/group_variables/_header.html.haml create mode 100644 app/views/ci/group_variables/_index.html.haml create mode 100644 app/views/ci/group_variables/_variable_header.html.haml create mode 100644 app/views/ci/variables/_url_query_variable_row.html.haml create mode 100644 app/views/clusters/clusters/aws/_new.html.haml delete mode 100644 app/views/clusters/clusters/eks/_index.html.haml create mode 100644 app/views/clusters/clusters/gcp/_new.html.haml create mode 100644 app/views/profiles/preferences/_sourcegraph.html.haml create mode 100644 app/views/projects/environments/empty_logs.html.haml rename app/views/projects/environments/{empty.html.haml => empty_metrics.html.haml} (64%) create mode 100644 app/views/projects/error_tracking/details.html.haml create mode 100644 app/views/projects/pages_domains/_dns.html.haml create mode 100644 app/views/projects/pages_domains/_lets_encrypt_callout.html.haml create mode 100644 app/views/projects/settings/operations/_grafana_integration.html.haml create mode 100644 app/views/shared/milestones/_description.html.haml create mode 100644 app/views/shared/milestones/_header.html.haml create mode 100644 app/workers/clusters/cleanup/app_worker.rb create mode 100644 app/workers/clusters/cleanup/project_namespace_worker.rb create mode 100644 app/workers/clusters/cleanup/service_account_worker.rb create mode 100644 app/workers/group_export_worker.rb create mode 100644 changelogs/unreleased/18126-change-tag-url-for-tag-push-events-in-chat-msg-integration.yaml create mode 100644 config/initializers/database_config.rb create mode 100644 config/initializers/validate_puma.rb create mode 100644 db/fixtures/development/02_users.rb delete mode 100644 db/fixtures/development/05_users.rb create mode 100644 db/migrate/20180902070406_create_group_group_links.rb create mode 100644 db/migrate/20190703171157_add_sourcing_epic_dates.rb create mode 100644 db/migrate/20190703171555_add_sourcing_epic_dates_fks.rb create mode 100644 db/migrate/20190827222124_add_sourcegraph_configuration_to_application_settings.rb create mode 100644 db/migrate/20190910211526_create_packages_conan_file_metadata.rb create mode 100644 db/migrate/20190918104731_add_cleanup_status_to_cluster.rb create mode 100644 db/migrate/20190918121135_add_cleanup_status_reason_to_cluster.rb create mode 100644 db/migrate/20190930153535_create_zoom_meetings.rb create mode 100644 db/migrate/20191002123516_create_clusters_applications_elastic_stack.rb create mode 100644 db/migrate/20191003161031_add_mark_for_deletion_to_projects.rb create mode 100644 db/migrate/20191003161032_add_mark_for_deletion_indexes_to_projects.rb create mode 100644 db/migrate/20191003195218_add_pendo_enabled_to_application_settings.rb create mode 100644 db/migrate/20191003195620_add_pendo_url_to_application_settings.rb create mode 100644 db/migrate/20191004080818_add_productivity_analytics_start_date.rb create mode 100644 db/migrate/20191004081520_fill_productivity_analytics_start_date.rb create mode 100644 db/migrate/20191009100244_add_geo_design_repository_counters.rb create mode 100644 db/migrate/20191009110124_add_has_exposed_artifacts_to_ci_builds_metadata.rb create mode 100644 db/migrate/20191009110757_add_index_to_ci_builds_metadata_has_exposed_artifacts.rb create mode 100644 db/migrate/20191010174846_add_snowplow_iglu_registry_url_to_application_settings.rb create mode 100644 db/migrate/20191011084019_add_project_deletion_adjourned_period_to_application_settings.rb create mode 100644 db/migrate/20191013100213_add_squash_commit_sha_to_merge_requests.rb create mode 100644 db/migrate/20191014025629_rename_design_management_version_user_to_author.rb create mode 100644 db/migrate/20191014030730_add_author_index_to_design_management_versions.rb create mode 100644 db/migrate/20191016133352_create_ci_subscriptions_projects.rb create mode 100644 db/migrate/20191017001326_create_users_security_dashboard_projects.rb create mode 100644 db/migrate/20191017094449_add_remove_source_branch_after_merge_to_projects.rb create mode 100644 db/migrate/20191017134513_add_deployment_merge_requests.rb create mode 100644 db/migrate/20191017191341_create_clusters_applications_crossplane.rb create mode 100644 db/migrate/20191023132005_add_merge_requests_index_on_target_project_and_branch.rb create mode 100644 db/migrate/20191023152913_add_default_and_free_plans.rb create mode 100644 db/migrate/20191024134020_add_index_to_zoom_meetings.rb create mode 100644 db/migrate/20191026124116_set_application_settings_default_project_and_snippet_visibility.rb create mode 100644 db/migrate/20191028162543_add_setup_for_company_to_user_preferences.rb create mode 100644 db/migrate/20191028184740_rename_snowplow_site_id_to_snowplow_app_id.rb create mode 100644 db/migrate/20191029125305_create_packages_conan_metadata.rb create mode 100644 db/migrate/20191029191901_add_enabled_to_grafana_integrations.rb create mode 100644 db/migrate/20191030135044_create_plan_limits.rb create mode 100644 db/migrate/20191030152934_move_limits_from_plans.rb create mode 100644 db/migrate/20191101092917_replace_index_on_metrics_merged_at.rb create mode 100644 db/migrate/20191103202505_add_eks_credentials_to_application_settings.rb create mode 100644 db/migrate/20191104205020_add_license_details_to_application_settings.rb create mode 100644 db/migrate/20191105094558_add_report_type_to_vulnerabilities.rb create mode 100644 db/migrate/20191105193652_add_index_on_deployments_updated_at.rb create mode 100644 db/migrate/20191107173446_add_sourcegraph_admin_and_user_preferences.rb create mode 100644 db/migrate/20191107220314_add_index_to_projects_on_marked_for_deletion.rb create mode 100644 db/migrate/20191111115229_add_group_id_to_import_export_uploads.rb create mode 100644 db/migrate/20191111115431_add_group_fk_to_import_export_uploads.rb create mode 100644 db/migrate/20191111121500_default_ci_config_path.rb create mode 100644 db/migrate/20191112115247_add_cached_markdown_version_to_vulnerabilities.rb create mode 100644 db/migrate/20191112214305_add_indexes_for_projects_api_default_params.rb create mode 100644 db/migrate/20191112221821_add_indexes_for_projects_api_default_params_authenticated.rb create mode 100644 db/migrate/20191112232338_ensure_no_empty_milestone_titles.rb create mode 100644 db/migrate/20191114173508_add_resolved_attributes_to_vulnerabilities.rb create mode 100644 db/migrate/20191114173602_add_foreign_key_on_resolved_by_id_to_vulnerabilities.rb create mode 100644 db/migrate/20191115091425_create_vulnerability_issue_links.rb create mode 100644 db/post_migrate/20190926180443_schedule_epic_issues_after_epics_move.rb create mode 100644 db/post_migrate/20191008143850_fix_any_approver_rule_for_projects.rb create mode 100644 db/post_migrate/20191014030134_cleanup_design_management_version_user_to_author_rename.rb create mode 100644 db/post_migrate/20191017045817_schedule_fix_gitlab_com_pages_access_level.rb create mode 100644 db/post_migrate/20191017180026_drop_ci_build_trace_sections_id.rb create mode 100644 db/post_migrate/20191021101942_remove_empty_github_service_templates.rb create mode 100644 db/post_migrate/20191022113635_nullify_feature_flag_plaintext_tokens.rb create mode 100644 db/post_migrate/20191029095537_cleanup_application_settings_snowplow_site_id_rename.rb create mode 100644 db/post_migrate/20191030193050_remove_pendo_from_application_settings.rb create mode 100644 db/post_migrate/20191031112603_remove_limits_from_plans.rb create mode 100644 db/post_migrate/20191105094625_set_report_type_for_vulnerabilities.rb create mode 100644 db/post_migrate/20191105140942_add_indices_to_abuse_reports.rb create mode 100644 db/post_migrate/20191112115317_change_vulnerabilities_title_html_to_nullable.rb create mode 100644 db/post_migrate/20191114173624_set_resolved_state_on_vulnerabilities.rb create mode 100644 doc/administration/git_annex.md rename doc/{workflow/lfs/images => administration/lfs/img}/git-annex-branches.png (100%) rename doc/{workflow => administration}/lfs/img/lfs-icon.png (100%) create mode 100644 doc/administration/lfs/lfs_administration.md create mode 100644 doc/administration/lfs/manage_large_binaries_with_git_lfs.md create mode 100644 doc/administration/lfs/migrate_from_git_annex_to_git_lfs.md create mode 100644 doc/administration/timezone.md create mode 100644 doc/api/feature_flag_specs.md create mode 100644 doc/api/feature_flags.md create mode 100644 doc/api/graphql/reference/gitlab_schema.graphql create mode 100644 doc/api/graphql/reference/gitlab_schema.json create mode 100644 doc/api/visual_review_discussions.md create mode 100644 doc/api/vulnerability_findings.md create mode 100644 doc/ci/environments/environments_dashboard.md create mode 100644 doc/ci/environments/img/environments_dashboard_v12_5.png create mode 100644 doc/ci/img/pipelines_junit_test_report_ui_v12_5.png create mode 100644 doc/ci/variables/img/inherited_group_variables_v12_5.png create mode 100644 doc/development/creating_enums.md create mode 100644 doc/development/documentation/site_architecture/release_process.md create mode 100644 doc/development/testing_guide/end_to_end/feature_flags.md create mode 100644 doc/development/testing_guide/end_to_end/flows.md create mode 100644 doc/gitlab-basics/feature_branch_workflow.md create mode 100644 doc/integration/img/sourcegraph_admin_v12_5.png create mode 100644 doc/integration/img/sourcegraph_demo_v12_5.png create mode 100644 doc/integration/img/sourcegraph_popover_v12_5.png create mode 100644 doc/integration/img/sourcegraph_user_preferences_v12_5.png create mode 100644 doc/integration/sourcegraph.md create mode 100644 doc/topics/gitlab_flow.md rename doc/{workflow => topics}/img/gitlab_flow.png (100%) rename doc/{workflow/img/ci_mr.png => topics/img/gitlab_flow_ci_mr.png} (100%) rename doc/{workflow/img/close_issue_mr.png => topics/img/gitlab_flow_close_issue_mr.png} (100%) rename doc/{workflow/img/environment_branches.png => topics/img/gitlab_flow_environment_branches.png} (100%) rename doc/{workflow/img/four_stages.png => topics/img/gitlab_flow_four_stages.png} (100%) rename doc/{workflow/img/git_pull.png => topics/img/gitlab_flow_git_pull.png} (100%) rename doc/{workflow/img/gitdashflow.png => topics/img/gitlab_flow_gitdashflow.png} (100%) rename doc/{workflow/img/github_flow.png => topics/img/gitlab_flow_github_flow.png} (100%) rename doc/{workflow/img/good_commit.png => topics/img/gitlab_flow_good_commit.png} (100%) rename doc/{workflow/img/merge_commits.png => topics/img/gitlab_flow_merge_commits.png} (100%) rename doc/{workflow/img/merge_request.png => topics/img/gitlab_flow_merge_request.png} (100%) rename doc/{workflow/img/messy_flow.png => topics/img/gitlab_flow_messy_flow.png} (100%) rename doc/{workflow/img/mr_inline_comments.png => topics/img/gitlab_flow_mr_inline_comments.png} (100%) rename doc/{workflow/img/production_branch.png => topics/img/gitlab_flow_production_branch.png} (100%) rename doc/{workflow/img/rebase.png => topics/img/gitlab_flow_rebase.png} (100%) rename doc/{workflow/img/release_branches.png => topics/img/gitlab_flow_release_branches.png} (100%) rename doc/{workflow/img/remove_checkbox.png => topics/img/gitlab_flow_remove_checkbox.png} (100%) create mode 100644 doc/user/admin_area/activating_deactivating_users.md create mode 100644 doc/user/admin_area/blocking_unblocking_users.md create mode 100644 doc/user/admin_area/settings/img/two_factor_grace_period.png create mode 100644 doc/user/admin_area/settings/sign_in_restrictions.md create mode 100644 doc/user/application_security/dependency_list/img/dependency_list_v12_4.png delete mode 100644 doc/user/application_security/security_dashboard/img/group_security_dashboard_v12_3.png create mode 100644 doc/user/application_security/security_dashboard/img/group_security_dashboard_v12_4.png create mode 100644 doc/user/clusters/crossplane.md create mode 100644 doc/user/clusters/img/advanced-settings-cluster-management-project-v12_5.png mode change 100755 => 100644 doc/user/group/epics/img/epic_view_roadmap_v12.3.png mode change 100755 => 100644 doc/user/group/epics/img/epic_view_v12.3.png delete mode 100755 doc/user/group/epics/img/epics_list_view_v12.3.png create mode 100644 doc/user/group/epics/img/epics_list_view_v12.5.png rename doc/{workflow => user}/img/todos_add_todo_sidebar.png (100%) rename doc/{workflow => user}/img/todos_icon.png (100%) rename doc/{workflow => user}/img/todos_index.png (100%) rename doc/{workflow => user}/img/todos_mark_done_sidebar.png (100%) rename doc/{workflow/img/todo_list_item.png => user/img/todos_todo_list_item.png} (100%) create mode 100644 doc/user/incident_management/img/incident_management_settings.png create mode 100644 doc/user/incident_management/index.md delete mode 100644 doc/user/operations_dashboard/img/index_operations_dashboard_top_bar_icon.png rename doc/{workflow => user/profile}/img/notification_global_settings.png (100%) rename doc/{workflow => user/profile}/img/notification_group_settings.png (100%) rename doc/{workflow => user/profile}/img/notification_project_settings.png (100%) create mode 100644 doc/user/profile/notifications.md create mode 100644 doc/user/project/clusters/add_remove_clusters.md delete mode 100644 doc/user/project/clusters/eks_and_gitlab/img/create_dns.png delete mode 100644 doc/user/project/clusters/eks_and_gitlab/img/create_project.png delete mode 100644 doc/user/project/clusters/eks_and_gitlab/img/deploy_apps.png rename doc/user/project/clusters/{eks_and_gitlab => }/img/add_cluster.png (100%) rename doc/user/project/clusters/{eks_and_gitlab => }/img/environment.png (100%) delete mode 100644 doc/user/project/clusters/img/kubernetes_pod_logs_v12_4.png create mode 100644 doc/user/project/clusters/img/kubernetes_pod_logs_v12_5.png rename doc/user/project/clusters/{eks_and_gitlab => }/img/pipeline.png (100%) rename doc/user/project/clusters/{eks_and_gitlab => }/img/rbac.png (100%) create mode 100644 doc/user/project/clusters/img/sidebar_menu_pod_logs_v12_5.png mode change 100755 => 100644 doc/user/project/img/code_owners_approval_new_protected_branch_v12_4.png mode change 100755 => 100644 doc/user/project/img/code_owners_approval_protected_branch_v12_4.png rename doc/{workflow/time_tracking => user/project}/img/time_tracking_example_v12_2.png (100%) rename doc/{workflow/time_tracking => user/project}/img/time_tracking_sidebar_v8_16.png (100%) create mode 100644 doc/user/project/integrations/img/embed_metrics_issue_template.png create mode 100644 doc/user/project/integrations/img/grafana_panel_v12_5.png create mode 100644 doc/user/project/integrations/img/grafana_sharing_dialog_v12_5.png create mode 100644 doc/user/project/integrations/img/heatmap_panel_type.png create mode 100644 doc/user/project/integrations/img/http_proxy_access_v12_5.png create mode 100644 doc/user/project/integrations/img/prometheus_dashboard_anomaly_panel_type.png create mode 100644 doc/user/project/integrations/img/rendered_grafana_embed_v12_5.png create mode 100644 doc/user/project/integrations/img/select_query_variables_v12_5.png create mode 100644 doc/user/project/issues/associate_zoom_meeting.md rename doc/{workflow/issue_weight/issue.png => user/project/issues/img/issue_weight.png} (100%) delete mode 100644 doc/user/project/issues/img/select_all_designs_v12_4.png create mode 100644 doc/user/project/issues/issue_weight.md create mode 100644 doc/user/project/merge_requests/creating_merge_requests.md delete mode 100644 doc/user/project/merge_requests/img/approvals_premium_project_edit_v12_3.png create mode 100644 doc/user/project/merge_requests/img/approvals_premium_project_edit_v12_5.png mode change 100755 => 100644 doc/user/project/merge_requests/img/mr_approvals_by_code_owners_v12_4.png create mode 100644 doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md create mode 100644 doc/user/project/operations/img/error_details_v12_5.png create mode 100644 doc/user/project/pages/getting_started/fork_sample_project.md create mode 100644 doc/user/project/pages/getting_started/new_or_existing_website.md create mode 100644 doc/user/project/pages/getting_started/pages_bundled_template.md create mode 100644 doc/user/project/pages/img/new_project_for_pages_v12_5.png create mode 100644 doc/user/project/pages/img/pages_workflow_v12_5.png create mode 100644 doc/user/project/pages/pages_access_control.md create mode 100644 doc/user/project/releases/img/edit_release_page_v12_5.png create mode 100644 doc/user/project/releases/img/milestone_list_with_releases_v12_5.png create mode 100644 doc/user/project/releases/img/milestone_with_releases_v12_5.png rename doc/{workflow/releases/new_tag.png => user/project/releases/img/new_tag_12_5.png} (100%) create mode 100644 doc/user/project/releases/img/release_edit_button_v12_5.png create mode 100644 doc/user/project/releases/img/release_with_milestone_v12_5.png rename doc/{workflow/releases/tags.png => user/project/releases/img/tags_12_5.png} (100%) create mode 100644 doc/user/project/repository/file_finder.md create mode 100644 doc/user/project/repository/forking_workflow.md rename doc/{workflow => user/project/repository}/img/file_finder_find_button.png (100%) rename doc/{workflow => user/project/repository}/img/file_finder_find_file.png (100%) rename doc/{workflow/forking/branch_select.png => user/project/repository/img/forking_workflow_branch_select.png} (100%) rename doc/{workflow => user/project/repository}/img/forking_workflow_choose_namespace.png (100%) rename doc/{workflow => user/project/repository}/img/forking_workflow_fork_button.png (100%) rename doc/{workflow/forking/merge_request.png => user/project/repository/img/forking_workflow_merge_request.png} (100%) rename doc/{workflow => user/project/repository}/img/forking_workflow_path_taken_error.png (100%) rename doc/{workflow/img/copy_ssh_public_key_button.png => user/project/repository/img/repository_mirroring_copy_ssh_public_key_button.png} (100%) rename doc/{workflow => user/project/repository}/img/repository_mirroring_force_update.png (100%) rename doc/{workflow => user/project/repository}/img/repository_mirroring_pull_settings_lower.png (100%) rename doc/{workflow => user/project/repository}/img/repository_mirroring_pull_settings_upper.png (100%) rename doc/{workflow => user/project/repository}/img/repository_mirroring_push_settings.png (100%) create mode 100644 doc/user/project/repository/repository_mirroring.md create mode 100644 doc/user/project/time_tracking.md create mode 100644 doc/user/search/img/issue_search_filter_v12_5.png create mode 100644 doc/user/shortcuts.md create mode 100644 doc/user/todos.md create mode 100644 lib/api/group_export.rb create mode 100644 lib/banzai/filter/inline_grafana_metrics_filter.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/metrics_based_stage_event.rb delete mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/simple_stage_event.rb create mode 100644 lib/gitlab/ci/build/context/base.rb create mode 100644 lib/gitlab/ci/build/context/build.rb create mode 100644 lib/gitlab/ci/build/context/global.rb create mode 100644 lib/gitlab/ci/config/entry/boolean.rb create mode 100644 lib/gitlab/ci/config/entry/files.rb create mode 100644 lib/gitlab/ci/config/entry/need.rb create mode 100644 lib/gitlab/ci/config/entry/needs.rb create mode 100644 lib/gitlab/ci/config/entry/prefix.rb create mode 100644 lib/gitlab/ci/config/entry/workflow.rb create mode 100644 lib/gitlab/ci/pipeline/chain/config/content.rb create mode 100644 lib/gitlab/ci/pipeline/chain/config/process.rb create mode 100644 lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules.rb create mode 100644 lib/gitlab/ci/pipeline/chain/seed.rb delete mode 100644 lib/gitlab/ci/pipeline/chain/validate/config.rb create mode 100644 lib/gitlab/ci/pipeline/seed/build/cache.rb create mode 100644 lib/gitlab/config/entry/inheritable.rb create mode 100644 lib/gitlab/error_tracking/detailed_error.rb create mode 100644 lib/gitlab/error_tracking/error_event.rb create mode 100644 lib/gitlab/exception_log_formatter.rb create mode 100644 lib/gitlab/grape_logging/loggers/exception_logger.rb create mode 100644 lib/gitlab/graphql/connections/filterable_array_connection.rb create mode 100644 lib/gitlab/graphql/connections/keyset/conditions/base_condition.rb create mode 100644 lib/gitlab/graphql/connections/keyset/conditions/not_null_condition.rb create mode 100644 lib/gitlab/graphql/connections/keyset/conditions/null_condition.rb create mode 100644 lib/gitlab/graphql/connections/keyset/connection.rb create mode 100644 lib/gitlab/graphql/connections/keyset/legacy_keyset_connection.rb create mode 100644 lib/gitlab/graphql/connections/keyset/order_info.rb create mode 100644 lib/gitlab/graphql/connections/keyset/query_builder.rb delete mode 100644 lib/gitlab/graphql/connections/keyset_connection.rb create mode 100644 lib/gitlab/graphql/filterable_array.rb delete mode 100644 lib/gitlab/graphql/loaders/pipeline_for_sha_loader.rb create mode 100644 lib/gitlab/health_checks/master_check.rb create mode 100644 lib/gitlab/import_export/group_import_export.yml create mode 100644 lib/gitlab/import_export/group_tree_saver.rb create mode 100644 lib/gitlab/import_export/relation_tree_saver.rb create mode 100644 lib/gitlab/kubernetes/config_maps/aws_node_auth.rb create mode 100644 lib/gitlab/metrics/dashboard/stages/grafana_formatter.rb create mode 100644 lib/gitlab/pagination/base.rb create mode 100644 lib/gitlab/pagination/offset_pagination.rb create mode 100644 lib/gitlab/prometheus/internal.rb create mode 100644 lib/gitlab/slash_commands/issue_comment.rb create mode 100644 lib/gitlab/slash_commands/presenters/issue_comment.rb create mode 100644 lib/gitlab/slash_commands/presenters/note_base.rb create mode 100644 lib/gitlab/sourcegraph.rb create mode 100644 qa/qa/flow/login.rb create mode 100644 qa/qa/page/admin/settings/component/outbound_requests.rb create mode 100644 qa/qa/page/dashboard/welcome.rb create mode 100644 qa/qa/service/docker_run/jenkins.rb create mode 100644 qa/qa/service/docker_run/maven.rb create mode 100644 qa/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb create mode 100644 qa/qa/specs/loop_runner.rb create mode 100644 qa/qa/vendor/jenkins/page/base.rb create mode 100644 qa/qa/vendor/jenkins/page/configure.rb create mode 100644 qa/qa/vendor/jenkins/page/configure_job.rb create mode 100644 qa/qa/vendor/jenkins/page/login.rb create mode 100644 qa/qa/vendor/jenkins/page/new_credentials.rb create mode 100644 qa/qa/vendor/jenkins/page/new_job.rb create mode 100644 rubocop/cop/rspec/any_instance_of.rb delete mode 100755 scripts/notify-slack create mode 100644 scripts/sync-stable-branch.sh create mode 100644 spec/controllers/concerns/redirects_for_missing_path_on_tree_spec.rb create mode 100644 spec/controllers/concerns/renders_commits_spec.rb create mode 100644 spec/controllers/concerns/sourcegraph_gon_spec.rb create mode 100644 spec/controllers/groups/group_links_controller_spec.rb delete mode 100644 spec/controllers/health_controller_spec.rb create mode 100644 spec/controllers/projects/usage_ping_controller_spec.rb create mode 100644 spec/factories/error_tracking/detailed_error.rb create mode 100644 spec/factories/error_tracking/error_event.rb create mode 100644 spec/factories/group_group_links.rb create mode 100644 spec/factories/zoom_meetings.rb create mode 100644 spec/features/admin/clusters/eks_spec.rb create mode 100644 spec/features/groups/clusters/eks_spec.rb create mode 100644 spec/features/issues/filtered_search/dropdown_release_spec.rb create mode 100644 spec/features/populate_new_pipeline_vars_with_params_spec.rb create mode 100644 spec/features/project_group_variables_spec.rb delete mode 100644 spec/features/raven_js_spec.rb create mode 100644 spec/features/sentry_js_spec.rb create mode 100644 spec/features/users/anonymous_sessions_spec.rb create mode 100644 spec/finders/abuse_reports_finder_spec.rb create mode 100644 spec/finders/prometheus_metrics_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/error_tracking/error_detailed.json create mode 100644 spec/fixtures/api/schemas/error_tracking/error_stack_trace.json create mode 100644 spec/fixtures/api/schemas/error_tracking/issue_detailed.json create mode 100644 spec/fixtures/api/schemas/error_tracking/issue_stack_trace.json create mode 100644 spec/fixtures/grafana/dashboard_response.json create mode 100644 spec/fixtures/grafana/datasource_response.json create mode 100644 spec/fixtures/grafana/expected_grafana_embed.json create mode 100644 spec/fixtures/grafana/proxy_response.json create mode 100644 spec/fixtures/grafana/simplified_dashboard_response.json create mode 100644 spec/fixtures/group_export.tar.gz rename spec/fixtures/lib/gitlab/import_export/{ => complex}/project.json (99%) rename spec/fixtures/lib/gitlab/import_export/{project.group.json => group/project.json} (100%) rename spec/fixtures/lib/gitlab/import_export/{project.light.json => light/project.json} (100%) rename spec/fixtures/lib/gitlab/import_export/{project.milestone-iid.json => milestone-iid/project.json} (100%) create mode 100644 spec/frontend/boards/components/issue_time_estimate_spec.js create mode 100644 spec/frontend/boards/issue_card_spec.js create mode 100644 spec/frontend/boards/stores/getters_spec.js create mode 100644 spec/frontend/clusters/services/crossplane_provider_stack_spec.js create mode 100644 spec/frontend/contributors/component/__snapshots__/contributors_spec.js.snap create mode 100644 spec/frontend/contributors/component/contributors_spec.js create mode 100644 spec/frontend/contributors/store/actions_spec.js create mode 100644 spec/frontend/contributors/store/getters_spec.js create mode 100644 spec/frontend/contributors/store/mutations_spec.js create mode 100644 spec/frontend/contributors/utils_spec.js create mode 100644 spec/frontend/create_cluster/eks_cluster/components/create_eks_cluster_spec.js delete mode 100644 spec/frontend/create_cluster/eks_cluster/components/region_dropdown_spec.js create mode 100644 spec/frontend/create_cluster/eks_cluster/components/service_credentials_form_spec.js create mode 100644 spec/frontend/create_cluster/eks_cluster/services/aws_services_facade_spec.js rename spec/frontend/{projects => create_cluster}/gke_cluster_namespace/gke_cluster_namespace_spec.js (95%) create mode 100644 spec/frontend/create_cluster/init_create_cluster_spec.js create mode 100644 spec/frontend/error_tracking/components/error_details_spec.js create mode 100644 spec/frontend/error_tracking/components/stacktrace_entry_spec.js create mode 100644 spec/frontend/error_tracking/components/stacktrace_spec.js create mode 100644 spec/frontend/error_tracking/store/details/actions_spec.js create mode 100644 spec/frontend/error_tracking/store/details/getters_spec.js create mode 100644 spec/frontend/error_tracking/store/list/getters_spec.js rename spec/frontend/error_tracking/store/{ => list}/mutation_spec.js (83%) create mode 100644 spec/frontend/grafana_integration/components/__snapshots__/grafana_integration_spec.js.snap create mode 100644 spec/frontend/grafana_integration/components/grafana_integration_spec.js create mode 100644 spec/frontend/grafana_integration/store/mutations_spec.js create mode 100644 spec/frontend/ide/components/jobs/__snapshots__/stage_spec.js.snap create mode 100644 spec/frontend/ide/components/jobs/stage_spec.js create mode 100644 spec/frontend/ide/stores/modules/clientside/actions_spec.js create mode 100644 spec/frontend/issuables_list/components/__snapshots__/issuables_list_app_spec.js.snap create mode 100644 spec/frontend/issuables_list/components/issuable_spec.js create mode 100644 spec/frontend/issuables_list/components/issuables_list_app_spec.js create mode 100644 spec/frontend/issuables_list/issuable_list_test_data.js create mode 100644 spec/frontend/issue_show/helpers.js create mode 100644 spec/frontend/lib/utils/chart_utils_spec.js rename spec/{javascripts => frontend}/monitoring/charts/time_series_spec.js (70%) create mode 100644 spec/frontend/monitoring/components/charts/anomaly_spec.js create mode 100644 spec/frontend/monitoring/mock_data.js create mode 100644 spec/frontend/monitoring/panel_type_spec.js rename spec/{javascripts => frontend}/monitoring/store/actions_spec.js (65%) rename spec/{javascripts => frontend}/monitoring/store/mutations_spec.js (63%) rename spec/{javascripts => frontend}/monitoring/store/utils_spec.js (100%) create mode 100644 spec/frontend/notes/components/comment_form_spec.js create mode 100644 spec/frontend/notes/components/diff_discussion_header_spec.js create mode 100644 spec/frontend/notes/mock_data.js create mode 100644 spec/frontend/performance_bar/components/add_request_spec.js create mode 100644 spec/frontend/pipelines/graph/action_component_spec.js rename spec/{javascripts => frontend}/pipelines/pipeline_triggerer_spec.js (90%) rename spec/{javascripts => frontend}/pipelines/pipelines_table_row_spec.js (53%) create mode 100644 spec/frontend/pipelines/test_reports/mock_data.js create mode 100644 spec/frontend/pipelines/test_reports/stores/actions_spec.js create mode 100644 spec/frontend/pipelines/test_reports/stores/getters_spec.js create mode 100644 spec/frontend/pipelines/test_reports/stores/mutations_spec.js create mode 100644 spec/frontend/pipelines/test_reports/test_reports_spec.js create mode 100644 spec/frontend/pipelines/test_reports/test_suite_table_spec.js create mode 100644 spec/frontend/pipelines/test_reports/test_summary_spec.js create mode 100644 spec/frontend/pipelines/test_reports/test_summary_table_spec.js delete mode 100644 spec/frontend/releases/list/components/__snapshots__/release_block_spec.js.snap create mode 100644 spec/frontend/releases/list/components/release_block_footer_spec.js create mode 100644 spec/frontend/repository/components/__snapshots__/directory_download_links_spec.js.snap create mode 100644 spec/frontend/repository/components/directory_download_links_spec.js create mode 100644 spec/frontend/repository/components/preview/__snapshots__/index_spec.js.snap create mode 100644 spec/frontend/repository/components/preview/index_spec.js create mode 100644 spec/frontend/repository/components/tree_content_spec.js create mode 100644 spec/frontend/repository/pages/index_spec.js create mode 100644 spec/frontend/repository/pages/tree_spec.js create mode 100644 spec/frontend/repository/utils/commit_spec.js create mode 100644 spec/frontend/repository/utils/dom_spec.js create mode 100644 spec/frontend/repository/utils/readme_spec.js rename spec/{javascripts/raven => frontend/sentry}/index_spec.js (62%) create mode 100644 spec/frontend/sentry/sentry_config_spec.js create mode 100644 spec/frontend/vue_shared/components/__snapshots__/split_button_spec.js.snap rename spec/{javascripts => frontend}/vue_shared/components/commit_spec.js (58%) create mode 100644 spec/frontend/vue_shared/components/content_viewer/viewers/image_viewer_spec.js create mode 100644 spec/frontend/vue_shared/components/slot_switch_spec.js create mode 100644 spec/frontend/vue_shared/components/split_button_spec.js rename spec/{javascripts => frontend}/vue_shared/components/table_pagination_spec.js (65%) create mode 100644 spec/frontend/vue_shared/components/user_avatar/user_avatar_image_spec.js create mode 100644 spec/frontend/vue_shared/components/user_popover/user_popover_spec.js create mode 100644 spec/graphql/mutations/merge_requests/set_assignees_spec.rb create mode 100644 spec/graphql/mutations/merge_requests/set_labels_spec.rb create mode 100644 spec/graphql/mutations/merge_requests/set_locked_spec.rb create mode 100644 spec/graphql/mutations/merge_requests/set_milestone_spec.rb create mode 100644 spec/graphql/mutations/merge_requests/set_subscription_spec.rb create mode 100644 spec/graphql/mutations/todos/mark_done_spec.rb create mode 100644 spec/graphql/resolvers/commit_pipelines_resolver_spec.rb create mode 100644 spec/graphql/types/base_enum_spec.rb delete mode 100644 spec/graphql/types/extended_issue_type_spec.rb create mode 100644 spec/graphql/types/issue_sort_enum_spec.rb create mode 100644 spec/helpers/sourcegraph_helper_spec.rb create mode 100644 spec/initializers/database_config_spec.rb delete mode 100644 spec/javascripts/boards/components/issue_time_estimate_spec.js delete mode 100644 spec/javascripts/boards/issue_card_spec.js create mode 100644 spec/javascripts/diffs/mock_data/diff_file_unreadable.js delete mode 100644 spec/javascripts/graphs/stat_graph_contributors_graph_spec.js delete mode 100644 spec/javascripts/graphs/stat_graph_contributors_spec.js delete mode 100644 spec/javascripts/graphs/stat_graph_contributors_util_spec.js delete mode 100644 spec/javascripts/ide/components/jobs/stage_spec.js delete mode 100644 spec/javascripts/lib/utils/tick_formats_spec.js create mode 100644 spec/javascripts/monitoring/charts/heatmap_spec.js delete mode 100644 spec/javascripts/monitoring/panel_type_spec.js create mode 100644 spec/javascripts/monitoring/shared/prometheus_header_spec.js delete mode 100644 spec/javascripts/notes/components/comment_form_spec.js delete mode 100644 spec/javascripts/pipelines/graph/action_component_spec.js delete mode 100644 spec/javascripts/raven/raven_config_spec.js delete mode 100644 spec/javascripts/vue_shared/components/user_avatar/user_avatar_image_spec.js delete mode 100644 spec/javascripts/vue_shared/components/user_popover/user_popover_spec.js create mode 100644 spec/lib/banzai/filter/inline_grafana_metrics_filter_spec.rb create mode 100644 spec/lib/gitlab/ci/build/context/build_spec.rb create mode 100644 spec/lib/gitlab/ci/build/context/global_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/files_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/need_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/needs_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/prefix_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/workflow_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/chain/evaluate_workflow_rules_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb delete mode 100644 spec/lib/gitlab/ci/pipeline/chain/validate/config_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/seed/build/cache_spec.rb create mode 100644 spec/lib/gitlab/devise_failure_spec.rb create mode 100644 spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/filterable_array_connection_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/keyset/conditions/not_null_condition_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/keyset/conditions/null_condition_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/keyset/connection_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/keyset/legacy_keyset_connection_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/keyset/order_info_spec.rb create mode 100644 spec/lib/gitlab/graphql/connections/keyset/query_builder_spec.rb delete mode 100644 spec/lib/gitlab/graphql/connections/keyset_connection_spec.rb delete mode 100644 spec/lib/gitlab/graphql/loaders/pipeline_for_sha_loader_spec.rb create mode 100644 spec/lib/gitlab/health_checks/master_check_spec.rb create mode 100644 spec/lib/gitlab/import_export/group_tree_saver_spec.rb create mode 100644 spec/lib/gitlab/import_export/relation_tree_saver_spec.rb create mode 100644 spec/lib/gitlab/instrumentation_helper_spec.rb create mode 100644 spec/lib/gitlab/kubernetes/config_maps/aws_node_auth_spec.rb create mode 100644 spec/lib/gitlab/metrics/dashboard/stages/grafana_formatter_spec.rb create mode 100644 spec/lib/gitlab/pagination/offset_pagination_spec.rb create mode 100644 spec/lib/gitlab/prometheus/internal_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/issue_comment_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/presenters/issue_comment_spec.rb create mode 100644 spec/lib/gitlab/sourcegraph_spec.rb create mode 100644 spec/migrations/add_default_and_free_plans_spec.rb create mode 100644 spec/migrations/fill_productivity_analytics_start_date_spec.rb create mode 100644 spec/migrations/move_limits_from_plans_spec.rb create mode 100644 spec/migrations/remove_empty_github_service_templates_spec.rb create mode 100644 spec/models/clusters/applications/crossplane_spec.rb create mode 100644 spec/models/clusters/applications/elastic_stack_spec.rb create mode 100644 spec/models/deployment_merge_request_spec.rb create mode 100644 spec/models/group_group_link_spec.rb create mode 100644 spec/models/personal_snippet_spec.rb create mode 100644 spec/models/zoom_meeting_spec.rb create mode 100644 spec/presenters/instance_clusterable_presenter_spec.rb create mode 100644 spec/presenters/release_presenter_spec.rb create mode 100644 spec/requests/api/graphql/current_user/todos_query_spec.rb create mode 100644 spec/requests/api/graphql/current_user_query_spec.rb create mode 100644 spec/requests/api/graphql/mutations/merge_requests/set_assignees_spec.rb create mode 100644 spec/requests/api/graphql/mutations/merge_requests/set_labels_spec.rb create mode 100644 spec/requests/api/graphql/mutations/merge_requests/set_locked_spec.rb create mode 100644 spec/requests/api/graphql/mutations/merge_requests/set_milestone_spec.rb create mode 100644 spec/requests/api/graphql/mutations/merge_requests/set_subscription_spec.rb create mode 100644 spec/requests/api/graphql/mutations/todos/mark_done_spec.rb create mode 100644 spec/requests/api/group_export_spec.rb create mode 100644 spec/requests/groups/registry/repositories_controller_spec.rb create mode 100644 spec/requests/health_controller_spec.rb create mode 100644 spec/rubocop/cop/rspec/any_instance_of_spec.rb create mode 100644 spec/serializers/issuable_sidebar_extras_entity_spec.rb create mode 100644 spec/services/ci/create_pipeline_service/cache_spec.rb create mode 100644 spec/services/ci/find_exposed_artifacts_service_spec.rb create mode 100644 spec/services/clusters/aws/fetch_credentials_service_spec.rb create mode 100644 spec/services/clusters/aws/finalize_creation_service_spec.rb create mode 100644 spec/services/clusters/aws/provision_service_spec.rb create mode 100644 spec/services/clusters/aws/proxy_service_spec.rb create mode 100644 spec/services/clusters/aws/verify_provision_status_service_spec.rb create mode 100644 spec/services/clusters/destroy_service_spec.rb create mode 100644 spec/services/deployments/link_merge_requests_service_spec.rb create mode 100644 spec/services/error_tracking/issue_details_service_spec.rb create mode 100644 spec/services/error_tracking/issue_latest_event_service_spec.rb create mode 100644 spec/services/groups/group_links/create_service_spec.rb create mode 100644 spec/services/groups/group_links/destroy_service_spec.rb create mode 100644 spec/services/groups/import_export/export_service_spec.rb create mode 100644 spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb create mode 100644 spec/services/projects/hashed_storage/base_attachment_service_spec.rb create mode 100644 spec/services/system_notes/merge_requests_service_spec.rb create mode 100644 spec/services/users/signup_service_spec.rb delete mode 100644 spec/services/zoom_notes_service_spec.rb create mode 100644 spec/support/helpers/access_matchers_helpers.rb create mode 100644 spec/support/helpers/grafana_api_helpers.rb create mode 100644 spec/support/matchers/access_matchers_for_request.rb create mode 100644 spec/support/matchers/access_matchers_generic.rb create mode 100644 spec/support/matchers/db_schema_matchers.rb create mode 100644 spec/support/shared_examples/ci/auto_merge_merge_requests_examples.rb create mode 100644 spec/support/shared_examples/graphql/connection_paged_nodes.rb create mode 100644 spec/support/shared_examples/graphql/sort_enum_shared_examples.rb create mode 100644 spec/support/shared_examples/lib/gitlab/ci/config/entry/key_validations_shared_examples.rb create mode 100644 spec/support/shared_examples/lib/gitlab/config/inheritable_shared_examples.rb create mode 100644 spec/support/shared_examples/merge_requests_rendering_a_single_diff_version.rb rename spec/support/shared_examples/models/{concern => concerns}/issuable_shared_examples.rb (100%) create mode 100644 spec/support/shared_examples/models/concerns/redactable_shared_examples.rb create mode 100644 spec/support/shared_examples/services/error_tracking_service_shared_examples.rb create mode 100644 spec/views/admin/application_settings/integrations.html.haml_spec.rb create mode 100644 spec/views/devise/sessions/new.html.haml_spec.rb create mode 100644 spec/views/profiles/preferences/show.html.haml_spec.rb create mode 100644 spec/views/projects/clusters/clusters/gcp/_form.html.haml_spec.rb create mode 100644 spec/views/projects/show.html.haml_spec.rb create mode 100644 spec/workers/group_export_worker_spec.rb create mode 100644 vendor/aws/cloudformation/eks_cluster.yaml create mode 100644 vendor/crossplane/values.yaml create mode 100644 vendor/elastic_stack/values.yaml mode change 100755 => 100644 vendor/gitignore/C++.gitignore mode change 100755 => 100644 vendor/gitignore/Java.gitignore create mode 100644 vendor/ingress/modsecurity.conf create mode 100644 vendor/project_templates/serverless_framework.tar.gz diff --git a/.gitignore b/.gitignore index 65befc2096..b8cbfe9966 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ eslint-report.html /public/uploads.* /public/uploads/ /shared/artifacts/ +/spec/examples.txt /rails_best_practices_output.html /tags /vendor/bundle/* @@ -82,3 +83,4 @@ jsdoc/ **/tmp/rubocop_cache/** .overcommit.yml .projections.json +/qa/.rakeTasks diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 630c82bcc5..36108d04e9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.33" stages: + - sync - prepare - quick-test - test @@ -8,7 +9,6 @@ stages: - review - qa - post-test - - notification - pages variables: @@ -33,7 +33,6 @@ include: - local: .gitlab/ci/frontend.gitlab-ci.yml - local: .gitlab/ci/global.gitlab-ci.yml - local: .gitlab/ci/memory.gitlab-ci.yml - - local: .gitlab/ci/notifications.gitlab-ci.yml - local: .gitlab/ci/pages.gitlab-ci.yml - local: .gitlab/ci/qa.gitlab-ci.yml - local: .gitlab/ci/reports.gitlab-ci.yml @@ -42,3 +41,4 @@ include: - local: .gitlab/ci/setup.gitlab-ci.yml - local: .gitlab/ci/test-metadata.gitlab-ci.yml - local: .gitlab/ci/yaml.gitlab-ci.yml + - local: .gitlab/ci/releases.gitlab-ci.yml diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index a02740373d..c828332653 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -3,11 +3,12 @@ *.rake @gitlab-org/maintainers/rails-backend # Technical writing team are the default reviewers for everything in `doc/` -/doc/ @axil @marcia @eread @mikelewis +/doc/ @gl-docsteam # Frontend maintainers should see everything in `app/assets/` -app/assets/ @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter @wortschi @ntepluhina -*.scss @annabeldunstone @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter @wortschi @ntepluhina +app/assets/ @gitlab-org/maintainers/frontend +*.scss @annabeldunstone @gitlab-org/maintainers/frontend +/scripts/frontend/ @gitlab-org/maintainers/frontend # Database maintainers should review changes in `db/` db/ @gitlab-org/maintainers/database @@ -32,4 +33,5 @@ lib/gitlab/github_import/ @gitlab-org/maintainers/database /.gitlab/ci/ @gl-quality/eng-prod Dangerfile @gl-quality/eng-prod /danger/ @gl-quality/eng-prod +/lib/gitlab/danger/ @gl-quality/eng-prod /scripts/ @gl-quality/eng-prod diff --git a/.gitlab/ci/cng.gitlab-ci.yml b/.gitlab/ci/cng.gitlab-ci.yml index 35859a1ab3..bd11042eb1 100644 --- a/.gitlab/ci/cng.gitlab-ci.yml +++ b/.gitlab/ci/cng.gitlab-ci.yml @@ -1,4 +1,5 @@ cloud-native-image: + extends: .only:variables-canonical-dot-com image: ruby:2.6-alpine dependencies: [] stage: post-test @@ -12,5 +13,3 @@ cloud-native-image: only: refs: - tags - variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 14eeebb9db..07375fca61 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -2,12 +2,11 @@ extends: - .default-tags - .default-retry - - .only-docs-changes + - .only:variables-canonical-dot-com + - .only:changes-docs only: refs: - merge_requests - variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" image: ruby:2.6-alpine stage: review dependencies: [] @@ -50,7 +49,7 @@ docs lint: - .default-tags - .default-retry - .default-only - - .only-docs-changes + - .only:changes-docs image: "registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-docs-lint" stage: test dependencies: [] @@ -68,7 +67,7 @@ docs lint: # Check the internal anchor links - bundle exec nanoc check internal_anchors -graphql-docs-verify: +graphql-reference-verify: extends: - .only-ee - .default-tags @@ -76,10 +75,10 @@ graphql-docs-verify: - .default-cache - .default-only - .default-before_script - - .only-graphql-changes - variables: - SETUP_DB: "false" + - .only:changes-code-backstage-qa + - .use-pg9 stage: test needs: ["setup-test-env"] script: - bundle exec rake gitlab:graphql:check_docs + - bundle exec rake gitlab:graphql:check_schema diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 2f457bc0ee..0b72461a9f 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -12,7 +12,7 @@ - .default-only - .default-before_script - .assets-compile-cache - - .only-code-qa-changes + - .only:changes-code-backstage-qa image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.3-git-2.22-chrome-73.0-node-12.x-yarn-1.16-graphicsmagick-1.3.33-docker-18.06.1 stage: test dependencies: ["setup-test-env"] @@ -73,7 +73,7 @@ gitlab:assets:compile pull-cache: - .default-only - .default-before_script - .assets-compile-cache - - .only-code-qa-changes + - .only:changes-code-backstage-qa - .use-pg9 stage: prepare script: @@ -128,7 +128,7 @@ compile-assets pull-cache foss: - .default-cache - .default-only - .default-before_script - - .only-code-changes + - .only:changes-code-backstage - .use-pg9 stage: test needs: ["setup-test-env", "compile-assets pull-cache"] @@ -205,7 +205,7 @@ jest-foss: - .default-retry - .default-cache - .default-only - - .only-code-changes + - .only:changes-code-backstage stage: test dependencies: [] cache: @@ -238,7 +238,7 @@ webpack-dev-server: - .default-retry - .default-cache - .default-only - - .only-code-changes + - .only:changes-code-backstage stage: test needs: ["setup-test-env", "compile-assets pull-cache"] dependencies: ["setup-test-env", "compile-assets pull-cache"] diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index fc9b00b5d3..d746d8fe03 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -40,87 +40,160 @@ - merge_requests - tags -.only-code-changes: - only: - changes: - - ".gitlab/ci/**/*" - - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" - - ".csscomb.json" - - "Dangerfile" - - "Dockerfile.assets" - - "*_VERSION" - - "Gemfile{,.lock}" - - "Rakefile" - - "{babel.config,jest.config}.js" - - "config.ru" - - "{package.json,yarn.lock}" - - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,locale,public,rubocop,scripts,spec,symbol,vendor}/**/*" - - "doc/README.md" # Some RSpec test rely on this file - -.only-qa-changes: - only: - changes: - - ".dockerignore" - - "qa/**/*" - -.only-docs-changes: - only: - changes: - - ".gitlab/route-map.yml" - - "doc/**/*" - - ".markdownlint.json" - -.only-graphql-changes: - only: - changes: - - "{,ee/}app/graphql/**/*" - - "{,ee/}lib/gitlab/graphql/**/*" - -.only-code-qa-changes: - only: - changes: - - ".gitlab/ci/**/*" - - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" - - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" - - ".csscomb.json" - - "Dangerfile" - - "Dockerfile.assets" - - "*_VERSION" - - "Gemfile{,.lock}" - - "Rakefile" - - "{babel.config,jest.config}.js" - - "config.ru" - - "{package.json,yarn.lock}" - - "{app,bin,config,danger,db,ee,fixtures,haml_lint,lib,locale,public,rubocop,scripts,spec,symbol,vendor}/**/*" - - "doc/README.md" # Some RSpec test rely on this file - - ".dockerignore" - - "qa/**/*" - -.only-review: +.only:variables-canonical-dot-com: only: variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" - kubernetes: active - except: - refs: - - master - - /^\d+-\d+-auto-deploy-\d+$/ - - /^[\d-]+-stable(-ee)?$/ + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ # Matches the gitlab-org group or its subgroups -.only-review-schedules: +.only:variables_refs-canonical-dot-com-schedules: + extends: .only:variables-canonical-dot-com only: refs: - schedules - variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + +.except:refs-deploy: + except: + refs: + - /^\d+-\d+-auto-deploy-\d+$/ + +.except:refs-master-tags-stable-deploy: + except: + refs: + - master + - tags + - /^[\d-]+-stable(-ee)?$/ + - /^\d+-\d+-auto-deploy-\d+$/ + +.only:kubernetes: + only: kubernetes: active -.only-canonical-schedules: +.only-review: + extends: + - .only:variables-canonical-dot-com + - .only:kubernetes + - .except:refs-master-tags-stable-deploy + +.only-review-schedules: + extends: + - .only:variables_refs-canonical-dot-com-schedules + - .only:kubernetes + - .except:refs-deploy + +.code-patterns: &code-patterns + - ".gitlab/ci/**/*" + - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" + - ".csscomb.json" + - "Dockerfile.assets" + - "*_VERSION" + - "Gemfile{,.lock}" + - "Rakefile" + - "{babel.config,jest.config}.js" + - "config.ru" + - "{package.json,yarn.lock}" + - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" + - "doc/api/graphql/**/*" + +.backstage-patterns: &backstage-patterns + - "Dangerfile" + - "danger/**/*" + - "{,ee/}fixtures/**/*" + - "{,ee/}rubocop/**/*" + - "{,ee/}spec/**/*" + - "doc/README.md" # Some RSpec test rely on this file + +.qa-patterns: &qa-patterns + - ".dockerignore" + - "qa/**/*" + +.docs-patterns: &docs-patterns + - ".gitlab/route-map.yml" + - "doc/**/*" + - ".markdownlint.json" + +.only:changes-code: only: - refs: - - schedules@gitlab-org/gitlab - - schedules@gitlab-org/gitlab-foss + changes: *code-patterns + +.only:changes-qa: + only: + changes: *qa-patterns + +.only:changes-docs: + only: + changes: *docs-patterns + +.only:changes-code-backstage: + only: + changes: + - ".gitlab/ci/**/*" + - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" + - ".csscomb.json" + - "Dockerfile.assets" + - "*_VERSION" + - "Gemfile{,.lock}" + - "Rakefile" + - "{babel.config,jest.config}.js" + - "config.ru" + - "{package.json,yarn.lock}" + - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" + - "doc/api/graphql/**/*" + # Backstage changes + - "Dangerfile" + - "danger/**/*" + - "{,ee/}fixtures/**/*" + - "{,ee/}rubocop/**/*" + - "{,ee/}spec/**/*" + - "doc/README.md" # Some RSpec test rely on this file + +.only:changes-code-qa: + only: + changes: + - ".gitlab/ci/**/*" + - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" + - ".csscomb.json" + - "Dockerfile.assets" + - "*_VERSION" + - "Gemfile{,.lock}" + - "Rakefile" + - "{babel.config,jest.config}.js" + - "config.ru" + - "{package.json,yarn.lock}" + - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" + - "doc/api/graphql/**/*" + # QA changes + - ".dockerignore" + - "qa/**/*" + +.only:changes-code-backstage-qa: + only: + changes: + - ".gitlab/ci/**/*" + - ".{eslintignore,gitattributes,nvmrc,prettierrc,stylelintrc,yamllint}" + - ".{codeclimate,eslintrc,gitlab-ci,haml-lint,haml-lint_todo,rubocop,rubocop_todo,scss-lint}.yml" + - ".csscomb.json" + - "Dockerfile.assets" + - "*_VERSION" + - "Gemfile{,.lock}" + - "Rakefile" + - "{babel.config,jest.config}.js" + - "config.ru" + - "{package.json,yarn.lock}" + - "{,ee/}{app,bin,config,db,haml_lint,lib,locale,public,scripts,symbol,vendor}/**/*" + - "doc/api/graphql/**/*" + # Backstage changes + - "Dangerfile" + - "danger/**/*" + - "{,ee/}fixtures/**/*" + - "{,ee/}rubocop/**/*" + - "{,ee/}spec/**/*" + - "doc/README.md" # Some RSpec test rely on this file + # QA changes + - ".dockerignore" + - "qa/**/*" .use-pg9: services: diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index 93bf87b24b..ba14024df3 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -5,7 +5,7 @@ - .default-cache - .default-only - .default-before_script - - .only-code-changes + - .only:changes-code memory-static: extends: .only-code-memory-job-base diff --git a/.gitlab/ci/notifications.gitlab-ci.yml b/.gitlab/ci/notifications.gitlab-ci.yml deleted file mode 100644 index 8e00ba022d..0000000000 --- a/.gitlab/ci/notifications.gitlab-ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -.notify: - image: alpine - stage: notification - dependencies: [] - cache: {} - before_script: - - apk update && apk add git curl bash - -schedule:package-and-qa:notify-success: - extends: - - .only-canonical-schedules - - .notify - variables: - COMMIT_NOTES_URL: "https://$CI_SERVER_HOST/$CI_PROJECT_PATH/commit/$CI_COMMIT_SHA#notes-list" - script: - - 'scripts/notify-slack qa-master ":tada: Scheduled QA against master passed! :tada: See $CI_PIPELINE_URL. For downstream pipelines, see $COMMIT_NOTES_URL" ci_passing' - needs: ["schedule:package-and-qa"] - when: on_success - -schedule:package-and-qa:notify-failure: - extends: - - .only-canonical-schedules - - .notify - variables: - COMMIT_NOTES_URL: "https://$CI_SERVER_HOST/$CI_PROJECT_PATH/commit/$CI_COMMIT_SHA#notes-list" - script: - - 'scripts/notify-slack qa-master ":skull_and_crossbones: Scheduled QA against master failed! :skull_and_crossbones: See $CI_PIPELINE_URL. For downstream pipelines, see $COMMIT_NOTES_URL" ci_failing' - needs: ["schedule:package-and-qa"] - when: on_failure diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index a30772d566..6a2d3702bd 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -4,12 +4,11 @@ pages: - .default-retry - .default-cache - .default-only - - .only-code-qa-changes + - .only:variables-canonical-dot-com + - .only:changes-code-backstage-qa only: refs: - master - variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" stage: pages dependencies: ["coverage", "karma", "gitlab:assets:compile pull-cache"] script: diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index 1194948a76..3cb5a40a8b 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -3,7 +3,7 @@ - .default-tags - .default-retry - .default-only - - .only-code-qa-changes + - .only:changes-code-qa stage: test dependencies: [] cache: @@ -31,7 +31,6 @@ qa:selectors-foss: - .only-ee-as-if-foss .package-and-qa-base: - extends: .default-only image: ruby:2.6-alpine stage: qa dependencies: [] @@ -40,35 +39,31 @@ qa:selectors-foss: - source scripts/utils.sh - install_gitlab_gem - ./scripts/trigger-build omnibus - only: - variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =~ /^gitlab-org($|\/)/ # Matches the gitlab-org group or its subgroups package-and-qa-manual: extends: - .package-and-qa-base - - .only-code-changes - except: - refs: - - master - - /^\d+-\d+-auto-deploy-\d+$/ + - .default-only + - .only:variables-canonical-dot-com + - .except:refs-deploy + - .only:changes-code when: manual needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] package-and-qa: extends: - .package-and-qa-base - - .only-qa-changes - except: - refs: - - master - - /^\d+-\d+-auto-deploy-\d+$/ + - .default-only + - .only:variables-canonical-dot-com + - .except:refs-master-tags-stable-deploy + - .only:changes-qa needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] allow_failure: true schedule:package-and-qa: extends: - .package-and-qa-base - - .only-code-qa-changes - - .only-canonical-schedules + - .default-only + - .only:variables_refs-canonical-dot-com-schedules needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] + allow_failure: true diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index bf478b6876..4ac187e167 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -22,7 +22,7 @@ - .default-cache - .default-only - .default-before_script - - .only-code-changes + - .only:changes-code-backstage .only-code-qa-rails-job-base: extends: @@ -31,7 +31,7 @@ - .default-cache - .default-only - .default-before_script - - .only-code-qa-changes + - .only:changes-code-backstage-qa setup-test-env: extends: @@ -92,6 +92,14 @@ setup-test-env: - .use-pg10 - .only-master +rspec migration pg9: + extends: .rspec-base-pg9 + parallel: 4 + +rspec migration pg9-foss: + extends: .rspec-base-pg9-foss + parallel: 4 + rspec unit pg9: extends: .rspec-base-pg9 parallel: 20 @@ -140,9 +148,13 @@ rspec system pg10: - .only-ee - .use-pg10-ee +rspec-ee migration pg9: + extends: .rspec-ee-base-pg9 + parallel: 2 + rspec-ee unit pg9: extends: .rspec-ee-base-pg9 - parallel: 7 + parallel: 5 rspec-ee integration pg9: extends: .rspec-ee-base-pg9 @@ -152,11 +164,17 @@ rspec-ee system pg9: extends: .rspec-ee-base-pg9 parallel: 5 +rspec-ee migration pg10: + extends: + - .rspec-ee-base-pg10 + - .only-master + parallel: 2 + rspec-ee unit pg10: extends: - .rspec-ee-base-pg10 - .only-master - parallel: 7 + parallel: 5 rspec-ee integration pg10: extends: @@ -239,6 +257,7 @@ static-analysis: dependencies: ["setup-test-env", "compile-assets pull-cache"] variables: SETUP_DB: "false" + parallel: 2 script: - scripts/static-analysis cache: @@ -251,13 +270,8 @@ static-analysis: downtime_check: extends: - .rake-exec - - .only-code-changes - except: - refs: - - master - - tags - variables: - - $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ + - .only:changes-code-backstage + - .except:refs-master-tags-stable-deploy stage: test needs: ["setup-test-env"] dependencies: ["setup-test-env"] diff --git a/.gitlab/ci/releases.gitlab-ci.yml b/.gitlab/ci/releases.gitlab-ci.yml new file mode 100644 index 0000000000..1ddc4e90fc --- /dev/null +++ b/.gitlab/ci/releases.gitlab-ci.yml @@ -0,0 +1,22 @@ +--- + +# Syncs any changes pushed to a stable branch to the corresponding CE stable +# branch. We run this prior to any tests so that random failures don't prevent a +# sync. +sync-stable-branch: + # We don't need/want any global before/after commands, so we overwrite these + # settings. + image: alpine:edge + stage: sync + # This job should only run on EE stable branches on the canonical GitLab.com + # repository. + only: + variables: + - $CI_SERVER_HOST == "gitlab.com" + refs: + - /^[\d-]+-stable-ee$/@gitlab-org/gitlab + before_script: + - apk add --no-cache --update curl bash + after_script: [] + script: + - bash scripts/sync-stable-branch.sh diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index 16c3f0e4f8..fbb7826b6f 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -11,7 +11,7 @@ code_quality: extends: - .default-retry - .default-only - - .only-code-changes + - .only:changes-code-backstage stage: test image: docker:stable allow_failure: true @@ -50,7 +50,7 @@ sast: extends: - .default-retry - .default-only - - .only-code-changes + - .only:changes-code-backstage-qa stage: test image: docker:stable variables: @@ -132,7 +132,7 @@ dependency_scanning: extends: - .default-retry - .default-only - - .only-code-changes + - .only:changes-code-backstage-qa stage: test image: docker:stable variables: @@ -195,7 +195,7 @@ dast: extends: - .default-retry - .default-only - - .only-code-qa-changes + - .only:changes-code-qa - .only-review stage: qa needs: ["review-deploy"] diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index c78c6a8281..4ed9ac03d0 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -1,14 +1,8 @@ -.except-deploys: - except: - refs: - - /^\d+-\d+-auto-deploy-\d+$/ - .review-docker: extends: - .default-tags - .default-retry - .default-only - - .except-deploys image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine services: - docker:19.03.0-dind @@ -23,10 +17,9 @@ build-qa-image: extends: - .review-docker - - .only-code-qa-changes - only: - variables: - - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + - .only:variables-canonical-dot-com + - .except:refs-deploy + - .only:changes-code-qa stage: prepare script: - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' @@ -35,14 +28,11 @@ build-qa-image: - echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - time docker push ${QA_IMAGE} -schedule:review-cleanup: +.base-review-cleanup: extends: - .default-tags - .default-retry - .default-only - - .only-code-qa-changes - - .only-review-schedules - - .except-deploys stage: prepare image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base allow_failure: true @@ -55,11 +45,22 @@ schedule:review-cleanup: script: - ruby -rrubygems scripts/review_apps/automated_cleanup.rb +schedule:review-cleanup: + extends: + - .base-review-cleanup + - .only-review-schedules + +manual:review-cleanup: + extends: + - .base-review-cleanup + - .only:changes-code-qa + when: manual + .review-build-cng-base: extends: + - .default-tags + - .default-retry - .default-only - - .only-code-qa-changes - - .except-deploys image: ruby:2.6-alpine stage: review-prepare before_script: @@ -74,6 +75,7 @@ review-build-cng: extends: - .review-build-cng-base - .only-review + - .only:changes-code-qa needs: ["gitlab:assets:compile pull-cache"] schedule:review-build-cng: @@ -82,26 +84,30 @@ schedule:review-build-cng: - .only-review-schedules needs: ["gitlab:assets:compile pull-cache"] -.review-deploy-base: +.review-workflow-base: extends: - .default-tags - .default-retry - .default-only - - .only-code-qa-changes - - .except-deploys - stage: review image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base dependencies: [] - allow_failure: true variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v2.3.7" + # v2.4.4 + two improvements: + # - Allow to pass an EE license when installing the chart: https://gitlab.com/gitlab-org/charts/gitlab/merge_requests/1008 + # - Allow to customize the livenessProbe for `gitlab-shell`: https://gitlab.com/gitlab-org/charts/gitlab/merge_requests/1021 + GITLAB_HELM_CHART_REF: "6c655ed77e60f1f7f533afb97bef8c9cb7dc61eb" GITLAB_EDITION: "ce" environment: name: review/${CI_COMMIT_REF_NAME} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} on_stop: review-stop + +.review-deploy-base: + extends: .review-workflow-base + stage: review + allow_failure: true before_script: - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' - export GITLAB_SHELL_VERSION=$( Settings > Integrations. !18990 +- Fixed admin geo collapsed sidebar fly out not showing. !19012 +- Serialize short sha as nil if head commit is blank. !19014 +- Add max width on manifest file attachment input. !19028 +- Do not generate To-Dos additional when editing group mentions. !19037 +- Fix previewing quick actions for epics. !19042 +- Fix errors in GraphQL Todos API due to missing TargetTypeEnum values. !19052 +- Hashed Storage Migration: Handle failed attachment migrations with existing target path. !19061 +- Set shorter TTL for all unauthenticated requests. !19064 +- Fix Todo IDs in GraphQL API. !19068 +- Triggers the correct endpoint on licence approval. !19078 +- Fix search button height on 404 page. !19080 +- Fix Kubernetes help text link. !19121 +- Make `jobs/request` to be resillient. !19150 +- Disable pull mirror if repository is in read-only state. !19182 - Only enable protected paths for POST requests. !19184 +- Enforce default, global project and snippet visibilities. !19188 +- Make Bitbucket Cloud superseded pull requests as closed. !19193 +- Fix crash when docker fails deleting tags. !19208 +- Fix environment name in rollback dialog. !19209 +- Fixed a typo in the "Keyboard Shortcuts" pop-up. !19217 (Manuel Stein) +- Fix unable to expand or collapse files in merge request by clicking caret. !19222 (Brian T) +- Allow release block edit button to be visible. !19226 +- Fix double escaping in /tableflip quick action. !19271 (Brian T) +- Add missing bottom padding in CI/CD settings. !19284 (George Tsiolis) +- Prevents console warning on design upload. !19297 +- Resolve: Web IDE does not create POSIX Compliant Files. !19339 +- Use initial commit SHA instead of branch id to request IDE files and contents. !19348 (David Palubin) +- Resolve: Web IDE Throws Error When Viewing Diff for Renamed Files. !19348 +- Fix project service API 500 error. !19367 +- Fix cluster feature highlight popover image. !19372 +- Fix template selector filename bug. !19376 +- Fixes mobile styling issues on security modals. !19391 +- Only move repos for legacy project storage. !19410 +- Show correct total number of commit diff's changes. !19424 +- Increase the timeout for GitLab-managed cert-manager installation to 90 seconds (was 30 seconds). !19447 +- Fix uninitialized constant SystemDashboardService. !19453 +- Properly handle exceptions in StuckCiJobsWorker. !19465 +- Fix user popover not being displayed when the user has a status message. !19519 +- Update omniauth_openid_connect to v0.3.3. !19525 +- Fix project clone dropdown button width. !19551 (George Tsiolis) +- Do not escape HTML tags in Ansi2json as they are escaped in the frontend. !19610 +- [Geo] Fix: undefined Gitlab::BackgroundMigration::PruneOrphanedGeoEvents. !19638 +- Revert btn-xs styling in projects scss. !19640 +- Fix canary badge and favicon inconsistency. !19645 +- Use fingerprint when comparing security reports in MR widget. !19654 +- Update GCP credit URLs. !19683 +- Update squash_commit_sha only on successful merge. !19688 +- Fix import of snippets having `award_emoji` (Project Export/Import). !19690 +- Allow admins to administer personal snippets. !19693 (Oren Kanner) +- Re-add missing file sizes in 2-Up diff file viewer. !19710 +- Fix checking task item when previous tasks contain only spaces. !19724 - Fix Bitbucket Cloud importer pull request state. !19734 +- Fix merge train is not refreshed when the system aborts/drops a merge request. !19763 +- Resolve Hide Delete selected in designs when viewing an old version. !19889 +- Use new trial registration URL in billing. !19978 +- Helm v2.16.1. !19981 +- Ensure milestone titles are never empty. !19985 +- Remove unused image/screenshot. !20030 (Lee Tickett) +- Remove local qualifier from geo sync indicators. !20034 (Lee Tickett) +- Fixed the scale of embedded videos to fit the page. !20056 +- Fix broken monitor cluster health dashboard. !20120 +- Fix expanding collapsed threads when reference link clicked. !20148 +- Fix sub group export to export direct children. !20172 +- Remove update hook from date filter to prevent js from getting stuck. !20215 +- Prevent Dropzone.js initialisation error by checking target element existence. !20256 (Fabio Huser) +- Fix style reset in job log when empty ANSI sequence is encoutered. !20367 +- Add productivity analytics merge date filtering limit. !32052 +- Fix productivity analytics listing with multiple labels. !33182 +- Fix closed board list loading issue. +- Apply correctly the limit of 10 designs per upload. +- Only allow confirmed users to run pipelines. +- Fix scroll to bottom with new job log. +- Fixed protected branches flash styling. + +### Deprecated (2 changes) + +- Ignore deprecated column and remove references to it. !18911 +- Move some project routes under - scope. !19954 + +### Changed (56 changes, 6 of them are from the community) + +- Upgrade design/copy for issue weights locked feature. !17352 +- Reduce new MR page redundancy by moving the source/target branch selector to the top. !17559 +- Replace raven-js with @sentry/browser. !17715 +- Ask if the user is setting up GitLab for a company during signup. !17999 +- When a user views a file's blame or blob and switches to a branch where the current file does not exist, they will now be redirected to the root of the repository. !18169 (Jesse Hall @jessehall3) +- Propagate custom environment variables to SAST analyzers. !18193 +- Fix any approver project rule records. !18265 +- Minor UX improvements to Environments Dashboard page. !18280 +- Reduce the allocated IP for Cluster and Services. !18341 +- Update flash messages color sitewide. !18369 +- Add modsecurity template for ingress-controller. !18485 +- Hide projects without access to admin user when admin mode is disabled. !18530 (Diego Louzán) +- Update Runners Settings Text + Link to Docs. !18534 +- Store Zoom URLs in a table rather than in the issue description. !18620 +- Improve admin dashboard features. !18666 +- Drop `id` column from `ci_build_trace_sections` table. !18741 +- Truncate recommended branch name to a sane length. !18821 +- Add support for YAML anchors in CI scripts. !18849 +- Save dashboard changes by the user into the vuex store. !18862 +- Update expired trial status copy. !18962 +- Can directly add approvers to approval rule. !18965 +- Rename Vulnerabilities API to Vulnerability Findings API. !19029 +- Improve clarity of text for merge train position. !19031 +- Updated Auto-DevOps to kubectl v1.13.12 and helm v2.15.1. !19054 (Leo Antunes) +- Refactor maximum user counts in license. !19071 (briankabiro) +- Change return type of getDateInPast to Date. !19081 +- Show approval required status in license compliance. !19114 +- Handle new Container Scanning report format. !19123 +- Allow container scanning to run offline by specifying the Clair DB image to use. !19161 +- Add maven cli opts flag to maven security analyzer (part of dependency scanning). !19174 +- Added report_type attribute to Vulnerabilities. !19179 +- Migrate enabled flag on grafana_integrations table. !19234 +- Improve handling of gpg-agent processes. !19311 +- Update help text of "Tag name" field on Edit Release page. !19321 +- Add user filtering to abuse reports page. !19365 +- Move add license button to project buttons. !19370 +- Update to Mermaid v8.4.2 to support more graph types. !19444 +- Move release meta-data into footer on Releases page. !19451 +- Expose subscribed field in issue lists queried with GraphQL. !19458 (briankabiro) +- [Geo] Fix: rake gitlab:geo:check on the primary is cluttered. !19460 +- Hide trial banner for namespaces with expired trials. !19510 +- Hide repeated trial offers on self-hosted instances. !19511 +- Add loading icon to error tracking settings page. !19539 +- Upgrade to Gitaly v1.71.0. !19611 +- Make role required when editing profile. !19636 +- Made `name` optional parameter of Release entity. !19705 +- Vulnerabilities history chart - use sparklines. !19745 +- Add event tracking to container registry. !19772 +- Update SaaS trial header to include the tier Gold. !19970 +- Update start a trial option in top right drop down to include Gold. !19971 +- Improve merge request description placeholder. !20032 (Jacopo Beschi @jacopo-beschi) +- Add backtrace to production_json.log. !20122 +- Change the default concurrency factor of merge train to 20. !20201 +- Upgrade to Gitaly v1.72.0. +- Require explicit null parameters to remove pages domain certificate and allow to use Let's Encrypt certificates through API. +- Replace wording trace with log. + +### Performance (13 changes) + +- Record latencies for Sidekiq failures. !18909 +- Fix N+1 for group container repositories view. !18979 +- Do not render links in commit message on blame page. !19128 +- Puma only: database connection pool now always >= number of worker threads. !19286 +- Run check_mergeability only if merge status requires it. !19364 +- Execute limited request for diff commits instead of preloading. !19485 +- Improve performance of admin/abuse_reports page. !19630 +- Remove N+1 DB calls from branches API. !19661 +- Improve performance of linking LFS objects during import. !19709 +- Optimize MergeRequest#mergeable_discussions_state? method. !19988 +- Add index for unauthenticated requests to projects API default endpoint. !19989 +- Add index for authenticated requests to projects API default endpoint. !19993 +- Increase PumaWorkerKiller memory limit in development environment. !20039 + +### Added (83 changes, 8 of them are from the community) + +- Adds Application Settings and ui settings in the integration admin area for Pendo. !15086 +- Add endpoint for a group's vulnerable projects. !15317 +- Added new chart component to display an anomaly boundary. !16530 +- Add links to associated releases on the Milestones page. !16558 +- Merge Details Page and Edit Page for Page Domains. !16687 +- Share groups with groups. !17117 +- Add links to associated release(s) to the milestone detail page. !17278 +- New group path uniqueness check. !17394 +- Unify html email layout for member html emails. !17699 (Diego Louzán) +- The Security Dashboard displays DAST vulnerabilities for all the scanned sites, not just the first. !17779 +- Create table for elastic stack. !18015 +- Allow to define a default CI configuration path for new projects. !18073 (Mathieu Parent) +- Issues queried in GraphQL now sortable by due date. !18094 +- Add cleanup status to clusters. !18144 +- Added Tests tab to pipeline detail that contains a UI for browsing test reports produced by JUnit. !18255 +- Users can verify SAML configuration and view SamlResponse XML. !18362 +- Support Enable/Disable operations in Feature Flag API. !18368 +- Expose arbitrary job artifacts in Merge Request widget. !18385 +- Add project option for deleting source branch. !18408 (Zsolt Kovari) +- Adds ability to set management project for cluster via API. !18429 +- Close issues on Prometheus alert recovery. !18431 +- Add ApplicationSetting for snowplow_iglu_registry_url. !18449 +- Allow Grafana charts to be embedded in Gitlab Flavored Markdown. !18486 +- Mark todo done by GraphQL API. !18581 +- Create a users_security_dashboard_projects table to store the projects a user has added to their personal security dashboard. !18708 +- New API endpoint for creating anonymous merge request discussions from Visual Review Tools. !18710 +- Enable the color chip in AsciiDoc documents. !18723 +- Add prevent_ldap_sign_in option so LDAP can be used exclusively for sync. !18749 +- Show inherited group variables in project view. !18759 +- Add "release" filter to issue search page. !18761 +- Search list of Sentry errors by title in Gitlab. !18772 +- Add migrations and changes for soft-delete for projects. !18791 +- Support for Crossplane as a managed app. !18797 (Mahendra Bagul) +- Bump Auto-Deploy image to v0.3.0. !18809 +- Set X-GitLab-NotificationReason header if notification reason is explicit subscription. !18812 +- Add issues, MRs, participants, and labels tabs in group milestone page. !18818 +- Add ability to reorder projects on operations dashboard. !18855 +- Make `Job`, `Bridge` and `Default` inheritable. !18867 +- Show epic events on group activity page. !18869 +- Detail view of Sentry error in GitLab. !18878 +- Expose mergeable state of a merge request. !18888 (briankabiro) +- Add ability to select a Cluster management project. !18928 +- Add a Slack slash command to add a comment to an issue. !18946 +- Added installation commands for npm and yarn packages to package detail page. !18999 +- Show start and end dates in Epics list page. !19006 +- Populate new pipeline CI vars from params. !19023 +- Add warnings about pages access control settings. !19067 +- Graphql mutation for (un)subscribing to an epic. !19083 +- API for stack trace & detail view of Sentry error in GitLab. !19137 +- Add grafana integration active status checkbox. !19255 +- GraphQL: Add Merge Request milestone mutation. !19257 +- Add MergeRequestSetAssignees GraphQL mutation. !19272 +- Add edit button to metrics dashboard. !19279 +- Add "release" filter to merge request search page. !19315 +- Add dead jobs to Sidekiq metrics API. !19350 (Marco Peterseil) +- Add pipeline information to dependency list header. !19352 +- Build CI cache key from commit SHAs that changed given files. !19392 +- Adding support for searching tags using '^' and '$'. !19435 (Cauhx Milloy) +- Sentry error stacktrace. !19492 +- Add an `error_code` attribute to the API response when a cherry-pick or revert fails. !19518 +- Add documentation for sign-in application setting. !19561 (Horatiu Eugen Vlad) +- Create AWS EKS cluster. !19578 +- Add modsecurity logging sidecar to ingress controller. !19600 +- Add start a trial option in the top-right user dropdown. !19632 +- Manage and display labels from epic in the GraphQL API. !19642 +- Allow order_by updated_at in Deployments API. !19658 +- Add can_edit and project_blob_path to metrics_dashboard endpoint. !19663 +- Add usage ping data for project services. !19687 +- Graphql query for issues can now be sorted by relative_position. !19713 +- Add API endpoint to trigger Group Structure Export. !19779 +- Show Tree UI containing child Epics and Issues within an Epic. !19812 +- Enable environments dashboard by default. !19838 +- Update the DB schema to allow linking between Vulnerabilities and Issues. !19852 +- Add Group Audit Events API. !19868 +- Adds a copy button next to package metadata on the details page. !19881 +- GraphQL: Create MR mutations needed for the sidebar. !19913 +- Add id_before, id_after filter param to projects API. !19949 +- Add modsecurity feature flag to usage ping. !20194 +- Specify management project for a Kubernetes cluster. !20216 +- Upgrade pages to 1.12.0. !20217 +- Support template_project_id parameter in project creation API. !20258 +- Add heatmap chart support. !32424 +- Add template for Serverless Framework/JS. !33805 + +### Other (59 changes, 26 of them are from the community) + +- Add EKS cluster count to usage data. !17059 +- Track the starting and stopping of the current signup flow and the experimental signup flow. !17521 +- Attribute Sidekiq workers according to their workloads. !18066 +- Add ApplicationSetting entries for EKS integration. !18307 +- Geo: Add resigns-related fields to Geo Node Status table. !18379 +- Allow adding requests to performance bar manually. !18464 +- Removes `export_designs` feature flag. !18507 (nate geslin) +- Update AWS SDK to 2.11.374. !18601 +- Remove required dependecy of Postgresql for Gitaly. !18659 +- Add deployment_merge_requests table. !18755 +- Bump Gitaly to 1.70.0 and remove cache invalidation feature flag. !18766 +- Update gRPC to v1.24.0. !18837 +- Update GitLab Runner Helm Chart to 0.10.0. !18879 +- Adds a Sidekiq queue duration metric. !19005 +- Create explicit Default and Free plans. !19033 +- Improve instance mirroring help text. !19047 +- Add Codesandbox metrics to usage ping. !19075 +- Add internal_socket_dir to gitaly config in setup helper. !19170 +- Use Rails 5.2 Redis caching store. !19202 +- Update GitLab Runner Helm Chart to 0.10.1. !19232 +- Rename snowplow_site_id to snowplow_app_id in application_settings table. !19252 +- Removed IIFEs from network.js file. !19254 (nuwe1) +- Remove IIFEs from project_select.js. !19288 (minghuan lei) +- Remove IIFEs from merge_request.js. !19294 (minghuan lei) +- Make snippet list easier to scan. !19490 +- Removed IIFEs from image_file.js. !19548 (nuwe1) +- Fix api docs for deleting project cluster. !19558 +- Change blob edit view button styling. !19566 +- Include exception and backtrace in API logs. !19671 +- Add index on marked_for_deletion_at in projects table. !19788 +- Visual design for edit buttons in blob view. !19932 +- Refactor disabled sidebar notifications to Vue. !20007 (minghuan lei) +- Remove IIFEs from branch_graph.js. !20008 (minghuan lei) +- Remove IIFEs from new_branch_form.js. !20009 (minghuan lei) +- Remove duplication from slugifyWithUnderscore function. !20016 (Arun Kumar Mohan) +- Update registry.gitlab.com/gitlab-org/security-products/codequality to 12-5-stable. !20046 (Takuya Noguchi) +- Add mb-2 class to global alerts. !20081 (2knal) +- Remove var from syntax_highlight_spec.js. !20086 (Lee Tickett) +- Remove var from merge_request_tabs_spec.js. !20087 (Lee Tickett) +- Remove var from bootstrap_jquery_spec.js. !20089 (Lee Tickett) +- Remove var from project_select.js. !20091 (Lee Tickett) +- Remove var from new_commit_form.js. !20095 (Lee Tickett) +- Remove var from issue.js. !20098 (Lee Tickett) +- Remove var from new_branch_form.js. !20099 (Lee Tickett) +- Remove var from tree.js. !20103 (Lee Tickett) +- Remove var from line_highlighter.js. !20108 (Lee Tickett) +- Remove var from preview_markdown.js. !20115 (Lee Tickett) +- remove all references of BoardService in boards_selector.vue. !20147 (nuwe1) +- Remove all references to BoardsService in index.vue. !20152 (nuwe1) +- Remove var from labels_select.js. !20153 (Lee Tickett) +- Remove all reference to BoardService in board_form.vue. !20158 (nuwe1) +- Remove calendar icon from personal access tokens. !20183 +- Move margin-top from flash container to flash. !20211 +- Bump Auto DevOps deploy image to v0.7.0. !20250 +- Make 'Sidekiq::Testing.fake!' mode as default. !31662 (@blackst0ne) +- Replace task-done icon with list-task icon to better align with other toolbar list icons. +- Dependency Scanning template that doesn't rely on Docker-in-Docker. +- Adding dropdown arrow icon and updated text alignment. +- Change selects from default browser style to custom style. ## 12.4.2 diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 737e2ba509..22d6771a47 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.67.1 +1.72.1 diff --git a/GITLAB_ELASTICSEARCH_INDEXER_VERSION b/GITLAB_ELASTICSEARCH_INDEXER_VERSION index 88c5fb891d..bc80560fad 100644 --- a/GITLAB_ELASTICSEARCH_INDEXER_VERSION +++ b/GITLAB_ELASTICSEARCH_INDEXER_VERSION @@ -1 +1 @@ -1.4.0 +1.5.0 diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION index 1cac385c6c..0eed1a29ef 100644 --- a/GITLAB_PAGES_VERSION +++ b/GITLAB_PAGES_VERSION @@ -1 +1 @@ -1.11.0 +1.12.0 diff --git a/Gemfile b/Gemfile index 920f778c05..d27bc27608 100644 --- a/Gemfile +++ b/Gemfile @@ -8,12 +8,12 @@ gem 'bootsnap', '~> 1.4' gem 'nakayoshi_fork', '~> 0.0.4' # Responders respond_to and respond_with -gem 'responders', '~> 2.0' +gem 'responders', '~> 3.0' gem 'sprockets', '~> 3.7.0' # Default values for AR models -gem 'default_value_for', '~> 3.2.0' +gem 'default_value_for', '~> 3.3.0' # Supported DBs gem 'pg', '~> 1.1' @@ -42,7 +42,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.1' +gem 'omniauth_openid_connect', '~> 0.3.3' gem "omniauth-ultraauth", '~> 0.0.2' gem 'omniauth-salesforce', '~> 1.0.5' gem 'rack-oauth2', '~> 1.9.3' @@ -64,7 +64,7 @@ gem 'u2f', '~> 0.2.1' # GitLab Pages gem 'validates_hostname', '~> 1.0.6' -gem 'rubyzip', '~> 1.2.2', require: 'zip' +gem 'rubyzip', '~> 1.3.0', require: 'zip' # GitLab Pages letsencrypt support gem 'acme-client', '~> 2.0.2' @@ -72,7 +72,7 @@ gem 'acme-client', '~> 2.0.2' gem 'browser', '~> 2.5' # GPG -gem 'gpgme', '~> 2.0.18' +gem 'gpgme', '~> 2.0.19' # LDAP Auth # GitLab fork with several improvements to original library. For full list of changes @@ -136,7 +136,7 @@ gem 'faraday_middleware-aws-signers-v4' # Markdown and HTML processing gem 'html-pipeline', '~> 2.8' -gem 'deckar01-task_list', '2.2.0' +gem 'deckar01-task_list', '2.2.1' gem 'gitlab-markup', '~> 1.7.0' gem 'github-markup', '~> 1.7.0', require: 'github/markup' gem 'commonmarker', '~> 0.17' @@ -151,7 +151,7 @@ gem 'asciidoctor-plantuml', '0.0.9' gem 'rouge', '~> 3.11.0' gem 'truncato', '~> 0.7.11' gem 'bootstrap_form', '~> 4.2.0' -gem 'nokogiri', '~> 1.10.4' +gem 'nokogiri', '~> 1.10.5' gem 'escape_utils', '~> 1.1' # Calendar rendering @@ -159,6 +159,7 @@ gem 'icalendar' # Diffs gem 'diffy', '~> 3.1.0' +gem 'diff_match_patch', '~> 0.1.0' # Application server gem 'rack', '~> 2.0.7' @@ -175,7 +176,7 @@ group :puma do end # State machine -gem 'state_machines-activerecord', '~> 0.5.1' +gem 'state_machines-activerecord', '~> 0.6.0' # Issue tags gem 'acts-as-taggable-on', '~> 6.0' @@ -259,9 +260,6 @@ gem 'loofah', '~> 2.2' # Working with license gem 'licensee', '~> 8.9' -# Protect against bruteforcing -gem 'rack-attack', '~> 4.4.1' - # Ace editor gem 'ace-rails-ap', '~> 4.1.0' @@ -293,10 +291,13 @@ gem 'base32', '~> 0.3.0' gem "gitlab-license", "~> 1.0" +# Protect against bruteforcing +gem 'rack-attack', '~> 6.2.0' + # Sentry integration gem 'sentry-raven', '~> 2.9' -gem 'premailer-rails', '~> 1.9.7' +gem 'premailer-rails', '~> 1.10.3' # LabKit: Tracing and Correlation gem 'gitlab-labkit', '~> 0.5' @@ -331,7 +332,6 @@ group :metrics do end group :development do - gem 'foreman', '~> 0.84.0' gem 'brakeman', '~> 4.2', require: false gem 'danger', '~> 6.0', require: false @@ -388,7 +388,6 @@ group :development, :test do gem 'benchmark-ips', '~> 2.3.0', require: false - gem 'license_finder', '~> 5.4', require: false gem 'knapsack', '~> 1.17' gem 'stackprof', '~> 0.2.10', require: false @@ -398,6 +397,11 @@ group :development, :test do gem 'timecop', '~> 0.8.0' end +# Gems required in omnibus-gitlab pipeline +group :development, :test, :omnibus do + gem 'license_finder', '~> 5.4', require: false +end + group :test do gem 'shoulda-matchers', '~> 4.0.1', require: false gem 'email_spec', '~> 2.2.0' @@ -407,6 +411,7 @@ group :test do gem 'concurrent-ruby', '~> 1.1' gem 'test-prof', '~> 0.10.0' gem 'rspec_junit_formatter' + gem 'guard-rspec' end gem 'octokit', '~> 4.9' @@ -446,18 +451,18 @@ group :ed25519 do end # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 1.65.0' +gem 'gitaly', '~> 1.70.0' -gem 'grpc', '~> 1.19.0' +gem 'grpc', '~> 1.24.0' -gem 'google-protobuf', '~> 3.7.1' +gem 'google-protobuf', '~> 3.8.0' gem 'toml-rb', '~> 1.0.0', require: false # Feature toggles -gem 'flipper', '~> 0.13.0' -gem 'flipper-active_record', '~> 0.13.0' -gem 'flipper-active_support_cache_store', '~> 0.13.0' +gem 'flipper', '~> 0.17.1' +gem 'flipper-active_record', '~> 0.17.1' +gem 'flipper-active_support_cache_store', '~> 0.17.1' gem 'unleash', '~> 0.1.5' # Structured logging @@ -469,3 +474,5 @@ gem 'gitlab-net-dns', '~> 0.9.1' # Countries list gem 'countries', '~> 3.0' + +gem 'retriable', '~> 3.1.2' diff --git a/Gemfile.lock b/Gemfile.lock index 18160932c5..15465cd6b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,8 +50,8 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - acts-as-taggable-on (6.0.0) - activerecord (~> 5.0) + acts-as-taggable-on (6.5.0) + activerecord (>= 5.0, < 6.1) adamantium (0.2.0) ice_nine (~> 0.11.0) memoizable (~> 0.4.0) @@ -80,14 +80,16 @@ GEM encryptor (~> 3.0.0) attr_required (1.0.1) awesome_print (1.8.0) - aws-sdk (2.9.32) - aws-sdk-resources (= 2.9.32) - aws-sdk-core (2.9.32) + aws-eventstream (1.0.3) + aws-sdk (2.11.374) + aws-sdk-resources (= 2.11.374) + aws-sdk-core (2.11.374) aws-sigv4 (~> 1.0) jmespath (~> 1.0) - aws-sdk-resources (2.9.32) - aws-sdk-core (= 2.9.32) - aws-sigv4 (1.0.0) + aws-sdk-resources (2.11.374) + aws-sdk-core (= 2.11.374) + aws-sigv4 (1.1.0) + aws-eventstream (~> 1.0, >= 1.0.2) axiom-types (0.1.1) descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) @@ -171,9 +173,9 @@ GEM unicode_utils (~> 1.4) crack (0.4.3) safe_yaml (~> 1.0.0) - crass (1.0.4) + crass (1.0.5) creole (0.5.0) - css_parser (1.5.0) + css_parser (1.7.0) addressable daemons (1.2.6) danger (6.0.9) @@ -192,12 +194,12 @@ GEM database_cleaner (1.7.0) debug_inspector (0.0.3) debugger-ruby_core_source (1.3.8) - deckar01-task_list (2.2.0) + deckar01-task_list (2.2.1) html-pipeline declarative (0.0.10) declarative-option (0.1.0) - default_value_for (3.2.0) - activerecord (>= 3.2.0, < 6.0) + default_value_for (3.3.0) + activerecord (>= 3.2.0, < 6.1) derailed_benchmarks (1.3.5) benchmark-ips (~> 2) get_process_mem (~> 0) @@ -222,6 +224,7 @@ GEM railties rotp (~> 2.0) diff-lcs (1.3) + diff_match_patch (0.1.0) diffy (3.1.0) discordrb-webhooks-blackst0ne (3.3.0) rest-client (~> 2.0) @@ -285,13 +288,13 @@ GEM fast_gettext (1.6.0) ffaker (2.10.0) ffi (1.11.1) - flipper (0.13.0) - flipper-active_record (0.13.0) - activerecord (>= 3.2, < 6) - flipper (~> 0.13.0) - flipper-active_support_cache_store (0.13.0) - activesupport (>= 3.2, < 6) - flipper (~> 0.13.0) + flipper (0.17.1) + flipper-active_record (0.17.1) + activerecord (>= 4.2, < 7) + flipper (~> 0.17.1) + flipper-active_support_cache_store (0.17.1) + activesupport (>= 4.2, < 7) + flipper (~> 0.17.1) flowdock (0.7.1) httparty (~> 0.7) multi_json @@ -332,10 +335,8 @@ GEM fog-xml (0.1.3) fog-core nokogiri (>= 1.5.11, < 2.0.0) - font-awesome-rails (4.7.0.4) - railties (>= 3.2, < 6.0) - foreman (0.84.0) - thor (~> 0.19.1) + font-awesome-rails (4.7.0.5) + railties (>= 3.2, < 6.1) formatador (0.2.5) fugit (1.2.1) et-orbi (~> 1.1, >= 1.1.8) @@ -358,12 +359,12 @@ GEM po_to_json (>= 1.0.0) rails (>= 3.2.0) git (1.5.0) - gitaly (1.65.0) + gitaly (1.70.0) grpc (~> 1.0) github-markup (1.7.0) - gitlab-labkit (0.5.2) - actionpack (~> 5) - activesupport (~> 5) + gitlab-labkit (0.7.0) + actionpack (>= 5.0.0, < 6.1.0) + activesupport (>= 5.0.0, < 6.1.0) grpc (~> 1.19) jaeger-client (~> 0.10) opentracing (~> 0.4) @@ -400,7 +401,7 @@ GEM mime-types (~> 3.0) representable (~> 3.0) retriable (>= 2.0, < 4.0) - google-protobuf (3.7.1) + google-protobuf (3.8.0) googleapis-common-protos-types (1.0.4) google-protobuf (~> 3.0) googleauth (0.6.6) @@ -410,7 +411,7 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (~> 0.7) - gpgme (2.0.18) + gpgme (2.0.19) mini_portile2 (~> 2.3) grape (1.1.0) activesupport @@ -440,11 +441,25 @@ GEM graphql (~> 1.6) html-pipeline (~> 2.8) sass (~> 3.4) - grpc (1.19.0) - google-protobuf (~> 3.1) - googleapis-common-protos-types (~> 1.0.0) + grpc (1.24.0) + google-protobuf (~> 3.8) + googleapis-common-protos-types (~> 1.0) gssapi (1.2.0) ffi (>= 1.0.1) + guard (2.15.1) + formatador (>= 0.2.4) + listen (>= 2.7, < 4.0) + lumberjack (>= 1.0.12, < 2.0) + nenv (~> 0.1) + notiffany (~> 0.0) + pry (>= 0.9.12) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-compat (1.2.1) + guard-rspec (4.7.3) + guard (~> 2.1) + guard-compat (~> 1.1) + rspec (>= 2.99.0, < 4.0) haml (5.0.4) temple (>= 0.8.0) tilt @@ -508,7 +523,7 @@ GEM atlassian-jwt multipart-post oauth (~> 0.5, >= 0.5.0) - jmespath (1.3.1) + jmespath (1.4.0) js_regex (3.1.1) character_set (~> 1.1) regexp_parser (~> 1.1) @@ -560,15 +575,20 @@ GEM xml-simple licensee (8.9.2) rugged (~> 0.24) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) locale (2.1.2) lograge (0.10.0) actionpack (>= 4) activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.3.0) + loofah (2.3.1) crass (~> 1.0.2) nokogiri (>= 1.5.9) + lumberjack (1.0.13) mail (2.7.1) mini_mime (>= 0.1.1) mail_room (0.9.1) @@ -584,7 +604,7 @@ GEM mime-types-data (3.2019.0331) mimemagic (0.3.2) mini_magick (4.9.5) - mini_mime (1.0.1) + mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.11.3) msgpack (1.3.1) @@ -597,16 +617,20 @@ GEM mustermann (~> 1.0.0) nakayoshi_fork (0.0.4) nap (1.1.0) + nenv (0.3.0) net-ldap (0.16.0) net-ntp (2.1.3) net-ssh (5.2.0) netrc (0.11.0) nio4r (2.3.1) no_proxy_fix (0.1.2) - nokogiri (1.10.4) + nokogiri (1.10.5) mini_portile2 (~> 2.4.0) nokogumbo (1.5.0) nokogiri + notiffany (0.1.3) + nenv (~> 0.1) + shellany (~> 0.0) numerizer (0.1.1) oauth (0.5.4) oauth2 (1.4.1) @@ -675,12 +699,12 @@ GEM activesupport nokogiri (>= 1.4.4) omniauth (~> 1.0) - omniauth_openid_connect (0.3.1) + omniauth_openid_connect (0.3.3) addressable (~> 2.5) - omniauth (~> 1.3) + omniauth (~> 1.9) openid_connect (~> 1.1) open4 (1.3.4) - openid_connect (1.1.6) + openid_connect (1.1.8) activemodel attr_required (>= 1.0.0) json-jwt (>= 1.5.0) @@ -703,12 +727,12 @@ GEM pg (1.1.4) po_to_json (1.0.1) json (>= 1.6.0) - premailer (1.10.4) + premailer (1.11.1) addressable - css_parser (>= 1.4.10) + css_parser (>= 1.6.0) htmlentities (>= 4.0.0) - premailer-rails (1.9.7) - actionmailer (>= 3, < 6) + premailer-rails (1.10.3) + actionmailer (>= 3) premailer (~> 1.7, >= 1.7.9) proc_to_ast (0.1.0) coderay @@ -724,7 +748,7 @@ GEM pry (~> 0.10) pry-rails (0.3.6) pry (>= 0.10.4) - public_suffix (3.1.0) + public_suffix (3.1.1) puma (3.12.0) puma_worker_killer (0.1.0) get_process_mem (~> 0.2) @@ -734,8 +758,8 @@ GEM rack (2.0.7) rack-accept (0.4.5) rack (>= 0.4) - rack-attack (4.4.1) - rack + rack-attack (6.2.0) + rack (>= 1.0, < 3) rack-cors (1.0.2) rack-oauth2 (1.9.3) activesupport @@ -763,10 +787,10 @@ GEM bundler (>= 1.3.0) railties (= 5.2.3) sprockets-rails (>= 2.0.0) - rails-controller-testing (1.0.2) - actionpack (~> 5.x, >= 5.0.1) - actionview (~> 5.x, >= 5.0.1) - activesupport (~> 5.x) + rails-controller-testing (1.0.4) + actionpack (>= 5.0.1.x) + actionview (>= 5.0.1.x) + activesupport (>= 5.0.1.x) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) @@ -798,25 +822,25 @@ GEM recaptcha (4.13.1) json recursive-open-struct (1.1.0) - redis (4.1.2) - redis-actionpack (5.0.2) - actionpack (>= 4.0, < 6) + redis (4.1.3) + redis-actionpack (5.1.0) + actionpack (>= 4.0, < 7) redis-rack (>= 1, < 3) redis-store (>= 1.1.0, < 2) - redis-activesupport (5.0.7) - activesupport (>= 3, < 6) + redis-activesupport (5.2.0) + activesupport (>= 3, < 7) redis-store (>= 1.3, < 2) redis-namespace (1.6.0) redis (>= 3.0.4) - redis-rack (2.0.5) + redis-rack (2.0.6) rack (>= 1.5, < 3) redis-store (>= 1.2, < 2) redis-rails (5.0.2) redis-actionpack (>= 5.0, < 6) redis-activesupport (>= 5.0, < 6) redis-store (>= 1.2, < 2) - redis-store (1.6.0) - redis (>= 2.2, < 5) + redis-store (1.8.1) + redis (>= 4, < 5) regexp_parser (1.5.1) regexp_property_values (0.3.4) representable (3.0.4) @@ -824,9 +848,9 @@ GEM declarative-option (< 0.2.0) uber (< 0.2.0) request_store (1.3.1) - responders (2.4.1) - actionpack (>= 4.2.0, < 6.0) - railties (>= 4.2.0, < 6.0) + responders (3.0.0) + actionpack (>= 5.0) + railties (>= 5.0) rest-client (2.0.2) http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) @@ -897,11 +921,12 @@ GEM ruby-progressbar (1.10.1) ruby-saml (1.7.2) nokogiri (>= 1.5.10) + ruby_dep (1.5.0) ruby_parser (3.13.1) sexp_processor (~> 4.9) rubyntlm (0.6.2) rubypants (0.2.0) - rubyzip (1.2.2) + rubyzip (1.3.0) rugged (0.28.3.1) safe_yaml (1.0.4) sanitize (4.6.6) @@ -938,6 +963,7 @@ GEM faraday (>= 0.7.6, < 1.0) settingslogic (2.0.9) sexp_processor (4.12.0) + shellany (0.0.1) shoulda-matchers (4.0.1) activesupport (>= 4.2.0) sidekiq (5.2.7) @@ -978,11 +1004,11 @@ GEM sshkey (2.0.0) stackprof (0.2.10) state_machines (0.5.0) - state_machines-activemodel (0.5.1) - activemodel (>= 4.1, < 6.0) + state_machines-activemodel (0.7.1) + activemodel (>= 4.1) state_machines (>= 0.5.0) - state_machines-activerecord (0.5.1) - activerecord (>= 4.1, < 6.0) + state_machines-activerecord (0.6.0) + activerecord (>= 4.1) state_machines-activemodel (>= 0.5.0) swd (1.1.2) activesupport (>= 3) @@ -1127,12 +1153,13 @@ DEPENDENCIES creole (~> 0.5.0) danger (~> 6.0) database_cleaner (~> 1.7.0) - deckar01-task_list (= 2.2.0) - default_value_for (~> 3.2.0) + deckar01-task_list (= 2.2.1) + default_value_for (~> 3.3.0) derailed_benchmarks device_detector devise (~> 4.6) devise-two-factor (~> 3.0.0) + diff_match_patch (~> 0.1.0) diffy (~> 3.1.0) discordrb-webhooks-blackst0ne (~> 3.3) doorkeeper (~> 4.3) @@ -1149,9 +1176,9 @@ DEPENDENCIES faraday_middleware-aws-signers-v4 fast_blank ffaker (~> 2.10) - flipper (~> 0.13.0) - flipper-active_record (~> 0.13.0) - flipper-active_support_cache_store (~> 0.13.0) + flipper (~> 0.17.1) + flipper-active_record (~> 0.17.1) + flipper-active_support_cache_store (~> 0.17.1) flowdock (~> 0.7) fog-aliyun (~> 0.3) fog-aws (~> 3.5) @@ -1161,14 +1188,13 @@ DEPENDENCIES fog-openstack (~> 1.0) fog-rackspace (~> 0.1.1) font-awesome-rails (~> 4.7) - foreman (~> 0.84.0) fugit (~> 1.2.1) fuubar (~> 2.2.0) gemojione (~> 3.3) gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly (~> 1.65.0) + gitaly (~> 1.70.0) github-markup (~> 1.7.0) gitlab-labkit (~> 0.5) gitlab-license (~> 1.0) @@ -1181,8 +1207,8 @@ DEPENDENCIES gitlab_omniauth-ldap (~> 2.1.1) gon (~> 6.2) google-api-client (~> 0.23) - google-protobuf (~> 3.7.1) - gpgme (~> 2.0.18) + google-protobuf (~> 3.8.0) + gpgme (~> 2.0.19) grape (~> 1.1.0) grape-entity (~> 0.7.1) grape-path-helpers (~> 1.1) @@ -1190,8 +1216,9 @@ DEPENDENCIES graphiql-rails (~> 1.4.10) graphql (~> 1.9.11) graphql-docs (~> 1.6.0) - grpc (~> 1.19.0) + grpc (~> 1.24.0) gssapi + guard-rspec haml_lint (~> 0.31.0) hamlit (~> 2.8.8) hangouts-chat (~> 0.0.5) @@ -1226,7 +1253,7 @@ DEPENDENCIES net-ldap net-ntp net-ssh (~> 5.2) - nokogiri (~> 1.10.4) + nokogiri (~> 1.10.5) oauth2 (~> 1.4) octokit (~> 4.9) omniauth (~> 1.8) @@ -1246,17 +1273,17 @@ DEPENDENCIES omniauth-twitter (~> 1.4) omniauth-ultraauth (~> 0.0.2) omniauth_crowd (~> 2.2.0) - omniauth_openid_connect (~> 0.3.1) + omniauth_openid_connect (~> 0.3.3) org-ruby (~> 0.9.12) pg (~> 1.1) - premailer-rails (~> 1.9.7) + premailer-rails (~> 1.10.3) prometheus-client-mmap (~> 0.9.10) pry-byebug (~> 3.5.1) pry-rails (~> 0.3.4) puma (~> 3.12) puma_worker_killer rack (~> 2.0.7) - rack-attack (~> 4.4.1) + rack-attack (~> 6.2.0) rack-cors (~> 1.0.0) rack-oauth2 (~> 1.9.3) rack-proxy (~> 0.6.0) @@ -1275,7 +1302,8 @@ DEPENDENCIES redis-namespace (~> 1.6.0) redis-rails (~> 5.0.2) request_store (~> 1.3) - responders (~> 2.0) + responders (~> 3.0) + retriable (~> 3.1.2) rouge (~> 3.11.0) rqrcode-rails3 (~> 0.1.7) rspec-parameterized @@ -1291,7 +1319,7 @@ DEPENDENCIES ruby-prof (~> 1.0.0) ruby-progressbar ruby_parser (~> 3.8) - rubyzip (~> 1.2.2) + rubyzip (~> 1.3.0) rugged (~> 0.28) sanitize (~> 4.6) sassc-rails (~> 2.1.0) @@ -1312,7 +1340,7 @@ DEPENDENCIES sprockets (~> 3.7.0) sshkey (~> 2.0) stackprof (~> 0.2.10) - state_machines-activerecord (~> 0.5.1) + state_machines-activerecord (~> 0.6.0) sys-filesystem (~> 1.1.6) test-prof (~> 0.10.0) thin (~> 1.7.0) diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000000..8a43f414ca --- /dev/null +++ b/Guardfile @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +# More info at https://github.com/guard/guard#readme + +cmd = ENV['SPRING'] ? 'spring rspec' : 'bundle exec rspec' + +guard :rspec, cmd: cmd do + require "guard/rspec/dsl" + dsl = Guard::RSpec::Dsl.new(self) + + directories %w(app ee lib spec) + + # RSpec files + rspec = dsl.rspec + watch(rspec.spec_helper) { rspec.spec_dir } + watch(rspec.spec_support) { rspec.spec_dir } + watch(rspec.spec_files) + + # Ruby files + ruby = dsl.ruby + dsl.watch_spec_files_for(ruby.lib_files) + + # Rails files + rails = dsl.rails(view_extensions: %w(erb haml slim)) + dsl.watch_spec_files_for(rails.app_files) + dsl.watch_spec_files_for(rails.views) + + watch(rails.controllers) do |m| + [ + rspec.spec.call("routing/#{m[1]}_routing"), + rspec.spec.call("controllers/#{m[1]}_controller") + ] + end + + # Rails config changes + watch(rails.spec_helper) { rspec.spec_dir } + watch(rails.routes) { "#{rspec.spec_dir}/routing" } + watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" } + + # Capybara features specs + watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") } + watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") } +end diff --git a/PROCESS.md b/PROCESS.md index 6bff60bff0..45f28b33a6 100644 --- a/PROCESS.md +++ b/PROCESS.md @@ -79,7 +79,7 @@ star, smile, etc.). Some good tips about code reviews can be found in our Overview and details of feature flag processes in development of GitLab itself is described in [feature flags process documentation](https://docs.gitlab.com/ee/development/feature_flags/process.html). -Guides on how to include feature flags in your backend/frontend code while developing GitLab are described in [developing with feature flags documentation](https://docs.gitlab.com/ee/development/feature_flags/developing.html). +Guides on how to include feature flags in your backend/frontend code while developing GitLab are described in [developing with feature flags documentation](https://docs.gitlab.com/ee/development/feature_flags/development.html). Getting access and how to expose the feature to users is detailed in [controlling feature flags documentation](https://docs.gitlab.com/ee/development/feature_flags/controls.html). diff --git a/VERSION b/VERSION index fc2e27826a..b6125ec500 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -12.4.6 +12.5.4 diff --git a/app/assets/images/cluster_app_logos/crossplane.png b/app/assets/images/cluster_app_logos/crossplane.png new file mode 100644 index 0000000000000000000000000000000000000000..32d8175108c251cdf6330fa7a2f5d3afc1fc9c24 GIT binary patch literal 1850 zcmZ{lSu`8^7RLY4(A0Elp6BrxD(0Dl5LC3$P&!;QEmd)?67o#09b{FZ~0>G3@;-Jri?Xhx1A#wK>R*Epsq|qWn=R0n0 z*OLN4(D#~vpMfZ;lvhezOcV9N$Q!rg?VSb}@RMDv-+kRTE$7{A`V}puD_Z%vp z74Q&dz&VrSk)T)rN3!sBH%<~lo&&0ZCvw8P%PHUYT}hIPLnxvKw+J>Aj**a+iCTp6 zDySQATW@|96RngB!<0N!O&2onO*ChQMeor<8TBz-iE^v83O3qx*es&T#^G~`v#~F> z*L23~$KH^awgCsYEC93BnKMf+>ufoi!ka@4w2y}|$k}wPZ8Me?#WSr_Y|6S9GMvGi z#N{TLeSsTLi3-EKw<||>7^UaatdNqWBz+MX=RJDadxsuRR+x6{70ag1yfzn!PU0o! zew4F3{#*@`x+eemT_F7neb1P6Gbq(Ei&H^2yC1!2!IIua?08fW6@rg7}U%!}T?FD9+8hwO+_a>QHCBz3TEfqFP z`Jc4QP4=<2wr)knjf7Q}#haY3&Oh#un}_MDWwMqVXA)2Q6J*hZhocD(c-s7w)Yl5t zSRXw7mHJ_Dtj_1Q)OXih)cWM<%LI~at@A{Zd%?(%l^Y}S>AjTCmtEI{(u)uYKa*S2 z&nd*|4^>a6vS@j;P*lsO1ZrWmMkaliwysOP@EU#7Dafx9A1^A8Al~oGAn#K<_N<@F zek-k%EzO|CfYpHDDmZI?ULeNU81ZLsW`uj6^dez<>Sg<&tR@A$%$b#quxmJn$k>;(U!REZU#joLOSL> z$D4US!pG%6I~LKhHgHB6K@>C{|6rLXiX(SRCKP|HR#(_XyLcgi35+odKd2vpVtpS4!+QflRd_>|Inqh5Z3e|z^IKdsHJEFs8cqtgQ|3el(e zm@(HOdSLBU?yHE-=PlTLl~W)vzEZsslk^*7b56>;%S&GGmk3~m7%Ms`a-!h5U#`}> zbRES8>GMHAf^Zkt(t32<>A_-)RI!QxR#=Hb)c>|I9c5j{EOoZc_~_nBs~gOc=Iiwo z#P`J#4xZwXUpMeuMl~8u(6HJcb787px3r7umPAaWvP;Ki4Vr}mR4-fYK3QNwvJL;` zd|Fc1VSVEEn9d*MI8%;l$$Z%NZEMdqV<5GDc?I1)8LA!V4%MP|-64_4(FO!JkL0w9 z$)wH~3t`d6H_xVyMrRvlE2ju3HG8S?I!VW!+f2rFJrt%k_I_8FZb)A@oFO5OImE^Lg5 z6)ir<0|Jd>GM0^h-ci&$NZW!40HAp3lWDB~dR&h3Ew6!{0)Rj%z@`Qt)TmJZ6YqGe z)ZoV_1kodZFC&7V%&tDUi(UxpLk#m&z;Jp#7NTDKmheEd)i@)K-djUrQNmAFS>b|M z9D&E9GCp~?S10UuxOvF*%vYJ<+S9hE^?ZWSjTh}IRMpe%MT&!rSA59skIj;qi4Nw; zNCEASGcn^IrxOjhc%_-=kJ|ivY+}`sGm;veMmHX%1&^B#rbJdjNWQB202ibBma-p& z$r|nfYJxRy37Ilu?B}8qZRZi~?-Lzh<`)^j2GE1+nriF9wRMegaJZSFu^HS*8*X3* khxjL@Q?o=5E8phVh4buoeS!{jd#+20qWgPiU0rr literal 0 HcmV?d00001 diff --git a/app/assets/images/cluster_app_logos/elastic_stack.png b/app/assets/images/cluster_app_logos/elastic_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..69fbc6aacd072103d2946e166581cd25bc8e1d89 GIT binary patch literal 2919 zcmeAS@N?(olHy`uVBq!ia0y~yV15C@9LzwGs#=w63=E770X`wFK<)>>83TnF_HPEE z@-sm6@2Ch6p|K$%)FR=wAR7o5gfQ?p0GCR*MqKVk)`-jos&@)V6#~XVLrIWdFoT49 z@r)f;p8xzWnXu%(%n2snEq~e4ZpPiQJi|BjpY;RAnoY77HJ<3czVKh*z?KyU{(pGz z|L4!=&#zqBv17)J;$nAq35omnmn=z0kd!=eLgw#ZnJvD)OgC>brKPdmxx*G0cjk=c zzkilfr}91Ev$n3OVcfKd@#00Z4sBXD9i8IJ@<6824T^ zwdGTyHtHK}yPLOOr0T1$f2Qvnd7q5!)4BHEQtS6x{pdhKQ1xT4h2b~mY*BjfVA&RN zm${;W$+mla=N5Z}nN(N*xwv|zy)K_ci1BUtpNqrKKe%8u*O;gKIxp|9#o@l^SFkc3 zHco$RQ~$;5=QoMD#yQ-_YNB6+e!6>XPebDD>p#|ASpE2SZ$Gouhr-9doz{1~U&haD z^(pZeQ2gO-tL3vV?brRH^}vhu&%46)B1royhi!Idp~H1C^@Y!K{J1n6XDNTF@%8g&_S#_LD^|75Z7qk! z(XK$J^H;x!1WYoCeKAw(y{t#X)RuY6PiihO$=q~dbI7ybZ#Ss9PHT}1P+FLtx#)ss z=q!ydJZrOAr>xlO_d-%izO-Fi^~=WDOkP_v*Id{3qT>wK|c2eb*Ps zb)8_CkdA6Rh6~XH4;c0YU5E%0cuWyA7bEZ*E@1c^!(5EOYvDt8FNV2PiR{L-D=uB@ zMahZ)hpt&aJl`~ZDJprEu32`lJCOhEjaEgw2WO+&`~;CwGQ_tS&LtR<%SNVwRxpKx9xw`2SJfcpEj^O znYhrsYH^6c_r!(I(@P!RuAg#2o!_N%LH?=>#$OIp2P$d26RqmoCm!(MB1dy$$q&Ea z7m>R*3odOumg{sr_~T>^&Oa+8oz7oA+pEE8k|$8LE^2>I(1G*jEfripGga!zg@J>xxJCw`Nd4_f0D6{ z`^}wS?6l55T)&9>!}{KIZrl3lV*mMH+^C-|-hM&*LC>*?jIvgLq?fl{(0(|j&)fZZ zudwqA(L$%+{~2X}=f9UaP|cH`(*HaX%l2>g<6RhjYU$hkyevG< z_v0@e4GccJV)f@oH|C`?^M&qyU-SNc=tbAJ_y4OsnDFP-_WC^ruU1Q%mSxI(KK-1T z@7?p4M*6qHu3ycr|2Mgz`Nu{7=x~>{ri<^r>segC`}HmQ z{x5@s_+MR0cZC$cyxMJ?l=0|@Khrmp^3q-ETK+F?+X@sO*_L~I8e5L}R*f$9#cD14 z?kWp@T%Q|%OQ { + .then(({ data, headers }) => { callback(data); - - return data; + return { data, headers }; }); }, @@ -239,7 +241,8 @@ const Api = { .get(url, { params: Object.assign({}, defaults, options), }) - .then(({ data }) => callback(data)); + .then(({ data }) => callback(data)) + .catch(() => flash(__('Something went wrong while fetching projects'))); }, commitMultiple(id, data) { @@ -348,6 +351,20 @@ const Api = { }); }, + userProjects(userId, query, options, callback) { + const url = Api.buildUrl(Api.userProjectsPath).replace(':id', userId); + const defaults = { + search: query, + per_page: 20, + }; + return axios + .get(url, { + params: Object.assign({}, defaults, options), + }) + .then(({ data }) => callback(data)) + .catch(() => flash(__('Something went wrong while fetching projects'))); + }, + branches(id, query = '', options = {}) { const url = Api.buildUrl(this.createBranchPath).replace(':id', encodeURIComponent(id)); diff --git a/app/assets/javascripts/behaviors/preview_markdown.js b/app/assets/javascripts/behaviors/preview_markdown.js index a07942d87c..ca91400eac 100644 --- a/app/assets/javascripts/behaviors/preview_markdown.js +++ b/app/assets/javascripts/behaviors/preview_markdown.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, no-var */ +/* eslint-disable func-names */ import $ from 'jquery'; import axios from '~/lib/utils/axios_utils'; @@ -12,11 +12,8 @@ import { __ } from '~/locale'; // more than `x` users are referenced. // -var lastTextareaPreviewed; -var lastTextareaHeight = null; -var markdownPreview; -var previewButtonSelector; -var writeButtonSelector; +let lastTextareaHeight; +let lastTextareaPreviewed; function MarkdownPreview() {} @@ -27,14 +24,13 @@ MarkdownPreview.prototype.emptyMessage = __('Nothing to preview.'); MarkdownPreview.prototype.ajaxCache = {}; MarkdownPreview.prototype.showPreview = function($form) { - var mdText; - var preview = $form.find('.js-md-preview'); - var url = preview.data('url'); + const preview = $form.find('.js-md-preview'); + const url = preview.data('url'); if (preview.hasClass('md-preview-loading')) { return; } - mdText = $form.find('textarea.markdown-area').val(); + const mdText = $form.find('textarea.markdown-area').val(); if (mdText === undefined) { return; @@ -46,7 +42,7 @@ MarkdownPreview.prototype.showPreview = function($form) { } else { preview.addClass('md-preview-loading').text(__('Loading...')); this.fetchMarkdownPreview(mdText, url, response => { - var body; + let body; if (response.body.length > 0) { ({ body } = response); } else { @@ -91,8 +87,7 @@ MarkdownPreview.prototype.hideReferencedUsers = function($form) { }; MarkdownPreview.prototype.renderReferencedUsers = function(users, $form) { - var referencedUsers; - referencedUsers = $form.find('.referenced-users'); + const referencedUsers = $form.find('.referenced-users'); if (referencedUsers.length) { if (users.length >= this.referenceThreshold) { referencedUsers.show(); @@ -108,8 +103,7 @@ MarkdownPreview.prototype.hideReferencedCommands = function($form) { }; MarkdownPreview.prototype.renderReferencedCommands = function(commands, $form) { - var referencedCommands; - referencedCommands = $form.find('.referenced-commands'); + const referencedCommands = $form.find('.referenced-commands'); if (commands.length > 0) { referencedCommands.html(commands); referencedCommands.show(); @@ -119,15 +113,15 @@ MarkdownPreview.prototype.renderReferencedCommands = function(commands, $form) { } }; -markdownPreview = new MarkdownPreview(); +const markdownPreview = new MarkdownPreview(); -previewButtonSelector = '.js-md-preview-button'; -writeButtonSelector = '.js-md-write-button'; +const previewButtonSelector = '.js-md-preview-button'; +const writeButtonSelector = '.js-md-write-button'; lastTextareaPreviewed = null; const markdownToolbar = $('.md-header-toolbar'); $.fn.setupMarkdownPreview = function() { - var $form = $(this); + const $form = $(this); $form.find('textarea.markdown-area').on('input', () => { markdownPreview.hideReferencedUsers($form); }); @@ -188,7 +182,7 @@ $(document).on('markdown-preview:hide', (e, $form) => { }); $(document).on('markdown-preview:toggle', (e, keyboardEvent) => { - var $target; + let $target; $target = $(keyboardEvent.target); if ($target.is('textarea.markdown-area')) { $(document).triggerHandler('markdown-preview:show', [$target.closest('form')]); @@ -201,16 +195,14 @@ $(document).on('markdown-preview:toggle', (e, keyboardEvent) => { }); $(document).on('click', previewButtonSelector, function(e) { - var $form; e.preventDefault(); - $form = $(this).closest('form'); + const $form = $(this).closest('form'); $(document).triggerHandler('markdown-preview:show', [$form]); }); $(document).on('click', writeButtonSelector, function(e) { - var $form; e.preventDefault(); - $form = $(this).closest('form'); + const $form = $(this).closest('form'); $(document).triggerHandler('markdown-preview:hide', [$form]); }); diff --git a/app/assets/javascripts/blob/file_template_mediator.js b/app/assets/javascripts/blob/file_template_mediator.js index b371f6be26..aedd8004ea 100644 --- a/app/assets/javascripts/blob/file_template_mediator.js +++ b/app/assets/javascripts/blob/file_template_mediator.js @@ -118,8 +118,6 @@ export default class FileTemplateMediator { } }); - this.setFilename(item.name); - if (this.editor.getValue() !== '') { this.setTypeSelectorToggleText(item.name); } @@ -133,14 +131,16 @@ export default class FileTemplateMediator { selectTemplateFile(selector, query, data) { const self = this; + const { name } = selector.config; selector.renderLoading(); this.fetchFileTemplate(selector.config.type, query, data) .then(file => { this.setEditorContent(file); + this.setFilename(name); selector.renderLoaded(); - this.typeSelector.setToggleText(selector.config.name); + this.typeSelector.setToggleText(name); toast(__(`${query} template applied`), { action: { text: __('Undo'), diff --git a/app/assets/javascripts/boards/components/board_form.vue b/app/assets/javascripts/boards/components/board_form.vue index 3456056075..c0df8b7209 100644 --- a/app/assets/javascripts/boards/components/board_form.vue +++ b/app/assets/javascripts/boards/components/board_form.vue @@ -133,7 +133,7 @@ export default { if (this.board.name.length === 0) return; this.isLoading = true; if (this.isDeleteForm) { - gl.boardService + boardsStore .deleteBoard(this.currentBoard) .then(() => { visitUrl(boardsStore.rootPath); @@ -143,7 +143,7 @@ export default { this.isLoading = false; }); } else { - gl.boardService + boardsStore .createBoard(this.board) .then(resp => resp.data) .then(data => { diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue index 1273fcc6a9..b8439bc874 100644 --- a/app/assets/javascripts/boards/components/board_list.vue +++ b/app/assets/javascripts/boards/components/board_list.vue @@ -84,7 +84,8 @@ export default { this.$nextTick(() => { if ( this.scrollHeight() <= this.listHeight() && - this.list.issuesSize > this.list.issues.length + this.list.issuesSize > this.list.issues.length && + this.list.isExpanded ) { this.list.page += 1; this.list.getIssues(false).catch(() => { diff --git a/app/assets/javascripts/boards/components/boards_selector.vue b/app/assets/javascripts/boards/components/boards_selector.vue index 334c162954..32491dfbcb 100644 --- a/app/assets/javascripts/boards/components/boards_selector.vue +++ b/app/assets/javascripts/boards/components/boards_selector.vue @@ -168,7 +168,7 @@ export default { } const recentBoardsPromise = new Promise((resolve, reject) => - gl.boardService + boardsStore .recentBoards() .then(resolve) .catch(err => { @@ -184,7 +184,7 @@ export default { }), ); - Promise.all([gl.boardService.allBoards(), recentBoardsPromise]) + Promise.all([boardsStore.allBoards(), recentBoardsPromise]) .then(([allBoards, recentBoards]) => [allBoards.data, recentBoards.data]) .then(([allBoardsJson, recentBoardsJson]) => { this.loading = false; diff --git a/app/assets/javascripts/boards/components/issue_card_inner.vue b/app/assets/javascripts/boards/components/issue_card_inner.vue index 40d75d53f7..d37e49bab4 100644 --- a/app/assets/javascripts/boards/components/issue_card_inner.vue +++ b/app/assets/javascripts/boards/components/issue_card_inner.vue @@ -1,5 +1,6 @@ @@ -217,7 +265,7 @@ export default {

{{ s__(`ClusterIntegration|Choose which applications to install on your Kubernetes cluster. - Helm Tiller is required to install any of the following applications.`) + Helm Tiller is required to install any of the following applications.`) }} {{ __('More information') }}

@@ -242,9 +290,9 @@ export default {
{{ s__(`ClusterIntegration|Helm streamlines installing - and managing Kubernetes applications. - Tiller runs inside of your Kubernetes Cluster, - and manages releases of your charts.`) + and managing Kubernetes applications. + Tiller runs inside of your Kubernetes Cluster, + and manages releases of your charts.`) }}
@@ -252,7 +300,7 @@ export default {
{{ s__(`ClusterIntegration|You must first install Helm Tiller before - installing the applications below`) + installing the applications below`) }} {{ s__(`ClusterIntegration|Ingress gives you a way to route - requests to services based on the request host or path, - centralizing a number of services into a single entrypoint.`) + requests to services based on the request host or path, + centralizing a number of services into a single entrypoint.`) }}

@@ -308,8 +356,8 @@ export default {

{{ s__(`ClusterIntegration|Point a wildcard DNS to this - generated endpoint in order to access - your application after it has been deployed.`) + generated endpoint in order to access + your application after it has been deployed.`) }} {{ __('More information') }} @@ -320,8 +368,8 @@ export default {

{{ s__(`ClusterIntegration|The endpoint is in - the process of being assigned. Please check your Kubernetes - cluster or Quotas on Google Kubernetes Engine if it takes a long time.`) + the process of being assigned. Please check your Kubernetes + cluster or Quotas on Google Kubernetes Engine if it takes a long time.`) }} {{ __('More information') }} @@ -368,7 +416,7 @@ export default {

{{ s__(`ClusterIntegration|Issuers represent a certificate authority. - You must provide an email address for your Issuer. `) + You must provide an email address for your Issuer. `) }} {{ s__(`ClusterIntegration|GitLab Runner connects to the - repository and executes CI/CD jobs, - pushing results back and deploying - applications to production.`) + repository and executes CI/CD jobs, + pushing results back and deploying + applications to production.`) }} + + + + {{ s__(`ClusterIntegration|JupyterHub, a multi-user Hub, spawns, - manages, and proxies multiple instances of the single-user - Jupyter notebook server. JupyterHub can be used to serve - notebooks to a class of students, a corporate data science group, - or a scientific research group.`) + manages, and proxies multiple instances of the single-user + Jupyter notebook server. JupyterHub can be used to serve + notebooks to a class of students, a corporate data science group, + or a scientific research group.`) }}

@@ -481,7 +557,7 @@ export default {

{{ s__(`ClusterIntegration|Replace this with your own hostname if you want. - If you do so, point hostname to Ingress IP Address from above.`) + If you do so, point hostname to Ingress IP Address from above.`) }} {{ __('More information') }} @@ -527,9 +603,9 @@ export default {

{{ s__(`ClusterIntegration|Knative extends Kubernetes to provide - a set of middleware components that are essential to build modern, - source-centric, and container-based applications that can run - anywhere: on premises, in the cloud, or even in a third-party data center.`) + a set of middleware components that are essential to build modern, + source-centric, and container-based applications that can run + anywhere: on premises, in the cloud, or even in a third-party data center.`) }}

@@ -542,6 +618,75 @@ export default { />
+ +
+

+ {{ + s__( + `ClusterIntegration|The elastic stack collects logs from all pods in your cluster`, + ) + }} +

+ + +
+
diff --git a/app/assets/javascripts/clusters/components/crossplane_provider_stack.vue b/app/assets/javascripts/clusters/components/crossplane_provider_stack.vue new file mode 100644 index 0000000000..966918ae63 --- /dev/null +++ b/app/assets/javascripts/clusters/components/crossplane_provider_stack.vue @@ -0,0 +1,93 @@ + + + diff --git a/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue b/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue index f1925c243f..125bcaacc1 100644 --- a/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue +++ b/app/assets/javascripts/clusters/components/uninstall_application_confirmation_modal.vue @@ -2,7 +2,16 @@ import { GlModal } from '@gitlab/ui'; import { sprintf, s__ } from '~/locale'; import trackUninstallButtonClickMixin from 'ee_else_ce/clusters/mixins/track_uninstall_button_click'; -import { HELM, INGRESS, CERT_MANAGER, PROMETHEUS, RUNNER, KNATIVE, JUPYTER } from '../constants'; +import { + HELM, + INGRESS, + CERT_MANAGER, + PROMETHEUS, + RUNNER, + KNATIVE, + JUPYTER, + ELASTIC_STACK, +} from '../constants'; const CUSTOM_APP_WARNING_TEXT = { [HELM]: sprintf( @@ -28,6 +37,7 @@ const CUSTOM_APP_WARNING_TEXT = { [JUPYTER]: s__( 'ClusterIntegration|All data not committed to GitLab will be deleted and cannot be restored.', ), + [ELASTIC_STACK]: s__('ClusterIntegration|All data will be deleted and cannot be restored.'), }; export default { diff --git a/app/assets/javascripts/clusters/constants.js b/app/assets/javascripts/clusters/constants.js index c6e4b7951c..9f98f170fb 100644 --- a/app/assets/javascripts/clusters/constants.js +++ b/app/assets/javascripts/clusters/constants.js @@ -50,8 +50,19 @@ export const JUPYTER = 'jupyter'; export const KNATIVE = 'knative'; export const RUNNER = 'runner'; export const CERT_MANAGER = 'cert_manager'; +export const CROSSPLANE = 'crossplane'; export const PROMETHEUS = 'prometheus'; +export const ELASTIC_STACK = 'elastic_stack'; -export const APPLICATIONS = [HELM, INGRESS, JUPYTER, KNATIVE, RUNNER, CERT_MANAGER, PROMETHEUS]; +export const APPLICATIONS = [ + HELM, + INGRESS, + JUPYTER, + KNATIVE, + RUNNER, + CERT_MANAGER, + PROMETHEUS, + ELASTIC_STACK, +]; export const INGRESS_DOMAIN_SUFFIX = '.nip.io'; diff --git a/app/assets/javascripts/clusters/services/clusters_service.js b/app/assets/javascripts/clusters/services/clusters_service.js index fa12802b3d..333fb293a1 100644 --- a/app/assets/javascripts/clusters/services/clusters_service.js +++ b/app/assets/javascripts/clusters/services/clusters_service.js @@ -7,10 +7,12 @@ export default class ClusterService { helm: this.options.installHelmEndpoint, ingress: this.options.installIngressEndpoint, cert_manager: this.options.installCertManagerEndpoint, + crossplane: this.options.installCrossplaneEndpoint, runner: this.options.installRunnerEndpoint, prometheus: this.options.installPrometheusEndpoint, jupyter: this.options.installJupyterEndpoint, knative: this.options.installKnativeEndpoint, + elastic_stack: this.options.installElasticStackEndpoint, }; this.appUpdateEndpointMap = { knative: this.options.updateKnativeEndpoint, diff --git a/app/assets/javascripts/clusters/stores/clusters_store.js b/app/assets/javascripts/clusters/stores/clusters_store.js index 6464461ea0..35dbf95155 100644 --- a/app/assets/javascripts/clusters/stores/clusters_store.js +++ b/app/assets/javascripts/clusters/stores/clusters_store.js @@ -5,6 +5,8 @@ import { JUPYTER, KNATIVE, CERT_MANAGER, + ELASTIC_STACK, + CROSSPLANE, RUNNER, APPLICATION_INSTALLED_STATUSES, APPLICATION_STATUS, @@ -25,6 +27,7 @@ const applicationInitialState = { uninstallable: false, uninstallFailed: false, uninstallSuccessful: false, + validationError: null, }; export default class ClusterStore { @@ -57,6 +60,11 @@ export default class ClusterStore { title: s__('ClusterIntegration|Cert-Manager'), email: null, }, + crossplane: { + ...applicationInitialState, + title: s__('ClusterIntegration|Crossplane'), + stack: null, + }, runner: { ...applicationInitialState, title: s__('ClusterIntegration|GitLab Runner'), @@ -85,6 +93,11 @@ export default class ClusterStore { updateSuccessful: false, updateFailed: false, }, + elastic_stack: { + ...applicationInitialState, + title: s__('ClusterIntegration|Elastic Stack'), + kibana_hostname: null, + }, }, environments: [], fetchingEnvironments: false, @@ -197,13 +210,15 @@ export default class ClusterStore { } else if (appId === CERT_MANAGER) { this.state.applications.cert_manager.email = this.state.applications.cert_manager.email || serverAppEntry.email; + } else if (appId === CROSSPLANE) { + this.state.applications.crossplane.stack = + this.state.applications.crossplane.stack || serverAppEntry.stack; } else if (appId === JUPYTER) { - this.state.applications.jupyter.hostname = - this.state.applications.jupyter.hostname || - serverAppEntry.hostname || - (this.state.applications.ingress.externalIp - ? `jupyter.${this.state.applications.ingress.externalIp}.nip.io` - : ''); + this.state.applications.jupyter.hostname = this.updateHostnameIfUnset( + this.state.applications.jupyter.hostname, + serverAppEntry.hostname, + 'jupyter', + ); } else if (appId === KNATIVE) { if (!this.state.applications.knative.isEditingHostName) { this.state.applications.knative.hostname = @@ -216,10 +231,26 @@ export default class ClusterStore { } else if (appId === RUNNER) { this.state.applications.runner.version = version; this.state.applications.runner.updateAvailable = updateAvailable; + } else if (appId === ELASTIC_STACK) { + this.state.applications.elastic_stack.kibana_hostname = this.updateHostnameIfUnset( + this.state.applications.elastic_stack.kibana_hostname, + serverAppEntry.kibana_hostname, + 'kibana', + ); } }); } + updateHostnameIfUnset(current, updated, fallback) { + return ( + current || + updated || + (this.state.applications.ingress.externalIp + ? `${fallback}.${this.state.applications.ingress.externalIp}.nip.io` + : '') + ); + } + toggleFetchEnvironments(isFetching) { this.state.fetchingEnvironments = isFetching; } diff --git a/app/assets/javascripts/commit/image_file.js b/app/assets/javascripts/commit/image_file.js index 6c04e0beb4..60c2059a87 100644 --- a/app/assets/javascripts/commit/image_file.js +++ b/app/assets/javascripts/commit/image_file.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, no-var, no-else-return, consistent-return, one-var, no-return-assign, no-unused-expressions, no-sequences */ +/* eslint-disable func-names, no-var, no-else-return, consistent-return, one-var, no-return-assign */ import $ from 'jquery'; @@ -9,40 +9,29 @@ const viewModes = ['two-up', 'swipe']; export default class ImageFile { constructor(file) { this.file = file; - this.requestImageInfo( - $('.two-up.view .frame.deleted img', this.file), - (function(_this) { - return function() { - return _this.requestImageInfo($('.two-up.view .frame.added img', _this.file), () => { - _this.initViewModes(); + this.requestImageInfo($('.two-up.view .frame.deleted img', this.file), () => + this.requestImageInfo($('.two-up.view .frame.added img', this.file), () => { + this.initViewModes(); - // Load two-up view after images are loaded - // so that we can display the correct width and height information - const $images = $('.two-up.view img', _this.file); + // Load two-up view after images are loaded + // so that we can display the correct width and height information + const $images = $('.two-up.view img', this.file); - $images.waitForImages(() => { - _this.initView('two-up'); - }); - }); - }; - })(this), + $images.waitForImages(() => { + this.initView('two-up'); + }); + }), ); } initViewModes() { const viewMode = viewModes[0]; $('.view-modes', this.file).removeClass('hide'); - $('.view-modes-menu', this.file).on( - 'click', - 'li', - (function(_this) { - return function(event) { - if (!$(event.currentTarget).hasClass('active')) { - return _this.activateViewMode(event.currentTarget.className); - } - }; - })(this), - ); + $('.view-modes-menu', this.file).on('click', 'li', event => { + if (!$(event.currentTarget).hasClass('active')) { + return this.activateViewMode(event.currentTarget.className); + } + }); return this.activateViewMode(viewMode); } @@ -51,15 +40,10 @@ export default class ImageFile { .removeClass('active') .filter(`.${viewMode}`) .addClass('active'); - return $(`.view:visible:not(.${viewMode})`, this.file).fadeOut( - 200, - (function(_this) { - return function() { - $(`.view.${viewMode}`, _this.file).fadeIn(200); - return _this.initView(viewMode); - }; - })(this), - ); + return $(`.view:visible:not(.${viewMode})`, this.file).fadeOut(200, () => { + $(`.view.${viewMode}`, this.file).fadeIn(200); + return this.initView(viewMode); + }); } initView(viewMode) { @@ -103,22 +87,18 @@ export default class ImageFile { .on('touchmove', dragMove); } - prepareFrames(view) { + static prepareFrames(view) { var maxHeight, maxWidth; maxWidth = 0; maxHeight = 0; $('.frame', view) - .each( - (function() { - return function(index, frame) { - var height, width; - width = $(frame).width(); - height = $(frame).height(); - maxWidth = width > maxWidth ? width : maxWidth; - return (maxHeight = height > maxHeight ? height : maxHeight); - }; - })(this), - ) + .each((index, frame) => { + var height, width; + width = $(frame).width(); + height = $(frame).height(); + maxWidth = width > maxWidth ? width : maxWidth; + return (maxHeight = height > maxHeight ? height : maxHeight); + }) .css({ width: maxWidth, height: maxHeight, @@ -128,104 +108,95 @@ export default class ImageFile { views = { 'two-up': function() { - return $('.two-up.view .wrap', this.file).each( - (function(_this) { - return function(index, wrap) { - $('img', wrap).each(function() { - var currentWidth; - currentWidth = $(this).width(); - if (currentWidth > availWidth / 2) { - return $(this).width(availWidth / 2); - } - }); - return _this.requestImageInfo($('img', wrap), (width, height) => { - $('.image-info .meta-width', wrap).text(`${width}px`); - $('.image-info .meta-height', wrap).text(`${height}px`); - return $('.image-info', wrap).removeClass('hide'); - }); - }; - })(this), - ); + return $('.two-up.view .wrap', this.file).each((index, wrap) => { + $('img', wrap).each(function() { + var currentWidth; + currentWidth = $(this).width(); + if (currentWidth > availWidth / 2) { + return $(this).width(availWidth / 2); + } + }); + return this.requestImageInfo($('img', wrap), (width, height) => { + $('.image-info .meta-width', wrap).text(`${width}px`); + $('.image-info .meta-height', wrap).text(`${height}px`); + return $('.image-info', wrap).removeClass('hide'); + }); + }); }, swipe() { var maxHeight, maxWidth; maxWidth = 0; maxHeight = 0; - return $('.swipe.view', this.file).each( - (function(_this) { - return function(index, view) { - var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding, ref; - (ref = _this.prepareFrames(view)), ([maxWidth, maxHeight] = ref); - $swipeFrame = $('.swipe-frame', view); - $swipeWrap = $('.swipe-wrap', view); - $swipeBar = $('.swipe-bar', view); + return $('.swipe.view', this.file).each((index, view) => { + var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding; + const ref = ImageFile.prepareFrames(view); + [maxWidth, maxHeight] = ref; + $swipeFrame = $('.swipe-frame', view); + $swipeWrap = $('.swipe-wrap', view); + $swipeBar = $('.swipe-bar', view); - $swipeFrame.css({ - width: maxWidth + 16, - height: maxHeight + 28, - }); - $swipeWrap.css({ - width: maxWidth + 1, - height: maxHeight + 2, - }); - // Set swipeBar left position to match image frame - $swipeBar.css({ - left: 1, - }); + $swipeFrame.css({ + width: maxWidth + 16, + height: maxHeight + 28, + }); + $swipeWrap.css({ + width: maxWidth + 1, + height: maxHeight + 2, + }); + // Set swipeBar left position to match image frame + $swipeBar.css({ + left: 1, + }); - wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10); + wrapPadding = parseInt($swipeWrap.css('right').replace('px', ''), 10); - _this.initDraggable($swipeBar, wrapPadding, (e, left) => { - if (left > 0 && left < $swipeFrame.width() - wrapPadding * 2) { - $swipeWrap.width(maxWidth + 1 - left); - $swipeBar.css('left', left); - } - }); - }; - })(this), - ); + this.initDraggable($swipeBar, wrapPadding, (e, left) => { + if (left > 0 && left < $swipeFrame.width() - wrapPadding * 2) { + $swipeWrap.width(maxWidth + 1 - left); + $swipeBar.css('left', left); + } + }); + }); }, 'onion-skin': function() { var dragTrackWidth, maxHeight, maxWidth; maxWidth = 0; maxHeight = 0; dragTrackWidth = $('.drag-track', this.file).width() - $('.dragger', this.file).width(); - return $('.onion-skin.view', this.file).each( - (function(_this) { - return function(index, view) { - var $frame, $track, $dragger, $frameAdded, framePadding, ref; - (ref = _this.prepareFrames(view)), ([maxWidth, maxHeight] = ref); - $frame = $('.onion-skin-frame', view); - $frameAdded = $('.frame.added', view); - $track = $('.drag-track', view); - $dragger = $('.dragger', $track); + return $('.onion-skin.view', this.file).each((index, view) => { + var $frame, $track, $dragger, $frameAdded, framePadding; - $frame.css({ - width: maxWidth + 16, - height: maxHeight + 28, - }); - $('.swipe-wrap', view).css({ - width: maxWidth + 1, - height: maxHeight + 2, - }); - $dragger.css({ - left: dragTrackWidth, - }); + const ref = ImageFile.prepareFrames(view); + [maxWidth, maxHeight] = ref; + $frame = $('.onion-skin-frame', view); + $frameAdded = $('.frame.added', view); + $track = $('.drag-track', view); + $dragger = $('.dragger', $track); - $frameAdded.css('opacity', 1); - framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10); + $frame.css({ + width: maxWidth + 16, + height: maxHeight + 28, + }); + $('.swipe-wrap', view).css({ + width: maxWidth + 1, + height: maxHeight + 2, + }); + $dragger.css({ + left: dragTrackWidth, + }); - _this.initDraggable($dragger, framePadding, (e, left) => { - var opacity = left / dragTrackWidth; + $frameAdded.css('opacity', 1); + framePadding = parseInt($frameAdded.css('right').replace('px', ''), 10); - if (opacity >= 0 && opacity <= 1) { - $dragger.css('left', left); - $frameAdded.css('opacity', opacity); - } - }); - }; - })(this), - ); + this.initDraggable($dragger, framePadding, (e, left) => { + var opacity = left / dragTrackWidth; + + if (opacity >= 0 && opacity <= 1) { + $dragger.css('left', left); + $frameAdded.css('opacity', opacity); + } + }); + }); }, }; @@ -235,14 +206,7 @@ export default class ImageFile { if (domImg.complete) { return callback.call(this, domImg.naturalWidth, domImg.naturalHeight); } else { - return img.on( - 'load', - (function(_this) { - return function() { - return callback.call(_this, domImg.naturalWidth, domImg.naturalHeight); - }; - })(this), - ); + return img.on('load', () => callback.call(this, domImg.naturalWidth, domImg.naturalHeight)); } } } diff --git a/app/assets/javascripts/compare_autocomplete.js b/app/assets/javascripts/compare_autocomplete.js index 81ba15577f..a23707209d 100644 --- a/app/assets/javascripts/compare_autocomplete.js +++ b/app/assets/javascripts/compare_autocomplete.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, one-var, no-var, no-else-return */ +/* eslint-disable func-names, no-else-return */ import $ from 'jquery'; import { __ } from './locale'; @@ -8,9 +8,8 @@ import { capitalizeFirstCharacter } from './lib/utils/text_utility'; export default function initCompareAutocomplete(limitTo = null, clickHandler = () => {}) { $('.js-compare-dropdown').each(function() { - var $dropdown, selected; - $dropdown = $(this); - selected = $dropdown.data('selected'); + const $dropdown = $(this); + const selected = $dropdown.data('selected'); const $dropdownContainer = $dropdown.closest('.dropdown'); const $fieldInput = $(`input[name="${$dropdown.data('fieldName')}"]`, $dropdownContainer); const $filterInput = $('input[type="search"]', $dropdownContainer); @@ -44,17 +43,16 @@ export default function initCompareAutocomplete(limitTo = null, clickHandler = ( fieldName: $dropdown.data('fieldName'), filterInput: 'input[type="search"]', renderRow(ref) { - var link; + const link = $('
') + .attr('href', '#') + .addClass(ref === selected ? 'is-active' : '') + .text(ref) + .attr('data-ref', ref); if (ref.header != null) { return $('
  • ') .addClass('dropdown-header') .text(ref.header); } else { - link = $('') - .attr('href', '#') - .addClass(ref === selected ? 'is-active' : '') - .text(ref) - .attr('data-ref', ref); return $('
  • ').append(link); } }, diff --git a/app/assets/javascripts/confidential_merge_request/components/project_form_group.vue b/app/assets/javascripts/confidential_merge_request/components/project_form_group.vue index 197a070606..4fa18b1955 100644 --- a/app/assets/javascripts/confidential_merge_request/components/project_form_group.vue +++ b/app/assets/javascripts/confidential_merge_request/components/project_form_group.vue @@ -41,7 +41,7 @@ export default { noForkText() { return sprintf( __( - "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visiblity to private.", + "To protect this issue's confidentiality, %{link_start}fork the project%{link_end} and set the forks visibility to private.", ), { link_start: ``, link_end: '' }, false, diff --git a/app/assets/javascripts/contributors/components/contributors.vue b/app/assets/javascripts/contributors/components/contributors.vue new file mode 100644 index 0000000000..7dd6b051cb --- /dev/null +++ b/app/assets/javascripts/contributors/components/contributors.vue @@ -0,0 +1,227 @@ + + + diff --git a/app/assets/javascripts/contributors/index.js b/app/assets/javascripts/contributors/index.js new file mode 100644 index 0000000000..b606358973 --- /dev/null +++ b/app/assets/javascripts/contributors/index.js @@ -0,0 +1,23 @@ +import Vue from 'vue'; +import ContributorsGraphs from './components/contributors.vue'; +import store from './stores'; + +export default () => { + const el = document.querySelector('.js-contributors-graph'); + + if (!el) return null; + + return new Vue({ + el, + store, + + render(createElement) { + return createElement(ContributorsGraphs, { + props: { + endpoint: el.dataset.projectGraphPath, + branch: el.dataset.projectBranch, + }, + }); + }, + }); +}; diff --git a/app/assets/javascripts/contributors/services/contributors_service.js b/app/assets/javascripts/contributors/services/contributors_service.js new file mode 100644 index 0000000000..5a8bbb6651 --- /dev/null +++ b/app/assets/javascripts/contributors/services/contributors_service.js @@ -0,0 +1,7 @@ +import axios from '~/lib/utils/axios_utils'; + +export default { + fetchChartData(endpoint) { + return axios.get(endpoint); + }, +}; diff --git a/app/assets/javascripts/contributors/stores/actions.js b/app/assets/javascripts/contributors/stores/actions.js new file mode 100644 index 0000000000..4138ff24f1 --- /dev/null +++ b/app/assets/javascripts/contributors/stores/actions.js @@ -0,0 +1,20 @@ +import flash from '~/flash'; +import { __ } from '~/locale'; +import service from '../services/contributors_service'; +import * as types from './mutation_types'; + +export const fetchChartData = ({ commit }, endpoint) => { + commit(types.SET_LOADING_STATE, true); + + return service + .fetchChartData(endpoint) + .then(res => res.data) + .then(data => { + commit(types.SET_CHART_DATA, data); + commit(types.SET_LOADING_STATE, false); + }) + .catch(() => flash(__('An error occurred while loading chart data'))); +}; + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/app/assets/javascripts/contributors/stores/getters.js b/app/assets/javascripts/contributors/stores/getters.js new file mode 100644 index 0000000000..9e02e3ed9e --- /dev/null +++ b/app/assets/javascripts/contributors/stores/getters.js @@ -0,0 +1,33 @@ +export const showChart = state => Boolean(!state.loading && state.chartData); + +export const parsedData = state => { + const byAuthor = {}; + const total = {}; + + state.chartData.forEach(({ date, author_name, author_email }) => { + total[date] = total[date] ? total[date] + 1 : 1; + + const authorData = byAuthor[author_name]; + + if (!authorData) { + byAuthor[author_name] = { + email: author_email.toLowerCase(), + commits: 1, + dates: { + [date]: 1, + }, + }; + } else { + authorData.commits += 1; + authorData.dates[date] = authorData.dates[date] ? authorData.dates[date] + 1 : 1; + } + }); + + return { + total, + byAuthor, + }; +}; + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/app/assets/javascripts/contributors/stores/index.js b/app/assets/javascripts/contributors/stores/index.js new file mode 100644 index 0000000000..bc739851aa --- /dev/null +++ b/app/assets/javascripts/contributors/stores/index.js @@ -0,0 +1,18 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import state from './state'; +import mutations from './mutations'; +import * as getters from './getters'; +import * as actions from './actions'; + +Vue.use(Vuex); + +export const createStore = () => + new Vuex.Store({ + actions, + mutations, + getters, + state: state(), + }); + +export default createStore(); diff --git a/app/assets/javascripts/contributors/stores/mutation_types.js b/app/assets/javascripts/contributors/stores/mutation_types.js new file mode 100644 index 0000000000..62e0a51d5f --- /dev/null +++ b/app/assets/javascripts/contributors/stores/mutation_types.js @@ -0,0 +1,3 @@ +export const SET_CHART_DATA = 'SET_CHART_DATA'; +export const SET_LOADING_STATE = 'SET_LOADING_STATE'; +export const SET_ACTIVE_BRANCH = 'SET_ACTIVE_BRANCH'; diff --git a/app/assets/javascripts/contributors/stores/mutations.js b/app/assets/javascripts/contributors/stores/mutations.js new file mode 100644 index 0000000000..f1f460d072 --- /dev/null +++ b/app/assets/javascripts/contributors/stores/mutations.js @@ -0,0 +1,17 @@ +import * as types from './mutation_types'; + +export default { + [types.SET_LOADING_STATE](state, value) { + state.loading = value; + }, + [types.SET_CHART_DATA](state, chartData) { + Object.assign(state, { + chartData, + }); + }, + [types.SET_ACTIVE_BRANCH](state, branch) { + Object.assign(state, { + branch, + }); + }, +}; diff --git a/app/assets/javascripts/contributors/stores/state.js b/app/assets/javascripts/contributors/stores/state.js new file mode 100644 index 0000000000..1dc1a3c7b7 --- /dev/null +++ b/app/assets/javascripts/contributors/stores/state.js @@ -0,0 +1,5 @@ +export default () => ({ + loading: false, + chartData: null, + branch: 'master', +}); diff --git a/app/assets/javascripts/contributors/utils.js b/app/assets/javascripts/contributors/utils.js new file mode 100644 index 0000000000..7d8932ce49 --- /dev/null +++ b/app/assets/javascripts/contributors/utils.js @@ -0,0 +1,30 @@ +import { getMonthNames } from '~/lib/utils/datetime_utility'; + +/** + * Converts provided string to date and returns formatted value as a year for date in January and month name for the rest + * @param {String} + * @returns {String} - formatted value + * + * xAxisLabelFormatter('01-12-2019') will return '2019' + * xAxisLabelFormatter('02-12-2019') will return 'Feb' + * xAxisLabelFormatter('07-12-2019') will return 'Jul' + */ +export const xAxisLabelFormatter = val => { + const date = new Date(val); + const month = date.getUTCMonth(); + const year = date.getUTCFullYear(); + return month === 0 ? `${year}` : getMonthNames(true)[month]; +}; + +/** + * Formats provided date to YYYY-MM-DD format + * @param {Date} + * @returns {String} - formatted value + */ +export const dateFormatter = date => { + const year = date.getUTCFullYear(); + const month = date.getUTCMonth(); + const day = date.getUTCDate(); + + return `${year}-${`0${month + 1}`.slice(-2)}-${`0${day}`.slice(-2)}`; +}; diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue index 3c6da43c4c..e6893c14cd 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue @@ -2,14 +2,19 @@ import DropdownSearchInput from '~/vue_shared/components/dropdown/dropdown_search_input.vue'; import DropdownHiddenInput from '~/vue_shared/components/dropdown/dropdown_hidden_input.vue'; import DropdownButton from '~/vue_shared/components/dropdown/dropdown_button.vue'; +import { GlIcon } from '@gitlab/ui'; -const findItem = (items, valueProp, value) => items.find(item => item[valueProp] === value); +const toArray = value => [].concat(value); +const itemsProp = (items, prop) => items.map(item => item[prop]); +const defaultSearchFn = (searchQuery, labelProp) => item => + item[labelProp].toLowerCase().indexOf(searchQuery) > -1; export default { components: { DropdownButton, DropdownSearchInput, DropdownHiddenInput, + GlIcon, }, props: { fieldName: { @@ -28,7 +33,7 @@ export default { default: '', }, value: { - type: [Object, String], + type: [Object, Array, String], required: false, default: () => null, }, @@ -72,6 +77,11 @@ export default { required: false, default: false, }, + multiple: { + type: Boolean, + required: false, + default: false, + }, errorMessage: { type: String, required: false, @@ -90,12 +100,11 @@ export default { searchFn: { type: Function, required: false, - default: searchQuery => item => item.name.toLowerCase().indexOf(searchQuery) > -1, + default: defaultSearchFn, }, }, data() { return { - selectedItem: findItem(this.items, this.value), searchQuery: '', }; }, @@ -109,36 +118,52 @@ export default { return this.disabledText; } - if (!this.selectedItem) { + if (!this.selectedItems.length) { return this.placeholder; } - return this.selectedItemLabel; + return this.selectedItemsLabels; }, results() { - if (!this.items) { - return []; - } + return this.getItemsOrEmptyList().filter(this.searchFn(this.searchQuery, this.labelProperty)); + }, + selectedItems() { + const valueProp = this.valueProperty; + const valueList = toArray(this.value); + const items = this.getItemsOrEmptyList(); - return this.items.filter(this.searchFn(this.searchQuery)); + return items.filter(item => valueList.some(value => item[valueProp] === value)); }, - selectedItemLabel() { - return this.selectedItem && this.selectedItem[this.labelProperty]; + selectedItemsLabels() { + return itemsProp(this.selectedItems, this.labelProperty).join(', '); }, - selectedItemValue() { - return (this.selectedItem && this.selectedItem[this.valueProperty]) || ''; - }, - }, - watch: { - value(value) { - this.selectedItem = findItem(this.items, this.valueProperty, value); + selectedItemsValues() { + return itemsProp(this.selectedItems, this.valueProperty).join(', '); }, }, methods: { - select(item) { - this.selectedItem = item; + getItemsOrEmptyList() { + return this.items || []; + }, + selectSingle(item) { this.$emit('input', item[this.valueProperty]); }, + selectMultiple(item) { + const value = toArray(this.value); + const itemValue = item[this.valueProperty]; + const itemValueIndex = value.indexOf(itemValue); + + if (itemValueIndex > -1) { + value.splice(itemValueIndex, 1); + } else { + value.push(itemValue); + } + + this.$emit('input', value); + }, + isSelected(item) { + return this.selectedItems.includes(item); + }, }, }; @@ -146,7 +171,7 @@ export default { diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue index 22ee368b8e..3f7c2204b9 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue @@ -1,4 +1,5 @@ diff --git a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue index 1188cf0885..57d5f4f541 100644 --- a/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue +++ b/app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue @@ -4,8 +4,8 @@ import { sprintf, s__ } from '~/locale'; import _ from 'underscore'; import { GlFormInput, GlFormCheckbox } from '@gitlab/ui'; import ClusterFormDropdown from './cluster_form_dropdown.vue'; -import RegionDropdown from './region_dropdown.vue'; import { KUBERNETES_VERSIONS } from '../constants'; +import LoadingButton from '~/vue_shared/components/loading_button.vue'; const { mapState: mapRolesState, mapActions: mapRolesActions } = createNamespacedHelpers('roles'); const { mapState: mapRegionsState, mapActions: mapRegionsActions } = createNamespacedHelpers( @@ -22,13 +22,17 @@ const { mapState: mapSecurityGroupsState, mapActions: mapSecurityGroupsActions, } = createNamespacedHelpers('securityGroups'); +const { + mapState: mapInstanceTypesState, + mapActions: mapInstanceTypesActions, +} = createNamespacedHelpers('instanceTypes'); export default { components: { ClusterFormDropdown, - RegionDropdown, GlFormInput, GlFormCheckbox, + LoadingButton, }, props: { gitlabManagedClusterHelpPath: { @@ -39,6 +43,10 @@ export default { type: String, required: true, }, + externalLinkIcon: { + type: String, + required: true, + }, }, computed: { ...mapState([ @@ -51,7 +59,10 @@ export default { 'selectedSubnet', 'selectedRole', 'selectedSecurityGroup', + 'selectedInstanceType', + 'nodeCount', 'gitlabManagedCluster', + 'isCreatingCluster', ]), ...mapRolesState({ roles: 'items', @@ -83,6 +94,11 @@ export default { isLoadingSecurityGroups: 'isLoadingItems', loadingSecurityGroupsError: 'loadingItemsError', }), + ...mapInstanceTypesState({ + instanceTypes: 'items', + isLoadingInstanceTypes: 'isLoadingItems', + loadingInstanceTypesError: 'loadingItemsError', + }), kubernetesVersions() { return KUBERNETES_VERSIONS; }, @@ -98,6 +114,27 @@ export default { securityGroupDropdownDisabled() { return !this.selectedVpc; }, + createClusterButtonDisabled() { + return ( + !this.clusterName || + !this.environmentScope || + !this.kubernetesVersion || + !this.selectedRegion || + !this.selectedKeyPair || + !this.selectedVpc || + !this.selectedSubnet || + !this.selectedRole || + !this.selectedSecurityGroup || + !this.selectedInstanceType || + !this.nodeCount || + this.isCreatingCluster + ); + }, + createClusterButtonLabel() { + return this.isCreatingCluster + ? s__('ClusterIntegration|Creating Kubernetes cluster') + : s__('ClusterIntegration|Create Kubernetes cluster'); + }, kubernetesIntegrationHelpText() { const escapedUrl = _.escape(this.kubernetesIntegrationHelpPath); @@ -115,11 +152,26 @@ export default { roleDropdownHelpText() { return sprintf( s__( - 'ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services%{endLink}.', + 'ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services %{externalLinkIcon} %{endLink}.', ), { startLink: - '', + '', + externalLinkIcon: this.externalLinkIcon, + endLink: '', + }, + false, + ); + }, + regionsDropdownHelpText() { + return sprintf( + s__( + 'ClusterIntegration|Learn more about %{startLink}Regions %{externalLinkIcon}%{endLink}.', + ), + { + startLink: + '', + externalLinkIcon: this.externalLinkIcon, endLink: '', }, false, @@ -128,11 +180,12 @@ export default { keyPairDropdownHelpText() { return sprintf( s__( - 'ClusterIntegration|Select the key pair name that will be used to create EC2 nodes. To use a new key pair name, first create one on %{startLink}Amazon Web Services%{endLink}.', + 'ClusterIntegration|Select the key pair name that will be used to create EC2 nodes. To use a new key pair name, first create one on %{startLink}Amazon Web Services %{externalLinkIcon} %{endLink}.', ), { startLink: '', + externalLinkIcon: this.externalLinkIcon, endLink: '', }, false, @@ -141,11 +194,12 @@ export default { vpcDropdownHelpText() { return sprintf( s__( - 'ClusterIntegration|Select a VPC to use for your EKS Cluster resources. To use a new VPC, first create one on %{startLink}Amazon Web Services%{endLink}.', + 'ClusterIntegration|Select a VPC to use for your EKS Cluster resources. To use a new VPC, first create one on %{startLink}Amazon Web Services %{externalLinkIcon} %{endLink}.', ), { startLink: - '', + '', + externalLinkIcon: this.externalLinkIcon, endLink: '', }, false, @@ -154,11 +208,12 @@ export default { subnetDropdownHelpText() { return sprintf( s__( - 'ClusterIntegration|Choose the %{startLink}subnets%{endLink} in your VPC where your worker nodes will run.', + 'ClusterIntegration|Choose the %{startLink}subnets %{externalLinkIcon} %{endLink} in your VPC where your worker nodes will run.', ), { startLink: '', + externalLinkIcon: this.externalLinkIcon, endLink: '', }, false, @@ -167,11 +222,26 @@ export default { securityGroupDropdownHelpText() { return sprintf( s__( - 'ClusterIntegration|Choose the %{startLink}security groups%{endLink} to apply to the EKS-managed Elastic Network Interfaces that are created in your worker node subnets.', + 'ClusterIntegration|Choose the %{startLink}security group %{externalLinkIcon} %{endLink} to apply to the EKS-managed Elastic Network Interfaces that are created in your worker node subnets.', ), { startLink: '', + externalLinkIcon: this.externalLinkIcon, + endLink: '', + }, + false, + ); + }, + instanceTypesDropdownHelpText() { + return sprintf( + s__( + 'ClusterIntegration|Choose the worker node %{startLink}instance type %{externalLinkIcon} %{endLink}.', + ), + { + startLink: + '', + externalLinkIcon: this.externalLinkIcon, endLink: '', }, false, @@ -195,9 +265,12 @@ export default { mounted() { this.fetchRegions(); this.fetchRoles(); + this.fetchInstanceTypes(); }, methods: { ...mapActions([ + 'createCluster', + 'signOut', 'setClusterName', 'setEnvironmentScope', 'setKubernetesVersion', @@ -207,6 +280,8 @@ export default { 'setRole', 'setKeyPair', 'setSecurityGroup', + 'setInstanceType', + 'setNodeCount', 'setGitlabManagedCluster', ]), ...mapRegionsActions({ fetchRegions: 'fetchItems' }), @@ -215,15 +290,22 @@ export default { ...mapRolesActions({ fetchRoles: 'fetchItems' }), ...mapKeyPairsActions({ fetchKeyPairs: 'fetchItems' }), ...mapSecurityGroupsActions({ fetchSecurityGroups: 'fetchItems' }), + ...mapInstanceTypesActions({ fetchInstanceTypes: 'fetchItems' }), setRegionAndFetchVpcsAndKeyPairs(region) { this.setRegion({ region }); + this.setVpc({ vpc: null }); + this.setKeyPair({ keyPair: null }); + this.setSubnet({ subnet: null }); + this.setSecurityGroup({ securityGroup: null }); this.fetchVpcs({ region }); this.fetchKeyPairs({ region }); }, setVpcAndFetchSubnets(vpc) { this.setVpc({ vpc }); - this.fetchSubnets({ vpc }); - this.fetchSecurityGroups({ vpc }); + this.setSubnet({ subnet: null }); + this.setSecurityGroup({ securityGroup: null }); + this.fetchSubnets({ vpc, region: this.selectedRegion }); + this.fetchSecurityGroups({ vpc, region: this.selectedRegion }); }, }, }; @@ -233,7 +315,12 @@ export default {

    {{ s__('ClusterIntegration|Enter the details for your Amazon EKS Kubernetes cluster') }}

    -

    +
    +
    + +
  • diff --git a/app/assets/javascripts/diffs/components/diff_content.vue b/app/assets/javascripts/diffs/components/diff_content.vue index 9a1e59ec04..a5ffa84e3f 100644 --- a/app/assets/javascripts/diffs/components/diff_content.vue +++ b/app/assets/javascripts/diffs/components/diff_content.vue @@ -124,8 +124,10 @@ export default { :diff-viewer-mode="diffViewerMode" :new-path="diffFile.new_path" :new-sha="diffFile.diff_refs.head_sha" + :new-size="diffFile.new_size" :old-path="diffFile.old_path" :old-sha="diffFile.diff_refs.base_sha" + :old-size="diffFile.old_size" :file-hash="diffFileHash" :project-path="projectPath" :a-mode="diffFile.a_mode" diff --git a/app/assets/javascripts/diffs/components/diff_file.vue b/app/assets/javascripts/diffs/components/diff_file.vue index 2514274224..9236f0d534 100644 --- a/app/assets/javascripts/diffs/components/diff_file.vue +++ b/app/assets/javascripts/diffs/components/diff_file.vue @@ -54,11 +54,12 @@ export default { showLoadingIcon() { return this.isLoadingCollapsedDiff || (!this.file.renderIt && !this.isCollapsed); }, - hasDiffLines() { + hasDiff() { return ( - this.file.highlighted_diff_lines && - this.file.parallel_diff_lines && - this.file.parallel_diff_lines.length > 0 + (this.file.highlighted_diff_lines && + this.file.parallel_diff_lines && + this.file.parallel_diff_lines.length > 0) || + !this.file.blob.readable_text ); }, isFileTooLarge() { @@ -82,7 +83,7 @@ export default { }, watch: { isCollapsed: function fileCollapsedWatch(newVal, oldVal) { - if (!newVal && oldVal && !this.hasDiffLines) { + if (!newVal && oldVal && !this.hasDiff) { this.handleLoadCollapsedDiff(); } @@ -103,7 +104,7 @@ export default { 'setFileCollapsed', ]), handleToggle() { - if (!this.hasDiffLines) { + if (!this.hasDiff) { this.handleLoadCollapsedDiff(); } else { this.isCollapsed = !this.isCollapsed; diff --git a/app/assets/javascripts/dropzone_input.js b/app/assets/javascripts/dropzone_input.js index 0ff26445a6..62b390a46d 100644 --- a/app/assets/javascripts/dropzone_input.js +++ b/app/assets/javascripts/dropzone_input.js @@ -290,5 +290,5 @@ export default function dropzoneInput(form) { formTextarea.focus(); }); - return Dropzone.forElement($formDropzone.get(0)); + return $formDropzone.get(0) ? Dropzone.forElement($formDropzone.get(0)) : null; } diff --git a/app/assets/javascripts/error_tracking/components/error_details.vue b/app/assets/javascripts/error_tracking/components/error_details.vue new file mode 100644 index 0000000000..37c9818f86 --- /dev/null +++ b/app/assets/javascripts/error_tracking/components/error_details.vue @@ -0,0 +1,141 @@ + + + diff --git a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue index cd298e2c69..88139ce740 100644 --- a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue +++ b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue @@ -1,11 +1,19 @@ @@ -71,10 +91,17 @@ export default {
    -
    +
    +
    - + @@ -94,13 +128,11 @@ export default {