From 1f125c8e22303cb8feb2384ac8c288f3d4a253d7 Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Wed, 4 Dec 2019 20:38:33 +0530 Subject: [PATCH] New upstream version 12.3.8 --- .dockerignore | 12 +- .eslintrc.yml | 1 - .gitattributes | 1 + .gitignore | 9 +- .gitlab-ci.yml | 29 +- .gitlab/CODEOWNERS | 13 +- .gitlab/ci/cng.gitlab-ci.yml | 8 +- .gitlab/ci/docs.gitlab-ci.yml | 75 +- .gitlab/ci/frontend.gitlab-ci.yml | 202 +- .gitlab/ci/global.gitlab-ci.yml | 165 +- .gitlab/ci/memory.gitlab-ci.yml | 17 +- .gitlab/ci/pages.gitlab-ci.yml | 25 +- .gitlab/ci/qa.gitlab-ci.yml | 45 +- .gitlab/ci/rails.gitlab-ci.yml | 477 +- .gitlab/ci/reports.gitlab-ci.yml | 252 +- .gitlab/ci/review.gitlab-ci.yml | 210 +- .gitlab/ci/setup.gitlab-ci.yml | 53 +- .gitlab/ci/test-metadata.gitlab-ci.yml | 56 +- .gitlab/ci/yaml.gitlab-ci.yml | 11 +- .gitlab/issue_templates/Feature proposal.md | 21 +- .gitlab/issue_templates/Problem_Validation.md | 41 + .../merge_request_templates/Documentation.md | 1 + .license_encryption_key.pub | 9 + .markdownlint.json | 30 + .mdlrc | 7 - .mdlrc.style | 32 - .overcommit.yml.example | 28 + .rubocop.yml | 78 +- .rubocop_todo.yml | 12 +- 16790-render-xml-artifacts.yml | 5 + CHANGELOG-EE.md | 5316 ++++++++++++++++ CHANGELOG.md | 495 +- CONTRIBUTING.md | 14 +- Dangerfile | 23 +- GITALY_SERVER_VERSION | 2 +- GITLAB_ELASTICSEARCH_INDEXER_VERSION | 2 +- GITLAB_PAGES_VERSION | 2 +- GITLAB_SHELL_VERSION | 2 +- GITLAB_WORKHORSE_VERSION | 2 +- Gemfile | 52 +- Gemfile.lock | 157 +- PHILOSOPHY.md | 5 +- PROCESS.md | 4 +- README.md | 13 +- VERSION | 2 +- .../admin/statistics_panel/components/app.vue | 45 + .../admin/statistics_panel/constants.js | 14 + .../admin/statistics_panel/index.js | 22 + .../admin/statistics_panel/store/actions.js | 28 + .../admin/statistics_panel/store/getters.js | 17 + .../admin/statistics_panel/store/index.js | 16 + .../statistics_panel/store/mutation_types.js | 3 + .../admin/statistics_panel/store/mutations.js | 16 + .../admin/statistics_panel/store/state.js | 5 + .../cycle_analytics/mixins/add_stage_mixin.js | 11 + app/assets/javascripts/api.js | 30 + .../behaviors/markdown/render_metrics.js | 2 +- .../javascripts/behaviors/preview_markdown.js | 4 +- .../behaviors/shortcuts/shortcuts.js | 2 - .../behaviors/shortcuts/shortcuts_issuable.js | 8 +- .../shortcuts/shortcuts_navigation.js | 2 - .../behaviors/shortcuts/shortcuts_network.js | 2 - .../behaviors/shortcuts/shortcuts_wiki.js | 2 - .../javascripts/blob/blob_file_dropzone.js | 8 +- .../javascripts/blob/template_selector.js | 4 +- app/assets/javascripts/blob/viewer/index.js | 3 +- .../javascripts/boards/components/board.js | 15 +- .../boards/components/board_card.vue | 1 + .../boards/components/board_list.vue | 1 + .../boards/components/board_new_issue.vue | 8 +- .../boards/components/board_sidebar.js | 2 + .../boards/components/boards_selector.vue | 2 + .../boards/components/new_list_dropdown.js | 25 +- .../boards/components/project_select.vue | 12 + .../components/sidebar/remove_issue.vue | 8 +- app/assets/javascripts/boards/models/issue.js | 29 +- app/assets/javascripts/boards/models/list.js | 16 +- .../boards/services/board_service.js | 6 +- .../javascripts/boards/stores/boards_store.js | 5 +- .../boards/stores/boards_store_ee.js | 2 +- .../javascripts/branches/divergence_graph.js | 5 + .../ci_variable_list/ci_variable_list.js | 2 +- .../javascripts/clusters/clusters_bundle.js | 98 +- .../clusters/components/applications.vue | 2 - .../clusters/services/clusters_service.js | 6 +- .../clusters/stores/clusters_store.js | 37 +- app/assets/javascripts/commit/image_file.js | 19 +- .../commit/pipelines/pipelines_table.vue | 97 +- .../javascripts/compare_autocomplete.js | 10 +- app/assets/javascripts/contextual_sidebar.js | 2 +- .../components/cluster_form_dropdown.vue | 182 + .../components/create_eks_cluster.vue | 14 + .../eks_cluster_configuration_form.vue | 25 + .../components/role_name_dropdown.vue | 53 + .../components/security_group_dropdown.vue | 0 .../components/service_credentials_form.vue | 3 + .../components/subnet_dropdown.vue | 0 .../eks_cluster/components/vpc_dropdown.vue | 0 .../create_cluster/eks_cluster/index.js | 19 + .../services/aws_services_facade.js | 0 .../eks_cluster/store/actions.js | 3 + .../eks_cluster/store/getters.js | 0 .../create_cluster/eks_cluster/store/index.js | 15 + .../eks_cluster/store/mutation_types.js | 0 .../eks_cluster/store/mutations.js | 0 .../create_cluster/eks_cluster/store/state.js | 19 + .../components/gke_dropdown_mixin.js | 0 .../components/gke_machine_type_dropdown.vue | 0 .../components/gke_project_id_dropdown.vue | 0 .../components/gke_zone_dropdown.vue | 0 .../gke_cluster}/constants.js | 0 .../gke_cluster}/index.js | 0 .../gke_cluster}/store/actions.js | 0 .../gke_cluster}/store/getters.js | 0 .../gke_cluster}/store/index.js | 0 .../gke_cluster}/store/mutation_types.js | 0 .../gke_cluster}/store/mutations.js | 0 .../gke_cluster}/store/state.js | 0 .../components/stage_card_list_item.vue | 44 + .../components/stage_code_component.vue | 2 +- .../components/stage_nav_item.vue | 88 + .../components/stage_review_component.vue | 2 +- .../cycle_analytics/cycle_analytics_bundle.js | 18 +- app/assets/javascripts/diff.js | 4 +- .../components/comment_resolve_btn.js | 12 +- .../components/jump_to_discussion.js | 14 +- .../diff_notes/components/resolve_count.js | 5 +- .../components/resolve_discussion_btn.js | 16 +- .../diff_notes/mixins/discussion.js | 8 +- .../javascripts/diff_notes/stores/comments.js | 14 +- .../javascripts/diffs/components/app.vue | 2 +- .../diffs/components/commit_item.vue | 2 +- .../diffs/components/commit_widget.vue | 2 +- .../diffs/components/diff_content.vue | 1 - .../diffs/components/diff_expansion_cell.vue | 6 +- .../diffs/components/diff_file_header.vue | 60 +- app/assets/javascripts/diffs/index.js | 8 +- app/assets/javascripts/droplab/drop_lab.js | 4 +- .../components/environment_actions.vue | 2 +- .../components/environment_item.vue | 22 +- .../components/error_tracking_list.vue | 20 +- .../javascripts/error_tracking/index.js | 4 +- .../event_tracking/issue_sidebar.js | 2 + .../filtered_search_manager.js | 2 +- app/assets/javascripts/flash.js | 21 +- app/assets/javascripts/gl_dropdown.js | 138 +- app/assets/javascripts/gl_dropdown/render.js | 158 + .../javascripts/groups/components/app.vue | 7 +- .../groups/service/groups_service.js | 21 +- .../javascripts/groups/transfer_dropdown.js | 3 +- .../ide/components/commit_sidebar/actions.vue | 18 +- .../new_merge_request_option.vue | 33 +- .../ide/components/error_message.vue | 2 +- .../ide/components/file_row_extra.vue | 2 +- .../ide/components/panes/right.vue | 3 +- app/assets/javascripts/ide/stores/getters.js | 3 + .../ide/stores/modules/commit/actions.js | 23 +- .../ide/stores/modules/commit/getters.js | 12 +- .../stores/modules/commit/mutation_types.js | 1 - .../ide/stores/modules/commit/mutations.js | 3 - .../ide/stores/modules/commit/state.js | 3 +- app/assets/javascripts/ide/stores/utils.js | 2 +- .../javascripts/image_diff/helpers/index.js | 1 - .../image_diff/helpers/init_image_diff.js | 27 + .../image_diff/helpers/utils_helper.js | 25 - .../image_diff/init_discussion_tab.js | 4 +- app/assets/javascripts/issue.js | 3 +- .../javascripts/issue_show/components/app.vue | 4 +- .../issue_show/components/edit_actions.vue | 2 +- app/assets/javascripts/issue_show/index.js | 4 + .../javascripts/issue_show/services/index.js | 4 +- .../jobs/components/environments_block.vue | 35 +- .../javascripts/jobs/components/job_app.vue | 10 +- .../jobs/components/job_log_json.vue | 10 + .../jobs/components/log/duration_badge.vue | 15 + .../javascripts/jobs/components/log/line.vue | 28 + .../jobs/components/log/line_header.vue | 57 + .../jobs/components/log/line_number.vue | 55 + .../javascripts/jobs/components/log/log.vue | 52 + app/assets/javascripts/jobs/index.js | 2 + app/assets/javascripts/jobs/store/actions.js | 8 + .../javascripts/jobs/store/mutation_types.js | 1 + .../javascripts/jobs/store/mutations.js | 28 +- app/assets/javascripts/jobs/store/state.js | 5 +- app/assets/javascripts/jobs/store/utils.js | 91 + app/assets/javascripts/label_manager.js | 5 +- app/assets/javascripts/labels_select.js | 41 +- app/assets/javascripts/lazy_loader.js | 2 +- .../javascripts/lib/utils/axios_utils.js | 11 +- .../javascripts/lib/utils/common_utils.js | 60 + .../javascripts/lib/utils/http_status.js | 1 + app/assets/javascripts/lib/utils/notify.js | 6 +- .../javascripts/lib/utils/text_markdown.js | 4 +- .../javascripts/lib/utils/url_utility.js | 8 +- app/assets/javascripts/locale/sprintf.js | 2 +- app/assets/javascripts/main.js | 19 +- app/assets/javascripts/members.js | 2 + .../components/diff_file_editor.js | 4 +- .../merge_conflicts/merge_conflict_store.js | 8 +- app/assets/javascripts/merge_request_tabs.js | 6 +- app/assets/javascripts/milestone_select.js | 14 +- .../monitoring/components/charts/column.vue | 2 +- .../components/charts/empty_chart.vue | 2 +- .../components/charts/single_stat.vue | 2 +- .../charts/{area.vue => time_series.vue} | 173 +- .../monitoring/components/dashboard.vue | 28 +- .../monitoring/components/embed.vue | 7 +- .../monitoring/components/graph_group.vue | 38 +- .../monitoring/components/panel_type.vue | 8 +- .../javascripts/monitoring/constants.js | 9 + app/assets/javascripts/namespace_select.js | 12 +- .../javascripts/network/branch_graph.js | 12 +- app/assets/javascripts/notes.js | 44 +- .../notes/components/discussion_actions.vue | 10 +- .../notes/components/note_body.vue | 1 + .../notes/components/noteable_note.vue | 33 +- .../notes/components/notes_app.vue | 4 +- .../notes/services/notes_service.js | 19 +- .../javascripts/notes/stores/actions.js | 150 +- .../javascripts/notes/stores/getters.js | 39 +- .../{show => general}/index.js | 0 .../javascripts/pages/admin/clusters/index.js | 2 +- app/assets/javascripts/pages/admin/index.js | 7 +- .../javascripts/pages/groups/edit/index.js | 2 + app/assets/javascripts/pages/groups/index.js | 2 +- .../pages/profiles/two_factor_auths/index.js | 5 +- .../pages/projects/clusters/new/index.js | 7 + .../javascripts/pages/projects/edit/index.js | 4 +- .../show/stat_graph_contributors_util.js | 34 +- .../javascripts/pages/projects/index.js | 2 +- .../pages/projects/issues/designs/index.js | 1 + .../javascripts/pages/projects/project.js | 17 +- .../permissions/components/settings_panel.vue | 8 + .../projects/shared/permissions/constants.js | 2 +- .../javascripts/pages/projects/wikis/wikis.js | 42 +- .../javascripts/pages/search/show/search.js | 4 +- .../services/performance_bar_service.js | 9 - .../components/graph/graph_component.vue | 39 +- .../pipelines/components/pipeline_url.vue | 4 +- .../components/pipelines_actions.vue | 2 +- app/assets/javascripts/pipelines/constants.js | 1 + .../pipelines/mixins/graph_component_mixin.js | 10 + .../pipelines/mixins/graph_width_mixin.js | 50 + .../javascripts/pipelines/mixins/pipelines.js | 32 +- .../pipelines/services/pipelines_service.js | 6 + .../pipelines/stores/pipelines_store.js | 12 + app/assets/javascripts/profile/gl_crop.js | 15 +- app/assets/javascripts/project_find_file.js | 7 +- app/assets/javascripts/project_select.js | 10 +- .../commit_pipeline_status_component.vue | 4 +- .../javascripts/registry/components/app.vue | 101 +- .../registry/components/svg_message.vue | 26 - .../releases/components/milestone_list.vue | 45 + .../releases/components/release_block.vue | 24 +- app/assets/javascripts/right_sidebar.js | 14 +- app/assets/javascripts/search_autocomplete.js | 21 +- .../components/assignees/assignee_avatar.vue | 48 + .../assignees/assignee_avatar_link.vue | 83 + .../components/assignees/assignee_title.vue | 13 +- .../components/assignees/assignees.vue | 212 +- .../assignees/collapsed_assignee.vue | 27 + .../assignees/collapsed_assignee_list.vue | 121 + .../assignees/sidebar_assignees.vue | 10 +- .../assignees/uncollapsed_assignee_list.vue | 96 + .../confidential_issue_sidebar.vue | 8 +- .../components/lock/lock_issue_sidebar.vue | 7 +- .../subscriptions/subscriptions.vue | 3 + .../sidebar/services/sidebar_service.js | 23 +- .../javascripts/sidebar/sidebar_mediator.js | 32 +- app/assets/javascripts/single_file_diff.js | 4 +- .../javascripts/test_utils/simulate_drag.js | 14 +- app/assets/javascripts/tracking.js | 35 +- .../{project_edit.js => transfer_edit.js} | 6 +- app/assets/javascripts/users_select.js | 116 +- .../components/comment.js | 39 - .../components/comment_mr_note.js | 31 - .../components/comment_post.js | 145 - .../components/comment_storage.js | 20 - .../components/form_elements.js | 17 - .../visual_review_toolbar/components/index.js | 23 - .../visual_review_toolbar/components/login.js | 47 - .../visual_review_toolbar/components/mr_id.js | 63 - .../visual_review_toolbar/components/note.js | 35 - .../visual_review_toolbar/components/utils.js | 51 - .../components/wrapper.js | 79 - .../components/wrapper_icons.js | 15 - .../visual_review_toolbar/index.js | 51 - .../visual_review_toolbar/shared/constants.js | 56 - .../visual_review_toolbar/shared/index.js | 55 - .../shared/storage_utils.js | 42 - .../visual_review_toolbar/store/events.js | 73 - .../visual_review_toolbar/store/index.js | 11 - .../visual_review_toolbar/store/state.js | 95 - .../visual_review_toolbar/store/utils.js | 15 - .../visual_review_toolbar/styles/toolbar.css | 188 - .../components/mr_widget_pipeline.vue | 54 +- .../components/states/mr_widget_rebase.vue | 1 + .../components/states/ready_to_merge.vue | 5 +- .../vue_merge_request_widget/constants.js | 8 +- .../mixins/ready_to_merge.js | 5 + .../services/mr_widget_service.js | 2 +- .../stores/mr_widget_store.js | 9 +- .../components/changed_file_icon.vue | 4 +- .../vue_shared/components/ci_badge_link.vue | 2 +- .../vue_shared/components/ci_icon.vue | 2 +- .../vue_shared/components/file_row.vue | 8 +- .../vue_shared/components/gl_countdown.vue | 1 + .../vue_shared/components/gl_toggle_vuex.vue | 49 + .../vue_shared/components/markdown/field.vue | 7 +- .../project_selector/project_selector.vue | 11 +- .../vue_shared/components/recaptcha_modal.vue | 7 + .../sidebar/collapsed_grouped_date_picker.vue | 4 +- .../vue_shared/directives/autofocusonshow.js | 39 + .../vue_shared/plugins/global_toast.js | 8 + app/assets/javascripts/zen_mode.js | 4 +- .../stylesheets/bootstrap_migration.scss | 2 +- app/assets/stylesheets/csslab.scss | 1 - app/assets/stylesheets/errors.scss | 2 +- app/assets/stylesheets/framework/badges.scss | 2 +- app/assets/stylesheets/framework/common.scss | 4 + app/assets/stylesheets/framework/flash.scss | 47 + app/assets/stylesheets/framework/forms.scss | 24 - app/assets/stylesheets/framework/header.scss | 2 - .../stylesheets/framework/highlight.scss | 2 +- app/assets/stylesheets/framework/job_log.scss | 49 + app/assets/stylesheets/framework/layout.scss | 9 + app/assets/stylesheets/framework/modal.scss | 6 + .../stylesheets/framework/snippets.scss | 4 - .../stylesheets/framework/sortable.scss | 18 + .../stylesheets/framework/typography.scss | 26 +- .../stylesheets/framework/variables.scss | 8 +- .../mailers/highlighted_diff_email.scss | 2 +- app/assets/stylesheets/pages/boards.scss | 17 +- app/assets/stylesheets/pages/clusters.scss | 9 + app/assets/stylesheets/pages/commits.scss | 2 +- .../stylesheets/pages/container_registry.scss | 4 - .../stylesheets/pages/cycle_analytics.scss | 60 +- app/assets/stylesheets/pages/diff.scss | 31 +- app/assets/stylesheets/pages/issuable.scss | 31 +- app/assets/stylesheets/pages/issues.scss | 4 - .../stylesheets/pages/merge_requests.scss | 4 - app/assets/stylesheets/pages/notes.scss | 4 +- app/assets/stylesheets/pages/pipelines.scss | 10 +- app/assets/stylesheets/pages/projects.scss | 10 +- app/assets/stylesheets/pages/reports.scss | 5 - app/assets/stylesheets/pages/search.scss | 16 +- app/assets/stylesheets/pages/settings.scss | 10 +- app/assets/stylesheets/pages/todos.scss | 16 +- app/assets/stylesheets/pages/wiki.scss | 29 +- app/assets/stylesheets/utilities.scss | 6 + .../admin/application_controller.rb | 2 + .../admin/application_settings_controller.rb | 19 +- .../admin/applications_controller.rb | 4 +- app/controllers/admin/clusters_controller.rb | 2 + app/controllers/admin/dashboard_controller.rb | 5 +- app/controllers/admin/groups_controller.rb | 8 +- .../admin/health_check_controller.rb | 2 + app/controllers/admin/logs_controller.rb | 2 + app/controllers/admin/projects_controller.rb | 2 + app/controllers/admin/services_controller.rb | 2 +- app/controllers/admin/users_controller.rb | 2 + app/controllers/application_controller.rb | 8 +- app/controllers/autocomplete_controller.rb | 4 +- app/controllers/boards/issues_controller.rb | 4 +- app/controllers/boards/lists_controller.rb | 28 +- app/controllers/clusters/base_controller.rb | 4 + .../clusters/clusters_controller.rb | 20 +- app/controllers/concerns/boards_actions.rb | 2 + app/controllers/concerns/boards_responses.rb | 2 + .../concerns/cycle_analytics_params.rb | 2 + app/controllers/concerns/internal_redirect.rb | 2 + app/controllers/concerns/invisible_captcha.rb | 4 +- app/controllers/concerns/issuable_actions.rb | 31 + .../concerns/issuable_collections.rb | 86 +- .../concerns/issuable_collections_action.rb | 2 +- app/controllers/concerns/lfs_request.rb | 4 +- app/controllers/concerns/notes_actions.rb | 5 + .../concerns/paginated_collection.rb | 19 + .../concerns/record_user_last_activity.rb | 2 +- app/controllers/concerns/renders_assignees.rb | 7 + app/controllers/concerns/routable_actions.rb | 2 + app/controllers/concerns/service_params.rb | 4 +- .../concerns/sessionless_authentication.rb | 4 +- .../concerns/sorting_preference.rb | 85 + .../static_object_external_storage.rb | 24 + .../concerns/toggle_award_emoji.rb | 19 +- .../concerns/with_performance_bar.rb | 18 +- app/controllers/confirmations_controller.rb | 2 + .../dashboard/milestones_controller.rb | 2 +- .../dashboard/projects_controller.rb | 27 +- .../dashboard/snippets_controller.rb | 17 +- app/controllers/dashboard/todos_controller.rb | 32 +- .../explore/projects_controller.rb | 19 +- .../explore/snippets_controller.rb | 13 +- .../groups/application_controller.rb | 2 + app/controllers/groups/clusters_controller.rb | 2 + .../groups/group_members_controller.rb | 2 + .../groups/milestones_controller.rb | 2 + app/controllers/groups/runners_controller.rb | 2 +- app/controllers/groups_controller.rb | 4 +- app/controllers/ide_controller.rb | 2 + app/controllers/import/github_controller.rb | 4 +- .../import/gitlab_projects_controller.rb | 2 +- app/controllers/import/manifest_controller.rb | 2 +- app/controllers/jwt_controller.rb | 1 + .../ldap/omniauth_callbacks_controller.rb | 2 + .../omniauth_callbacks_controller.rb | 2 + app/controllers/passwords_controller.rb | 2 + .../profiles/accounts_controller.rb | 2 + .../profiles/preferences_controller.rb | 5 +- app/controllers/profiles_controller.rb | 9 + .../autocomplete_sources_controller.rb | 2 + app/controllers/projects/blob_controller.rb | 8 +- .../projects/branches_controller.rb | 2 +- .../projects/clusters_controller.rb | 2 + .../projects/commits_controller.rb | 2 +- .../projects/cycle_analytics_controller.rb | 2 +- .../projects/environments_controller.rb | 8 +- app/controllers/projects/forks_controller.rb | 17 +- .../projects/git_http_client_controller.rb | 2 + .../projects/git_http_controller.rb | 2 + .../projects/group_links_controller.rb | 2 + .../projects/imports_controller.rb | 2 + app/controllers/projects/issues_controller.rb | 17 +- app/controllers/projects/jobs_controller.rb | 17 + .../projects/lfs_api_controller.rb | 4 +- .../merge_requests/application_controller.rb | 2 + .../merge_requests/creations_controller.rb | 6 +- .../merge_requests/diffs_controller.rb | 2 + .../projects/merge_requests_controller.rb | 17 +- .../projects/mirrors_controller.rb | 2 + .../projects/network_controller.rb | 2 +- app/controllers/projects/notes_controller.rb | 4 +- .../projects/pipelines_controller.rb | 37 +- .../projects/project_members_controller.rb | 2 + .../projects/prometheus/metrics_controller.rb | 2 + .../projects/protected_refs_controller.rb | 2 + .../projects/repositories_controller.rb | 6 + .../projects/services_controller.rb | 27 +- .../projects/settings/ci_cd_controller.rb | 2 + .../settings/integrations_controller.rb | 2 + .../settings/operations_controller.rb | 4 +- .../settings/repository_controller.rb | 2 + .../projects/snippets_controller.rb | 19 +- .../projects/starrers_controller.rb | 4 +- app/controllers/projects/wikis_controller.rb | 31 +- app/controllers/projects_controller.rb | 9 +- app/controllers/registrations_controller.rb | 5 +- app/controllers/root_controller.rb | 4 +- .../sent_notifications_controller.rb | 2 + app/controllers/sessions_controller.rb | 8 +- app/controllers/snippets_controller.rb | 10 +- app/controllers/users_controller.rb | 14 +- app/finders/autocomplete/users_finder.rb | 2 + app/finders/award_emojis_finder.rb | 55 + app/finders/awarded_emoji_finder.rb | 21 - app/finders/environments_finder.rb | 2 +- app/finders/group_members_finder.rb | 2 + app/finders/group_projects_finder.rb | 14 +- app/finders/issuable_finder.rb | 94 +- app/finders/issues_finder.rb | 2 + app/finders/license_template_finder.rb | 2 + app/finders/members_finder.rb | 35 +- app/finders/merge_requests_finder.rb | 2 + app/finders/notes_finder.rb | 2 + app/finders/projects_finder.rb | 2 + app/finders/template_finder.rb | 2 + app/finders/todos_finder.rb | 9 +- app/finders/users_finder.rb | 2 + app/graphql/functions/base_function.rb | 6 - app/graphql/functions/echo.rb | 15 - app/graphql/gitlab_schema.rb | 2 +- app/graphql/mutations/award_emojis/add.rb | 9 +- app/graphql/mutations/award_emojis/remove.rb | 15 +- app/graphql/mutations/award_emojis/toggle.rb | 14 +- app/graphql/mutations/notes/create/base.rb | 4 +- app/graphql/resolvers/echo_resolver.rb | 14 + app/graphql/resolvers/full_path_resolver.rb | 4 +- app/graphql/resolvers/issues_resolver.rb | 27 +- .../resolvers/merge_requests_resolver.rb | 6 +- .../resolvers/namespace_projects_resolver.rb | 4 +- app/graphql/types/ci/detailed_status_type.rb | 16 +- app/graphql/types/ci/pipeline_type.rb | 22 +- app/graphql/types/commit_type.rb | 16 +- app/graphql/types/group_type.rb | 8 +- app/graphql/types/issue_type.rb | 48 +- app/graphql/types/label_type.rb | 8 +- app/graphql/types/merge_request_type.rb | 84 +- app/graphql/types/metadata_type.rb | 4 +- app/graphql/types/milestone_type.rb | 14 +- app/graphql/types/mutation_type.rb | 2 + app/graphql/types/namespace_type.rb | 25 +- app/graphql/types/notes/diff_position_type.rb | 4 +- app/graphql/types/notes/discussion_type.rb | 4 +- app/graphql/types/notes/note_type.rb | 8 +- app/graphql/types/notes/noteable_type.rb | 2 + app/graphql/types/order.rb | 8 - .../permission_types/base_permission_type.rb | 2 +- app/graphql/types/permission_types/issue.rb | 2 + app/graphql/types/permission_types/project.rb | 4 +- app/graphql/types/project_statistics_type.rb | 14 +- app/graphql/types/project_type.rb | 78 +- app/graphql/types/query_type.rb | 2 +- app/graphql/types/repository_type.rb | 8 +- .../types/root_storage_statistics_type.rb | 16 + app/graphql/types/sort.rb | 10 - app/graphql/types/sort_enum.rb | 13 + app/graphql/types/task_completion_status.rb | 4 +- app/graphql/types/tree/blob_type.rb | 4 +- app/graphql/types/tree/entry_type.rb | 10 +- app/graphql/types/tree/submodule_type.rb | 4 +- app/graphql/types/tree/tree_entry_type.rb | 2 +- app/graphql/types/tree/tree_type.rb | 8 +- app/graphql/types/user_type.rb | 8 +- app/helpers/appearances_helper.rb | 2 + app/helpers/application_helper.rb | 21 + app/helpers/application_settings_helper.rb | 12 + app/helpers/auth_helper.rb | 6 + app/helpers/avatars_helper.rb | 9 +- app/helpers/award_emoji_helper.rb | 2 + app/helpers/boards_helper.rb | 4 +- app/helpers/branches_helper.rb | 2 + app/helpers/button_helper.rb | 2 + app/helpers/ci_status_helper.rb | 3 +- app/helpers/clusters_helper.rb | 2 + app/helpers/dashboard_helper.rb | 2 + app/helpers/diff_helper.rb | 2 - app/helpers/emails_helper.rb | 4 +- app/helpers/environments_helper.rb | 2 + app/helpers/events_helper.rb | 4 +- app/helpers/external_link_helper.rb | 9 + app/helpers/form_helper.rb | 2 + app/helpers/gitlab_routing_helper.rb | 2 + app/helpers/groups/group_members_helper.rb | 4 +- app/helpers/groups_helper.rb | 2 + app/helpers/import_helper.rb | 11 +- app/helpers/issuables_helper.rb | 14 +- app/helpers/issues_helper.rb | 29 + app/helpers/jobs_helper.rb | 19 + app/helpers/kerberos_spnego_helper.rb | 2 + app/helpers/labels_helper.rb | 2 + app/helpers/merge_requests_helper.rb | 2 + app/helpers/milestones_helper.rb | 2 + app/helpers/mirror_helper.rb | 2 + app/helpers/namespaces_helper.rb | 2 + app/helpers/nav_helper.rb | 2 + app/helpers/notes_helper.rb | 6 +- app/helpers/onboarding_experiment_helper.rb | 4 +- app/helpers/page_layout_helper.rb | 1 - app/helpers/performance_bar_helper.rb | 4 +- app/helpers/preferences_helper.rb | 2 + app/helpers/projects/error_tracking_helper.rb | 3 +- app/helpers/projects_helper.rb | 35 +- app/helpers/recaptcha_experiment_helper.rb | 2 + app/helpers/releases_helper.rb | 38 + app/helpers/runners_helper.rb | 4 +- app/helpers/safe_params_helper.rb | 2 - app/helpers/search_helper.rb | 43 +- app/helpers/selects_helper.rb | 2 + app/helpers/services_helper.rb | 6 + app/helpers/sorting_helper.rb | 2 + app/helpers/system_note_helper.rb | 6 + app/helpers/tab_helper.rb | 2 + app/helpers/todos_helper.rb | 20 +- app/helpers/tree_helper.rb | 2 + app/helpers/user_callouts_helper.rb | 8 +- app/helpers/users_helper.rb | 2 + app/helpers/version_check_helper.rb | 4 +- app/mailers/emails/issues.rb | 2 +- app/mailers/emails/merge_requests.rb | 2 + app/mailers/emails/notes.rb | 33 +- app/mailers/emails/projects.rb | 2 + app/mailers/notify.rb | 17 +- app/mailers/previews/notify_preview.rb | 2 + .../cycle_analytics/project_stage.rb | 5 + app/models/application_setting.rb | 51 +- .../application_setting_implementation.rb | 4 + app/models/audit_event.rb | 2 + app/models/award_emoji.rb | 10 +- app/models/blob.rb | 2 + app/models/blob_viewer/base.rb | 2 +- app/models/board.rb | 3 + app/models/broadcast_message.rb | 4 +- app/models/ci/artifact_blob.rb | 2 +- app/models/ci/bridge.rb | 2 + app/models/ci/build.rb | 28 +- app/models/ci/build_metadata.rb | 49 +- app/models/ci/build_runner_session.rb | 4 +- app/models/ci/job_artifact.rb | 4 + app/models/ci/pipeline.rb | 55 +- app/models/ci/pipeline_enums.rb | 5 +- app/models/ci/runner.rb | 33 +- .../clusters/applications/cert_manager.rb | 33 +- app/models/clusters/applications/ingress.rb | 23 +- app/models/clusters/applications/jupyter.rb | 9 +- app/models/clusters/applications/knative.rb | 6 +- .../clusters/applications/prometheus.rb | 2 + app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/cluster.rb | 45 +- .../clusters/concerns/application_core.rb | 4 + app/models/clusters/platforms/kubernetes.rb | 2 + app/models/commit.rb | 8 +- app/models/commit_status.rb | 2 + app/models/commit_status_enums.rb | 2 + .../analytics/cycle_analytics/stage.rb | 68 + app/models/concerns/avatarable.rb | 2 +- app/models/concerns/awardable.rb | 26 +- app/models/concerns/cacheable_attributes.rb | 2 +- app/models/concerns/ci/metadatable.rb | 9 + app/models/concerns/group_descendant.rb | 2 +- app/models/concerns/has_status.rb | 3 +- app/models/concerns/ignorable_column.rb | 30 - app/models/concerns/issuable.rb | 26 +- app/models/concerns/issuable_states.rb | 2 +- app/models/concerns/label_eventable.rb | 2 +- app/models/concerns/mentionable.rb | 2 + .../concerns/mentionable/reference_regexes.rb | 2 + app/models/concerns/noteable.rb | 11 + .../concerns/notification_branch_selection.rb | 39 + app/models/concerns/participable.rb | 3 +- app/models/concerns/prometheus_adapter.rb | 2 + app/models/concerns/protected_ref.rb | 6 + app/models/concerns/protected_ref_access.rb | 17 +- app/models/concerns/reactive_caching.rb | 6 +- app/models/concerns/relative_positioning.rb | 2 +- app/models/concerns/routable.rb | 12 +- app/models/concerns/sha_attribute.rb | 4 +- app/models/concerns/sortable.rb | 6 +- app/models/concerns/taskable.rb | 4 +- app/models/container_repository.rb | 2 + app/models/deploy_key.rb | 3 +- app/models/deploy_token.rb | 4 +- app/models/deployment.rb | 8 + app/models/diff_note.rb | 15 +- app/models/diff_viewer/base.rb | 2 +- app/models/discussion_note.rb | 3 + app/models/environment.rb | 4 +- app/models/epic.rb | 2 + app/models/event.rb | 18 +- app/models/external_pull_request.rb | 96 + app/models/global_milestone.rb | 1 + app/models/gpg_key.rb | 4 +- app/models/group.rb | 8 + app/models/group_milestone.rb | 1 + app/models/hooks/project_hook.rb | 2 + app/models/identity.rb | 2 + app/models/identity/uniqueness_scopes.rb | 2 + app/models/individual_note_discussion.rb | 2 +- app/models/instance_configuration.rb | 4 +- app/models/issue.rb | 20 +- app/models/issue_assignee.rb | 2 + app/models/key.rb | 2 + app/models/label.rb | 6 +- app/models/label_note.rb | 2 + app/models/legacy_diff_note.rb | 2 + app/models/lfs_object.rb | 3 + app/models/list.rb | 55 +- app/models/list_user_preference.rb | 10 + app/models/member.rb | 4 +- app/models/members/group_member.rb | 6 +- app/models/members/project_member.rb | 4 +- app/models/members_preloader.rb | 2 + app/models/merge_request.rb | 48 +- app/models/merge_request_diff.rb | 11 +- app/models/merge_request_diff_file.rb | 2 +- app/models/milestone.rb | 14 +- app/models/milestone_release.rb | 19 + app/models/namespace.rb | 2 + app/models/namespace/aggregation_schedule.rb | 2 +- .../namespace/root_storage_statistics.rb | 2 + app/models/network/graph.rb | 2 +- app/models/note.rb | 25 +- app/models/note_diff_file.rb | 6 +- app/models/notification_reason.rb | 6 +- app/models/notification_setting.rb | 6 +- app/models/oauth_access_token.rb | 2 + app/models/pages/lookup_path.rb | 38 + app/models/pages/virtual_domain.rb | 28 + app/models/pages_domain.rb | 10 +- app/models/pool_repository.rb | 2 + app/models/project.rb | 59 +- app/models/project_authorization.rb | 1 + app/models/project_ci_cd_setting.rb | 2 + app/models/project_feature.rb | 16 + app/models/project_group_link.rb | 2 + app/models/project_import_data.rb | 2 + app/models/project_import_state.rb | 2 + .../project_services/bugzilla_service.rb | 2 - .../project_services/buildkite_service.rb | 2 +- .../chat_message/base_message.rb | 2 + .../chat_message/merge_message.rb | 2 + .../chat_message/push_message.rb | 8 +- .../chat_notification_service.rb | 51 +- .../custom_issue_tracker_service.rb | 2 - app/models/project_services/data_fields.rb | 52 +- .../project_services/discord_service.rb | 2 +- .../gitlab_issue_tracker_service.rb | 2 - .../project_services/hangouts_chat_service.rb | 2 +- .../project_services/hipchat_service.rb | 2 + .../project_services/issue_tracker_data.rb | 3 - .../project_services/issue_tracker_service.rb | 69 +- app/models/project_services/jira_service.rb | 35 +- .../project_services/jira_tracker_data.rb | 7 - .../project_services/mattermost_service.rb | 2 + .../microsoft_teams_service.rb | 4 +- .../mock_deployment_service.rb | 2 + .../pipelines_email_service.rb | 32 +- .../pivotaltracker_service.rb | 2 +- .../project_services/pushover_service.rb | 2 +- .../project_services/redmine_service.rb | 2 - app/models/project_services/slack_service.rb | 24 + .../slash_commands_service.rb | 4 +- .../project_services/youtrack_service.rb | 2 - app/models/project_statistics.rb | 2 + app/models/project_team.rb | 2 + app/models/project_wiki.rb | 6 + app/models/prometheus_metric.rb | 2 + app/models/prometheus_metric_enums.rb | 2 + app/models/protected_branch.rb | 5 + app/models/push_event_payload.rb | 2 + app/models/release.rb | 4 + app/models/remote_mirror.rb | 3 + app/models/repository.rb | 46 +- app/models/resource_label_event.rb | 4 +- app/models/service.rb | 17 +- app/models/snippet.rb | 5 +- app/models/system_note_metadata.rb | 2 + app/models/todo.rb | 14 +- app/models/upload.rb | 2 + app/models/user.rb | 37 +- app/models/user_callout_enums.rb | 4 +- app/models/user_preference.rb | 2 + app/models/user_status.rb | 2 +- app/models/users_star_project.rb | 1 + app/policies/base_policy.rb | 2 + app/policies/board_policy.rb | 18 + app/policies/ci/build_policy.rb | 2 + app/policies/clusters/instance_policy.rb | 1 + app/policies/concerns/find_group_projects.rb | 13 + app/policies/concerns/policy_actor.rb | 2 + app/policies/environment_policy.rb | 2 + app/policies/global_policy.rb | 2 + app/policies/group_member_policy.rb | 2 + app/policies/group_policy.rb | 8 +- app/policies/identity_provider_policy.rb | 2 + app/policies/issue_policy.rb | 2 + app/policies/merge_request_policy.rb | 2 + .../root_storage_statistics_policy.rb | 5 + app/policies/namespace_policy.rb | 3 + app/policies/project_policy.rb | 5 + app/policies/project_snippet_policy.rb | 4 +- app/policies/protected_branch_policy.rb | 2 + app/presenters/README.md | 2 +- app/presenters/blob_presenter.rb | 18 +- app/presenters/blobs/unfold_presenter.rb | 51 +- app/presenters/ci/build_metadata_presenter.rb | 3 +- app/presenters/ci/build_runner_presenter.rb | 4 +- app/presenters/ci/pipeline_presenter.rb | 14 + app/presenters/clusterable_presenter.rb | 11 +- app/presenters/commit_status_presenter.rb | 3 +- app/presenters/event_presenter.rb | 20 + app/presenters/group_clusterable_presenter.rb | 2 + app/presenters/group_member_presenter.rb | 2 + .../instance_clusterable_presenter.rb | 6 +- app/presenters/label_presenter.rb | 2 + app/presenters/member_presenter.rb | 2 + app/presenters/merge_request_presenter.rb | 2 + .../project_clusterable_presenter.rb | 2 + app/presenters/project_member_presenter.rb | 2 + app/presenters/project_presenter.rb | 2 + app/serializers/README.md | 8 +- app/serializers/blob_entity.rb | 2 + app/serializers/board_simple_entity.rb | 2 + app/serializers/build_details_entity.rb | 2 + app/serializers/cluster_basic_entity.rb | 10 + app/serializers/current_board_entity.rb | 2 + app/serializers/deployment_entity.rb | 8 +- app/serializers/deployment_serializer.rb | 2 +- app/serializers/discussion_serializer.rb | 2 + app/serializers/entity_date_helper.rb | 14 +- app/serializers/environment_entity.rb | 2 + .../issuable_sidebar_basic_entity.rb | 3 + app/serializers/issue_board_entity.rb | 2 + app/serializers/issue_entity.rb | 9 +- app/serializers/issue_sidebar_basic_entity.rb | 2 + .../issue_sidebar_extras_entity.rb | 2 + .../merge_request_noteable_entity.rb | 53 + ...merge_request_poll_cached_widget_entity.rb | 2 +- .../merge_request_poll_widget_entity.rb | 12 +- app/serializers/merge_request_serializer.rb | 4 +- .../merge_request_sidebar_basic_entity.rb | 9 + .../merge_request_widget_entity.rb | 18 +- app/serializers/pipeline_details_entity.rb | 2 + app/serializers/pipeline_entity.rb | 16 +- app/serializers/pipeline_serializer.rb | 2 + app/serializers/project_mirror_entity.rb | 2 + app/serializers/user_preference_entity.rb | 2 + .../access_token_validation_service.rb | 2 +- .../application_settings/update_service.rb | 8 +- app/services/applications/create_service.rb | 4 +- app/services/audit_event_service.rb | 10 +- ...ntainer_registry_authentication_service.rb | 14 +- app/services/auto_merge_service.rb | 4 +- app/services/award_emojis/add_service.rb | 42 + app/services/award_emojis/base_service.rb | 32 + .../collect_user_emoji_service.rb | 23 + app/services/award_emojis/destroy_service.rb | 21 + app/services/award_emojis/toggle_service.rb | 13 + app/services/base_count_service.rb | 4 +- app/services/boards/base_service.rb | 2 + app/services/boards/create_service.rb | 2 + app/services/boards/issues/create_service.rb | 2 + app/services/boards/issues/list_service.rb | 2 + app/services/boards/issues/move_service.rb | 2 + app/services/boards/list_service.rb | 2 + app/services/boards/lists/create_service.rb | 2 + app/services/boards/lists/list_service.rb | 4 +- app/services/boards/lists/update_service.rb | 52 + app/services/boards/update_service.rb | 2 + .../chat_names/authorize_user_service.rb | 10 +- app/services/ci/archive_trace_service.rb | 2 +- .../ci/compare_reports_base_service.rb | 2 +- app/services/ci/create_pipeline_service.rb | 27 +- .../ci/expire_pipeline_cache_service.rb | 2 + app/services/ci/pipeline_schedule_service.rb | 2 +- app/services/ci/pipeline_trigger_service.rb | 2 + app/services/ci/process_build_service.rb | 2 + app/services/ci/register_job_service.rb | 4 +- app/services/ci/update_build_queue_service.rb | 4 + .../clusters/applications/base_service.rb | 4 + .../check_installation_progress_service.rb | 31 +- .../applications/check_progress_service.rb | 50 + .../check_uninstall_progress_service.rb | 35 +- .../clusters/applications/create_service.rb | 2 +- .../clusters/applications/destroy_service.rb | 2 +- .../clusters/applications/update_service.rb | 2 +- app/services/clusters/create_service.rb | 4 +- .../clusters/gcp/finalize_creation_service.rb | 8 +- app/services/clusters/gcp/kubernetes.rb | 16 - .../create_or_update_namespace_service.rb | 47 - ...reate_or_update_service_account_service.rb | 141 - .../fetch_kubernetes_token_service.rb | 42 - .../create_or_update_namespace_service.rb | 45 + ...reate_or_update_service_account_service.rb | 139 + .../fetch_kubernetes_token_service.rb | 40 + .../clusters/kubernetes/kubernetes.rb | 14 + app/services/commits/create_service.rb | 2 + app/services/deploy_keys/create_service.rb | 2 + app/services/emails/create_service.rb | 2 + app/services/emails/destroy_service.rb | 2 + app/services/event_create_service.rb | 15 +- .../create_pipeline_service.rb | 29 + app/services/git/base_hooks_service.rb | 28 +- app/services/git/branch_hooks_service.rb | 4 +- app/services/git/branch_push_service.rb | 2 + app/services/git/tag_hooks_service.rb | 2 + app/services/git/wiki_push_service.rb | 2 + app/services/groups/create_service.rb | 2 + app/services/groups/destroy_service.rb | 2 + app/services/groups/update_service.rb | 2 + app/services/import/github_service.rb | 2 + .../issuable/clone/attributes_rewriter.rb | 2 - app/services/issuable/clone/base_service.rb | 2 + .../issuable/common_system_notes_service.rb | 4 +- app/services/issuable_base_service.rb | 23 +- app/services/issues/build_service.rb | 2 + app/services/issues/create_service.rb | 2 + app/services/issues/duplicate_service.rb | 1 + app/services/issues/move_service.rb | 2 + app/services/issues/update_service.rb | 2 + app/services/issues/zoom_link_service.rb | 90 + app/services/keys/create_service.rb | 2 + app/services/keys/destroy_service.rb | 2 + .../labels/available_labels_service.rb | 6 +- app/services/labels/find_or_create_service.rb | 8 +- app/services/labels/transfer_service.rb | 2 +- app/services/lfs/lock_file_service.rb | 2 + app/services/lfs/unlock_file_service.rb | 2 + .../members/approve_access_request_service.rb | 2 + app/services/members/create_service.rb | 2 + app/services/members/destroy_service.rb | 2 + app/services/members/update_service.rb | 2 + app/services/merge_request_metrics_service.rb | 2 + app/services/merge_requests/base_service.rb | 10 +- app/services/merge_requests/build_service.rb | 37 +- .../create_from_issue_service.rb | 30 +- .../merge_requests/create_pipeline_service.rb | 2 + app/services/merge_requests/create_service.rb | 3 + .../merge_requests/merge_base_service.rb | 2 + .../merge_requests/post_merge_service.rb | 2 + .../push_options_handler_service.rb | 10 +- app/services/merge_requests/rebase_service.rb | 2 +- .../merge_requests/refresh_service.rb | 4 +- app/services/merge_requests/update_service.rb | 2 + .../metrics/dashboard/base_service.rb | 30 +- .../dashboard/system_dashboard_service.rb | 21 +- .../milestones/find_or_create_service.rb | 34 + app/services/milestones/promote_service.rb | 2 + app/services/milestones/transfer_service.rb | 84 + app/services/milestones/update_service.rb | 4 +- app/services/notes/create_service.rb | 2 +- app/services/notes/quick_actions_service.rb | 2 + app/services/notes/update_service.rb | 66 +- .../notification_recipient_service.rb | 3 + app/services/notification_service.rb | 19 +- app/services/projects/after_rename_service.rb | 2 + .../projects/auto_devops/disable_service.rb | 2 +- app/services/projects/autocomplete_service.rb | 2 + app/services/projects/cleanup_service.rb | 4 +- .../cleanup_tags_service.rb | 2 +- .../projects/create_from_template_service.rb | 25 +- app/services/projects/create_service.rb | 2 + app/services/projects/destroy_service.rb | 4 +- .../projects/disable_deploy_key_service.rb | 2 + .../projects/enable_deploy_key_service.rb | 2 + app/services/projects/fork_service.rb | 9 +- .../gitlab_projects_import_service.rb | 2 + .../projects/group_links/create_service.rb | 2 + .../projects/group_links/destroy_service.rb | 2 + .../migrate_attachments_service.rb | 2 + .../migrate_repository_service.rb | 2 + .../lfs_download_link_list_service.rb | 2 +- .../projects/lfs_pointers/lfs_link_service.rb | 29 +- .../projects/lfs_pointers/lfs_list_service.rb | 2 +- .../lfs_object_download_list_service.rb | 6 +- .../projects/open_issues_count_service.rb | 6 +- .../projects/operations/update_service.rb | 2 + .../projects/propagate_service_template.rb | 2 - app/services/projects/transfer_service.rb | 5 + app/services/projects/update_pages_service.rb | 4 +- app/services/projects/update_service.rb | 4 +- .../protected_branches/access_level_params.rb | 2 + .../protected_branches/api_service.rb | 2 + .../protected_branches/create_service.rb | 9 +- .../protected_branches/destroy_service.rb | 2 + .../legacy_api_update_service.rb | 2 + .../protected_branches/update_service.rb | 2 + .../quick_actions/interpret_service.rb | 4 +- app/services/releases/concerns.rb | 25 + app/services/releases/create_service.rb | 4 +- app/services/releases/update_service.rb | 5 +- .../resource_events/change_labels_service.rb | 2 + app/services/search/global_service.rb | 4 +- app/services/search/group_service.rb | 2 + app/services/search/project_service.rb | 2 + app/services/search/snippet_service.rb | 2 + app/services/search_service.rb | 2 + .../self_monitoring/project/create_service.rb | 219 - app/services/service_response.rb | 4 +- app/services/submit_usage_ping_service.rb | 2 +- app/services/system_hooks_service.rb | 4 + app/services/system_note_service.rb | 18 +- app/services/todo_service.rb | 4 +- app/services/update_deployment_service.rb | 2 + .../user_project_access_changed_service.rb | 2 + app/services/users/build_service.rb | 2 + app/services/users/destroy_service.rb | 2 + .../users/migrate_to_ghost_user_service.rb | 2 + app/services/users/update_service.rb | 4 +- app/services/wiki_pages/base_service.rb | 2 + .../wikis/create_attachment_service.rb | 2 +- app/uploaders/object_storage.rb | 4 +- app/validators/addressable_url_validator.rb | 8 +- app/validators/certificate_key_validator.rb | 4 +- app/validators/named_ecdsa_key_validator.rb | 34 + .../_account_and_limit.html.haml | 2 +- .../_diff_limits.html.haml | 2 +- .../application_settings/_email.html.haml | 2 +- ...ernal_authorization_service_form.html.haml | 2 +- .../application_settings/_ip_limits.html.haml | 8 +- .../_repository_static_objects.html.haml | 18 + .../application_settings/_signin.html.haml | 2 +- .../application_settings/_signup.html.haml | 2 +- .../application_settings/_terminal.html.haml | 2 +- .../application_settings/_terms.html.haml | 2 +- .../_visibility_and_access.html.haml | 2 +- .../{show.html.haml => general.html.haml} | 6 +- .../application_settings/network.html.haml | 2 +- .../preferences.html.haml | 2 +- .../application_settings/repository.html.haml | 11 + .../admin/applications/_delete_form.html.haml | 2 +- app/views/admin/applications/index.html.haml | 3 +- .../admin/background_jobs/show.html.haml | 12 +- app/views/admin/dashboard/index.html.haml | 274 +- app/views/admin/groups/index.html.haml | 32 +- app/views/admin/health_check/show.html.haml | 74 +- app/views/admin/jobs/index.html.haml | 31 +- app/views/admin/logs/show.html.haml | 46 +- app/views/admin/projects/index.html.haml | 73 +- .../admin/requests_profiles/index.html.haml | 42 +- app/views/admin/runners/index.html.haml | 244 +- app/views/admin/system_info/show.html.haml | 68 +- app/views/admin/users/index.html.haml | 140 +- app/views/ci/status/_icon.html.haml | 3 - .../clusters/clusters/_configure.html.haml | 26 + .../_cloud_provider_button.html.haml | 8 + .../_cloud_provider_selector.html.haml | 11 + .../clusters/clusters/eks/_index.html.haml | 1 + app/views/clusters/clusters/new.html.haml | 44 +- app/views/clusters/clusters/show.html.haml | 39 +- .../clusters/clusters/user/_form.html.haml | 3 +- .../clusters/clusters/user/_header.html.haml | 2 +- .../platforms/kubernetes/_form.html.haml | 2 +- app/views/dashboard/activity.html.haml | 11 +- app/views/dashboard/projects/index.html.haml | 16 +- .../dashboard/projects/starred.html.haml | 14 +- app/views/dashboard/todos/_todo.html.haml | 34 +- .../_delete_form.html.haml | 2 +- app/views/errors/access_denied.html.haml | 4 +- app/views/events/_event.atom.builder | 2 + app/views/events/_event.html.haml | 2 + app/views/events/_event_scope.html.haml | 5 +- app/views/events/event/_common.html.haml | 4 +- .../events/event/_created_project.html.haml | 2 +- .../graphiql/rails/editors/show.html.erb | 99 + .../groups/_group_admin_settings.html.haml | 2 +- app/views/groups/edit.html.haml | 2 +- .../group_members/_new_group_member.html.haml | 2 +- app/views/groups/labels/index.html.haml | 34 +- app/views/groups/milestones/new.html.haml | 10 +- .../groups/runners/_group_runners.html.haml | 2 +- app/views/groups/settings/_advanced.html.haml | 2 +- app/views/groups/settings/_general.html.haml | 4 +- app/views/groups/settings/_lfs.html.haml | 2 +- .../groups/settings/_permissions.html.haml | 4 +- .../_project_creation_level.html.haml | 2 +- .../settings/_two_factor_auth.html.haml | 2 +- app/views/groups/show.html.haml | 3 +- app/views/help/_shortcuts.html.haml | 556 +- app/views/import/github/new.html.haml | 34 +- .../cohorts/index.html.haml | 26 +- .../index.html.haml | 1 - app/views/layouts/_flash.html.haml | 10 +- app/views/layouts/_head.html.haml | 1 - app/views/layouts/_page.html.haml | 2 +- app/views/layouts/_search.html.haml | 5 +- app/views/layouts/_snowplow.html.haml | 21 +- app/views/layouts/devise.html.haml | 3 +- app/views/layouts/devise_empty.html.haml | 3 +- app/views/layouts/errors.html.haml | 6 +- app/views/layouts/header/_default.html.haml | 7 +- app/views/layouts/nav/_dashboard.html.haml | 2 +- .../layouts/nav/sidebar/_admin.html.haml | 6 +- .../layouts/nav/sidebar/_group.html.haml | 8 +- .../layouts/nav/sidebar/_profile.html.haml | 2 +- .../layouts/nav/sidebar/_project.html.haml | 2 +- app/views/notify/new_issue_email.text.erb | 10 +- .../notify/new_merge_request_email.text.erb | 4 +- app/views/peek/_bar.html.haml | 4 +- app/views/profiles/keys/_key_table.html.haml | 2 +- .../personal_access_tokens/index.html.haml | 24 +- app/views/profiles/preferences/show.html.haml | 4 + app/views/profiles/show.html.haml | 2 +- app/views/projects/_export.html.haml | 4 +- app/views/projects/_home_panel.html.haml | 9 +- ...ge_request_merge_checks_settings.html.haml | 2 +- ...ge_request_merge_method_settings.html.haml | 6 +- app/views/projects/activity.html.haml | 6 +- app/views/projects/blame/show.html.haml | 78 +- app/views/projects/blob/_blob.html.haml | 2 +- app/views/projects/blob/edit.html.haml | 50 +- app/views/projects/blob/preview.html.haml | 2 +- app/views/projects/blob/show.html.haml | 19 +- .../projects/blob/viewers/_markup.html.haml | 2 +- app/views/projects/branches/index.html.haml | 108 +- .../projects/buttons/_download.html.haml | 2 +- .../buttons/_download_links.html.haml | 3 +- app/views/projects/buttons/_fork.html.haml | 2 +- .../projects/commit/_ajax_signature.html.haml | 2 +- .../projects/commit/_commit_box.html.haml | 2 +- .../projects/commit/_pipelines_list.haml | 1 + .../commit/_signature_badge.html.haml | 2 +- app/views/projects/commit/show.html.haml | 1 + app/views/projects/commits/show.html.haml | 50 +- app/views/projects/compare/index.html.haml | 26 +- app/views/projects/compare/show.html.haml | 40 +- .../projects/cycle_analytics/show.html.haml | 36 +- .../deployments/_deployment.html.haml | 7 +- app/views/projects/edit.html.haml | 19 +- app/views/projects/empty.html.haml | 3 +- .../projects/environments/edit.html.haml | 10 +- .../projects/environments/folder.html.haml | 4 +- .../projects/environments/index.html.haml | 4 +- .../projects/environments/metrics.html.haml | 3 +- app/views/projects/environments/new.html.haml | 10 +- .../projects/environments/show.html.haml | 120 +- .../projects/environments/terminal.html.haml | 26 +- .../projects/error_tracking/index.html.haml | 2 +- app/views/projects/forks/index.html.haml | 2 +- app/views/projects/graphs/charts.html.haml | 5 +- app/views/projects/graphs/show.html.haml | 3 +- app/views/projects/imports/show.html.haml | 1 - app/views/projects/issues/index.html.haml | 22 +- app/views/projects/issues/show.html.haml | 12 +- app/views/projects/jobs/index.html.haml | 24 +- app/views/projects/jobs/show.html.haml | 10 +- app/views/projects/jobs/terminal.html.haml | 3 +- app/views/projects/labels/edit.html.haml | 10 +- app/views/projects/labels/index.html.haml | 78 +- app/views/projects/labels/new.html.haml | 10 +- .../merge_requests/_how_to_merge.html.haml | 17 +- .../creations/_new_compare.html.haml | 2 +- .../projects/merge_requests/index.html.haml | 27 +- .../projects/merge_requests/show.html.haml | 16 +- .../milestones/_deprecation_message.html.haml | 7 - app/views/projects/milestones/_form.html.haml | 2 +- app/views/projects/milestones/edit.html.haml | 12 +- app/views/projects/milestones/index.html.haml | 36 +- app/views/projects/milestones/new.html.haml | 10 +- app/views/projects/milestones/show.html.haml | 113 +- .../projects/mirrors/_instructions.html.haml | 1 + .../projects/mirrors/_mirror_repos.html.haml | 8 +- app/views/projects/network/_head.html.haml | 13 +- app/views/projects/pages/_access.html.haml | 10 +- app/views/projects/pages/_list.html.haml | 4 +- .../pages_domains/_certificate.html.haml | 18 + .../projects/pages_domains/show.html.haml | 11 +- .../pipeline_schedules/index.html.haml | 30 +- app/views/projects/pipelines/_info.html.haml | 4 +- .../projects/pipelines/_with_tabs.html.haml | 4 +- app/views/projects/pipelines/charts.html.haml | 12 +- app/views/projects/pipelines/index.html.haml | 24 +- app/views/projects/pipelines/show.html.haml | 3 +- .../_new_project_group.html.haml | 4 +- .../projects/project_members/index.html.haml | 2 +- .../_built_in_templates.html.haml | 4 +- .../shared/_create_protected_branch.html.haml | 2 +- .../registry/repositories/index.html.haml | 2 +- app/views/projects/releases/index.html.haml | 4 +- .../serverless/functions/index.html.haml | 5 +- .../serverless/functions/show.html.haml | 3 +- app/views/projects/services/_form.html.haml | 8 +- app/views/projects/services/_index.html.haml | 12 +- app/views/projects/services/edit.html.haml | 6 +- .../_detailed_help.html.haml | 28 +- .../mattermost_slash_commands/_help.html.haml | 8 +- .../_installation_info.html.haml | 2 +- .../slack_slash_commands/_help.html.haml | 44 +- .../settings/ci_cd/_autodevops_form.html.haml | 18 +- .../projects/settings/ci_cd/_form.html.haml | 4 +- app/views/projects/show.html.haml | 3 +- app/views/projects/snippets/show.html.haml | 2 +- app/views/projects/tags/index.html.haml | 3 +- .../projects/tags/releases/edit.html.haml | 31 +- app/views/projects/tags/show.html.haml | 78 +- app/views/projects/tree/show.html.haml | 6 +- app/views/projects/wikis/_form.html.haml | 18 +- .../projects/wikis/_main_links.html.haml | 6 +- app/views/projects/wikis/_new.html.haml | 18 - app/views/projects/wikis/_sidebar.html.haml | 8 +- app/views/projects/wikis/edit.html.haml | 15 +- app/views/projects/wikis/git_access.html.haml | 12 +- app/views/projects/wikis/history.html.haml | 2 +- app/views/projects/wikis/pages.html.haml | 44 +- app/views/projects/wikis/show.html.haml | 6 +- .../shared/_allow_request_access.html.haml | 2 +- app/views/shared/_import_form.html.haml | 1 + app/views/shared/_promo.html.haml | 2 +- app/views/shared/_visibility_radios.html.haml | 2 +- app/views/shared/boards/_show.html.haml | 4 +- .../shared/boards/components/_board.html.haml | 6 +- .../empty_states/_priority_labels.html.haml | 4 +- .../empty_states/_profile_tabs.html.haml | 2 +- .../issuable/_close_reopen_button.html.haml | 2 +- app/views/shared/issuable/_form.html.haml | 2 +- app/views/shared/issuable/_nav.html.haml | 2 +- app/views/shared/issuable/_sidebar.html.haml | 10 +- .../issuable/_sidebar_assignees.html.haml | 6 +- app/views/shared/members/_group.html.haml | 6 +- app/views/shared/members/_member.html.haml | 10 +- .../shared/members/_sort_dropdown.html.haml | 2 +- .../shared/notifications/_button.html.haml | 4 +- app/views/shared/projects/_list.html.haml | 6 - app/views/shared/projects/_project.html.haml | 9 +- app/views/shared/runners/_form.html.haml | 5 - app/views/shared/snippets/_form.html.haml | 2 +- app/views/shared/snippets/_header.html.haml | 4 +- app/views/shared/snippets/_list.html.haml | 7 +- app/views/shared/snippets/_snippet.html.haml | 6 +- app/views/users/calendar_activities.html.haml | 2 +- app/views/users/show.html.haml | 2 +- app/workers/all_queues.yml | 1 + app/workers/build_finished_worker.rb | 2 + app/workers/ci/archive_traces_cron_worker.rb | 4 +- app/workers/cluster_configure_worker.rb | 2 +- .../cluster_project_configure_worker.rb | 2 +- app/workers/hashed_storage/base_worker.rb | 2 +- .../namespaces/schedule_aggregation_worker.rb | 2 +- app/workers/new_note_worker.rb | 2 + app/workers/post_receive.rb | 2 + app/workers/project_cache_worker.rb | 3 +- app/workers/repository_check/batch_worker.rb | 2 + .../single_repository_worker.rb | 2 + app/workers/repository_import_worker.rb | 2 + app/workers/run_pipeline_schedule_worker.rb | 2 +- app/workers/stuck_ci_jobs_worker.rb | 2 +- .../update_external_pull_requests_worker.rb | 25 + bin/changelog | 9 +- bin/rspec-stackprof | 2 +- config.ru | 18 +- config/README.md | 2 +- config/application.rb | 3 +- config/dependency_decisions.yml | 14 + config/gitlab.yml.example | 65 +- config/initializers/01_secret_token.rb | 2 +- .../0_inject_enterprise_edition_module.rb | 11 +- config/initializers/1_settings.rb | 7 +- config/initializers/7_prometheus_metrics.rb | 9 +- config/initializers/8_devise.rb | 8 +- config/initializers/action_mailer_hooks.rb | 5 + .../initializers/active_record_data_types.rb | 2 +- .../active_record_table_definition.rb | 2 +- config/initializers/chronic_duration.rb | 2 + config/initializers/countries.rb | 61 + .../fog_google_https_private_urls.rb | 2 +- .../hangouts_chat_http_override.rb | 29 + config/initializers/peek.rb | 1 + config/initializers/rack_attack_global.rb | 2 + config/initializers/rack_attack_logging.rb | 4 +- config/initializers/sentry.rb | 2 +- config/initializers/sidekiq.rb | 4 + config/initializers/tracing.rb | 4 + config/initializers/workhorse_multipart.rb | 3 +- config/initializers/zz_metrics.rb | 12 +- config/locales/de.yml | 2 +- config/locales/es.yml | 2 +- config/prometheus/common_metrics.yml | 8 +- config/pseudonymizer.yml | 1 + config/routes.rb | 13 +- config/routes/admin.rb | 2 +- config/routes/group.rb | 2 +- config/routes/profile.rb | 1 + config/routes/project.rb | 14 +- config/routes/repository.rb | 2 +- config/routes/wiki.rb | 1 + config/sidekiq_queues.yml | 4 + config/smime_signature_settings.rb | 11 + config/webpack.config.js | 32 + config/webpack.config.review_toolbar.js | 58 - core-js/es/global-this.js | 2 +- core-js/es/index.js | 4 +- core-js/es/json/index.js | 1 + core-js/es/json/stringify.js | 9 +- core-js/features/array-buffer/constructor.js | 4 +- core-js/features/array-buffer/index.js | 4 +- core-js/features/array-buffer/is-view.js | 4 +- core-js/features/array-buffer/slice.js | 4 +- core-js/features/array/concat.js | 4 +- core-js/features/array/copy-within.js | 4 +- core-js/features/array/entries.js | 4 +- core-js/features/array/every.js | 4 +- core-js/features/array/fill.js | 4 +- core-js/features/array/filter.js | 4 +- core-js/features/array/find-index.js | 4 +- core-js/features/array/find.js | 4 +- core-js/features/array/flat-map.js | 4 +- core-js/features/array/flat.js | 4 +- core-js/features/array/for-each.js | 4 +- core-js/features/array/from.js | 4 +- core-js/features/array/includes.js | 4 +- core-js/features/array/index-of.js | 4 +- core-js/features/array/index.js | 5 +- core-js/features/array/is-array.js | 4 +- core-js/features/array/iterator.js | 4 +- core-js/features/array/join.js | 4 +- core-js/features/array/keys.js | 4 +- core-js/features/array/last-index-of.js | 4 +- core-js/features/array/map.js | 4 +- core-js/features/array/of.js | 4 +- core-js/features/array/reduce-right.js | 4 +- core-js/features/array/reduce.js | 4 +- core-js/features/array/reverse.js | 4 +- core-js/features/array/slice.js | 4 +- core-js/features/array/some.js | 4 +- core-js/features/array/sort.js | 4 +- core-js/features/array/splice.js | 4 +- core-js/features/array/values.js | 4 +- core-js/features/array/virtual/concat.js | 4 +- core-js/features/array/virtual/copy-within.js | 4 +- core-js/features/array/virtual/entries.js | 4 +- core-js/features/array/virtual/every.js | 4 +- core-js/features/array/virtual/fill.js | 4 +- core-js/features/array/virtual/filter.js | 4 +- core-js/features/array/virtual/find-index.js | 4 +- core-js/features/array/virtual/find.js | 4 +- core-js/features/array/virtual/flat-map.js | 4 +- core-js/features/array/virtual/flat.js | 4 +- core-js/features/array/virtual/for-each.js | 4 +- core-js/features/array/virtual/includes.js | 4 +- core-js/features/array/virtual/index-of.js | 4 +- core-js/features/array/virtual/index.js | 4 +- core-js/features/array/virtual/iterator.js | 4 +- core-js/features/array/virtual/join.js | 4 +- core-js/features/array/virtual/keys.js | 4 +- .../features/array/virtual/last-index-of.js | 4 +- core-js/features/array/virtual/map.js | 4 +- .../features/array/virtual/reduce-right.js | 4 +- core-js/features/array/virtual/reduce.js | 4 +- core-js/features/array/virtual/reverse.js | 4 +- core-js/features/array/virtual/slice.js | 4 +- core-js/features/array/virtual/some.js | 4 +- core-js/features/array/virtual/sort.js | 4 +- core-js/features/array/virtual/splice.js | 4 +- core-js/features/array/virtual/values.js | 4 +- core-js/features/clear-immediate.js | 4 +- core-js/features/data-view/index.js | 4 +- core-js/features/date/index.js | 4 +- core-js/features/date/now.js | 4 +- core-js/features/date/to-iso-string.js | 4 +- core-js/features/date/to-json.js | 4 +- core-js/features/date/to-primitive.js | 4 +- core-js/features/date/to-string.js | 4 +- core-js/features/dom-collections/for-each.js | 4 +- core-js/features/dom-collections/index.js | 4 +- core-js/features/dom-collections/iterator.js | 4 +- core-js/features/function/bind.js | 4 +- core-js/features/function/has-instance.js | 4 +- core-js/features/function/index.js | 4 +- core-js/features/function/name.js | 4 +- core-js/features/function/virtual/bind.js | 4 +- core-js/features/function/virtual/index.js | 4 +- core-js/features/get-iterator-method.js | 3 +- core-js/features/get-iterator.js | 3 +- core-js/features/global-this.js | 7 +- core-js/features/index.js | 4 +- core-js/features/instance/bind.js | 4 +- core-js/features/instance/code-point-at.js | 4 +- core-js/features/instance/concat.js | 4 +- core-js/features/instance/copy-within.js | 4 +- core-js/features/instance/ends-with.js | 4 +- core-js/features/instance/entries.js | 4 +- core-js/features/instance/every.js | 4 +- core-js/features/instance/fill.js | 4 +- core-js/features/instance/filter.js | 4 +- core-js/features/instance/find-index.js | 4 +- core-js/features/instance/find.js | 4 +- core-js/features/instance/flags.js | 4 +- core-js/features/instance/flat-map.js | 4 +- core-js/features/instance/flat.js | 4 +- core-js/features/instance/for-each.js | 4 +- core-js/features/instance/includes.js | 4 +- core-js/features/instance/index-of.js | 4 +- core-js/features/instance/keys.js | 4 +- core-js/features/instance/last-index-of.js | 4 +- core-js/features/instance/map.js | 4 +- core-js/features/instance/match-all.js | 4 +- core-js/features/instance/pad-end.js | 4 +- core-js/features/instance/pad-start.js | 4 +- core-js/features/instance/reduce-right.js | 4 +- core-js/features/instance/reduce.js | 4 +- core-js/features/instance/repeat.js | 4 +- core-js/features/instance/reverse.js | 4 +- core-js/features/instance/slice.js | 4 +- core-js/features/instance/some.js | 4 +- core-js/features/instance/sort.js | 4 +- core-js/features/instance/splice.js | 4 +- core-js/features/instance/starts-with.js | 4 +- core-js/features/instance/trim-end.js | 4 +- core-js/features/instance/trim-left.js | 4 +- core-js/features/instance/trim-right.js | 4 +- core-js/features/instance/trim-start.js | 4 +- core-js/features/instance/trim.js | 4 +- core-js/features/instance/values.js | 4 +- core-js/features/is-iterable.js | 3 +- core-js/features/json/index.js | 4 +- core-js/features/json/stringify.js | 4 +- core-js/features/json/to-string-tag.js | 4 +- core-js/features/map/index.js | 7 +- core-js/features/math/acosh.js | 4 +- core-js/features/math/asinh.js | 4 +- core-js/features/math/atanh.js | 4 +- core-js/features/math/cbrt.js | 4 +- core-js/features/math/clz32.js | 4 +- core-js/features/math/cosh.js | 4 +- core-js/features/math/expm1.js | 4 +- core-js/features/math/fround.js | 4 +- core-js/features/math/hypot.js | 4 +- core-js/features/math/imul.js | 4 +- core-js/features/math/index.js | 12 +- core-js/features/math/log10.js | 4 +- core-js/features/math/log1p.js | 4 +- core-js/features/math/log2.js | 4 +- core-js/features/math/sign.js | 4 +- core-js/features/math/sinh.js | 4 +- core-js/features/math/tanh.js | 4 +- core-js/features/math/to-string-tag.js | 4 +- core-js/features/math/trunc.js | 4 +- core-js/features/number/constructor.js | 4 +- core-js/features/number/epsilon.js | 4 +- core-js/features/number/index.js | 4 +- core-js/features/number/is-finite.js | 4 +- core-js/features/number/is-integer.js | 4 +- core-js/features/number/is-nan.js | 4 +- core-js/features/number/is-safe-integer.js | 4 +- core-js/features/number/max-safe-integer.js | 4 +- core-js/features/number/min-safe-integer.js | 4 +- core-js/features/number/parse-float.js | 4 +- core-js/features/number/parse-int.js | 4 +- core-js/features/number/to-fixed.js | 4 +- core-js/features/number/to-precision.js | 4 +- core-js/features/number/virtual/index.js | 4 +- core-js/features/number/virtual/to-fixed.js | 4 +- .../features/number/virtual/to-precision.js | 4 +- core-js/features/object/assign.js | 4 +- core-js/features/object/create.js | 4 +- core-js/features/object/define-getter.js | 4 +- core-js/features/object/define-properties.js | 4 +- core-js/features/object/define-property.js | 4 +- core-js/features/object/define-setter.js | 4 +- core-js/features/object/entries.js | 4 +- core-js/features/object/freeze.js | 4 +- core-js/features/object/from-entries.js | 4 +- .../object/get-own-property-descriptor.js | 4 +- .../object/get-own-property-descriptors.js | 4 +- .../features/object/get-own-property-names.js | 4 +- .../object/get-own-property-symbols.js | 4 +- core-js/features/object/get-prototype-of.js | 4 +- core-js/features/object/index.js | 4 +- core-js/features/object/is-extensible.js | 4 +- core-js/features/object/is-frozen.js | 4 +- core-js/features/object/is-sealed.js | 4 +- core-js/features/object/is.js | 4 +- core-js/features/object/keys.js | 4 +- core-js/features/object/lookup-getter.js | 4 +- core-js/features/object/lookup-setter.js | 4 +- core-js/features/object/prevent-extensions.js | 4 +- core-js/features/object/seal.js | 4 +- core-js/features/object/set-prototype-of.js | 4 +- core-js/features/object/to-string.js | 4 +- core-js/features/object/values.js | 4 +- core-js/features/parse-float.js | 4 +- core-js/features/parse-int.js | 4 +- core-js/features/promise/all-settled.js | 4 +- core-js/features/promise/finally.js | 4 +- core-js/features/promise/index.js | 5 +- core-js/features/queue-microtask.js | 4 +- core-js/features/reflect/apply.js | 4 +- core-js/features/reflect/construct.js | 4 +- core-js/features/reflect/define-property.js | 4 +- core-js/features/reflect/delete-property.js | 4 +- .../reflect/get-own-property-descriptor.js | 4 +- core-js/features/reflect/get-prototype-of.js | 4 +- core-js/features/reflect/get.js | 4 +- core-js/features/reflect/has.js | 4 +- core-js/features/reflect/index.js | 5 +- core-js/features/reflect/is-extensible.js | 4 +- core-js/features/reflect/own-keys.js | 4 +- .../features/reflect/prevent-extensions.js | 4 +- core-js/features/reflect/set-prototype-of.js | 4 +- core-js/features/reflect/set.js | 4 +- core-js/features/regexp/constructor.js | 4 +- core-js/features/regexp/flags.js | 4 +- core-js/features/regexp/index.js | 4 +- core-js/features/regexp/match.js | 4 +- core-js/features/regexp/replace.js | 4 +- core-js/features/regexp/search.js | 4 +- core-js/features/regexp/split.js | 4 +- core-js/features/regexp/to-string.js | 4 +- core-js/features/set-immediate.js | 4 +- core-js/features/set-interval.js | 4 +- core-js/features/set-timeout.js | 4 +- core-js/features/set/index.js | 5 +- core-js/features/string/anchor.js | 4 +- core-js/features/string/big.js | 4 +- core-js/features/string/blink.js | 4 +- core-js/features/string/bold.js | 4 +- core-js/features/string/code-point-at.js | 4 +- core-js/features/string/ends-with.js | 4 +- core-js/features/string/fixed.js | 4 +- core-js/features/string/fontcolor.js | 4 +- core-js/features/string/fontsize.js | 4 +- core-js/features/string/from-code-point.js | 4 +- core-js/features/string/includes.js | 4 +- core-js/features/string/index.js | 6 +- core-js/features/string/italics.js | 4 +- core-js/features/string/iterator.js | 4 +- core-js/features/string/link.js | 4 +- core-js/features/string/match-all.js | 4 +- core-js/features/string/match.js | 4 +- core-js/features/string/pad-end.js | 4 +- core-js/features/string/pad-start.js | 4 +- core-js/features/string/raw.js | 4 +- core-js/features/string/repeat.js | 4 +- core-js/features/string/replace.js | 4 +- core-js/features/string/search.js | 4 +- core-js/features/string/small.js | 4 +- core-js/features/string/split.js | 4 +- core-js/features/string/starts-with.js | 4 +- core-js/features/string/strike.js | 4 +- core-js/features/string/sub.js | 4 +- core-js/features/string/sup.js | 4 +- core-js/features/string/trim-end.js | 4 +- core-js/features/string/trim-left.js | 4 +- core-js/features/string/trim-right.js | 4 +- core-js/features/string/trim-start.js | 4 +- core-js/features/string/trim.js | 4 +- core-js/features/string/virtual/anchor.js | 4 +- core-js/features/string/virtual/big.js | 4 +- core-js/features/string/virtual/blink.js | 4 +- core-js/features/string/virtual/bold.js | 4 +- .../features/string/virtual/code-point-at.js | 4 +- core-js/features/string/virtual/ends-with.js | 4 +- core-js/features/string/virtual/fixed.js | 4 +- core-js/features/string/virtual/fontcolor.js | 4 +- core-js/features/string/virtual/fontsize.js | 4 +- core-js/features/string/virtual/includes.js | 4 +- core-js/features/string/virtual/index.js | 6 +- core-js/features/string/virtual/italics.js | 4 +- core-js/features/string/virtual/iterator.js | 4 +- core-js/features/string/virtual/link.js | 4 +- core-js/features/string/virtual/match-all.js | 4 +- core-js/features/string/virtual/pad-end.js | 4 +- core-js/features/string/virtual/pad-start.js | 4 +- core-js/features/string/virtual/repeat.js | 4 +- core-js/features/string/virtual/small.js | 4 +- .../features/string/virtual/starts-with.js | 4 +- core-js/features/string/virtual/strike.js | 4 +- core-js/features/string/virtual/sub.js | 4 +- core-js/features/string/virtual/sup.js | 4 +- core-js/features/string/virtual/trim-end.js | 4 +- core-js/features/string/virtual/trim-left.js | 4 +- core-js/features/string/virtual/trim-right.js | 4 +- core-js/features/string/virtual/trim-start.js | 4 +- core-js/features/string/virtual/trim.js | 4 +- core-js/features/symbol/async-iterator.js | 4 +- core-js/features/symbol/for.js | 4 +- core-js/features/symbol/has-instance.js | 4 +- core-js/features/symbol/index.js | 6 +- .../features/symbol/is-concat-spreadable.js | 4 +- core-js/features/symbol/iterator.js | 4 +- core-js/features/symbol/key-for.js | 4 +- core-js/features/symbol/match-all.js | 4 +- core-js/features/symbol/match.js | 4 +- core-js/features/symbol/replace-all.js | 1 + core-js/features/symbol/replace.js | 4 +- core-js/features/symbol/search.js | 4 +- core-js/features/symbol/species.js | 4 +- core-js/features/symbol/split.js | 4 +- core-js/features/symbol/to-primitive.js | 4 +- core-js/features/symbol/to-string-tag.js | 4 +- core-js/features/symbol/unscopables.js | 4 +- core-js/features/typed-array/float32-array.js | 4 +- core-js/features/typed-array/float64-array.js | 4 +- core-js/features/typed-array/index.js | 4 +- core-js/features/typed-array/int16-array.js | 4 +- core-js/features/typed-array/int32-array.js | 4 +- core-js/features/typed-array/int8-array.js | 4 +- core-js/features/typed-array/uint16-array.js | 4 +- core-js/features/typed-array/uint32-array.js | 4 +- core-js/features/typed-array/uint8-array.js | 4 +- .../typed-array/uint8-clamped-array.js | 4 +- core-js/features/url-search-params/index.js | 4 +- core-js/features/url/index.js | 4 +- core-js/features/url/to-json.js | 4 +- core-js/features/weak-map/index.js | 5 +- core-js/features/weak-set/index.js | 5 +- core-js/index.js | 3 +- core-js/internals/array-buffer-view-core.js | 8 +- core-js/internals/array-buffer.js | 100 +- core-js/internals/classof.js | 3 +- core-js/internals/collection.js | 6 +- core-js/internals/function-to-string.js | 3 - core-js/internals/ieee754.js | 88 + core-js/internals/inspect-source.js | 7 + core-js/internals/is-ios.js | 3 + core-js/internals/microtask.js | 4 +- core-js/internals/native-weak-map.js | 4 +- core-js/internals/object-assign.js | 13 +- core-js/internals/object-to-string.js | 11 +- core-js/internals/path.js | 4 +- core-js/internals/redefine.js | 11 +- core-js/internals/shared.js | 2 +- core-js/internals/task.js | 4 +- core-js/internals/to-absolute-index.js | 2 +- core-js/internals/to-string-tag-support.js | 8 + core-js/internals/typed-array-constructor.js | 22 +- ...d-arrays-constructors-requires-wrappers.js | 2 +- core-js/internals/use-symbol-as-uid.js | 7 + core-js/internals/v8-version.js | 7 +- core-js/internals/well-known-symbol.js | 11 +- .../internals/wrapped-well-known-symbol.js | 4 +- core-js/modules/es.array.filter.js | 9 +- core-js/modules/es.array.map.js | 9 +- core-js/modules/es.array.sort.js | 4 +- core-js/modules/es.json.stringify.js | 32 + core-js/modules/es.map.js | 6 +- core-js/modules/es.object.to-string.js | 7 +- core-js/modules/es.promise.finally.js | 8 +- core-js/modules/es.promise.js | 16 +- core-js/modules/es.reflect.set.js | 11 +- core-js/modules/es.set.js | 4 +- core-js/modules/es.string.ends-with.js | 11 +- core-js/modules/es.string.match-all.js | 2 +- core-js/modules/es.string.starts-with.js | 11 +- core-js/modules/es.symbol.js | 60 +- core-js/modules/es.typed-array.copy-within.js | 3 +- core-js/modules/es.typed-array.every.js | 3 +- core-js/modules/es.typed-array.fill.js | 3 +- core-js/modules/es.typed-array.filter.js | 3 +- core-js/modules/es.typed-array.find-index.js | 3 +- core-js/modules/es.typed-array.find.js | 3 +- .../modules/es.typed-array.float32-array.js | 4 +- .../modules/es.typed-array.float64-array.js | 4 +- core-js/modules/es.typed-array.for-each.js | 3 +- core-js/modules/es.typed-array.from.js | 4 +- core-js/modules/es.typed-array.includes.js | 3 +- core-js/modules/es.typed-array.index-of.js | 3 +- core-js/modules/es.typed-array.int16-array.js | 4 +- core-js/modules/es.typed-array.int32-array.js | 4 +- core-js/modules/es.typed-array.int8-array.js | 4 +- core-js/modules/es.typed-array.iterator.js | 10 +- core-js/modules/es.typed-array.join.js | 3 +- .../modules/es.typed-array.last-index-of.js | 3 +- core-js/modules/es.typed-array.map.js | 3 +- core-js/modules/es.typed-array.of.js | 3 +- .../modules/es.typed-array.reduce-right.js | 3 +- core-js/modules/es.typed-array.reduce.js | 3 +- core-js/modules/es.typed-array.reverse.js | 3 +- core-js/modules/es.typed-array.set.js | 3 +- core-js/modules/es.typed-array.slice.js | 3 +- core-js/modules/es.typed-array.some.js | 3 +- core-js/modules/es.typed-array.sort.js | 3 +- core-js/modules/es.typed-array.subarray.js | 3 +- .../es.typed-array.to-locale-string.js | 3 +- core-js/modules/es.typed-array.to-string.js | 10 +- .../modules/es.typed-array.uint16-array.js | 4 +- .../modules/es.typed-array.uint32-array.js | 4 +- core-js/modules/es.typed-array.uint8-array.js | 4 +- .../es.typed-array.uint8-clamped-array.js | 4 +- core-js/modules/es.weak-map.js | 6 +- core-js/modules/es.weak-set.js | 6 +- core-js/modules/esnext.aggregate-error.js | 10 +- .../modules/esnext.async-iterator.flat-map.js | 8 +- .../modules/esnext.iterator.constructor.js | 9 +- core-js/modules/esnext.iterator.flat-map.js | 13 +- core-js/modules/esnext.math.iaddh.js | 1 + core-js/modules/esnext.math.imulh.js | 1 + core-js/modules/esnext.math.isubh.js | 1 + core-js/modules/esnext.math.signbit.js | 2 +- core-js/modules/esnext.math.umulh.js | 1 + core-js/modules/esnext.string.replace-all.js | 6 +- core-js/modules/web.immediate.js | 3 +- core-js/modules/web.url-search-params.js | 2 +- core-js/package.json | 8 +- core-js/postinstall.js | 9 +- core-js/proposals/global-this.js | 3 +- core-js/proposals/iterator-helpers.js | 8 + core-js/stable/array-buffer/constructor.js | 4 +- core-js/stable/array-buffer/index.js | 4 +- core-js/stable/array-buffer/is-view.js | 4 +- core-js/stable/array-buffer/slice.js | 4 +- core-js/stable/array/concat.js | 4 +- core-js/stable/array/copy-within.js | 4 +- core-js/stable/array/entries.js | 4 +- core-js/stable/array/every.js | 4 +- core-js/stable/array/fill.js | 4 +- core-js/stable/array/filter.js | 4 +- core-js/stable/array/find-index.js | 4 +- core-js/stable/array/find.js | 4 +- core-js/stable/array/flat-map.js | 4 +- core-js/stable/array/flat.js | 4 +- core-js/stable/array/for-each.js | 4 +- core-js/stable/array/from.js | 4 +- core-js/stable/array/includes.js | 4 +- core-js/stable/array/index-of.js | 4 +- core-js/stable/array/index.js | 4 +- core-js/stable/array/is-array.js | 4 +- core-js/stable/array/iterator.js | 4 +- core-js/stable/array/join.js | 4 +- core-js/stable/array/keys.js | 4 +- core-js/stable/array/last-index-of.js | 4 +- core-js/stable/array/map.js | 4 +- core-js/stable/array/of.js | 4 +- core-js/stable/array/reduce-right.js | 4 +- core-js/stable/array/reduce.js | 4 +- core-js/stable/array/reverse.js | 4 +- core-js/stable/array/slice.js | 4 +- core-js/stable/array/some.js | 4 +- core-js/stable/array/sort.js | 4 +- core-js/stable/array/splice.js | 4 +- core-js/stable/array/values.js | 4 +- core-js/stable/array/virtual/concat.js | 4 +- core-js/stable/array/virtual/copy-within.js | 4 +- core-js/stable/array/virtual/entries.js | 4 +- core-js/stable/array/virtual/every.js | 4 +- core-js/stable/array/virtual/fill.js | 4 +- core-js/stable/array/virtual/filter.js | 4 +- core-js/stable/array/virtual/find-index.js | 4 +- core-js/stable/array/virtual/find.js | 4 +- core-js/stable/array/virtual/flat-map.js | 4 +- core-js/stable/array/virtual/flat.js | 4 +- core-js/stable/array/virtual/for-each.js | 4 +- core-js/stable/array/virtual/includes.js | 4 +- core-js/stable/array/virtual/index-of.js | 4 +- core-js/stable/array/virtual/index.js | 4 +- core-js/stable/array/virtual/iterator.js | 4 +- core-js/stable/array/virtual/join.js | 4 +- core-js/stable/array/virtual/keys.js | 4 +- core-js/stable/array/virtual/last-index-of.js | 4 +- core-js/stable/array/virtual/map.js | 4 +- core-js/stable/array/virtual/reduce-right.js | 4 +- core-js/stable/array/virtual/reduce.js | 4 +- core-js/stable/array/virtual/reverse.js | 4 +- core-js/stable/array/virtual/slice.js | 4 +- core-js/stable/array/virtual/some.js | 4 +- core-js/stable/array/virtual/sort.js | 4 +- core-js/stable/array/virtual/splice.js | 4 +- core-js/stable/array/virtual/values.js | 4 +- core-js/stable/clear-immediate.js | 3 +- core-js/stable/data-view/index.js | 4 +- core-js/stable/date/index.js | 4 +- core-js/stable/date/now.js | 4 +- core-js/stable/date/to-iso-string.js | 4 +- core-js/stable/date/to-json.js | 4 +- core-js/stable/date/to-primitive.js | 4 +- core-js/stable/date/to-string.js | 4 +- core-js/stable/dom-collections/for-each.js | 4 +- core-js/stable/function/bind.js | 4 +- core-js/stable/function/has-instance.js | 4 +- core-js/stable/function/index.js | 4 +- core-js/stable/function/name.js | 4 +- core-js/stable/function/virtual/bind.js | 4 +- core-js/stable/function/virtual/index.js | 4 +- core-js/stable/global-this.js | 4 +- core-js/stable/index.js | 3 +- core-js/stable/instance/bind.js | 4 +- core-js/stable/instance/code-point-at.js | 4 +- core-js/stable/instance/concat.js | 4 +- core-js/stable/instance/copy-within.js | 4 +- core-js/stable/instance/ends-with.js | 4 +- core-js/stable/instance/every.js | 4 +- core-js/stable/instance/fill.js | 4 +- core-js/stable/instance/filter.js | 4 +- core-js/stable/instance/find-index.js | 4 +- core-js/stable/instance/find.js | 4 +- core-js/stable/instance/flags.js | 4 +- core-js/stable/instance/flat-map.js | 4 +- core-js/stable/instance/flat.js | 4 +- core-js/stable/instance/includes.js | 4 +- core-js/stable/instance/index-of.js | 4 +- core-js/stable/instance/last-index-of.js | 4 +- core-js/stable/instance/map.js | 4 +- core-js/stable/instance/match-all.js | 4 +- core-js/stable/instance/pad-end.js | 4 +- core-js/stable/instance/pad-start.js | 4 +- core-js/stable/instance/reduce-right.js | 4 +- core-js/stable/instance/reduce.js | 4 +- core-js/stable/instance/repeat.js | 4 +- core-js/stable/instance/reverse.js | 4 +- core-js/stable/instance/slice.js | 4 +- core-js/stable/instance/some.js | 4 +- core-js/stable/instance/sort.js | 4 +- core-js/stable/instance/splice.js | 4 +- core-js/stable/instance/starts-with.js | 4 +- core-js/stable/instance/trim-end.js | 4 +- core-js/stable/instance/trim-left.js | 4 +- core-js/stable/instance/trim-right.js | 4 +- core-js/stable/instance/trim-start.js | 4 +- core-js/stable/instance/trim.js | 4 +- core-js/stable/json/index.js | 4 +- core-js/stable/json/stringify.js | 4 +- core-js/stable/json/to-string-tag.js | 4 +- core-js/stable/map/index.js | 4 +- core-js/stable/math/acosh.js | 4 +- core-js/stable/math/asinh.js | 4 +- core-js/stable/math/atanh.js | 4 +- core-js/stable/math/cbrt.js | 4 +- core-js/stable/math/clz32.js | 4 +- core-js/stable/math/cosh.js | 4 +- core-js/stable/math/expm1.js | 4 +- core-js/stable/math/fround.js | 4 +- core-js/stable/math/hypot.js | 4 +- core-js/stable/math/imul.js | 4 +- core-js/stable/math/index.js | 4 +- core-js/stable/math/log10.js | 4 +- core-js/stable/math/log1p.js | 4 +- core-js/stable/math/log2.js | 4 +- core-js/stable/math/sign.js | 4 +- core-js/stable/math/sinh.js | 4 +- core-js/stable/math/tanh.js | 4 +- core-js/stable/math/to-string-tag.js | 4 +- core-js/stable/math/trunc.js | 4 +- core-js/stable/number/constructor.js | 4 +- core-js/stable/number/epsilon.js | 4 +- core-js/stable/number/index.js | 4 +- core-js/stable/number/is-finite.js | 4 +- core-js/stable/number/is-integer.js | 4 +- core-js/stable/number/is-nan.js | 4 +- core-js/stable/number/is-safe-integer.js | 4 +- core-js/stable/number/max-safe-integer.js | 4 +- core-js/stable/number/min-safe-integer.js | 4 +- core-js/stable/number/parse-float.js | 4 +- core-js/stable/number/parse-int.js | 4 +- core-js/stable/number/to-fixed.js | 4 +- core-js/stable/number/to-precision.js | 4 +- core-js/stable/number/virtual/index.js | 4 +- core-js/stable/number/virtual/to-fixed.js | 4 +- core-js/stable/number/virtual/to-precision.js | 4 +- core-js/stable/object/assign.js | 4 +- core-js/stable/object/create.js | 4 +- core-js/stable/object/define-getter.js | 4 +- core-js/stable/object/define-properties.js | 4 +- core-js/stable/object/define-property.js | 4 +- core-js/stable/object/define-setter.js | 4 +- core-js/stable/object/entries.js | 4 +- core-js/stable/object/freeze.js | 4 +- core-js/stable/object/from-entries.js | 4 +- .../object/get-own-property-descriptor.js | 4 +- .../object/get-own-property-descriptors.js | 4 +- .../stable/object/get-own-property-names.js | 4 +- .../stable/object/get-own-property-symbols.js | 4 +- core-js/stable/object/get-prototype-of.js | 4 +- core-js/stable/object/index.js | 4 +- core-js/stable/object/is-extensible.js | 4 +- core-js/stable/object/is-frozen.js | 4 +- core-js/stable/object/is-sealed.js | 4 +- core-js/stable/object/is.js | 4 +- core-js/stable/object/keys.js | 4 +- core-js/stable/object/lookup-getter.js | 4 +- core-js/stable/object/lookup-setter.js | 4 +- core-js/stable/object/prevent-extensions.js | 4 +- core-js/stable/object/seal.js | 4 +- core-js/stable/object/set-prototype-of.js | 4 +- core-js/stable/object/to-string.js | 4 +- core-js/stable/object/values.js | 4 +- core-js/stable/parse-float.js | 4 +- core-js/stable/parse-int.js | 4 +- core-js/stable/promise/all-settled.js | 4 +- core-js/stable/promise/finally.js | 4 +- core-js/stable/promise/index.js | 4 +- core-js/stable/queue-microtask.js | 4 +- core-js/stable/reflect/apply.js | 4 +- core-js/stable/reflect/construct.js | 4 +- core-js/stable/reflect/define-property.js | 4 +- core-js/stable/reflect/delete-property.js | 4 +- .../reflect/get-own-property-descriptor.js | 4 +- core-js/stable/reflect/get-prototype-of.js | 4 +- core-js/stable/reflect/get.js | 4 +- core-js/stable/reflect/has.js | 4 +- core-js/stable/reflect/index.js | 4 +- core-js/stable/reflect/is-extensible.js | 4 +- core-js/stable/reflect/own-keys.js | 4 +- core-js/stable/reflect/prevent-extensions.js | 4 +- core-js/stable/reflect/set-prototype-of.js | 4 +- core-js/stable/reflect/set.js | 4 +- core-js/stable/regexp/constructor.js | 4 +- core-js/stable/regexp/flags.js | 4 +- core-js/stable/regexp/index.js | 4 +- core-js/stable/regexp/match.js | 4 +- core-js/stable/regexp/replace.js | 4 +- core-js/stable/regexp/search.js | 4 +- core-js/stable/regexp/split.js | 4 +- core-js/stable/regexp/to-string.js | 4 +- core-js/stable/set-immediate.js | 3 +- core-js/stable/set-interval.js | 3 +- core-js/stable/set-timeout.js | 3 +- core-js/stable/set/index.js | 4 +- core-js/stable/string/anchor.js | 4 +- core-js/stable/string/big.js | 4 +- core-js/stable/string/blink.js | 4 +- core-js/stable/string/bold.js | 4 +- core-js/stable/string/code-point-at.js | 4 +- core-js/stable/string/ends-with.js | 4 +- core-js/stable/string/fixed.js | 4 +- core-js/stable/string/fontcolor.js | 4 +- core-js/stable/string/fontsize.js | 4 +- core-js/stable/string/from-code-point.js | 4 +- core-js/stable/string/includes.js | 4 +- core-js/stable/string/index.js | 4 +- core-js/stable/string/italics.js | 4 +- core-js/stable/string/iterator.js | 4 +- core-js/stable/string/link.js | 4 +- core-js/stable/string/match-all.js | 4 +- core-js/stable/string/match.js | 4 +- core-js/stable/string/pad-end.js | 4 +- core-js/stable/string/pad-start.js | 4 +- core-js/stable/string/raw.js | 4 +- core-js/stable/string/repeat.js | 4 +- core-js/stable/string/replace.js | 4 +- core-js/stable/string/search.js | 4 +- core-js/stable/string/small.js | 4 +- core-js/stable/string/split.js | 4 +- core-js/stable/string/starts-with.js | 4 +- core-js/stable/string/strike.js | 4 +- core-js/stable/string/sub.js | 4 +- core-js/stable/string/sup.js | 4 +- core-js/stable/string/trim-end.js | 4 +- core-js/stable/string/trim-left.js | 4 +- core-js/stable/string/trim-right.js | 4 +- core-js/stable/string/trim-start.js | 4 +- core-js/stable/string/trim.js | 4 +- core-js/stable/string/virtual/anchor.js | 4 +- core-js/stable/string/virtual/big.js | 4 +- core-js/stable/string/virtual/blink.js | 4 +- core-js/stable/string/virtual/bold.js | 4 +- .../stable/string/virtual/code-point-at.js | 4 +- core-js/stable/string/virtual/ends-with.js | 4 +- core-js/stable/string/virtual/fixed.js | 4 +- core-js/stable/string/virtual/fontcolor.js | 4 +- core-js/stable/string/virtual/fontsize.js | 4 +- core-js/stable/string/virtual/includes.js | 4 +- core-js/stable/string/virtual/index.js | 4 +- core-js/stable/string/virtual/italics.js | 4 +- core-js/stable/string/virtual/iterator.js | 4 +- core-js/stable/string/virtual/link.js | 4 +- core-js/stable/string/virtual/match-all.js | 4 +- core-js/stable/string/virtual/pad-end.js | 4 +- core-js/stable/string/virtual/pad-start.js | 4 +- core-js/stable/string/virtual/repeat.js | 4 +- core-js/stable/string/virtual/small.js | 4 +- core-js/stable/string/virtual/starts-with.js | 4 +- core-js/stable/string/virtual/strike.js | 4 +- core-js/stable/string/virtual/sub.js | 4 +- core-js/stable/string/virtual/sup.js | 4 +- core-js/stable/string/virtual/trim-end.js | 4 +- core-js/stable/string/virtual/trim-left.js | 4 +- core-js/stable/string/virtual/trim-right.js | 4 +- core-js/stable/string/virtual/trim-start.js | 4 +- core-js/stable/string/virtual/trim.js | 4 +- core-js/stable/symbol/async-iterator.js | 4 +- core-js/stable/symbol/for.js | 4 +- core-js/stable/symbol/has-instance.js | 4 +- core-js/stable/symbol/index.js | 4 +- core-js/stable/symbol/is-concat-spreadable.js | 4 +- core-js/stable/symbol/iterator.js | 4 +- core-js/stable/symbol/key-for.js | 4 +- core-js/stable/symbol/match-all.js | 4 +- core-js/stable/symbol/match.js | 4 +- core-js/stable/symbol/replace.js | 4 +- core-js/stable/symbol/search.js | 4 +- core-js/stable/symbol/species.js | 4 +- core-js/stable/symbol/split.js | 4 +- core-js/stable/symbol/to-primitive.js | 4 +- core-js/stable/symbol/to-string-tag.js | 4 +- core-js/stable/symbol/unscopables.js | 4 +- core-js/stable/typed-array/float32-array.js | 4 +- core-js/stable/typed-array/float64-array.js | 4 +- core-js/stable/typed-array/index.js | 4 +- core-js/stable/typed-array/int16-array.js | 4 +- core-js/stable/typed-array/int32-array.js | 4 +- core-js/stable/typed-array/int8-array.js | 4 +- core-js/stable/typed-array/uint16-array.js | 4 +- core-js/stable/typed-array/uint32-array.js | 4 +- core-js/stable/typed-array/uint8-array.js | 4 +- .../stable/typed-array/uint8-clamped-array.js | 4 +- core-js/stable/url-search-params/index.js | 4 +- core-js/stable/url/index.js | 4 +- core-js/stable/weak-map/index.js | 4 +- core-js/stable/weak-set/index.js | 4 +- core-js/stage/0.js | 3 +- core-js/stage/1.js | 3 +- core-js/stage/2.js | 3 +- core-js/stage/3.js | 3 +- core-js/stage/4.js | 3 +- core-js/stage/index.js | 4 +- core-js/stage/pre.js | 3 +- core-js/web/dom-collections.js | 3 +- core-js/web/immediate.js | 3 +- core-js/web/index.js | 3 +- core-js/web/timers.js | 3 +- crowdin.yml | 20 + danger/changelog/Dangerfile | 19 +- danger/changes_size/Dangerfile | 2 +- danger/commit_messages/Dangerfile | 35 +- danger/database/Dangerfile | 20 +- danger/documentation/Dangerfile | 22 +- danger/duplicate_yarn_dependencies/Dangerfile | 24 +- danger/eslint/Dangerfile | 22 +- danger/frozen_string/Dangerfile | 14 +- danger/gemfile/Dangerfile | 19 +- danger/only_documentation/Dangerfile | 24 - danger/prettier/Dangerfile | 26 +- danger/roulette/Dangerfile | 4 +- .../development/02_application_settings.rb | 2 +- db/fixtures/development/10_merge_requests.rb | 2 +- db/fixtures/development/14_pipelines.rb | 75 +- db/fixtures/development/15_award_emoji.rb | 35 +- db/fixtures/development/17_cycle_analytics.rb | 6 +- db/fixtures/development/24_forks.rb | 9 +- db/migrate/20171230123729_init_schema.rb | 2 + ...0180101160629_create_prometheus_metrics.rb | 2 + ...o_devops_domain_to_application_settings.rb | 2 +- ...80129193323_add_uploads_builder_context.rb | 2 + ...nal_ip_to_clusters_applications_ingress.rb | 2 +- db/migrate/20180214093516_create_badges.rb | 2 + ...05_create_clusters_applications_runners.rb | 2 +- ...216120000_add_pages_domain_verification.rb | 2 +- ...20180222043024_add_ip_address_to_runner.rb | 2 +- ...r_internal_regex_to_application_setting.rb | 2 +- ...h_mutual_tls_fields_to_project_settings.rb | 2 + .../20180319190020_create_deploy_tokens.rb | 2 + ...te_missing_namespace_for_internal_users.rb | 2 +- ...180502122856_create_project_mirror_data.rb | 2 + .../20180503131624_create_remote_mirrors.rb | 2 + ..._missing_columns_to_project_mirror_data.rb | 4 +- ...58_create_clusters_applications_jupyter.rb | 6 +- .../20180515121227_create_notes_diff_files.rb | 2 + ...0529093006_ensure_remote_mirror_columns.rb | 2 +- ...20180531185349_add_repository_languages.rb | 2 + ...3081317_create_ci_builds_runner_session.rb | 2 + .../20180713092803_create_user_statuses.rb | 2 + ...0180814153625_add_commit_email_to_users.rb | 2 +- ...908_add_identifier_to_prometheus_metric.rb | 2 +- ..._add_attr_encrypted_columns_to_web_hook.rb | 2 + ..._token_digest_to_personal_access_tokens.rb | 2 +- .../20180912111628_add_knative_application.rb | 2 + ...8_create_clusters_kubernetes_namespaces.rb | 2 + db/migrate/20181019032400_add_shards_table.rb | 2 +- .../20181019032408_add_repositories_table.rb | 2 +- ..._email_hostname_to_application_settings.rb | 2 +- .../20181031190559_drop_gcp_clusters_table.rb | 2 + ...eate_clusters_applications_cert_manager.rb | 2 + ...add_encrypted_runners_token_to_settings.rb | 2 +- .../20181116050532_knative_external_ip.rb | 2 +- ...d_encrypted_runners_token_to_namespaces.rb | 2 +- ...add_encrypted_runners_token_to_projects.rb | 2 +- ...51656_add_token_encrypted_to_ci_runners.rb | 2 +- ...81122160027_create_project_repositories.rb | 2 +- .../20181123144235_create_suggestions.rb | 2 +- ...1128123704_add_state_to_pool_repository.rb | 2 +- ...104854_add_token_encrypted_to_ci_builds.rb | 2 +- ...02526_add_project_bfg_object_map_column.rb | 2 +- ..._add_name_author_id_and_sha_to_releases.rb | 4 +- ...12171634_create_error_tracking_settings.rb | 2 + ...181228175414_create_releases_link_table.rb | 2 + ...153125_add_merge_request_external_diffs.rb | 2 +- .../20190114172110_add_domain_to_cluster.rb | 2 +- ...columns_project_error_tracking_settings.rb | 4 +- ...1_add_sorting_fields_to_user_preference.rb | 4 +- ...20190219201635_add_asset_proxy_settings.rb | 4 +- ...xternal_hostname_to_ingress_and_knative.rb | 4 +- ...ification_email_to_application_settings.rb | 2 +- ...25105715_add_fields_to_user_preferences.rb | 2 +- ...fication_email_to_notification_settings.rb | 2 +- ...190402150158_backport_enterprise_schema.rb | 2 + .../20190409224933_add_name_to_geo_nodes.rb | 2 +- ...2082247_create_project_metrics_settings.rb | 2 +- ...9082448_create_pages_domain_acme_orders.rb | 2 + ...0190430131225_create_issue_tracker_data.rb | 2 + ...20190430142025_create_jira_tracker_data.rb | 2 + .../20190514105711_create_ip_restriction.rb | 2 +- ...d_template_name_to_application_settings.rb | 2 +- ...ted_to_operations_feature_flags_clients.rb | 2 +- ...1_add_target_project_id_to_merge_trains.rb | 4 +- ...613044655_add_username_to_deploy_tokens.rb | 2 +- .../20190613073003_create_project_aliases.rb | 2 +- ...0621151636_add_merge_request_rebase_jid.rb | 2 +- ...90624123615_add_grafana_url_to_settings.rb | 2 + .../20190711124721_create_job_variables.rb | 2 + ...053_change_deploy_tokens_token_not_null.rb | 11 + ...08_add_token_encrypted_to_deploy_tokens.rb | 11 + ...nt_id_to_clusters_kubernetes_namespaces.rb | 2 + ...20190715042813_add_issue_id_to_versions.rb | 2 + ..._index_to_deploy_tokens_token_encrypted.rb | 17 + ...104947_add_static_object_token_to_users.rb | 18 + ...storage_columns_to_application_settings.rb | 14 + ...2144316_create_milestone_releases_table.rb | 20 + ...d_column_for_self_monitoring_project_id.rb | 2 + ...d_index_to_index_on_static_object_token.rb | 21 + ...de_owner_approval_to_protected_branches.rb | 31 + ..._settings_snowplow_collector_uri_column.rb | 2 +- ...3_remove_rendundant_index_from_releases.rb | 21 + ...e_epic_issues_default_relative_position.rb | 21 +- ...jects_sorting_field_to_user_preferences.rb | 13 + ...05640_import_common_metrics_line_charts.rb | 13 + ...add_cluster_status_index_to_deployments.rb | 17 + ...90820163320_add_first_last_name_to_user.rb | 14 + ...22175441_rename_epics_state_to_state_id.rb | 17 + ...0822181528_create_list_user_preferences.rb | 16 + ...sters_namespace_per_environment_default.rb | 12 + ...0628_remove_redundant_deployments_index.rb | 18 + ...190826100605_add_group_column_to_events.rb | 19 + ...acts_on_project_id_for_security_reports.rb | 22 + ..._to_prometheus_metrics_y_label_and_unit.rb | 8 + ...20190828170945_create_package_metadatum.rb | 14 + .../20190828172831_create_package_tag.rb | 14 + ...829131130_create_external_pull_requests.rb | 25 + ...xternal_pull_request_id_to_ci_pipelines.rb | 15 + ...x_to_ci_pipelines_external_pull_request.rb | 17 + ...y_to_ci_pipelines_external_pull_request.rb | 17 + ...190830140240_add_duplicated_to_to_issue.rb | 27 + ...place_indexes_for_counting_active_users.rb | 23 + ...2152329_add_index_for_ci_builds_metrics.rb | 19 + ...03_add_index_on_users_unconfirmed_email.rb | 17 + ...00_add_interruptible_to_builds_metadata.rb | 9 + ...add_concurrent_index_to_builds_metadata.rb | 19 + ...190906104555_create_alerts_service_data.rb | 15 + ...whitespace_in_diffs_to_user_preferences.rb | 20 + ...ts_index_on_group_id_with_partial_index.rb | 19 + ...ude_nulls_from_index_on_namespaces_type.rb | 20 + ...ics_language_trend_repository_languages.rb | 35 + ...56_add_any_approver_rule_unique_indexes.rb | 30 + ...1145_add_index_to_members_on_expires_at.rb | 17 + ...ify_concurrent_index_to_builds_metadata.rb | 23 + ...d_merge_request_metrics_merged_at_index.rb | 17 + ...ncrypted_fields_to_application_settings.rb | 30 + ...text_attributes_on_application_settings.rb | 87 + ...121225_remove_redundant_pipeline_stages.rb | 2 +- ...0_remove_permanent_from_redirect_routes.rb | 2 +- ...20180706223200_populate_site_statistics.rb | 4 +- ...9195358_migrate_null_wiki_access_levels.rb | 2 +- ...80826111825_recalculate_site_statistics.rb | 4 +- ...remove_koding_from_application_settings.rb | 2 +- ...112022_schedule_sync_issuables_state_id.rb | 2 +- ...137_remove_alternate_url_from_geo_nodes.rb | 2 +- ...edule_sync_issuables_state_id_where_nil.rb | 2 +- ...remove_sentry_from_application_settings.rb | 2 +- ...0711201818_encrypt_deploy_tokens_tokens.rb | 27 + ...migrate_discussion_id_on_promoted_epics.rb | 62 + ...8_set_not_null_on_users_private_profile.rb | 26 + ..._settings_snowplow_collector_uri_rename.rb | 2 +- ..._self_monitoring_project_alerting_token.rb | 73 + ...822185441_cleanup_epics_state_id_rename.rb | 17 + ...15_remove_support_bot_column_from_users.rb | 19 + ...mn_from_intermediate_release_milestones.rb | 9 + ...ule_project_any_approval_rule_migration.rb | 49 + ...rge_request_any_approval_rule_migration.rb | 49 + ...n_application_id_on_oauth_access_tokens.rb | 17 + ...chedule_productivity_analytics_backfill.rb | 15 + ...ntext_columns_from_application_settings.rb | 28 + db/schema.rb | 393 +- derailed-benchmarks/CHANGELOG.md | 7 +- .../lib/derailed_benchmarks/tasks.rb | 140 +- .../lib/derailed_benchmarks/version.rb | 2 +- doc/README.md | 25 +- doc/administration/audit_events.md | 7 +- doc/administration/auditor_users.md | 2 +- doc/administration/auth/google_secure_ldap.md | 2 +- .../how_to_configure_ldap_gitlab_ce/index.md | 6 +- .../img/group_linking.gif | Bin 1504079 -> 1328162 bytes .../img/manual_permissions.gif | Bin 1703084 -> 1029427 bytes .../how_to_configure_ldap_gitlab_ee/index.md | 4 +- doc/administration/auth/ldap-ee.md | 2 +- doc/administration/auth/okta.md | 16 +- doc/administration/auth/smartcard.md | 73 +- doc/administration/container_registry.md | 726 +-- doc/administration/custom_hooks.md | 22 +- doc/administration/database_load_balancing.md | 46 +- doc/administration/dependency_proxy.md | 154 +- .../background_verification.md | 2 +- .../geo/disaster_recovery/index.md | 7 +- .../geo/disaster_recovery/planned_failover.md | 6 +- .../geo/replication/configuration.md | 2 +- .../geo/replication/database.md | 2 +- .../geo/replication/docker_registry.md | 115 +- .../geo/replication/high_availability.md | 10 +- doc/administration/geo/replication/index.md | 18 +- .../geo/replication/security_review.md | 2 +- .../geo/replication/troubleshooting.md | 9 +- .../geo/replication/updating_the_geo_nodes.md | 456 +- .../replication/version_specific_updates.md | 426 ++ doc/administration/git_protocol.md | 8 +- .../gitaly/img/architecture_v12_4.png | Bin 0 -> 88598 bytes doc/administration/gitaly/index.md | 228 +- doc/administration/gitaly/reference.md | 269 + .../high_availability/README.md | 2 +- .../high_availability/database.md | 4 +- .../high_availability/gitlab.md | 27 +- .../high_availability/load_balancer.md | 57 +- .../high_availability/monitoring_node.md | 2 +- doc/administration/high_availability/nfs.md | 2 +- doc/administration/high_availability/redis.md | 6 +- .../high_availability/redis_source.md | 6 +- doc/administration/housekeeping.md | 2 +- doc/administration/incoming_email.md | 6 +- doc/administration/index.md | 52 +- doc/administration/instance_review.md | 3 +- doc/administration/integration/plantuml.md | 20 +- doc/administration/integration/terminal.md | 4 +- doc/administration/issue_closing_pattern.md | 17 +- doc/administration/job_artifacts.md | 6 +- doc/administration/job_traces.md | 6 +- doc/administration/logs.md | 16 +- doc/administration/maven_packages.md | 4 +- doc/administration/maven_repository.md | 4 +- doc/administration/merge_request_diffs.md | 4 +- .../monitoring/github_imports.md | 2 +- .../index.md | 4 +- .../performance/grafana_configuration.md | 2 +- .../performance/request_profiling.md | 2 +- ...monitor_exporter.md => gitlab_exporter.md} | 12 +- .../monitoring/prometheus/gitlab_metrics.md | 259 +- .../monitoring/prometheus/index.md | 16 +- doc/administration/npm_registry.md | 4 +- .../operations/cleaning_up_redis_sessions.md | 2 +- .../operations/extra_sidekiq_processes.md | 4 +- .../operations/fast_ssh_key_lookup.md | 4 +- .../operations/ssh_certificates.md | 4 +- doc/administration/packages.md | 179 +- .../packages/container_registry.md | 882 +++ .../packages/dependency_proxy.md | 148 + .../packages}/img/mitmproxy-docker.png | Bin doc/administration/packages/index.md | 175 + doc/administration/pages/index.md | 20 +- doc/administration/pages/source.md | 26 +- doc/administration/plugins.md | 6 +- doc/administration/pseudonymizer.md | 4 +- doc/administration/raketasks/geo.md | 17 + doc/administration/raketasks/github_import.md | 2 +- doc/administration/raketasks/ldap.md | 6 +- doc/administration/raketasks/maintenance.md | 4 +- .../raketasks/project_import_export.md | 2 +- .../raketasks/uploads/migrate.md | 2 +- .../raketasks/uploads/sanitize.md | 2 +- .../reply_by_email_postfix_setup.md | 4 +- doc/administration/repository_checks.md | 4 +- .../repository_storage_paths.md | 8 +- .../repository_storage_types.md | 22 +- doc/administration/restart_gitlab.md | 2 +- doc/administration/smime_signing_email.md | 76 + .../static_objects_external_storage.md | 50 + doc/administration/troubleshooting/debug.md | 2 +- .../troubleshooting/elasticsearch.md | 6 +- .../gitlab_rails_cheat_sheet.md | 1040 +++ .../troubleshooting/kubernetes_cheat_sheet.md | 60 +- .../troubleshooting/linux_cheat_sheet.md | 339 + doc/administration/troubleshooting/sidekiq.md | 123 +- .../troubleshooting/test_environments.md | 126 + doc/administration/uploads.md | 13 +- doc/api/README.md | 22 +- doc/api/api_resources.md | 3 +- doc/api/applications.md | 6 +- doc/api/avatar.md | 2 +- doc/api/award_emoji.md | 2 +- doc/api/boards.md | 4 +- doc/api/commits.md | 10 +- doc/api/container_registry.md | 6 +- doc/api/dependencies.md | 22 +- doc/api/deploy_keys.md | 14 +- doc/api/discussions.md | 2 +- doc/api/epic_links.md | 2 +- doc/api/epics.md | 14 +- doc/api/events.md | 12 +- doc/api/features.md | 4 +- doc/api/geo_nodes.md | 2 +- doc/api/graphql/index.md | 4 +- doc/api/graphql/reference/index.md | 13 +- doc/api/group_badges.md | 12 +- doc/api/group_boards.md | 4 +- doc/api/group_clusters.md | 2 +- doc/api/group_labels.md | 4 +- doc/api/group_level_variables.md | 2 +- doc/api/group_milestones.md | 4 +- doc/api/groups.md | 9 +- doc/api/issues.md | 33 +- doc/api/jobs.md | 10 +- doc/api/labels.md | 44 +- doc/api/lint.md | 6 +- doc/api/markdown.md | 2 +- doc/api/members.md | 2 +- doc/api/merge_request_approvals.md | 629 +- doc/api/merge_requests.md | 70 +- doc/api/milestones.md | 4 +- doc/api/notes.md | 12 +- doc/api/notification_settings.md | 6 +- doc/api/packages.md | 10 +- doc/api/pipeline_schedules.md | 2 +- doc/api/pipelines.md | 6 +- doc/api/project_aliases.md | 2 +- doc/api/project_badges.md | 12 +- doc/api/project_clusters.md | 2 +- doc/api/project_import_export.md | 2 +- doc/api/project_snippets.md | 62 +- doc/api/project_templates.md | 2 +- doc/api/projects.md | 32 +- doc/api/protected_branches.md | 32 +- doc/api/releases/index.md | 229 +- doc/api/releases/links.md | 2 +- doc/api/repository_files.md | 4 +- doc/api/repository_submodules.md | 2 +- doc/api/runners.md | 4 +- doc/api/scim.md | 2 +- doc/api/search.md | 2 +- doc/api/services.md | 21 +- doc/api/settings.md | 86 +- doc/api/snippets.md | 4 +- doc/api/statistics.md | 35 + doc/api/tags.md | 15 +- doc/api/templates/dockerfiles.md | 20 + doc/api/templates/gitignores.md | 22 +- doc/api/templates/gitlab_ci_ymls.md | 20 + doc/api/templates/licenses.md | 21 + doc/api/todos.md | 8 +- doc/api/users.md | 4 +- doc/api/v3_to_v4.md | 88 +- doc/api/wikis.md | 2 +- doc/articles/index.md | 2 +- doc/ci/README.md | 6 +- doc/ci/caching/index.md | 37 +- doc/ci/chatops/README.md | 4 +- .../github_integration.md | 51 +- .../img/github_repo_list.png | Bin 14282 -> 0 bytes doc/ci/ci_cd_for_external_repos/index.md | 73 +- doc/ci/directed_acyclic_graph/index.md | 6 +- doc/ci/docker/using_docker_build.md | 48 +- doc/ci/docker/using_docker_images.md | 19 +- doc/ci/docker/using_kaniko.md | 4 +- doc/ci/environments.md | 8 +- doc/ci/environments/protected_environments.md | 2 +- doc/ci/examples/README.md | 4 +- doc/ci/examples/browser_performance.md | 157 +- doc/ci/examples/code_quality.md | 117 +- .../laravel_with_gitlab_and_envoy/index.md | 4 +- doc/ci/examples/license_management.md | 4 +- doc/ci/interactive_web_terminal/index.md | 9 +- ...gitlab_workflow_example_extended_11_11.png | Bin 136497 -> 0 bytes ...gitlab_workflow_example_extended_v12_3.png | Bin 0 -> 78448 bytes doc/ci/introduction/index.md | 10 +- doc/ci/jenkins/index.md | 14 +- doc/ci/junit_test_reports.md | 4 +- doc/ci/large_repositories/index.md | 2 +- doc/ci/merge_request_pipelines/index.md | 6 +- .../pipelines_for_merged_results/index.md | 25 +- .../merge_trains/index.md | 6 +- doc/ci/metrics_reports.md | 2 +- doc/ci/multi_project_pipelines.md | 22 +- doc/ci/pipelines.md | 26 +- doc/ci/quick_start/README.md | 2 +- doc/ci/review_apps/index.md | 6 +- doc/ci/runners/README.md | 5 +- doc/ci/services/mysql.md | 4 +- doc/ci/ssh_keys/README.md | 2 +- doc/ci/triggers/README.md | 11 +- doc/ci/variables/README.md | 24 +- doc/ci/variables/predefined_variables.md | 13 +- doc/ci/yaml/README.md | 332 +- doc/container_registry/README.md | 4 +- doc/container_registry/troubleshooting.md | 4 +- doc/customization/favicon.md | 2 +- doc/customization/libravatar.md | 4 +- .../system_header_and_footer_messages.md | 6 +- doc/development/README.md | 14 +- doc/development/api_graphql_styleguide.md | 45 + doc/development/api_styleguide.md | 21 +- doc/development/architecture.md | 116 +- doc/development/automatic_ce_ee_merge.md | 12 +- doc/development/background_migrations.md | 31 +- doc/development/build_test_package.md | 8 +- doc/development/changelog.md | 19 +- doc/development/chatops_on_gitlabcom.md | 1 + doc/development/code_comments.md | 2 +- doc/development/code_review.md | 58 +- doc/development/contributing/index.md | 24 +- .../contributing/issue_workflow.md | 338 +- .../contributing/merge_request_workflow.md | 10 +- doc/development/contributing/style_guides.md | 5 + doc/development/dangerbot.md | 116 + doc/development/database_debugging.md | 2 +- .../database_merge_request_checklist.md | 4 +- doc/development/database_review.md | 9 +- doc/development/distributed_tracing.md | 13 +- .../documentation/feature-change-workflow.md | 17 +- .../documentation/improvement-workflow.md | 6 +- doc/development/documentation/index.md | 254 +- .../site_architecture/global_nav.md | 87 +- .../documentation/site_architecture/index.md | 8 +- doc/development/documentation/structure.md | 2 +- doc/development/documentation/styleguide.md | 82 +- doc/development/ee_features.md | 28 +- doc/development/elasticsearch.md | 57 +- doc/development/emails.md | 6 +- doc/development/event_tracking/backend.md | 34 + doc/development/event_tracking/frontend.md | 143 + doc/development/event_tracking/index.md | 74 + doc/development/fe_guide/axios.md | 2 +- doc/development/fe_guide/components.md | 2 +- doc/development/fe_guide/design_patterns.md | 2 +- .../fe_guide/development_process.md | 20 +- doc/development/fe_guide/event_tracking.md | 91 +- doc/development/fe_guide/frontend_faq.md | 13 +- doc/development/fe_guide/graphql.md | 2 +- doc/development/fe_guide/index.md | 4 - doc/development/fe_guide/performance.md | 4 +- doc/development/fe_guide/style_guide_js.md | 528 +- doc/development/fe_guide/style_guide_scss.md | 10 +- doc/development/fe_guide/vue.md | 10 +- doc/development/fe_guide/vuex.md | 6 +- doc/development/feature_flags/development.md | 6 +- doc/development/feature_flags/index.md | 4 +- doc/development/feature_flags/process.md | 13 +- doc/development/file_storage.md | 4 +- doc/development/filtering_by_label.md | 18 +- doc/development/gemfile.md | 4 +- doc/development/geo.md | 10 +- doc/development/git_object_deduplication.md | 28 +- doc/development/gitaly.md | 16 +- doc/development/go_guide/index.md | 4 +- doc/development/gotchas.md | 8 +- doc/development/i18n/externalization.md | 10 +- doc/development/i18n/merging_translations.md | 14 +- doc/development/i18n/proofreader.md | 2 +- doc/development/i18n/translation.md | 3 +- .../img/elasticsearch_architecture.svg | 1 + doc/development/import_export.md | 6 +- doc/development/instrumentation.md | 6 +- doc/development/integrations/jira_connect.md | 6 +- doc/development/interacting_components.md | 4 +- doc/development/kubernetes.md | 16 +- doc/development/lfs.md | 2 +- doc/development/licensing.md | 6 +- doc/development/logging.md | 2 +- doc/development/migration_style_guide.md | 141 +- .../module_with_instance_variables.md | 4 +- .../namespaces_storage_statistics.md | 178 + doc/development/new_fe_guide/dependencies.md | 2 +- .../new_fe_guide/development/testing.md | 364 +- .../new_fe_guide/modules/dirty_submit.md | 9 +- .../new_fe_guide/style/javascript.md | 2 +- .../new_fe_guide/style/prettier.md | 43 +- doc/development/omnibus.md | 22 +- doc/development/packages.md | 12 +- doc/development/performance.md | 30 +- doc/development/pipelines.md | 216 + doc/development/polling.md | 6 +- doc/development/prometheus_metrics.md | 25 +- doc/development/python_guide/index.md | 8 +- doc/development/query_recorder.md | 9 +- doc/development/rake_tasks.md | 9 + doc/development/repository_mirroring.md | 2 +- doc/development/routing.md | 2 +- doc/development/session.md | 2 +- doc/development/shell_commands.md | 4 +- .../shell_scripting_guide/index.md | 11 +- .../testing_guide/best_practices.md | 19 +- .../end_to_end/best_practices.md | 17 + .../testing_guide/end_to_end/index.md | 42 +- .../testing_guide/end_to_end/page_objects.md | 14 +- .../end_to_end/quick_start_guide.md | 48 +- .../testing_guide/end_to_end/style_guide.md | 40 +- doc/development/testing_guide/flaky_tests.md | 42 +- .../testing_guide/frontend_testing.md | 555 +- doc/development/testing_guide/img/k9s.png | Bin 0 -> 364038 bytes doc/development/testing_guide/index.md | 4 +- doc/development/testing_guide/review_apps.md | 81 +- doc/development/testing_guide/smoke.md | 1 + .../testing_guide/testing_levels.md | 13 +- doc/development/uploads.md | 270 + doc/development/utilities.md | 8 +- doc/development/ux_guide/animation.md | 4 +- doc/development/ux_guide/illustrations.md | 4 +- doc/development/what_requires_downtime.md | 16 +- doc/downgrade_ee_to_ce/README.md | 16 +- doc/gitlab-basics/add-file.md | 2 +- doc/gitlab-basics/add-merge-request.md | 2 - doc/gitlab-basics/command-line-commands.md | 2 +- doc/gitlab-basics/create-project.md | 6 +- doc/gitlab-basics/create-your-ssh-keys.md | 2 +- doc/gitlab-basics/start-using-git.md | 25 +- doc/install/README.md | 2 +- doc/install/aws/index.md | 10 +- doc/install/azure/index.md | 5 +- doc/install/google_cloud_platform/index.md | 2 +- doc/install/installation.md | 49 +- doc/install/openshift_and_gitlab/index.md | 2 +- doc/install/relative_url.md | 2 +- doc/install/requirements.md | 2 +- doc/integration/auth0.md | 4 +- doc/integration/azure.md | 4 +- doc/integration/bitbucket.md | 2 +- doc/integration/cas.md | 4 +- doc/integration/elasticsearch.md | 336 +- doc/integration/facebook.md | 4 +- doc/integration/github.md | 8 +- doc/integration/gitlab.md | 4 +- .../gmail_action_buttons_for_gitlab.md | 2 +- doc/integration/jenkins.md | 2 +- doc/integration/jenkins_deprecated.md | 4 +- doc/integration/jira.md | 2 +- doc/integration/jira_development_panel.md | 8 +- doc/integration/kerberos.md | 7 +- doc/integration/oauth2_generic.md | 2 +- doc/integration/omniauth.md | 55 +- doc/integration/salesforce.md | 4 +- doc/integration/saml.md | 12 +- doc/integration/shibboleth.md | 18 +- doc/integration/slash_commands.md | 3 +- doc/integration/twitter.md | 4 +- doc/integration/ultra_auth.md | 4 +- doc/legal/README.md | 2 +- ...corporate_contributor_license_agreement.md | 2 +- doc/migrate_ci_to_ce/README.md | 9 +- doc/policy/maintenance.md | 1 + doc/project_services/bamboo.md | 2 +- doc/project_services/bugzilla.md | 2 +- doc/project_services/emails_on_push.md | 2 +- doc/project_services/hipchat.md | 6 +- doc/project_services/irker.md | 2 +- doc/project_services/jira.md | 2 +- doc/project_services/kubernetes.md | 2 +- doc/project_services/mattermost.md | 2 +- .../mattermost_slash_commands.md | 2 +- doc/project_services/project_services.md | 2 +- doc/project_services/redmine.md | 2 +- doc/project_services/services_templates.md | 2 +- doc/project_services/slack.md | 2 +- doc/project_services/slack_slash_commands.md | 2 +- doc/public_access/public_access.md | 6 +- doc/push_rules/push_rules.md | 10 +- doc/raketasks/README.md | 2 +- doc/raketasks/backup_restore.md | 99 +- doc/raketasks/cleanup.md | 11 +- doc/raketasks/features.md | 2 +- doc/raketasks/import.md | 26 +- doc/raketasks/web_hooks.md | 12 +- doc/security/README.md | 1 + doc/security/asset_proxy.md | 72 +- doc/security/crime_vulnerability.md | 2 +- doc/security/information_exclusivity.md | 2 +- doc/security/password_storage.md | 13 + doc/security/rack_attack.md | 9 +- doc/security/rate_limits.md | 1 - doc/security/reset_root_password.md | 2 +- doc/security/two_factor_authentication.md | 2 +- doc/security/webhooks.md | 2 +- doc/subscriptions/index.md | 8 +- doc/system_hooks/system_hooks.md | 46 +- doc/topics/autodevops/index.md | 221 +- doc/topics/autodevops/quick_start_guide.md | 2 +- .../index.md | 12 +- doc/topics/git/partial_clone.md | 2 +- doc/university/README.md | 4 +- doc/university/process/README.md | 6 +- doc/university/support/README.md | 26 +- doc/university/training/end-user/README.md | 2 +- doc/university/training/gitlab_flow.md | 4 - doc/university/training/topics/git_intro.md | 2 +- .../training/topics/merge_requests.md | 2 +- doc/university/training/user_training.md | 4 +- doc/update/README.md | 4 +- doc/update/mysql_to_postgresql.md | 10 +- doc/update/patch_versions.md | 10 +- doc/update/upgrading_from_ce_to_ee.md | 9 +- doc/update/upgrading_from_source.md | 27 +- .../upgrading_postgresql_using_slony.md | 2 +- doc/user/admin_area/abuse_reports.md | 4 +- doc/user/admin_area/broadcast_messages.md | 2 +- .../admin_area/custom_project_templates.md | 2 +- doc/user/admin_area/diff_limits.md | 4 +- doc/user/admin_area/geo_nodes.md | 2 +- doc/user/admin_area/license.md | 2 +- .../admin_area/monitoring/health_check.md | 80 +- .../settings/account_and_limit_settings.md | 23 +- .../settings/continuous_integration.md | 4 +- doc/user/admin_area/settings/email.md | 6 +- .../settings/external_authorization.md | 4 +- .../settings/instance_template_repository.md | 2 +- .../settings/rate_limits_on_raw_endpoints.md | 6 +- .../settings/sign_up_restrictions.md | 6 +- doc/user/admin_area/settings/terms.md | 5 +- .../admin_area/settings/third_party_offers.md | 5 +- .../admin_area/settings/usage_statistics.md | 10 +- .../settings/user_and_ip_rate_limits.md | 2 +- .../visibility_and_access_controls.md | 10 +- doc/user/analytics/cycle_analytics.md | 30 +- doc/user/analytics/index.md | 21 +- doc/user/analytics/productivity_analytics.md | 52 + .../container_scanning/index.md | 71 +- doc/user/application_security/dast/index.md | 120 +- .../img/dependency_list_v12_2.png | Bin 207114 -> 0 bytes .../img/dependency_list_v12_3.png | Bin 0 -> 622199 bytes .../dependency_list/index.md | 12 +- .../dependency_scanning/index.md | 139 +- doc/user/application_security/index.md | 62 +- .../img/license_compliance.png} | Bin .../license_compliance_add_license_v12_3.png | Bin 0 -> 14046 bytes .../img/license_compliance_decision.png} | Bin .../license_compliance_pipeline_tab_v12_3.png | Bin 0 -> 16435 bytes .../img/license_compliance_search_v12_3.png | Bin 0 -> 26074 bytes .../img/license_compliance_settings_v12_3.png | Bin 0 -> 14766 bytes .../license_compliance/index.md | 243 + .../img/license_management_add_license.png | Bin 24247 -> 0 bytes .../img/license_management_pipeline_tab.png | Bin 12115 -> 0 bytes .../img/license_management_search.png | Bin 28237 -> 0 bytes .../img/license_management_settings.png | Bin 44790 -> 0 bytes .../license_management/index.md | 244 +- .../application_security/sast/analyzers.md | 2 +- .../sast/img/security_report.png | Bin 38475 -> 0 bytes doc/user/application_security/sast/index.md | 67 +- .../img/group_security_dashboard.png | Bin 68332 -> 0 bytes .../img/group_security_dashboard_v12_3.png | Bin 0 -> 61667 bytes .../img/pipeline_security_dashboard_v12_3.png | Bin 0 -> 52247 bytes .../img/project_security_dashboard.png | Bin 73425 -> 0 bytes .../img/project_security_dashboard_v12_3.png | Bin 0 -> 48767 bytes .../security_dashboard/index.md | 43 +- doc/user/award_emojis.md | 8 +- doc/user/clusters/applications.md | 103 +- doc/user/clusters/environments.md | 47 + .../img/cluster_environments_table_v12_3.png | Bin 0 -> 126230 bytes .../clusters/img/jupyter-git-extension.gif | Bin 2120084 -> 495240 bytes doc/user/discussions/index.md | 35 +- doc/user/feature_highlight.md | 2 +- doc/user/gitlab_com/index.md | 37 +- doc/user/group/bulk_editing/index.md | 6 +- doc/user/group/clusters/index.md | 16 +- .../group/contribution_analytics/index.md | 2 +- doc/user/group/custom_project_templates.md | 2 +- doc/user/group/dependency_proxy/index.md | 77 +- doc/user/group/epics/index.md | 19 +- doc/user/group/index.md | 37 +- doc/user/group/insights/index.md | 2 +- doc/user/group/issues_analytics/index.md | 2 +- doc/user/group/saml_sso/index.md | 25 +- doc/user/group/saml_sso/scim_setup.md | 2 +- doc/user/group/subgroups/index.md | 6 +- doc/user/index.md | 6 +- doc/user/instance/clusters/index.md | 4 +- doc/user/instance_statistics/convdev.md | 2 +- doc/user/instance_statistics/index.md | 2 +- doc/user/instance_statistics/user_cohorts.md | 4 +- doc/user/markdown.md | 127 +- doc/user/operations_dashboard/index.md | 2 +- doc/user/packages/container_registry/index.md | 158 + .../img/group_dependency_proxy.png | Bin 0 -> 40162 bytes doc/user/packages/dependency_proxy/index.md | 74 + doc/user/packages/index.md | 19 + .../img/maven_package_view.png | Bin 0 -> 16105 bytes doc/user/packages/maven_repository/index.md | 340 + .../npm_registry/img/npm_package_view.png | Bin 0 -> 10349 bytes doc/user/packages/npm_registry/index.md | 147 + doc/user/permissions.md | 57 +- doc/user/profile/account/create_accounts.md | 36 + doc/user/profile/account/delete_account.md | 8 +- .../profile/account/img/admin_user_button.png | Bin 0 -> 84870 bytes .../profile/account/img/admin_user_form.png | Bin 0 -> 196691 bytes doc/user/profile/account/img/register_tab.png | Bin 0 -> 205561 bytes .../account/two_factor_authentication.md | 1 + doc/user/profile/active_sessions.md | 2 +- doc/user/profile/index.md | 12 +- doc/user/profile/personal_access_tokens.md | 16 +- doc/user/project/badges.md | 2 +- doc/user/project/canary_deployments.md | 4 +- doc/user/project/clusters/index.md | 26 +- .../project/clusters/kubernetes_pod_logs.md | 4 +- doc/user/project/clusters/runbooks/index.md | 2 +- doc/user/project/clusters/serverless/aws.md | 163 + doc/user/project/clusters/serverless/index.md | 19 +- doc/user/project/code_owners.md | 6 +- doc/user/project/container_registry.md | 320 +- doc/user/project/deploy_boards.md | 6 +- doc/user/project/deploy_tokens/index.md | 10 +- doc/user/project/description_templates.md | 12 +- doc/user/project/file_lock.md | 6 +- .../img/protected_branches_devs_can_push.png | Bin 11221 -> 0 bytes ...protected_branches_devs_can_push_v12_3.png | Bin 0 -> 11941 bytes .../project/img/protected_branches_list.png | Bin 6933 -> 0 bytes .../img/protected_branches_list_v12_3.png | Bin 0 -> 8774 bytes .../project/img/protected_branches_page.png | Bin 7199 -> 0 bytes .../img/protected_branches_page_v12_3.png | Bin 0 -> 9445 bytes doc/user/project/img/protected_tags_list.png | Bin 7227 -> 0 bytes .../project/img/protected_tags_list_v12_3.png | Bin 0 -> 4395 bytes doc/user/project/img/protected_tags_page.png | Bin 13813 -> 0 bytes .../project/img/protected_tags_page_v12_3.png | Bin 0 -> 10431 bytes .../protected_tags_permissions_dropdown.png | Bin 7770 -> 0 bytes ...tected_tags_permissions_dropdown_v12_3.png | Bin 0 -> 4517 bytes doc/user/project/import/bitbucket_server.md | 2 +- doc/user/project/import/gemnasium.md | 2 +- doc/user/project/import/github.md | 29 +- doc/user/project/import/gitlab_com.md | 14 +- .../project/import/img/gemnasium/report.png | Bin 144883 -> 0 bytes .../import/img/gitlab_new_project_page.png | Bin 21251 -> 0 bytes .../img/gitlab_new_project_page_v12_2.png | Bin 0 -> 214213 bytes .../img/import_projects_from_repo_url.png | Bin 142329 -> 142284 bytes doc/user/project/import/manifest.md | 2 +- doc/user/project/import/phabricator.md | 2 +- doc/user/project/import/svn.md | 2 +- doc/user/project/import/tfvc.md | 2 +- doc/user/project/index.md | 18 +- doc/user/project/integrations/bamboo.md | 4 +- .../integrations/discord_notifications.md | 2 +- .../project/integrations/generic_alerts.md | 54 + doc/user/project/integrations/github.md | 11 +- .../project/integrations/hangouts_chat.md | 2 +- .../integrations/img/grafana_live_embed.png | Bin 0 -> 44603 bytes .../img/hangouts_chat_configuration.png | Bin 44655 -> 71131 bytes .../img/mattermost_configuration.png | Bin 20459 -> 114026 bytes .../img/microsoft_teams_configuration.png | Bin 96509 -> 71585 bytes .../integrations/img/slack_configuration.png | Bin 19812 -> 103375 bytes doc/user/project/integrations/jira.md | 2 +- doc/user/project/integrations/mattermost.md | 9 +- doc/user/project/integrations/mock_ci.md | 2 +- .../project/integrations/project_services.md | 3 +- doc/user/project/integrations/prometheus.md | 92 +- .../prometheus_library/cloudwatch.md | 2 +- .../prometheus_library/haproxy.md | 2 +- .../integrations/prometheus_library/index.md | 2 +- .../prometheus_library/kubernetes.md | 4 +- .../integrations/prometheus_library/nginx.md | 2 +- .../prometheus_library/nginx_ingress.md | 2 +- .../prometheus_library/nginx_ingress_vts.md | 2 +- doc/user/project/integrations/webhooks.md | 51 +- doc/user/project/issue_board.md | 36 +- .../project/issues/confidential_issues.md | 4 +- doc/user/project/issues/csv_export.md | 6 +- doc/user/project/issues/csv_import.md | 2 +- doc/user/project/issues/design_management.md | 28 +- doc/user/project/issues/due_dates.md | 2 +- .../project/issues/img/design_added_v12_3.png | Bin 0 -> 99155 bytes .../issues/img/design_comments_v12_3.png | Bin 0 -> 94900 bytes .../issues/img/design_management_v12_2.png | Bin 115179 -> 0 bytes .../issues/img/design_management_v12_3.png | Bin 0 -> 91233 bytes .../issues/img/design_modified_v12_3.png | Bin 0 -> 61647 bytes .../issues/img/link_zoom_call_in_issue.png | Bin 69554 -> 0 bytes .../issues/img/zoom-quickaction-button.png | Bin 0 -> 117097 bytes doc/user/project/issues/index.md | 2 +- .../project/issues/issue_data_and_actions.md | 27 +- doc/user/project/issues/managing_issues.md | 6 +- .../issues/multiple_assignees_for_issues.md | 2 +- doc/user/project/issues/related_issues.md | 2 +- .../project/issues/sorting_issue_lists.md | 6 +- doc/user/project/labels.md | 6 +- doc/user/project/maven_packages.md | 4 +- .../img/access_requests_management.png | Bin 11005 -> 10436 bytes .../members/img/request_access_button.png | Bin 25271 -> 27958 bytes .../img/withdraw_access_request_button.png | Bin 26123 -> 28154 bytes doc/user/project/members/index.md | 25 +- .../merge_requests/allow_collaboration.md | 3 +- .../browser_performance_testing.md | 175 +- .../project/merge_requests/code_quality.md | 118 +- .../merge_requests/fast_forward_merge.md | 10 +- .../img/approvals_premium_project_edit.png | Bin 14507 -> 0 bytes .../approvals_premium_project_edit_v12_3.png | Bin 0 -> 21908 bytes .../merge_requests/img/code_quality.gif | Bin 2617453 -> 0 bytes .../merge_requests/img/code_quality.png | Bin 0 -> 94062 bytes .../merge_requests/img/ff_merge_mr.png | Bin 0 -> 21380 bytes .../img/merge_request_diff_v12_2.png | Bin 0 -> 136144 bytes doc/user/project/merge_requests/index.md | 87 +- .../merge_requests/license_management.md | 4 +- .../merge_requests/merge_request_approvals.md | 42 +- .../merge_request_dependencies.md | 8 +- .../merge_when_build_succeeds.md | 2 +- .../merge_when_pipeline_succeeds.md | 2 +- .../merge_requests/resolve_conflicts.md | 4 +- .../merge_requests/squash_and_merge.md | 4 +- .../work_in_progress_merge_requests.md | 4 +- .../project/milestones/burndown_charts.md | 6 +- .../project/new_ci_build_permissions_model.md | 39 +- doc/user/project/operations/feature_flags.md | 49 +- .../linking_to_an_external_dashboard.md | 2 +- doc/user/project/operations/tracing.md | 10 +- doc/user/project/packages/maven.md | 4 +- doc/user/project/packages/maven_packages.md | 4 +- doc/user/project/packages/maven_repository.md | 344 +- doc/user/project/packages/npm_registry.md | 151 +- .../dns_concepts.md | 2 +- .../index.md | 4 +- .../lets_encrypt_integration.md | 11 +- .../pages/getting_started_part_four.md | 6 +- .../project/pages/getting_started_part_one.md | 2 +- .../project/pages/getting_started_part_two.md | 2 +- doc/user/project/pages/index.md | 20 +- doc/user/project/pages/introduction.md | 4 +- doc/user/project/pipelines/job_artifacts.md | 16 +- doc/user/project/pipelines/schedules.md | 8 +- doc/user/project/pipelines/settings.md | 22 +- doc/user/project/protected_branches.md | 25 +- doc/user/project/protected_tags.md | 8 +- doc/user/project/quick_actions.md | 137 +- doc/user/project/releases/index.md | 2 +- doc/user/project/repository/branches/index.md | 4 +- .../repository/gpg_signed_commits/index.md | 2 +- .../repository/img/repository_languages.png | Bin 26516 -> 0 bytes .../img/repository_languages_v12_2.gif | Bin 0 -> 159195 bytes doc/user/project/repository/index.md | 10 +- .../reducing_the_repo_size_using_git.md | 2 +- doc/user/project/repository/web_editor.md | 2 +- doc/user/project/service_desk.md | 7 +- doc/user/project/settings/import_export.md | 4 +- doc/user/project/settings/index.md | 6 +- .../project/web_ide/img/commit_changes.png | Bin 244172 -> 0 bytes .../web_ide/img/commit_changes_v12_3.png | Bin 0 -> 712873 bytes .../web_ide/img/review_changes_v12_3.png | Bin 0 -> 660299 bytes doc/user/project/web_ide/index.md | 32 +- .../wiki/img/wiki_create_new_page_modal.png | Bin 5831 -> 0 bytes doc/user/project/wiki/index.md | 13 +- doc/user/reserved_names.md | 44 +- doc/user/search/advanced_global_search.md | 4 +- doc/user/search/advanced_search_syntax.md | 1 + doc/user/snippets.md | 9 +- doc/workflow/file_finder.md | 2 +- doc/workflow/forking/branch_select.png | Bin 15410 -> 18042 bytes doc/workflow/forking/merge_request.png | Bin 16329 -> 24625 bytes doc/workflow/forking_workflow.md | 7 +- doc/workflow/git_annex.md | 14 +- doc/workflow/gitlab_flow.md | 3 +- .../img/forking_workflow_choose_namespace.png | Bin 26275 -> 35084 bytes .../img/forking_workflow_fork_button.png | Bin 12962 -> 25754 bytes .../img/forking_workflow_path_taken_error.png | Bin 10092 -> 21497 bytes .../repository_mirroring_push_settings.png | Bin 50526 -> 72515 bytes doc/workflow/issue_weight.md | 5 +- doc/workflow/lfs/lfs_administration.md | 51 +- .../lfs/manage_large_binaries_with_git_lfs.md | 28 +- .../lfs/migrate_from_git_annex_to_git_lfs.md | 4 +- doc/workflow/notifications.md | 6 +- doc/workflow/releases.md | 8 +- doc/workflow/repository_mirroring.md | 39 +- doc/workflow/shortcuts.md | 193 +- .../time-tracking/time-tracking-example.png | Bin 14564 -> 0 bytes doc/workflow/time_tracking.md | 24 +- .../img/time_tracking_example_v12_2.png | Bin 0 -> 16362 bytes .../img/time_tracking_sidebar_v8_16.png} | Bin doc/workflow/timezone.md | 4 +- doc/workflow/todos.md | 8 +- jest.config.js | 3 + lib/api/api.rb | 8 +- lib/api/api_guard.rb | 1 + lib/api/award_emoji.rb | 8 +- lib/api/boards.rb | 2 + lib/api/branches.rb | 2 +- lib/api/entities.rb | 106 +- lib/api/entities/internal.rb | 19 + lib/api/group_boards.rb | 2 + lib/api/group_clusters.rb | 2 + lib/api/group_milestones.rb | 2 + lib/api/groups.rb | 10 +- lib/api/helpers.rb | 41 +- lib/api/helpers/discussions_helpers.rb | 2 + lib/api/helpers/groups_helpers.rb | 9 + lib/api/helpers/internal_helpers.rb | 22 +- lib/api/helpers/issues_helpers.rb | 17 +- lib/api/helpers/label_helpers.rb | 32 +- lib/api/helpers/notes_helpers.rb | 4 + lib/api/helpers/project_snapshots_helpers.rb | 2 + lib/api/helpers/projects_helpers.rb | 13 +- lib/api/helpers/protected_branches_helpers.rb | 2 + .../helpers/resource_label_events_helpers.rb | 2 + lib/api/helpers/runner.rb | 4 +- lib/api/helpers/search_helpers.rb | 2 + lib/api/helpers/services_helpers.rb | 21 +- lib/api/helpers/settings_helpers.rb | 2 + lib/api/helpers/users_helpers.rb | 2 + lib/api/internal.rb | 293 - lib/api/internal/base.rb | 281 + lib/api/internal/pages.rb | 32 + lib/api/issues.rb | 33 +- lib/api/job_artifacts.rb | 2 + lib/api/labels.rb | 33 +- lib/api/merge_requests.rb | 28 +- lib/api/namespaces.rb | 2 + lib/api/notes.rb | 13 +- lib/api/pages_domains.rb | 6 + lib/api/pipelines.rb | 30 +- lib/api/project_clusters.rb | 2 + lib/api/project_container_repositories.rb | 2 +- lib/api/project_import.rb | 5 +- lib/api/project_milestones.rb | 2 + lib/api/project_snippets.rb | 14 +- lib/api/projects.rb | 13 +- lib/api/protected_branches.rb | 1 + lib/api/release/links.rb | 4 +- lib/api/releases.rb | 10 +- lib/api/search.rb | 2 + lib/api/services.rb | 2 + lib/api/settings.rb | 10 +- lib/api/statistics.rb | 18 + lib/api/support/git_access_actor.rb | 42 + lib/api/triggers.rb | 2 +- lib/api/users.rb | 5 +- lib/api/validations/check_assignees_count.rb | 2 + lib/api/validations/types/workhorse_file.rb | 20 + lib/api/wikis.rb | 22 +- lib/backup/manager.rb | 2 +- .../filter/abstract_reference_filter.rb | 2 + lib/banzai/filter/asset_proxy_filter.rb | 6 +- lib/banzai/filter/color_filter.rb | 2 +- lib/banzai/filter/commit_trailers_filter.rb | 3 +- lib/banzai/filter/epic_reference_filter.rb | 2 + lib/banzai/filter/external_link_filter.rb | 4 +- lib/banzai/filter/footnote_filter.rb | 4 +- lib/banzai/filter/issuable_state_filter.rb | 7 +- lib/banzai/filter/label_reference_filter.rb | 4 +- lib/banzai/filter/math_filter.rb | 8 +- lib/banzai/filter/relative_link_filter.rb | 4 +- lib/banzai/filter/suggestion_filter.rb | 2 +- lib/banzai/filter/syntax_highlight_filter.rb | 4 +- lib/banzai/issuable_extractor.rb | 6 +- lib/banzai/pipeline/gfm_pipeline.rb | 2 + lib/banzai/pipeline/post_process_pipeline.rb | 2 + lib/banzai/pipeline/single_line_pipeline.rb | 2 + lib/banzai/reference_parser/epic_parser.rb | 2 + lib/bitbucket/connection.rb | 4 +- lib/container_registry/client.rb | 2 + lib/declarative_policy.rb | 2 +- lib/feature.rb | 2 + lib/feature/gitaly.rb | 6 +- lib/file_size_validator.rb | 2 - lib/gitlab.rb | 10 +- lib/gitlab/access.rb | 2 + lib/gitlab/action_rate_limiter.rb | 4 +- .../cycle_analytics/default_stages.rb | 98 + .../analytics/cycle_analytics/stage_events.rb | 71 + .../stage_events/code_stage_start.rb | 23 + .../stage_events/issue_created.rb | 23 + .../issue_first_mentioned_in_commit.rb | 23 + .../stage_events/issue_stage_end.rb | 23 + .../stage_events/merge_request_created.rb | 23 + ...ge_request_first_deployed_to_production.rb | 23 + .../merge_request_last_build_finished.rb | 23 + .../merge_request_last_build_started.rb | 23 + .../stage_events/merge_request_merged.rb | 23 + .../stage_events/plan_stage_start.rb | 23 + .../stage_events/simple_stage_event.rb | 13 + .../stage_events/stage_event.rb | 28 + lib/gitlab/auth.rb | 16 +- lib/gitlab/auth/ldap/access.rb | 2 + lib/gitlab/auth/ldap/adapter.rb | 2 + lib/gitlab/auth/ldap/config.rb | 2 + lib/gitlab/auth/ldap/dn.rb | 1 - lib/gitlab/auth/ldap/person.rb | 2 + lib/gitlab/auth/ldap/user.rb | 1 + lib/gitlab/auth/o_auth/auth_hash.rb | 2 + lib/gitlab/auth/o_auth/user.rb | 9 +- lib/gitlab/auth/request_authenticator.rb | 4 +- lib/gitlab/auth/result.rb | 2 + lib/gitlab/auth/saml/config.rb | 2 + lib/gitlab/auth/saml/user.rb | 2 + lib/gitlab/auth/unique_ips_limiter.rb | 2 +- lib/gitlab/auth/user_auth_finders.rb | 26 +- lib/gitlab/authorized_keys.rb | 30 +- .../encrypt_runners_tokens.rb | 2 +- .../fix_promoted_epics_discussion_ids.rb | 22 + .../fix_user_namespace_names.rb | 2 +- .../fix_user_project_route_names.rb | 2 +- ...uest_assignees_migration_progress_check.rb | 2 +- .../prepare_untracked_uploads.rb | 8 +- .../bitbucket_server_import/importer.rb | 2 +- lib/gitlab/checks/base_checker.rb | 1 + lib/gitlab/checks/change_access.rb | 2 + lib/gitlab/checks/diff_check.rb | 3 +- lib/gitlab/checks/lfs_check.rb | 4 +- lib/gitlab/checks/project_created.rb | 2 +- lib/gitlab/checks/project_moved.rb | 2 +- lib/gitlab/ci/build/policy/variables.rb | 2 +- lib/gitlab/ci/build/port.rb | 4 +- .../prerequisite/kubernetes_namespace.rb | 2 +- lib/gitlab/ci/build/rules.rb | 44 + lib/gitlab/ci/build/rules/rule.rb | 32 + lib/gitlab/ci/build/rules/rule/clause.rb | 29 + .../ci/build/rules/rule/clause/changes.rb | 23 + lib/gitlab/ci/build/rules/rule/clause/if.rb | 19 + lib/gitlab/ci/build/step.rb | 6 +- lib/gitlab/ci/config.rb | 2 + lib/gitlab/ci/config/entry/cache.rb | 2 +- lib/gitlab/ci/config/entry/job.rb | 53 +- lib/gitlab/ci/config/entry/jobs.rb | 2 + lib/gitlab/ci/config/entry/root.rb | 4 +- lib/gitlab/ci/config/entry/rules.rb | 37 + lib/gitlab/ci/config/entry/rules/rule.rb | 42 + lib/gitlab/ci/config/external/file/base.rb | 8 +- .../ci/config/external/file/template.rb | 2 +- lib/gitlab/ci/cron_parser.rb | 4 +- lib/gitlab/ci/parsers.rb | 2 + lib/gitlab/ci/pipeline/chain/build.rb | 1 + lib/gitlab/ci/pipeline/chain/command.rb | 2 +- lib/gitlab/ci/pipeline/chain/helpers.rb | 7 +- .../ci/pipeline/chain/limit/activity.rb | 2 + .../ci/pipeline/chain/limit/job_activity.rb | 2 + lib/gitlab/ci/pipeline/chain/limit/size.rb | 2 + lib/gitlab/ci/pipeline/chain/populate.rb | 2 +- .../ci/pipeline/chain/validate/abilities.rb | 2 + .../ci/pipeline/expression/lexeme/matches.rb | 3 +- .../pipeline/expression/lexeme/not_matches.rb | 3 +- lib/gitlab/ci/pipeline/seed/build.rb | 67 +- lib/gitlab/ci/reports/test_case.rb | 8 +- lib/gitlab/ci/status/build/failed.rb | 2 + .../templates/Android-Fastlane.gitlab-ci.yml | 2 +- .../ci/templates/Auto-DevOps.gitlab-ci.yml | 22 +- .../templates/Jobs/Code-Quality.gitlab-ci.yml | 5 +- .../templates/Pages/SwaggerUI.gitlab-ci.yml | 29 + .../Security/Container-Scanning.gitlab-ci.yml | 63 +- .../Dependency-Scanning.gitlab-ci.yml | 2 +- .../Security/License-Management.gitlab-ci.yml | 6 +- .../ci/templates/Security/SAST.gitlab-ci.yml | 143 +- lib/gitlab/ci/trace.rb | 2 +- lib/gitlab/ci/yaml_processor.rb | 3 + .../cleanup/orphan_job_artifact_files.rb | 2 + .../orphan_job_artifact_files_batch.rb | 2 + .../cleanup/project_upload_file_finder.rb | 6 +- lib/gitlab/config/entry/validators.rb | 24 +- lib/gitlab/correlation_id.rb | 40 - lib/gitlab/cycle_analytics/stage_summary.rb | 22 +- lib/gitlab/daemon.rb | 9 +- lib/gitlab/danger/helper.rb | 26 +- lib/gitlab/danger/teammate.rb | 4 +- lib/gitlab/data_builder/pipeline.rb | 17 + lib/gitlab/data_builder/push.rb | 2 +- lib/gitlab/database.rb | 7 +- lib/gitlab/database/migration_helpers.rb | 86 +- .../database/obsolete_ignored_columns.rb | 38 + lib/gitlab/database/sha_attribute.rb | 2 +- .../database_importers/common_metrics.rb | 2 + .../common_metrics/prometheus_metric_enums.rb | 2 + .../self_monitoring/project/create_service.rb | 261 + lib/gitlab/devise_failure.rb | 13 + lib/gitlab/diff/highlight.rb | 2 +- lib/gitlab/diff/suggestion.rb | 2 +- .../discussions_diff/file_collection.rb | 29 +- lib/gitlab/downtime_check/message.rb | 4 +- lib/gitlab/ee_compat_check.rb | 444 -- lib/gitlab/email/handler.rb | 2 + lib/gitlab/email/handler/base_handler.rb | 8 + .../email/handler/create_issue_handler.rb | 4 + .../handler/create_merge_request_handler.rb | 4 + .../email/handler/create_note_handler.rb | 4 + .../email/handler/unsubscribe_handler.rb | 4 + .../email/hook/smime_signature_interceptor.rb | 50 + lib/gitlab/email/receiver.rb | 6 +- lib/gitlab/email/smime/certificate.rb | 36 + lib/gitlab/email/smime/signer.rb | 29 + lib/gitlab/etag_caching/router.rb | 6 + lib/gitlab/etag_caching/store.rb | 2 +- lib/gitlab/exclusive_lease.rb | 2 + lib/gitlab/fake_application_settings.rb | 2 + lib/gitlab/favicon.rb | 2 + lib/gitlab/fogbugz_import/project_creator.rb | 2 +- lib/gitlab/git.rb | 6 +- lib/gitlab/git/diff_collection.rb | 6 + lib/gitlab/git/keep_around.rb | 48 + lib/gitlab/git/lfs_pointer_file.rb | 4 +- lib/gitlab/git/repository.rb | 4 +- lib/gitlab/git/util.rb | 2 +- lib/gitlab/git_access.rb | 2 + lib/gitlab/git_access_wiki.rb | 2 + lib/gitlab/gitaly_client.rb | 13 +- lib/gitlab/github_import/issuable_finder.rb | 2 +- lib/gitlab/github_import/label_finder.rb | 2 +- lib/gitlab/github_import/milestone_finder.rb | 2 +- lib/gitlab/github_import/page_counter.rb | 2 +- lib/gitlab/github_import/parallel_importer.rb | 2 + .../github_import/parallel_scheduling.rb | 2 +- lib/gitlab/github_import/user_finder.rb | 6 +- lib/gitlab/gl_repository.rb | 2 + lib/gitlab/gpg/commit.rb | 2 +- .../loggers/client_env_logger.rb | 16 + .../authorize/authorize_field_service.rb | 12 +- .../graphql/authorize/authorize_resource.rb | 10 +- .../graphql/loaders/batch_lfs_oid_loader.rb | 2 +- .../graphql/loaders/batch_model_loader.rb | 2 +- .../batch_project_statistics_loader.rb | 2 +- .../batch_root_storage_statistics_loader.rb | 23 + .../loaders/pipeline_for_sha_loader.rb | 2 +- lib/gitlab/graphql/present/instrumentation.rb | 4 +- .../representation/submodule_tree_entry.rb | 2 + .../graphql/representation/tree_entry.rb | 2 + lib/gitlab/health_checks/gitaly_check.rb | 2 +- lib/gitlab/hook_data/issue_builder.rb | 3 + lib/gitlab/hook_data/merge_request_builder.rb | 1 + lib/gitlab/i18n/po_linter.rb | 8 +- lib/gitlab/import_export.rb | 2 +- .../base_after_export_strategy.rb | 2 +- .../web_upload_strategy.rb | 6 +- lib/gitlab/import_export/attribute_cleaner.rb | 2 +- lib/gitlab/import_export/attributes_finder.rb | 71 +- lib/gitlab/import_export/config.rb | 91 +- .../import_export/fast_hash_serializer.rb | 108 + lib/gitlab/import_export/import_export.yml | 187 +- lib/gitlab/import_export/json_hash_builder.rb | 117 - lib/gitlab/import_export/lfs_restorer.rb | 2 +- .../import_export/project_tree_restorer.rb | 87 +- .../import_export/project_tree_saver.rb | 27 +- lib/gitlab/import_export/reader.rb | 30 +- lib/gitlab/import_export/relation_factory.rb | 10 +- lib/gitlab/import_sources.rb | 2 + lib/gitlab/incoming_email.rb | 6 +- lib/gitlab/internal_post_receive/response.rb | 51 + lib/gitlab/issuable_metadata.rb | 4 +- lib/gitlab/job_waiter.rb | 2 +- lib/gitlab/json_cache.rb | 2 +- lib/gitlab/jwt_authenticatable.rb | 42 + lib/gitlab/kubernetes/helm.rb | 12 +- lib/gitlab/kubernetes/helm/reset_command.rb | 4 +- lib/gitlab/kubernetes/pod.rb | 10 +- .../legacy_github_import/label_formatter.rb | 2 - lib/gitlab/logger.rb | 2 +- lib/gitlab/markdown_cache.rb | 2 +- lib/gitlab/metrics/dashboard/errors.rb | 6 +- lib/gitlab/metrics/dashboard/finder.rb | 4 +- lib/gitlab/metrics/dashboard/processor.rb | 30 +- .../metrics/dashboard/service_selector.rb | 2 + .../metrics/dashboard/stages/base_stage.rb | 15 +- .../dashboard/stages/endpoint_inserter.rb | 8 +- lib/gitlab/metrics/samplers/ruby_sampler.rb | 2 +- lib/gitlab/metrics/subscribers/action_view.rb | 2 +- lib/gitlab/metrics/transaction.rb | 7 +- lib/gitlab/metrics/web_transaction.rb | 4 +- lib/gitlab/middleware/basic_health_check.rb | 2 +- lib/gitlab/middleware/multipart.rb | 20 +- lib/gitlab/middleware/read_only/controller.rb | 6 +- lib/gitlab/multi_collection_paginator.rb | 2 - lib/gitlab/noteable_metadata.rb | 33 + lib/gitlab/object_hierarchy.rb | 2 + lib/gitlab/omniauth_initializer.rb | 2 + lib/gitlab/optimistic_locking.rb | 3 +- lib/gitlab/pages.rb | 17 +- lib/gitlab/pages_client.rb | 2 +- lib/gitlab/patch/active_record_query_cache.rb | 2 +- lib/gitlab/patch/draw_route.rb | 2 + lib/gitlab/path_regex.rb | 8 +- lib/gitlab/performance_bar.rb | 8 +- .../redis_adapter_when_peek_enabled.rb | 4 +- .../with_top_level_warnings.rb | 19 + .../issues/task_importer.rb | 2 +- lib/gitlab/polling_interval.rb | 2 +- lib/gitlab/private_commit_email.rb | 2 +- lib/gitlab/profiler.rb | 5 +- .../prometheus/additional_metrics_parser.rb | 2 +- lib/gitlab/prometheus/metric_group.rb | 1 + .../queries/query_additional_metrics.rb | 2 + lib/gitlab/push_options.rb | 27 +- lib/gitlab/query_limiting/middleware.rb | 4 +- lib/gitlab/quick_actions/issuable_actions.rb | 4 +- lib/gitlab/quick_actions/issue_actions.rb | 49 +- .../issue_and_merge_request_actions.rb | 2 +- .../quick_actions/substitution_definition.rb | 3 +- lib/gitlab/redis/cache.rb | 6 +- lib/gitlab/redis/queues.rb | 8 +- lib/gitlab/redis/shared_state.rb | 12 +- lib/gitlab/redis/wrapper.rb | 4 +- lib/gitlab/regex.rb | 6 + lib/gitlab/repo_path.rb | 2 + lib/gitlab/repository_cache_adapter.rb | 65 + lib/gitlab/repository_set_cache.rb | 67 + lib/gitlab/request_context.rb | 2 +- lib/gitlab/request_profiler.rb | 2 +- lib/gitlab/rugged_instrumentation.rb | 8 +- lib/gitlab/search/parsed_query.rb | 2 + lib/gitlab/search_results.rb | 5 +- lib/gitlab/sentry.rb | 17 +- lib/gitlab/shard_health_cache.rb | 2 +- lib/gitlab/shell.rb | 88 +- lib/gitlab/sidekiq_daemon/monitor.rb | 184 + .../sidekiq_logging/structured_logger.rb | 46 +- lib/gitlab/sidekiq_middleware/metrics.rb | 6 +- lib/gitlab/sidekiq_middleware/monitor.rb | 20 + lib/gitlab/sidekiq_status.rb | 2 +- lib/gitlab/slash_commands/application_help.rb | 7 +- lib/gitlab/slash_commands/command.rb | 3 +- lib/gitlab/slash_commands/help.rb | 4 +- lib/gitlab/slash_commands/issue_close.rb | 44 + .../slash_commands/presenters/access.rb | 25 +- lib/gitlab/slash_commands/presenters/help.rb | 70 +- .../slash_commands/presenters/issue_base.rb | 10 + .../slash_commands/presenters/issue_close.rb | 51 + .../slash_commands/presenters/issue_move.rb | 1 - .../slash_commands/presenters/issue_new.rb | 10 +- lib/gitlab/snowplow_tracker.rb | 35 - lib/gitlab/template/gitlab_ci_yml_template.rb | 2 + lib/gitlab/time_tracking_formatter.rb | 47 +- lib/gitlab/tracing.rb | 2 +- lib/gitlab/tracking.rb | 44 + lib/gitlab/tree_summary.rb | 2 + lib/gitlab/url_blocker.rb | 46 +- lib/gitlab/url_blockers/url_whitelist.rb | 42 + lib/gitlab/url_helpers.rb | 2 +- lib/gitlab/usage_data.rb | 59 +- .../merge_request_counter.rb | 10 + .../usage_data_counters/note_counter.rb | 8 +- .../productivity_analytics_counter.rb | 8 + lib/gitlab/utils/override.rb | 2 +- lib/gitlab/utils/strong_memoize.rb | 6 +- lib/gitlab/workhorse.rb | 46 +- lib/gitlab_danger.rb | 53 + lib/google_api/cloud_platform/client.rb | 4 +- lib/gt_one_coercion.rb | 7 - lib/microsoft_teams/notifier.rb | 1 - lib/peek/views/active_record.rb | 20 +- lib/peek/views/detailed_view.rb | 49 +- lib/peek/views/gitaly.rb | 20 +- lib/peek/views/redis_detailed.rb | 6 +- lib/peek/views/rugged.rb | 2 +- .../cleanup_multiproc_dir_service.rb | 23 + lib/quality/test_level.rb | 2 +- lib/support/nginx/registry-ssl | 2 +- .../app/authorized_keys_permission_check.rb | 41 + .../app/init_script_up_to_date_check.rb | 2 +- lib/system_check/app/redis_version_check.rb | 2 +- .../foreman_configured_check.rb | 25 - lib/system_check/incoming_email_check.rb | 2 - lib/system_check/rake_task/app_task.rb | 5 +- lib/system_check/rake_task/gitlab_task.rb | 2 + lib/tasks/db_obsolete_ignored_columns.rake | 21 + lib/tasks/downtime_check.rake | 4 +- lib/tasks/ee_compat_check.rake | 4 - lib/tasks/gettext.rake | 2 +- lib/tasks/gitlab/assets.rake | 6 - lib/tasks/gitlab/dev.rake | 31 - lib/tasks/gitlab/graphql.rake | 4 +- lib/tasks/gitlab/shell.rake | 2 +- lib/tasks/gitlab/uploads/legacy.rake | 2 +- lib/tasks/gitlab_danger.rake | 17 + lib/tasks/lint.rake | 15 +- locale/ar_SA/gitlab.po | 2 +- locale/bg/gitlab.po | 2 +- locale/bn_BD/gitlab.po | 2 +- locale/bn_IN/gitlab.po | 2 +- locale/ca_ES/gitlab.po | 2 +- locale/cs_CZ/gitlab.po | 2 +- locale/cy_GB/gitlab.po | 2 +- locale/da_DK/gitlab.po | 2 +- locale/de/gitlab.po | 2 +- locale/el_GR/gitlab.po | 2 +- locale/eo/gitlab.po | 2 +- locale/es/gitlab.po | 2 +- locale/et_EE/gitlab.po | 2 +- locale/fil_PH/gitlab.po | 2 +- locale/fr/gitlab.po | 2 +- locale/gitlab.pot | 5561 ++++++++++++++++- locale/gl_ES/gitlab.po | 2 +- locale/he_IL/gitlab.po | 2 +- locale/hi_IN/gitlab.po | 2 +- locale/hr_HR/gitlab.po | 2 +- locale/hu_HU/gitlab.po | 2 +- locale/id_ID/gitlab.po | 2 +- locale/it/gitlab.po | 2 +- locale/ja/gitlab.po | 2 +- locale/ka_GE/gitlab.po | 2 +- locale/ko/gitlab.po | 2 +- locale/mn_MN/gitlab.po | 2 +- locale/nb_NO/gitlab.po | 2 +- locale/nl_NL/gitlab.po | 2 +- locale/pa_IN/gitlab.po | 2 +- locale/pl_PL/gitlab.po | 2 +- locale/pt_BR/gitlab.po | 18 +- locale/pt_PT/gitlab.po | 2 +- locale/ro_RO/gitlab.po | 2 +- locale/ru/gitlab.po | 2 +- locale/sk_SK/gitlab.po | 2 +- locale/sq_AL/gitlab.po | 2 +- locale/sr_CS/gitlab.po | 2 +- locale/sr_SP/gitlab.po | 2 +- locale/sv_SE/gitlab.po | 2 +- locale/sw_KE/gitlab.po | 2 +- locale/tr_TR/gitlab.po | 2 +- locale/uk/gitlab.po | 14 +- locale/zh_CN/gitlab.po | 2 +- locale/zh_HK/gitlab.po | 2 +- locale/zh_TW/gitlab.po | 2 +- package.json | 27 +- plugins/.gitignore | 5 + qa/Dockerfile | 2 + qa/README.md | 22 +- qa/qa.rb | 32 +- qa/qa/git/repository.rb | 2 + qa/qa/page/admin/menu.rb | 19 + .../admin/settings/component/ip_limits.rb | 30 + qa/qa/page/admin/settings/general.rb | 2 +- qa/qa/page/admin/settings/network.rb | 23 + qa/qa/page/component/web_ide/alert.rb | 27 + qa/qa/page/dashboard/projects.rb | 2 + qa/qa/page/file/show.rb | 2 + qa/qa/page/group/menu.rb | 33 + qa/qa/page/group/settings/general.rb | 103 + qa/qa/page/group/sub_menus/common.rb | 38 + qa/qa/page/group/sub_menus/members.rb | 48 + qa/qa/page/main/login.rb | 13 +- qa/qa/page/main/menu.rb | 8 + qa/qa/page/merge_request/new.rb | 2 + qa/qa/page/merge_request/show.rb | 8 +- qa/qa/page/profile/menu.rb | 2 + qa/qa/page/profile/ssh_keys.rb | 8 + qa/qa/page/profile/two_factor_auth.rb | 17 + qa/qa/page/project/commit/show.rb | 5 + qa/qa/page/project/import/github.rb | 2 +- qa/qa/page/project/issue/index.rb | 10 + qa/qa/page/project/issue/show.rb | 11 + qa/qa/page/project/menu.rb | 2 + qa/qa/page/project/milestone/index.rb | 2 + qa/qa/page/project/new.rb | 2 + .../project/operations/kubernetes/show.rb | 2 + qa/qa/page/project/pipeline/show.rb | 2 + qa/qa/page/project/settings/advanced.rb | 27 + qa/qa/page/project/settings/auto_devops.rb | 21 + qa/qa/page/project/settings/ci_cd.rb | 10 +- qa/qa/page/project/settings/main.rb | 12 + qa/qa/page/project/settings/members.rb | 35 + .../settings/mirroring_repositories.rb | 12 +- .../project/settings/protected_branches.rb | 39 +- .../visibility_features_permissions.rb | 26 + qa/qa/page/project/show.rb | 6 + qa/qa/page/project/sub_menus/issues.rb | 9 + qa/qa/page/project/sub_menus/repository.rb | 2 + qa/qa/page/project/web_ide/edit.rb | 12 + qa/qa/page/project/wiki/git_access.rb | 13 + qa/qa/page/project/wiki/show.rb | 10 + qa/qa/page/settings/common.rb | 2 +- qa/qa/resource/api_fabricator.rb | 16 + qa/qa/resource/base.rb | 12 + qa/qa/resource/branch.rb | 77 - qa/qa/resource/deploy_token.rb | 4 +- qa/qa/resource/file.rb | 2 +- qa/qa/resource/fork.rb | 2 +- qa/qa/resource/group.rb | 7 +- qa/qa/resource/issue.rb | 9 +- qa/qa/resource/kubernetes_cluster.rb | 4 +- qa/qa/resource/label.rb | 3 +- qa/qa/resource/members.rb | 28 + qa/qa/resource/merge_request.rb | 23 +- qa/qa/resource/personal_access_token.rb | 2 +- qa/qa/resource/project.rb | 16 +- .../resource/project_imported_from_github.rb | 6 +- qa/qa/resource/project_member.rb | 35 + qa/qa/resource/project_milestone.rb | 2 +- qa/qa/resource/protected_branch.rb | 79 + qa/qa/resource/repository/commit.rb | 66 + qa/qa/resource/repository/project_push.rb | 5 +- qa/qa/resource/repository/wiki_push.rb | 8 +- qa/qa/resource/runner.rb | 36 +- qa/qa/resource/sandbox.rb | 10 +- qa/qa/resource/snippet.rb | 2 +- qa/qa/resource/ssh_key.rb | 2 +- qa/qa/resource/user.rb | 1 + qa/qa/resource/wiki.rb | 9 + qa/qa/runtime/api/client.rb | 30 +- qa/qa/runtime/api/request.rb | 4 + qa/qa/runtime/browser.rb | 4 +- qa/qa/runtime/env.rb | 2 + qa/qa/runtime/feature.rb | 11 + qa/qa/runtime/fixtures.rb | 13 +- qa/qa/scenario/test/sanity/selectors.rb | 2 + qa/qa/service/cluster_provider/base.rb | 41 + qa/qa/service/cluster_provider/gcloud.rb | 87 + qa/qa/service/cluster_provider/k3d.rb | 131 + qa/qa/service/cluster_provider/minikube.rb | 26 + qa/qa/service/kubernetes_cluster.rb | 130 +- qa/qa/service/runner.rb | 27 +- .../features/api/1_manage/rate_limits_spec.rb | 20 + .../project_archive_compare_spec.rb | 3 +- .../create_group_with_mattermost_team_spec.rb | 2 +- .../log_into_mattermost_via_gitlab_spec.rb | 2 +- .../project/add_project_member_spec.rb | 4 +- .../project/import_github_repo_spec.rb | 6 +- .../issue/check_mentions_for_xss_spec.rb | 2 +- .../2_plan/issue/close_issue_spec.rb | 58 + .../browser_ui/2_plan/issue/mentions_spec.rb | 41 + .../repository/add_file_template_spec.rb | 5 +- .../add_list_delete_branches_spec.rb | 2 +- .../repository/protocol_v2_push_http_spec.rb | 2 +- .../repository/protocol_v2_push_ssh_spec.rb | 2 +- .../push_over_http_file_size_spec.rb | 2 +- .../repository/push_protected_branch_spec.rb | 23 +- .../user_views_commit_diff_patch_spec.rb | 4 +- .../web_ide/add_file_template_spec.rb | 5 +- .../wiki/create_edit_clone_push_wiki_spec.rb | 2 +- .../create_and_process_pipeline_spec.rb | 2 +- .../4_verify/runner/register_runner_spec.rb | 4 +- .../deploy_key/clone_using_deploy_key_spec.rb | 2 +- .../create_project_with_auto_devops_spec.rb | 16 +- .../non_devops/performance_bar_spec.rb | 2 +- qa/qa/support/api.rb | 1 + qa/qa/support/retrier.rb | 7 +- .../revoke_all_personal_access_tokens.rb | 2 +- qa/spec/runtime/feature_spec.rb | 21 +- qa/spec/specs/helpers/quarantine_spec.rb | 2 +- rubocop/code_reuse_helpers.rb | 4 +- .../cop/active_record_association_reload.rb | 2 +- .../cop/avoid_break_from_strong_memoize.rb | 2 +- rubocop/cop/avoid_return_from_blocks.rb | 2 +- .../cop/avoid_route_redirect_leading_slash.rb | 2 +- rubocop/cop/code_reuse/active_record.rb | 3 +- rubocop/cop/gitlab/httparty.rb | 6 +- rubocop/cop/gitlab/union.rb | 4 - rubocop/cop/graphql/authorize_types.rb | 10 +- rubocop/cop/graphql/descriptions.rb | 56 + rubocop/cop/include_action_view_context.rb | 5 - rubocop/cop/include_sidekiq_worker.rb | 5 +- .../cop/inject_enterprise_edition_module.rb | 2 +- .../migration/add_limit_to_string_columns.rb | 59 + rubocop/cop/migration/add_reference.rb | 56 +- rubocop/cop/migration/safer_boolean_column.rb | 2 +- .../cop/prefer_class_methods_over_module.rb | 2 +- rubocop/cop/qa/ambiguous_page_object_name.rb | 48 + rubocop/cop/rspec/be_success_matcher.rb | 53 + rubocop/cop/rspec/env_assignment.rb | 5 +- .../cop/rspec/factories_in_migration_specs.rb | 5 +- rubocop/cop/scalability/file_uploads.rb | 61 + rubocop/cop/sidekiq_options_queue.rb | 5 +- rubocop/rubocop.rb | 5 + rubocop/spec_helpers.rb | 30 - scripts/build_assets_image | 3 +- scripts/ee-specific-lines-check | 42 + scripts/frontend/check_dependencies.sh | 11 + scripts/lint-doc.sh | 28 +- scripts/prepare_postgres_fdw.sh | 15 + scripts/review_apps/automated_cleanup.rb | 3 +- scripts/review_apps/base-config.yaml | 151 + scripts/review_apps/review-apps.sh | 136 +- scripts/schema_changed.sh | 0 scripts/static-analysis | 4 - scripts/trigger-build | 3 +- scripts/trigger-build-docs | 4 +- shared/.gitignore | 4 + spec/bin/changelog_spec.rb | 8 + spec/config/smime_signature_settings_spec.rb | 56 + .../application_settings_controller_spec.rb | 27 +- .../admin/applications_controller_spec.rb | 10 + .../admin/clusters_controller_spec.rb | 19 +- .../application_controller_spec.rb | 37 +- .../boards/lists_controller_spec.rb | 66 +- .../concerns/issuable_collections_spec.rb | 72 - .../concerns/send_file_upload_spec.rb | 1 - .../concerns/sorting_preference_spec.rb | 93 + .../static_object_external_storage_spec.rb | 96 + .../dashboard/projects_controller_spec.rb | 8 + .../dashboard/snippets_controller_spec.rb | 21 + .../dashboard/todos_controller_spec.rb | 24 +- .../explore/projects_controller_spec.rb | 119 +- .../explore/snippets_controller_spec.rb | 15 + .../groups/children_controller_spec.rb | 2 +- .../groups/clusters_controller_spec.rb | 19 +- .../groups/group_members_controller_spec.rb | 2 +- .../groups/milestones_controller_spec.rb | 2 +- .../health_check_controller_spec.rb | 12 +- spec/controllers/help_controller_spec.rb | 2 +- .../profiles/keys_controller_spec.rb | 6 +- .../projects/blob_controller_spec.rb | 2 +- .../projects/ci/lints_controller_spec.rb | 10 +- .../projects/clusters_controller_spec.rb | 23 +- .../projects/commit_controller_spec.rb | 10 +- .../projects/commits_controller_spec.rb | 4 +- .../projects/compare_controller_spec.rb | 10 +- .../cycle_analytics/events_controller_spec.rb | 6 +- .../cycle_analytics_controller_spec.rb | 6 +- .../projects/environments_controller_spec.rb | 10 + .../projects/forks_controller_spec.rb | 61 +- .../projects/issues_controller_spec.rb | 180 +- .../projects/jobs_controller_spec.rb | 10 +- .../creations_controller_spec.rb | 8 +- .../merge_requests/diffs_controller_spec.rb | 2 +- .../merge_requests_controller_spec.rb | 74 +- .../projects/milestones_controller_spec.rb | 2 +- .../projects/notes_controller_spec.rb | 19 +- .../projects/pipelines_controller_spec.rb | 83 +- .../project_members_controller_spec.rb | 2 +- .../projects/raw_controller_spec.rb | 4 +- .../projects/refs_controller_spec.rb | 4 +- .../projects/repositories_controller_spec.rb | 54 + .../projects/services_controller_spec.rb | 134 +- .../projects/snippets_controller_spec.rb | 32 +- .../projects/starrers_controller_spec.rb | 14 + .../projects/tags_controller_spec.rb | 2 +- .../projects/wikis_controller_spec.rb | 81 +- spec/controllers/projects_controller_spec.rb | 99 +- .../registrations_controller_spec.rb | 24 +- .../sent_notifications_controller_spec.rb | 2 +- .../snippets/notes_controller_spec.rb | 6 +- spec/controllers/snippets_controller_spec.rb | 9 + spec/controllers/users_controller_spec.rb | 6 +- spec/db/schema_spec.rb | 4 +- spec/factories/ci/job_artifacts.rb | 4 + spec/factories/deploy_tokens.rb | 3 +- spec/factories/deployments.rb | 4 + spec/factories/external_pull_requests.rb | 17 + spec/factories/group_members.rb | 8 + spec/factories/groups.rb | 2 +- spec/factories/milestone_releases.rb | 14 + spec/factories/pages_domains.rb | 83 + spec/factories/project_members.rb | 4 + spec/factories/services.rb | 74 +- spec/factories/users.rb | 8 + ...admin_disables_git_access_protocol_spec.rb | 7 +- .../admin/admin_disables_two_factor_spec.rb | 2 +- .../admin/admin_requests_profiles_spec.rb | 16 +- spec/features/admin/admin_runners_spec.rb | 4 - spec/features/admin/admin_settings_spec.rb | 4 +- .../admin_uses_repository_checks_spec.rb | 2 +- .../admin/clusters/applications_spec.rb | 21 + spec/features/admin/dashboard_spec.rb | 2 +- spec/features/boards/add_issues_modal_spec.rb | 2 +- spec/features/boards/boards_spec.rb | 16 +- spec/features/boards/issue_ordering_spec.rb | 2 +- .../features/boards/keyboard_shortcut_spec.rb | 2 +- spec/features/boards/modal_filter_spec.rb | 2 +- spec/features/boards/multiple_boards_spec.rb | 2 +- spec/features/boards/new_issue_spec.rb | 42 +- .../reload_boards_on_browser_back_spec.rb | 2 +- spec/features/boards/sidebar_spec.rb | 2 +- .../features/boards/sub_group_project_spec.rb | 2 +- .../clusters/cluster_detail_page_spec.rb | 44 +- ...installing_applications_shared_examples.rb | 228 + .../commits/user_uses_quick_actions_spec.rb | 2 +- spec/features/cycle_analytics_spec.rb | 10 +- spec/features/dashboard/projects_spec.rb | 26 +- .../dashboard/todos/target_state_spec.rb | 2 +- .../dashboard/todos/todos_filtering_spec.rb | 12 +- .../dashboard/todos/todos_sorting_spec.rb | 36 +- spec/features/dashboard/todos/todos_spec.rb | 18 +- spec/features/global_search_spec.rb | 8 +- spec/features/groups/board_sidebar_spec.rb | 2 +- spec/features/groups/board_spec.rb | 2 +- .../groups/clusters/applications_spec.rb | 23 + spec/features/groups/clusters/user_spec.rb | 2 +- spec/features/groups/milestone_spec.rb | 2 +- .../groups/settings/group_badges_spec.rb | 4 +- .../user_browse_projects_group_page_spec.rb | 2 +- spec/features/help_pages_spec.rb | 2 +- .../instance_statistics/cohorts_spec.rb | 2 +- .../instance_statistics_spec.rb | 2 +- spec/features/issuables/issuable_list_spec.rb | 2 +- .../internal_references_spec.rb | 2 +- .../markdown_references/jira_spec.rb | 2 +- .../issuables/user_sees_sidebar_spec.rb | 2 +- .../issues/bulk_assignment_labels_spec.rb | 4 +- ...e_for_discussions_in_merge_request_spec.rb | 2 +- ...single_discussion_in_merge_request_spec.rb | 2 +- .../filtered_search/dropdown_assignee_spec.rb | 2 +- .../filtered_search/dropdown_author_spec.rb | 2 +- .../filtered_search/dropdown_emoji_spec.rb | 2 +- .../filtered_search/dropdown_hint_spec.rb | 2 +- .../dropdown_milestone_spec.rb | 2 +- .../issues/filtered_search/search_bar_spec.rb | 2 +- .../filtered_search/visual_tokens_spec.rb | 2 +- spec/features/issues/form_spec.rb | 2 +- spec/features/issues/gfm_autocomplete_spec.rb | 2 +- .../issues/group_label_sidebar_spec.rb | 2 +- spec/features/issues/issue_detail_spec.rb | 2 +- spec/features/issues/issue_sidebar_spec.rb | 2 +- .../features/issues/keyboard_shortcut_spec.rb | 2 +- spec/features/issues/markdown_toolbar_spec.rb | 2 +- spec/features/issues/move_spec.rb | 2 +- .../issues/resource_label_events_spec.rb | 2 +- spec/features/issues/spam_issues_spec.rb | 2 +- spec/features/issues/todo_spec.rb | 2 +- spec/features/issues/update_issues_spec.rb | 2 +- .../issues/user_comments_on_issue_spec.rb | 17 + ...r_creates_branch_and_merge_request_spec.rb | 2 +- ...creates_confidential_merge_request_spec.rb | 2 +- .../issues/user_interacts_with_awards_spec.rb | 2 +- .../issues/user_sees_breadcrumb_links_spec.rb | 2 +- .../issues/user_uses_quick_actions_spec.rb | 3 +- spec/features/markdown/copy_as_gfm_spec.rb | 6 +- .../user_assigns_themselves_spec.rb | 2 +- .../merge_request/user_awards_emoji_spec.rb | 2 +- .../merge_request/user_creates_mr_spec.rb | 2 +- ...er_customizes_merge_commit_message_spec.rb | 2 +- .../user_edits_assignees_sidebar_spec.rb | 68 + .../user_locks_discussion_spec.rb | 2 +- .../user_merges_immediately_spec.rb | 2 +- ...r_merges_only_if_pipeline_succeeds_spec.rb | 2 +- ...user_merges_when_pipeline_succeeds_spec.rb | 2 +- .../user_posts_diff_notes_spec.rb | 2 +- .../merge_request/user_posts_notes_spec.rb | 17 +- .../user_resolves_conflicts_spec.rb | 4 +- ...diff_notes_and_discussions_resolve_spec.rb | 2 +- .../user_scrolls_to_note_on_load_spec.rb | 2 +- .../user_sees_avatar_on_diff_notes_spec.rb | 2 +- .../user_sees_breadcrumb_links_spec.rb | 2 +- .../user_sees_check_out_branch_modal_spec.rb | 2 +- .../user_sees_cherry_pick_modal_spec.rb | 2 +- .../user_sees_closing_issues_message_spec.rb | 2 +- .../user_sees_deleted_target_branch_spec.rb | 2 +- .../user_sees_deployment_widget_spec.rb | 2 +- .../merge_request/user_sees_diff_spec.rb | 2 +- .../user_sees_discussions_spec.rb | 4 +- .../user_sees_empty_state_spec.rb | 2 +- ...epending_on_unresolved_discussions_spec.rb | 2 +- .../user_sees_merge_request_pipelines_spec.rb | 2 +- .../user_sees_merge_widget_spec.rb | 48 +- .../user_sees_mini_pipeline_graph_spec.rb | 6 +- ...ees_mr_from_deleted_forked_project_spec.rb | 2 +- ...sees_mr_with_deleted_source_branch_spec.rb | 2 +- ...ser_sees_notes_from_forked_project_spec.rb | 2 +- ...sees_pipelines_from_forked_project_spec.rb | 2 +- .../merge_request/user_sees_pipelines_spec.rb | 34 +- .../user_sees_system_notes_spec.rb | 2 +- .../merge_request/user_sees_versions_spec.rb | 2 +- .../user_sees_wip_help_message_spec.rb | 2 +- .../user_selects_branches_for_new_mr_spec.rb | 4 +- .../user_toggles_whitespace_changes_spec.rb | 2 +- .../user_uses_quick_actions_spec.rb | 2 +- .../filters_generic_behavior_spec.rb | 2 +- .../user_filters_by_assignees_spec.rb | 2 +- .../user_filters_by_labels_spec.rb | 2 +- .../user_filters_by_milestones_spec.rb | 2 +- .../user_filters_by_multiple_criteria_spec.rb | 2 +- .../user_filters_by_target_branch_spec.rb | 2 +- .../user_lists_merge_requests_spec.rb | 2 +- .../merge_requests/user_mass_updates_spec.rb | 2 +- spec/features/milestone_spec.rb | 2 +- .../milestones/user_creates_milestone_spec.rb | 2 +- .../milestones/user_deletes_milestone_spec.rb | 2 +- .../milestones/user_edits_milestone_spec.rb | 2 +- .../user_promotes_milestone_spec.rb | 2 +- .../user_sees_breadcrumb_links_spec.rb | 2 +- .../milestones/user_views_milestone_spec.rb | 2 +- .../milestones/user_views_milestones_spec.rb | 2 +- spec/features/oauth_login_spec.rb | 12 + spec/features/profiles/account_spec.rb | 2 +- .../features/profiles/active_sessions_spec.rb | 2 +- spec/features/profiles/chat_names_spec.rb | 2 +- spec/features/profiles/emails_spec.rb | 2 +- spec/features/profiles/gpg_keys_spec.rb | 2 +- spec/features/profiles/keys_spec.rb | 2 +- .../branches/download_buttons_spec.rb | 5 + .../projects/clusters/applications_spec.rb | 229 +- spec/features/projects/clusters/gcp_spec.rb | 3 + spec/features/projects/clusters/user_spec.rb | 2 +- spec/features/projects/clusters_spec.rb | 24 + .../commit/mini_pipeline_graph_spec.rb | 2 +- .../projects/features_visibility_spec.rb | 4 +- .../projects/files/download_buttons_spec.rb | 8 +- ..._a_folder_containing_only_a_folder_spec.rb | 2 +- .../projects/files/user_browses_files_spec.rb | 1 - .../files/user_searches_for_files_spec.rb | 6 +- spec/features/projects/fork_spec.rb | 1 - .../projects/jobs/user_browses_job_spec.rb | 2 + spec/features/projects/jobs_spec.rb | 34 +- .../labels/issues_sorted_by_priority_spec.rb | 2 +- .../labels/user_sees_breadcrumb_links_spec.rb | 2 +- spec/features/projects/new_project_spec.rb | 2 +- .../projects/pages_lets_encrypt_spec.rb | 8 +- spec/features/projects/pages_spec.rb | 6 + .../projects/settings/lfs_settings_spec.rb | 2 +- .../projects/settings/project_badges_spec.rb | 4 +- ...ser_sees_revoke_deploy_token_modal_spec.rb | 2 +- ...r_views_empty_project_instructions_spec.rb | 2 +- .../projects/show/download_buttons_spec.rb | 2 + .../user_sees_last_commit_ci_status_spec.rb | 2 +- .../projects/snippets/create_snippet_spec.rb | 2 +- .../projects/tags/download_buttons_spec.rb | 5 + .../projects/tags/user_edits_tags_spec.rb | 14 +- .../projects/tree/create_directory_spec.rb | 13 +- .../projects/tree/create_file_spec.rb | 7 +- .../projects/wiki/markdown_preview_spec.rb | 93 +- .../wiki/user_creates_wiki_page_spec.rb | 68 +- .../wiki/user_updates_wiki_page_spec.rb | 16 +- .../wiki/user_views_wiki_page_spec.rb | 5 +- spec/features/projects_spec.rb | 4 +- spec/features/read_only_spec.rb | 2 +- .../search/user_searches_for_code_spec.rb | 75 +- .../search/user_searches_for_comments_spec.rb | 24 +- .../search/user_searches_for_commits_spec.rb | 14 +- .../search/user_searches_for_issues_spec.rb | 24 +- .../user_searches_for_merge_requests_spec.rb | 16 +- .../user_searches_for_milestones_spec.rb | 16 +- .../search/user_searches_for_projects_spec.rb | 6 +- .../search/user_searches_for_users_spec.rb | 92 +- .../user_searches_for_wiki_pages_spec.rb | 7 +- .../user_uses_header_search_field_spec.rb | 6 +- .../security/group/internal_access_spec.rb | 2 +- .../security/group/private_access_spec.rb | 2 +- .../security/group/public_access_spec.rb | 2 +- .../security/project/internal_access_spec.rb | 4 + .../security/project/private_access_spec.rb | 4 + .../security/project/public_access_spec.rb | 4 + spec/features/signed_commits_spec.rb | 18 +- spec/features/snippets/explore_spec.rb | 2 +- .../snippets/internal_snippet_spec.rb | 2 +- .../features/snippets/public_snippets_spec.rb | 2 +- .../features/snippets/search_snippets_spec.rb | 16 +- .../snippets/user_creates_snippet_spec.rb | 2 +- .../snippets/user_deletes_snippet_spec.rb | 2 +- .../snippets/user_edits_snippet_spec.rb | 2 +- spec/features/snippets/user_snippets_spec.rb | 2 +- .../tags/developer_deletes_tag_spec.rb | 8 +- .../tags/developer_updates_tag_spec.rb | 4 +- .../user_uploads_avatar_to_group_spec.rb | 2 +- .../user_uploads_avatar_to_profile_spec.rb | 2 +- .../uploads/user_uploads_file_to_note_spec.rb | 2 +- .../user_can_display_performance_bar_spec.rb | 4 +- spec/features/user_sees_revert_modal_spec.rb | 2 +- spec/features/users/login_spec.rb | 8 + spec/features/users/terms_spec.rb | 2 +- spec/finders/award_emojis_finder_spec.rb | 49 + spec/finders/issues_finder_spec.rb | 252 +- spec/finders/labels_finder_spec.rb | 83 + spec/finders/members_finder_spec.rb | 44 +- spec/finders/merge_requests_finder_spec.rb | 20 +- spec/finders/tags_finder_spec.rb | 27 +- spec/fixtures/api/schemas/cluster_basic.json | 16 + spec/fixtures/api/schemas/deployment.json | 10 +- .../entities/merge_request_noteable.json | 32 + .../entities/merge_request_poll_widget.json | 8 +- .../entities/merge_request_sidebar.json | 1 + .../entities/merge_request_widget.json | 3 - spec/fixtures/api/schemas/environment.json | 2 + .../schemas/internal/pages/lookup_path.json | 25 + .../internal/pages/virtual_domain.json | 16 + spec/fixtures/api/schemas/pipeline.json | 8 + .../api/schemas/public_api/v4/release.json | 4 + .../api/schemas/public_api/v4/tag.json | 3 +- spec/fixtures/api/schemas/statistics.json | 29 + spec/fixtures/markdown.md.erb | 2 +- .../gl-dependency-scanning-report.json | 422 -- .../gl-dependency-scanning-report.json | 178 - .../deprecated/gl-sast-report.json | 964 --- .../security-reports/feature-branch.zip | Bin 7140 -> 0 bytes .../gl-container-scanning-report.json | 16 - .../feature-branch/gl-dast-report.json | 40 - .../gl-dependency-scanning-report.json | 181 - .../gl-license-management-report.json | 42 - .../feature-branch/gl-sast-report.json | 947 --- spec/fixtures/security-reports/master.zip | Bin 9413 -> 0 bytes .../master/gl-container-scanning-report.json | 105 - .../master/gl-dast-report.json | 42 - .../master/gl-dependency-scanning-report.json | 181 - .../master/gl-license-management-report.json | 817 --- .../master/gl-sast-report.json | 967 --- .../gl-dependency-scanning-report.json | 104 - .../remediations/remediation.patch | 180 - .../security-reports/remediations/yarn.lock | 104 - spec/fixtures/trace/sample_trace | 2 +- spec/fixtures/valid.po | 5 + .../statistics_panel/components/app_spec.js | 73 + .../admin/statistics_panel/mock_data.js | 15 + .../statistics_panel/store/actions_spec.js | 115 + .../statistics_panel/store/getters_spec.js | 48 + .../statistics_panel/store/mutations_spec.js | 41 + spec/frontend/api_spec.js | 22 + spec/frontend/autosave_spec.js | 11 +- .../boards/services/board_service_spec.js | 7 +- .../branches/divergence_graph_spec.js | 14 +- .../frontend/clusters/clusters_bundle_spec.js | 34 +- .../components/application_row_spec.js | 2 +- .../clusters/components/applications_spec.js | 41 +- .../clusters/stores/clusters_store_spec.js | 7 +- .../components/cluster_form_dropdown_spec.js | 137 + .../components/role_name_dropdown_spec.js | 43 + .../cycle_analytics/stage_nav_item_spec.js | 177 + .../diffs/components/diff_content_spec.js | 200 + .../diffs/components/diff_file_header_spec.js | 472 ++ .../components/error_tracking_list_spec.js | 32 +- .../frontend/fixtures/application_settings.rb | 2 +- spec/frontend/fixtures/static/projects.json | 4 +- .../ide/components/preview/clientside_spec.js | 318 + .../stores/modules/commit/mutations_spec.js | 8 - .../components/log/duration_badge_spec.js | 31 + .../jobs/components/log/line_header_spec.js | 95 + .../jobs/components/log/line_number_spec.js | 40 + .../frontend/jobs/components/log/line_spec.js | 49 + spec/frontend/jobs/components/log/log_spec.js | 77 + .../frontend/jobs/components/log/mock_data.js | 152 + spec/frontend/jobs/store/mutations_spec.js | 8 + spec/frontend/jobs/store/utils_spec.js | 170 + spec/frontend/lib/utils/axios_utils_spec.js | 45 + .../lib/utils/datetime_utility_spec.js | 2 +- spec/frontend/lib/utils/url_utility_spec.js | 14 +- .../mocks/ce/lib/utils/axios_utils.js | 65 +- spec/frontend/mocks/mocks_helper_spec.js | 11 +- spec/frontend/mocks/node/jquery.js | 4 +- spec/frontend/mocks_spec.js | 15 +- spec/frontend/monitoring/embed/embed_spec.js | 8 +- .../components/discussion_actions_spec.js | 31 + .../notes/components/note_app_spec.js | 76 +- spec/frontend/notes/old_notes_spec.js | 9 +- spec/frontend/project_find_file_spec.js | 90 + .../components/milestone_list_spec.js | 56 + .../releases/components/release_block_spec.js | 120 + spec/frontend/releases/mock_data.js | 97 + spec/frontend/repository/log_tree_spec.js | 4 +- .../assignees/assignee_avatar_link_spec.js | 85 + .../assignees/assignee_avatar_spec.js | 78 + .../assignees/collapsed_assignee_list_spec.js | 189 + .../assignees/collapsed_assignee_spec.js | 49 + .../uncollapsed_assignee_list_spec.js | 103 + spec/frontend/sidebar/user_data_mock.js | 9 + spec/frontend/test_setup.js | 11 +- spec/frontend/tracking_spec.js | 75 +- spec/frontend/transfer_edit_spec.js | 53 + .../mr_widget_auto_merge_failed_spec.js | 55 + .../components/changed_file_icon_spec.js | 6 +- .../vue_shared/components/file_icon_spec.js | 75 + .../components/gl_toggle_vuex_spec.js | 115 + .../components/notes/system_note_spec.js | 2 +- .../vue_shared/plugins/global_toast_spec.js | 24 + spec/frontend/wikis_spec.js | 74 + spec/graphql/features/authorization_spec.rb | 28 +- spec/graphql/gitlab_schema_spec.rb | 8 +- .../mutations/resolves_project_spec.rb | 2 +- spec/graphql/resolvers/echo_resolver_spec.rb | 24 + spec/graphql/resolvers/group_resolver_spec.rb | 4 +- .../graphql/resolvers/issues_resolver_spec.rb | 2 +- .../resolvers/merge_requests_resolver_spec.rb | 12 +- .../namespace_projects_resolver_spec.rb | 2 +- .../resolvers/project_resolver_spec.rb | 4 +- spec/graphql/types/namespace_type_spec.rb | 2 +- .../root_storage_statistics_type_spec.rb | 14 + spec/helpers/application_helper_spec.rb | 38 +- spec/helpers/avatars_helper_spec.rb | 44 +- spec/helpers/boards_helper_spec.rb | 2 +- spec/helpers/ci_status_helper_spec.rb | 76 + spec/helpers/commits_helper_spec.rb | 2 +- spec/helpers/defer_script_tag_helper_spec.rb | 1 - spec/helpers/events_helper_spec.rb | 2 +- spec/helpers/external_link_helper_spec.rb | 17 + spec/helpers/form_helper_spec.rb | 2 +- spec/helpers/icons_helper_spec.rb | 7 +- spec/helpers/import_helper_spec.rb | 2 +- spec/helpers/issuables_helper_spec.rb | 28 + spec/helpers/issues_helper_spec.rb | 77 +- .../onboarding_experiment_helper_spec.rb | 8 +- spec/helpers/page_layout_helper_spec.rb | 2 +- spec/helpers/profiles_helper_spec.rb | 2 +- .../projects/error_tracking_helper_spec.rb | 28 +- spec/helpers/projects_helper_spec.rb | 38 +- spec/helpers/releases_helper_spec.rb | 46 + spec/helpers/search_helper_spec.rb | 43 +- spec/helpers/submodule_helper_spec.rb | 66 +- spec/helpers/users_helper_spec.rb | 2 +- spec/helpers/version_check_helper_spec.rb | 4 +- spec/initializers/action_mailer_hooks_spec.rb | 46 + .../hangouts_chat_http_override_spec.rb | 34 + .../rest-client-hostname_override_spec.rb | 145 +- .../blob/blob_file_dropzone_spec.js | 5 +- .../boards/board_new_issue_spec.js | 26 + spec/javascripts/boards/boards_store_spec.js | 4 +- .../boards/components/board_spec.js | 285 +- spec/javascripts/boards/issue_spec.js | 6 +- spec/javascripts/boards/list_spec.js | 26 +- spec/javascripts/boards/mock_data.js | 2 + .../commit/pipelines/pipelines_spec.js | 167 +- .../gke_machine_type_dropdown_spec.js | 6 +- .../gke_project_id_dropdown_spec.js | 6 +- .../components/gke_zone_dropdown_spec.js | 6 +- .../gke_cluster}/helpers.js | 0 .../gke_cluster}/mock_data.js | 0 .../gke_cluster}/stores/actions_spec.js | 4 +- .../gke_cluster}/stores/getters_spec.js | 2 +- .../gke_cluster}/stores/mutations_spec.js | 4 +- .../diffs/components/diff_content_spec.js | 209 - .../diffs/components/diff_file_header_spec.js | 713 --- spec/javascripts/diffs/store/actions_spec.js | 2 +- spec/javascripts/dropzone_input_spec.js | 6 +- .../environments/environment_item_spec.js | 5 +- spec/javascripts/flash_spec.js | 12 +- spec/javascripts/frequent_items/mock_data.js | 6 +- spec/javascripts/gl_dropdown_spec.js | 46 +- .../javascripts/groups/components/app_spec.js | 3 +- .../groups/service/groups_service_spec.js | 17 +- .../helpers/vue_test_utils_helper.js | 2 +- .../components/commit_sidebar/actions_spec.js | 188 +- .../new_merge_request_option_spec.js | 160 +- .../ide/components/preview/clientside_spec.js | 363 -- spec/javascripts/ide/mock_data.js | 34 +- .../ide/stores/actions/tree_spec.js | 2 +- spec/javascripts/ide/stores/getters_spec.js | 32 + .../ide/stores/modules/commit/actions_spec.js | 177 +- .../ide/stores/modules/commit/getters_spec.js | 162 +- spec/javascripts/ide/stores/utils_spec.js | 35 + .../helpers/init_image_diff_spec.js | 52 + .../image_diff/helpers/utils_helper_spec.js | 51 - .../image_diff/init_discussion_tab_spec.js | 10 +- .../issue_show/components/description_spec.js | 2 + .../components/edit_actions_spec.js | 2 +- .../jobs/components/artifacts_block_spec.js | 6 +- .../components/environments_block_spec.js | 78 +- .../jobs/components/job_app_spec.js | 1 + .../jobs/components/jobs_container_spec.js | 6 +- .../jobs/components/stages_dropdown_spec.js | 2 +- spec/javascripts/jobs/store/actions_spec.js | 14 + .../lib/utils/common_utils_spec.js | 39 + spec/javascripts/merge_request_spec.js | 8 +- spec/javascripts/merge_request_tabs_spec.js | 10 +- .../monitoring/charts/area_spec.js | 257 - .../monitoring/charts/time_series_spec.js | 303 + .../{ => components}/dashboard_spec.js | 6 +- .../monitoring/components/graph_group_spec.js | 47 + spec/javascripts/monitoring/mock_data.js | 4 +- .../javascripts/monitoring/panel_type_spec.js | 7 +- .../monitoring/store/mutations_spec.js | 4 +- .../notes/components/note_awards_list_spec.js | 4 +- .../notes/components/note_form_spec.js | 2 +- .../components/noteable_discussion_spec.js | 4 + spec/javascripts/notes/mock_data.js | 85 +- spec/javascripts/notes/stores/actions_spec.js | 162 +- spec/javascripts/notes/stores/getters_spec.js | 132 +- .../components/request_selector_spec.js | 4 +- .../pipelines/graph/graph_component_spec.js | 6 + spec/javascripts/pipelines/mock_data.js | 142 +- .../registry/components/app_spec.js | 11 +- .../releases/components/release_block_spec.js | 16 +- spec/javascripts/releases/mock_data.js | 20 +- .../components/modal_open_name_spec.js | 2 + spec/javascripts/search_autocomplete_spec.js | 8 +- .../sidebar/assignee_title_spec.js | 14 + spec/javascripts/sidebar/assignees_spec.js | 208 +- .../confidential_issue_sidebar_spec.js | 8 + .../sidebar/lock/lock_issue_sidebar_spec.js | 8 + spec/javascripts/sidebar/mock_data.js | 10 - .../sidebar/sidebar_assignees_spec.js | 4 - .../sidebar/sidebar_mediator_spec.js | 33 +- .../sidebar/sidebar_move_issue_spec.js | 13 +- .../javascripts/sidebar/subscriptions_spec.js | 9 + spec/javascripts/test_bundle.js | 2 +- .../components/mr_widget_pipeline_spec.js | 86 +- .../components/mr_widget_rebase_spec.js | 18 + .../mr_widget_auto_merge_failed_spec.js | 47 - .../states/mr_widget_ready_to_merge_spec.js | 4 +- spec/javascripts/vue_mr_widget/mock_data.js | 4 + .../stores/mr_widget_store_spec.js | 42 - .../vue_shared/components/commit_spec.js | 12 +- .../vue_shared/components/file_icon_spec.js | 92 - .../components/markdown/field_spec.js | 37 +- .../project_selector/project_selector_spec.js | 60 +- .../directives/autofocusonshow_spec.js | 38 + spec/lib/api/helpers/label_helpers_spec.rb | 33 + spec/lib/api/support/git_access_actor_spec.rb | 128 + .../banzai/filter/asset_proxy_filter_spec.rb | 11 + .../filter/blockquote_fence_filter_spec.rb | 2 +- .../filter/commit_trailers_filter_spec.rb | 21 + .../banzai/filter/front_matter_filter_spec.rb | 2 +- .../filter/issuable_state_filter_spec.rb | 8 + .../filter/label_reference_filter_spec.rb | 9 + .../filter/relative_link_filter_spec.rb | 5 + .../pipeline/description_pipeline_spec.rb | 2 +- .../banzai/pipeline/email_pipeline_spec.rb | 2 +- .../lib/banzai/pipeline/full_pipeline_spec.rb | 2 +- spec/lib/banzai/pipeline/gfm_pipeline_spec.rb | 8 +- .../lib/banzai/pipeline/wiki_pipeline_spec.rb | 2 +- spec/lib/container_registry/client_spec.rb | 1 - spec/lib/gitlab/action_rate_limiter_spec.rb | 4 +- .../stage_events/stage_event_spec.rb | 10 + spec/lib/gitlab/anonymous_session_spec.rb | 2 +- spec/lib/gitlab/auth/o_auth/user_spec.rb | 22 +- .../lib/gitlab/auth/user_auth_finders_spec.rb | 54 + spec/lib/gitlab/auth_spec.rb | 7 +- spec/lib/gitlab/authorized_keys_spec.rb | 132 +- .../fix_promoted_epics_discussion_ids_spec.rb | 49 + ...late_merge_request_assignees_table_spec.rb | 2 +- .../reset_merge_status_spec.rb | 2 +- spec/lib/gitlab/checks/diff_check_spec.rb | 5 +- .../lib/gitlab/checks/project_created_spec.rb | 2 +- spec/lib/gitlab/checks/project_moved_spec.rb | 2 +- spec/lib/gitlab/ci/build/policy/refs_spec.rb | 14 + .../gitlab/ci/build/policy/variables_spec.rb | 14 +- .../prerequisite/kubernetes_namespace_spec.rb | 6 +- spec/lib/gitlab/ci/build/rules/rule_spec.rb | 50 + spec/lib/gitlab/ci/build/rules_spec.rb | 168 + spec/lib/gitlab/ci/build/step_spec.rb | 52 +- spec/lib/gitlab/ci/config/entry/job_spec.rb | 142 +- .../lib/gitlab/ci/config/entry/policy_spec.rb | 12 +- .../gitlab/ci/config/entry/rules/rule_spec.rb | 208 + spec/lib/gitlab/ci/config/entry/rules_spec.rb | 135 + .../ci/config/external/file/base_spec.rb | 6 + .../ci/config/external/file/remote_spec.rb | 6 +- .../gitlab/ci/config/external/mapper_spec.rb | 2 +- .../ci/config/external/processor_spec.rb | 6 +- spec/lib/gitlab/ci/config_spec.rb | 2 +- .../gitlab/ci/pipeline/chain/build_spec.rb | 34 + .../expression/lexeme/matches_spec.rb | 28 + .../expression/lexeme/not_matches_spec.rb | 28 + .../lib/gitlab/ci/pipeline/seed/build_spec.rb | 287 +- spec/lib/gitlab/ci/trace/stream_spec.rb | 2 +- spec/lib/gitlab/ci/yaml_processor_spec.rb | 220 +- .../gitlab/cleanup/project_uploads_spec.rb | 2 +- spec/lib/gitlab/config/loader/yaml_spec.rb | 4 +- .../cycle_analytics/stage_summary_spec.rb | 21 + spec/lib/gitlab/daemon_spec.rb | 30 +- spec/lib/gitlab/danger/helper_spec.rb | 80 +- spec/lib/gitlab/danger/teammate_spec.rb | 22 +- spec/lib/gitlab/data_builder/pipeline_spec.rb | 18 + .../gitlab/database/migration_helpers_spec.rb | 28 +- .../database/obsolete_ignored_columns_spec.rb | 43 + .../common_metrics/importer_spec.rb | 2 +- .../common_metrics/prometheus_metric_spec.rb | 2 +- .../project/create_service_spec.rb | 148 +- spec/lib/gitlab/database_spec.rb | 11 + .../dependency_linker/cartfile_linker_spec.rb | 2 +- .../composer_json_linker_spec.rb | 2 +- .../dependency_linker/gemfile_linker_spec.rb | 2 +- .../dependency_linker/gemspec_linker_spec.rb | 2 +- .../godeps_json_linker_spec.rb | 2 +- .../package_json_linker_spec.rb | 2 +- .../dependency_linker/parser/gemfile_spec.rb | 2 +- .../dependency_linker/podfile_linker_spec.rb | 2 +- .../podspec_json_linker_spec.rb | 2 +- .../dependency_linker/podspec_linker_spec.rb | 2 +- .../requirements_txt_linker_spec.rb | 2 +- spec/lib/gitlab/dependency_linker_spec.rb | 2 +- .../discussions_diff/file_collection_spec.rb | 39 +- .../hook/disable_email_interceptor_spec.rb | 3 - .../hook/smime_signature_interceptor_spec.rb | 52 + spec/lib/gitlab/email/receiver_spec.rb | 9 + .../gitlab/email/smime/certificate_spec.rb | 77 + spec/lib/gitlab/email/smime/signer_spec.rb | 26 + spec/lib/gitlab/encoding_helper_spec.rb | 3 +- .../gitlab/etag_caching/middleware_spec.rb | 4 +- spec/lib/gitlab/etag_caching/router_spec.rb | 9 + .../lib/gitlab/external_authorization_spec.rb | 2 +- spec/lib/gitlab/favicon_spec.rb | 8 +- .../gitlab/file_markdown_link_builder_spec.rb | 2 +- spec/lib/gitlab/file_type_detection_spec.rb | 2 +- .../fogbugz_import/project_creator_spec.rb | 29 + .../lib/gitlab/gfm/reference_rewriter_spec.rb | 17 + spec/lib/gitlab/git/blame_spec.rb | 1 - spec/lib/gitlab/git/blob_spec.rb | 2 - spec/lib/gitlab/git/conflict/file_spec.rb | 1 - spec/lib/gitlab/git/diff_collection_spec.rb | 69 + spec/lib/gitlab/git/keep_around_spec.rb | 57 + spec/lib/gitlab/git/repository_spec.rb | 3 +- .../gitlab/git/rugged_impl/use_rugged_spec.rb | 2 +- spec/lib/gitlab/git_access_spec.rb | 2 +- spec/lib/gitlab/git_spec.rb | 1 - spec/lib/gitlab/gitaly_client_spec.rb | 12 +- spec/lib/gitlab/gpg/commit_spec.rb | 2 +- .../gpg/invalid_gpg_signature_updater_spec.rb | 2 +- spec/lib/gitlab/gpg_spec.rb | 2 +- .../authorize/authorize_field_service_spec.rb | 6 +- .../authorize/authorize_resource_spec.rb | 12 +- .../connections/keyset_connection_spec.rb | 2 +- .../loaders/batch_lfs_oid_loader_spec.rb | 2 +- .../loaders/batch_model_loader_spec.rb | 6 +- ...tch_root_storage_statistics_loader_spec.rb | 18 + .../loaders/pipeline_for_sha_loader_spec.rb | 2 +- .../lib/gitlab/graphql/markdown_field_spec.rb | 7 +- .../gitlab/hook_data/issuable_builder_spec.rb | 18 +- .../gitlab/hook_data/issue_builder_spec.rb | 1 + spec/lib/gitlab/import_export/all_models.yml | 16 + .../import_export/attribute_cleaner_spec.rb | 5 +- .../attribute_configuration_spec.rb | 2 +- .../import_export/attributes_finder_spec.rb | 230 + spec/lib/gitlab/import_export/config_spec.rb | 286 +- .../fast_hash_serializer_spec.rb | 272 + .../import_export/model_configuration_spec.rb | 6 +- spec/lib/gitlab/import_export/project.json | 41 +- .../project_tree_restorer_spec.rb | 39 + .../import_export/project_tree_saver_spec.rb | 53 + spec/lib/gitlab/import_export/reader_spec.rb | 121 +- .../relation_rename_service_spec.rb | 27 +- .../import_export/safe_model_attributes.yml | 18 + .../internal_post_receive/response_spec.rb | 121 + spec/lib/gitlab/json_logger_spec.rb | 1 - spec/lib/gitlab/jwt_authenticatable_spec.rb | 93 + .../kubernetes/helm/install_command_spec.rb | 2 +- spec/lib/gitlab/kubernetes/helm/pod_spec.rb | 2 +- .../release_formatter_spec.rb | 2 + .../user_formatter_spec.rb | 2 + .../wiki_formatter_spec.rb | 2 + spec/lib/gitlab/loop_helpers_spec.rb | 2 + .../gitlab/manifest_import/manifest_spec.rb | 2 + .../manifest_import/project_creator_spec.rb | 2 + spec/lib/gitlab/markup_helper_spec.rb | 2 + .../metrics/background_transaction_spec.rb | 2 + .../gitlab/metrics/dashboard/finder_spec.rb | 24 +- .../metrics/dashboard/processor_spec.rb | 23 +- spec/lib/gitlab/metrics/delta_spec.rb | 2 + .../gitlab/metrics/instrumentation_spec.rb | 2 + spec/lib/gitlab/metrics/method_call_spec.rb | 2 + spec/lib/gitlab/metrics/methods_spec.rb | 2 + spec/lib/gitlab/metrics/metric_spec.rb | 2 + spec/lib/gitlab/metrics/prometheus_spec.rb | 2 + .../gitlab/metrics/rack_middleware_spec.rb | 2 + .../metrics/requests_rack_middleware_spec.rb | 2 + .../metrics/samplers/influx_sampler_spec.rb | 2 + .../metrics/samplers/ruby_sampler_spec.rb | 2 + .../metrics/samplers/unicorn_sampler_spec.rb | 2 + .../metrics/sidekiq_metrics_exporter_spec.rb | 2 + .../gitlab/metrics/sidekiq_middleware_spec.rb | 2 + .../metrics/subscribers/action_view_spec.rb | 2 + .../metrics/subscribers/active_record_spec.rb | 2 + .../metrics/subscribers/rails_cache_spec.rb | 2 + spec/lib/gitlab/metrics/system_spec.rb | 2 + spec/lib/gitlab/metrics/transaction_spec.rb | 8 +- .../gitlab/metrics/web_transaction_spec.rb | 6 +- spec/lib/gitlab/metrics_spec.rb | 2 + .../middleware/basic_health_check_spec.rb | 2 + spec/lib/gitlab/middleware/go_spec.rb | 2 +- spec/lib/gitlab/middleware/multipart_spec.rb | 2 + .../middleware/rails_queue_duration_spec.rb | 2 + spec/lib/gitlab/middleware/read_only_spec.rb | 2 + .../lib/gitlab/middleware/release_env_spec.rb | 2 + .../gitlab/multi_collection_paginator_spec.rb | 2 + spec/lib/gitlab/noteable_metadata_spec.rb | 29 + spec/lib/gitlab/object_hierarchy_spec.rb | 2 + spec/lib/gitlab/octokit/middleware_spec.rb | 2 + spec/lib/gitlab/omniauth_initializer_spec.rb | 2 + spec/lib/gitlab/optimistic_locking_spec.rb | 2 + spec/lib/gitlab/other_markup_spec.rb | 2 + spec/lib/gitlab/otp_key_rotator_spec.rb | 2 + spec/lib/gitlab/pages_client_spec.rb | 2 + spec/lib/gitlab/pages_spec.rb | 29 + spec/lib/gitlab/path_regex_spec.rb | 3 +- .../with_top_level_warnings_spec.rb | 29 + spec/lib/gitlab/performance_bar_spec.rb | 28 +- .../phabricator_import/importer_spec.rb | 2 + .../phabricator_import/user_finder_spec.rb | 2 + .../phabricator_import/worker_state_spec.rb | 2 + spec/lib/gitlab/plugin_spec.rb | 2 + spec/lib/gitlab/polling_interval_spec.rb | 2 + spec/lib/gitlab/popen/runner_spec.rb | 2 + spec/lib/gitlab/popen_spec.rb | 10 + spec/lib/gitlab/profiler_spec.rb | 2 + .../lib/gitlab/project_authorizations_spec.rb | 2 + .../lib/gitlab/project_search_results_spec.rb | 9 +- spec/lib/gitlab/project_template_spec.rb | 2 + spec/lib/gitlab/project_transfer_spec.rb | 2 + .../additional_metrics_parser_spec.rb | 2 + .../gitlab/prometheus/metric_group_spec.rb | 2 +- ...dditional_metrics_deployment_query_spec.rb | 2 + ...ditional_metrics_environment_query_spec.rb | 2 + .../queries/deployment_query_spec.rb | 2 + .../queries/matched_metric_query_spec.rb | 2 + spec/lib/gitlab/prometheus_client_spec.rb | 2 + .../active_support_subscriber_spec.rb | 2 + .../gitlab/query_limiting/middleware_spec.rb | 2 + .../gitlab/query_limiting/transaction_spec.rb | 6 +- spec/lib/gitlab/query_limiting_spec.rb | 11 +- .../quick_actions/command_definition_spec.rb | 2 + spec/lib/gitlab/quick_actions/dsl_spec.rb | 2 + .../gitlab/quick_actions/extractor_spec.rb | 2 + .../spend_time_and_date_separator_spec.rb | 2 + .../substitution_definition_spec.rb | 2 + spec/lib/gitlab/redis/cache_spec.rb | 2 + spec/lib/gitlab/redis/queues_spec.rb | 2 + spec/lib/gitlab/redis/shared_state_spec.rb | 2 + spec/lib/gitlab/redis/wrapper_spec.rb | 2 + spec/lib/gitlab/reference_counter_spec.rb | 2 + spec/lib/gitlab/regex_spec.rb | 3 +- spec/lib/gitlab/repo_path_spec.rb | 2 + .../gitlab/repository_cache_adapter_spec.rb | 9 +- spec/lib/gitlab/repository_cache_spec.rb | 2 + spec/lib/gitlab/repository_set_cache_spec.rb | 75 + spec/lib/gitlab/request_context_spec.rb | 2 + .../gitlab/request_forgery_protection_spec.rb | 2 + .../gitlab/request_profiler/profile_spec.rb | 2 + spec/lib/gitlab/request_profiler_spec.rb | 2 + spec/lib/gitlab/route_map_spec.rb | 2 + spec/lib/gitlab/routing_spec.rb | 2 + spec/lib/gitlab/sanitizers/exif_spec.rb | 2 + spec/lib/gitlab/sanitizers/svg_spec.rb | 2 + spec/lib/gitlab/search/found_blob_spec.rb | 4 +- spec/lib/gitlab/search/query_spec.rb | 2 + spec/lib/gitlab/search_results_spec.rb | 19 +- spec/lib/gitlab/sentry_spec.rb | 35 +- .../gitlab/serializer/ci/variables_spec.rb | 2 + spec/lib/gitlab/serializer/pagination_spec.rb | 2 + spec/lib/gitlab/shard_health_cache_spec.rb | 2 + spec/lib/gitlab/shell_spec.rb | 489 +- spec/lib/gitlab/sherlock/collection_spec.rb | 2 + spec/lib/gitlab/sherlock/file_sample_spec.rb | 2 + .../lib/gitlab/sherlock/line_profiler_spec.rb | 2 + spec/lib/gitlab/sherlock/line_sample_spec.rb | 2 + spec/lib/gitlab/sherlock/location_spec.rb | 2 + spec/lib/gitlab/sherlock/middleware_spec.rb | 2 + spec/lib/gitlab/sherlock/query_spec.rb | 2 + spec/lib/gitlab/sherlock/transaction_spec.rb | 2 + spec/lib/gitlab/sidekiq_config_spec.rb | 4 +- .../lib/gitlab/sidekiq_daemon/monitor_spec.rb | 261 + .../sidekiq_logging/json_formatter_spec.rb | 2 + .../sidekiq_logging/structured_logger_spec.rb | 39 +- .../sidekiq_middleware/memory_killer_spec.rb | 2 + .../gitlab/sidekiq_middleware/metrics_spec.rb | 2 +- .../gitlab/sidekiq_middleware/monitor_spec.rb | 49 + spec/lib/gitlab/sidekiq_signals_spec.rb | 2 + .../sidekiq_status/client_middleware_spec.rb | 2 + .../sidekiq_status/server_middleware_spec.rb | 2 + spec/lib/gitlab/sidekiq_status_spec.rb | 2 + .../gitlab/sidekiq_versioning/manager_spec.rb | 2 + spec/lib/gitlab/sidekiq_versioning_spec.rb | 2 + .../slash_commands/application_help_spec.rb | 3 +- .../lib/gitlab/slash_commands/command_spec.rb | 8 +- spec/lib/gitlab/slash_commands/deploy_spec.rb | 2 + .../gitlab/slash_commands/issue_close_spec.rb | 80 + .../gitlab/slash_commands/issue_move_spec.rb | 2 + .../gitlab/slash_commands/issue_new_spec.rb | 2 + .../slash_commands/issue_search_spec.rb | 2 + .../gitlab/slash_commands/issue_show_spec.rb | 2 + .../slash_commands/presenters/access_spec.rb | 8 +- .../slash_commands/presenters/deploy_spec.rb | 2 + .../presenters/issue_close_spec.rb | 27 + .../presenters/issue_move_spec.rb | 2 + .../presenters/issue_new_spec.rb | 2 + .../presenters/issue_search_spec.rb | 2 + .../presenters/issue_show_spec.rb | 2 + .../lib/gitlab/snippet_search_results_spec.rb | 6 +- spec/lib/gitlab/snowplow_tracker_spec.rb | 45 - spec/lib/gitlab/sql/cte_spec.rb | 2 + spec/lib/gitlab/sql/glob_spec.rb | 2 + spec/lib/gitlab/sql/pattern_spec.rb | 2 + spec/lib/gitlab/sql/recursive_cte_spec.rb | 2 + spec/lib/gitlab/sql/union_spec.rb | 2 + spec/lib/gitlab/ssh_public_key_spec.rb | 2 + .../string_placeholder_replacer_spec.rb | 2 + spec/lib/gitlab/string_range_marker_spec.rb | 2 + spec/lib/gitlab/string_regex_marker_spec.rb | 2 + spec/lib/gitlab/submodule_links_spec.rb | 6 +- spec/lib/gitlab/tcp_checker_spec.rb | 2 + .../finders/global_template_finder_spec.rb | 2 + .../finders/repo_template_finders_spec.rb | 2 + .../template/gitignore_template_spec.rb | 2 + .../template/gitlab_ci_yml_template_spec.rb | 2 + .../gitlab/template/issue_template_spec.rb | 2 + .../template/merge_request_template_spec.rb | 2 + spec/lib/gitlab/themes_spec.rb | 2 + .../gitlab/time_tracking_formatter_spec.rb | 8 + spec/lib/gitlab/tracing_spec.rb | 2 +- spec/lib/gitlab/tracking_spec.rb | 88 + spec/lib/gitlab/tree_summary_spec.rb | 2 + .../untrusted_regexp/ruby_syntax_spec.rb | 2 + spec/lib/gitlab/untrusted_regexp_spec.rb | 2 + spec/lib/gitlab/uploads_transfer_spec.rb | 2 + spec/lib/gitlab/url_blocker_spec.rb | 179 +- .../gitlab/url_blockers/url_whitelist_spec.rb | 72 + spec/lib/gitlab/url_builder_spec.rb | 2 + spec/lib/gitlab/url_sanitizer_spec.rb | 2 + .../merge_request_counter_spec.rb | 9 + .../usage_data_counters/note_counter_spec.rb | 24 +- .../productivity_analytics_counter_spec.rb | 9 + spec/lib/gitlab/usage_data_spec.rb | 35 +- spec/lib/gitlab/user_access_spec.rb | 2 + spec/lib/gitlab/utils/deep_size_spec.rb | 2 + spec/lib/gitlab/utils/merge_hash_spec.rb | 2 + spec/lib/gitlab/utils/override_spec.rb | 2 + .../gitlab/utils/sanitize_node_link_spec.rb | 2 + spec/lib/gitlab/utils/strong_memoize_spec.rb | 18 + spec/lib/gitlab/utils_spec.rb | 2 + spec/lib/gitlab/verify/job_artifacts_spec.rb | 2 + spec/lib/gitlab/verify/lfs_objects_spec.rb | 2 + spec/lib/gitlab/verify/uploads_spec.rb | 2 + spec/lib/gitlab/version_info_spec.rb | 2 + spec/lib/gitlab/view/presenter/base_spec.rb | 2 + .../gitlab/view/presenter/delegated_spec.rb | 2 + .../lib/gitlab/view/presenter/factory_spec.rb | 2 + spec/lib/gitlab/view/presenter/simple_spec.rb | 2 + spec/lib/gitlab/visibility_level_spec.rb | 2 + spec/lib/gitlab/wiki_file_finder_spec.rb | 2 + spec/lib/gitlab/workhorse_spec.rb | 66 +- spec/lib/gitlab_danger_spec.rb | 76 + spec/lib/gitlab_spec.rb | 86 +- spec/lib/google_api/auth_spec.rb | 2 + .../google_api/cloud_platform/client_spec.rb | 2 + spec/lib/json_web_token/rsa_token_spec.rb | 2 + spec/lib/json_web_token/token_spec.rb | 2 + spec/lib/mattermost/client_spec.rb | 2 + spec/lib/mattermost/command_spec.rb | 2 + spec/lib/mattermost/session_spec.rb | 2 + spec/lib/mattermost/team_spec.rb | 2 + spec/lib/microsoft_teams/activity_spec.rb | 2 + spec/lib/microsoft_teams/notifier_spec.rb | 2 + spec/lib/milestone_array_spec.rb | 2 + spec/lib/object_storage/direct_upload_spec.rb | 2 + spec/lib/omni_auth/strategies/jwt_spec.rb | 2 + spec/lib/peek/views/detailed_view_spec.rb | 81 + spec/lib/peek/views/redis_detailed_spec.rb | 8 +- spec/lib/peek/views/rugged_spec.rb | 2 +- .../cleanup_multiproc_dir_service_spec.rb | 51 + spec/lib/rspec_flaky/config_spec.rb | 2 + spec/lib/rspec_flaky/example_spec.rb | 2 + spec/lib/rspec_flaky/flaky_example_spec.rb | 8 +- .../flaky_examples_collection_spec.rb | 2 + spec/lib/rspec_flaky/listener_spec.rb | 2 + spec/lib/rspec_flaky/report_spec.rb | 2 + spec/lib/safe_zip/entry_spec.rb | 2 + spec/lib/safe_zip/extract_params_spec.rb | 2 + spec/lib/safe_zip/extract_spec.rb | 2 + spec/lib/serializers/json_spec.rb | 2 + .../authorized_keys_permission_check_spec.rb | 67 + .../git_user_default_ssh_config_check_spec.rb | 2 + spec/lib/system_check/base_check_spec.rb | 2 + .../orphans/namespace_check_spec.rb | 2 + .../orphans/repository_check_spec.rb | 2 + spec/lib/system_check/simple_executor_spec.rb | 2 + spec/lib/system_check_spec.rb | 2 + spec/lib/uploaded_file_spec.rb | 2 + spec/mailers/abuse_report_mailer_spec.rb | 2 +- spec/mailers/email_rejection_mailer_spec.rb | 2 +- spec/mailers/notify_spec.rb | 83 + spec/mailers/repository_check_mailer_spec.rb | 2 +- spec/migrations/README.md | 6 +- .../encrypt_deploy_tokens_tokens_spec.rb | 47 + ...attributes_on_application_settings_spec.rb | 58 + ...te_discussion_id_on_promoted_epics_spec.rb | 81 + spec/models/abuse_report_spec.rb | 2 +- spec/models/active_session_spec.rb | 2 +- .../cycle_analytics/project_stage_spec.rb | 14 + spec/models/appearance_spec.rb | 2 +- spec/models/application_setting_spec.rb | 14 + spec/models/award_emoji_spec.rb | 23 + spec/models/blob_spec.rb | 3 +- spec/models/board_spec.rb | 2 +- spec/models/ci/build_metadata_spec.rb | 76 +- spec/models/ci/build_spec.rb | 51 + spec/models/ci/pipeline_spec.rb | 100 +- spec/models/ci/runner_spec.rb | 7 + .../applications/cert_manager_spec.rb | 29 +- .../models/clusters/applications/helm_spec.rb | 2 +- .../clusters/applications/ingress_spec.rb | 39 +- .../clusters/applications/jupyter_spec.rb | 50 +- .../clusters/applications/knative_spec.rb | 2 +- .../clusters/applications/prometheus_spec.rb | 2 +- .../clusters/applications/runner_spec.rb | 2 +- spec/models/commit_spec.rb | 18 + spec/models/concerns/awardable_spec.rb | 10 - .../blocks_json_serialization_spec.rb | 2 +- .../concerns/cacheable_attributes_spec.rb | 4 +- spec/models/concerns/deployable_spec.rb | 2 +- .../concerns/deployment_platform_spec.rb | 2 +- spec/models/concerns/has_status_spec.rb | 12 + spec/models/concerns/ignorable_column_spec.rb | 44 - spec/models/concerns/issuable_states_spec.rb | 2 +- spec/models/concerns/noteable_spec.rb | 18 + spec/models/concerns/routable_spec.rb | 9 +- spec/models/concerns/sha_attribute_spec.rb | 4 +- .../models/concerns/triggerable_hooks_spec.rb | 2 +- .../metric_spec.rb | 2 +- spec/models/deployment_spec.rb | 26 + spec/models/external_pull_request_spec.rb | 220 + spec/models/gpg_key_spec.rb | 2 +- spec/models/gpg_key_subkey_spec.rb | 2 +- spec/models/gpg_signature_spec.rb | 2 +- spec/models/group_spec.rb | 19 + spec/models/hooks/system_hook_spec.rb | 23 +- spec/models/hooks/web_hook_log_spec.rb | 2 +- spec/models/internal_id_spec.rb | 3 +- spec/models/issue_spec.rb | 20 + spec/models/lfs_download_object_spec.rb | 2 +- spec/models/lfs_file_lock_spec.rb | 2 +- spec/models/list_spec.rb | 81 +- spec/models/list_user_preference_spec.rb | 22 + spec/models/members/group_member_spec.rb | 32 +- spec/models/merge_request/metrics_spec.rb | 2 - spec/models/merge_request_diff_commit_spec.rb | 2 +- spec/models/merge_request_diff_file_spec.rb | 61 +- spec/models/merge_request_diff_spec.rb | 14 +- spec/models/merge_request_spec.rb | 95 +- spec/models/milestone_release_spec.rb | 42 + spec/models/milestone_spec.rb | 27 +- .../namespace/root_storage_statistics_spec.rb | 13 + spec/models/note_diff_file_spec.rb | 2 +- spec/models/note_spec.rb | 72 +- spec/models/notification_setting_spec.rb | 2 +- spec/models/oauth_access_token_spec.rb | 28 + spec/models/pages/lookup_path_spec.rb | 64 + spec/models/pages/virtual_domain_spec.rb | 43 + spec/models/pages_domain_spec.rb | 30 + spec/models/project_deploy_token_spec.rb | 2 +- spec/models/project_feature_spec.rb | 78 + spec/models/project_import_state_spec.rb | 2 +- .../project_services/bugzilla_service_spec.rb | 8 +- .../chat_message/push_message_spec.rb | 26 +- .../chat_notification_service_spec.rb | 17 +- .../custom_issue_tracker_service_spec.rb | 8 +- .../project_services/data_fields_spec.rb | 138 + .../gitlab_issue_tracker_service_spec.rb | 8 +- .../issue_tracker_data_spec.rb | 24 - .../issue_tracker_service_spec.rb | 2 +- .../project_services/jira_service_spec.rb | 430 +- .../jira_tracker_data_spec.rb | 31 - .../mattermost_service_spec.rb | 2 +- .../microsoft_teams_service_spec.rb | 103 +- .../pipelines_email_service_spec.rb | 175 +- .../project_services/redmine_service_spec.rb | 18 +- .../project_services/slack_service_spec.rb | 2 +- .../project_services/youtrack_service_spec.rb | 9 +- spec/models/project_spec.rb | 178 +- spec/models/project_statistics_spec.rb | 2 +- spec/models/redirect_route_spec.rb | 2 +- spec/models/release_spec.rb | 18 +- spec/models/remote_mirror_spec.rb | 9 +- spec/models/repository_spec.rb | 57 +- spec/models/resource_label_event_spec.rb | 2 +- spec/models/service_spec.rb | 4 +- spec/models/timelog_spec.rb | 2 +- spec/models/todo_spec.rb | 20 +- spec/models/upload_spec.rb | 2 +- spec/models/user_agent_detail_spec.rb | 2 +- spec/models/user_callout_spec.rb | 2 +- spec/models/user_spec.rb | 36 +- spec/policies/board_policy_spec.rb | 53 + .../root_storage_statistics_policy_spec.rb | 80 + spec/policies/namespace_policy_spec.rb | 2 +- spec/policies/project_policy_spec.rb | 13 + spec/presenters/blob_presenter_spec.rb | 14 + .../presenters/blobs/unfold_presenter_spec.rb | 25 +- spec/presenters/ci/pipeline_presenter_spec.rb | 34 + spec/presenters/clusterable_presenter_spec.rb | 9 + spec/presenters/event_presenter_spec.rb | 41 + spec/rails_helper.rb | 1 - spec/requests/api/applications_spec.rb | 2 - spec/requests/api/award_emoji_spec.rb | 16 + spec/requests/api/discussions_spec.rb | 54 +- spec/requests/api/events_spec.rb | 2 - .../api/graphql/gitlab_schema_spec.rb | 2 +- .../api/graphql/multiplexed_queries_spec.rb | 8 +- .../mutations/award_emojis/add_spec.rb | 17 +- .../mutations/award_emojis/toggle_spec.rb | 17 +- .../mutations/merge_requests/set_wip_spec.rb | 11 +- .../namespace/root_storage_statistics_spec.rb | 55 + .../project/project_statistics_spec.rb | 2 +- spec/requests/api/groups_spec.rb | 60 + spec/requests/api/helpers_spec.rb | 2 +- spec/requests/api/import_github_spec.rb | 2 - .../base_spec.rb} | 66 +- spec/requests/api/internal/pages_spec.rb | 76 + .../api/issues/get_group_issues_spec.rb | 4 + .../api/issues/get_project_issues_spec.rb | 3 + spec/requests/api/issues/issues_spec.rb | 101 +- spec/requests/api/labels_spec.rb | 407 +- spec/requests/api/merge_requests_spec.rb | 64 + spec/requests/api/notes_spec.rb | 7 + spec/requests/api/pages_domains_spec.rb | 2 +- spec/requests/api/pipelines_spec.rb | 59 + spec/requests/api/project_events_spec.rb | 2 - spec/requests/api/project_snapshots_spec.rb | 7 + spec/requests/api/project_snippets_spec.rb | 44 +- spec/requests/api/projects_spec.rb | 81 +- spec/requests/api/repositories_spec.rb | 2 +- spec/requests/api/runners_spec.rb | 2 +- spec/requests/api/services_spec.rb | 8 +- spec/requests/api/settings_spec.rb | 38 + spec/requests/api/snippets_spec.rb | 2 +- spec/requests/api/statistics_spec.rb | 91 + spec/requests/api/tags_spec.rb | 10 +- spec/requests/api/wikis_spec.rb | 13 +- spec/requests/git_http_spec.rb | 2 +- spec/requests/jwt_controller_spec.rb | 8 + spec/requests/openid_connect_spec.rb | 2 +- .../merge_requests_discussions_spec.rb | 52 + spec/requests/projects/uploads_spec.rb | 38 + spec/requests/rack_attack_global_spec.rb | 226 +- spec/routing/project_routing_spec.rb | 70 +- spec/routing/routing_spec.rb | 2 +- .../active_record_association_reload_spec.rb | 6 +- .../cop/code_reuse/active_record_spec.rb | 6 +- spec/rubocop/cop/gitlab/union_spec.rb | 6 - .../cop/graphql/authorize_types_spec.rb | 17 + spec/rubocop/cop/graphql/descriptions_spec.rb | 75 + .../inject_enterprise_edition_module_spec.rb | 19 + .../add_limit_to_string_columns_spec.rb | 268 + .../cop/migration/add_reference_spec.rb | 92 +- .../cop/qa/ambiguous_page_object_name_spec.rb | 54 + .../cop/rspec/be_success_matcher_spec.rb | 63 + spec/rubocop/cop/rspec/env_assignment_spec.rb | 26 +- .../factories_in_migration_specs_spec.rb | 22 +- .../cop/scalability/file_uploads_spec.rb | 54 + spec/serializers/cluster_basic_entity_spec.rb | 35 + spec/serializers/deployment_entity_spec.rb | 13 +- spec/serializers/entity_date_helper_spec.rb | 22 + spec/serializers/issue_entity_spec.rb | 40 + .../merge_request_serializer_spec.rb | 13 +- ...merge_request_sidebar_basic_entity_spec.rb | 22 + spec/serializers/pipeline_entity_spec.rb | 6 +- spec/serializers/pipeline_serializer_spec.rb | 4 +- .../update_service_spec.rb | 18 + spec/services/audit_event_service_spec.rb | 12 + ...er_registry_authentication_service_spec.rb | 12 +- .../services/award_emojis/add_service_spec.rb | 103 + .../collect_user_emoji_service_spec.rb} | 2 +- .../award_emojis/destroy_service_spec.rb | 89 + .../award_emojis/toggle_service_spec.rb | 72 + .../boards/lists/list_service_spec.rb | 6 +- .../boards/lists/update_service_spec.rb | 109 + .../chat_names/authorize_user_service_spec.rb | 21 +- .../services/ci/archive_trace_service_spec.rb | 2 +- .../ci/create_pipeline_service_spec.rb | 699 ++- spec/services/ci/retry_build_service_spec.rb | 2 +- .../ci/update_build_queue_service_spec.rb | 114 +- ...heck_installation_progress_service_spec.rb | 22 +- .../check_uninstall_progress_service_spec.rb | 18 +- .../applications/create_service_spec.rb | 13 +- ...create_or_update_namespace_service_spec.rb | 10 +- ..._or_update_service_account_service_spec.rb | 10 +- .../fetch_kubernetes_token_service_spec.rb | 2 +- .../create_pipeline_service_spec.rb | 72 + spec/services/git/branch_push_service_spec.rb | 16 +- spec/services/groups/transfer_service_spec.rb | 2 +- .../services/issues/duplicate_service_spec.rb | 6 + spec/services/issues/update_service_spec.rb | 5 +- .../services/issues/zoom_link_service_spec.rb | 243 + spec/services/members/destroy_service_spec.rb | 2 +- .../merge_requests/build_service_spec.rb | 108 +- .../create_from_issue_service_spec.rb | 16 + .../create_pipeline_service_spec.rb | 4 + .../merge_requests/create_service_spec.rb | 8 +- .../push_options_handler_service_spec.rb | 145 + .../project_dashboard_service_spec.rb | 2 +- .../milestones/destroy_service_spec.rb | 14 + .../milestones/find_or_create_service_spec.rb | 82 + .../milestones/transfer_service_spec.rb | 122 + spec/services/notification_service_spec.rb | 166 +- .../cleanup_tags_service_spec.rb | 2 +- .../create_from_template_service_spec.rb | 4 +- spec/services/projects/create_service_spec.rb | 3 +- spec/services/projects/fork_service_spec.rb | 22 +- .../projects/forks_count_service_spec.rb | 14 +- .../lfs_pointers/lfs_link_service_spec.rb | 18 + .../open_issues_count_service_spec.rb | 13 +- .../open_merge_requests_count_service_spec.rb | 11 +- .../projects/transfer_service_spec.rb | 13 +- .../quick_actions/interpret_service_spec.rb | 74 +- spec/services/releases/create_service_spec.rb | 102 + .../services/releases/destroy_service_spec.rb | 10 + spec/services/releases/update_service_spec.rb | 58 + spec/services/search/global_service_spec.rb | 8 + spec/services/service_response_spec.rb | 14 + spec/services/system_hooks_service_spec.rb | 10 + spec/services/system_note_service_spec.rb | 11 +- ...date_merge_request_metrics_service_spec.rb | 2 +- .../services/users/keys_count_service_spec.rb | 44 +- spec/spec_helper.rb | 11 + spec/support/capybara.rb | 7 +- spec/support/db_cleaner.rb | 2 + .../discussion_comments_shared_example.rb | 2 +- spec/support/gitlab-git-test.git/README.md | 2 +- spec/support/helpers/capybara_helpers.rb | 4 + spec/support/helpers/drag_to_helper.rb | 19 +- spec/support/helpers/graphql_helpers.rb | 43 +- spec/support/helpers/jira_service_helper.rb | 18 +- spec/support/helpers/ldap_helpers.rb | 2 + spec/support/helpers/license_helper.rb | 2 + spec/support/helpers/login_helpers.rb | 2 + spec/support/helpers/migrations_helpers.rb | 4 +- spec/support/helpers/project_forks_helper.rb | 2 +- spec/support/helpers/project_helpers.rb | 12 +- spec/support/helpers/query_recorder.rb | 5 +- spec/support/helpers/rails_helpers.rb | 7 + spec/support/helpers/repo_helpers.rb | 2 +- spec/support/helpers/search_helpers.rb | 29 +- spec/support/helpers/smime_helper.rb | 55 + spec/support/helpers/stub_configuration.rb | 2 + spec/support/helpers/stub_gitlab_calls.rb | 6 + spec/support/helpers/stub_object_storage.rb | 2 + spec/support/helpers/test_env.rb | 6 +- spec/support/helpers/wait_for_requests.rb | 4 - spec/support/helpers/workhorse_helpers.rb | 32 +- spec/support/import_export/import_export.yml | 25 +- spec/support/matchers/be_url.rb | 22 +- spec/support/matchers/markdown_matchers.rb | 2 + .../clusters/create_service_shared.rb | 64 +- .../group_projects_finder_shared_contexts.rb | 3 +- .../finders/issues_finder_shared_contexts.rb | 2 + .../policies/group_policy_shared_context.rb | 3 +- .../project_policy_table_shared_context.rb | 224 +- .../award_emoji_todo_shared_examples.rb | 59 + .../multiple_issue_boards_shared_examples.rb | 54 +- .../chat_slash_commands_shared_examples.rb | 2 +- .../application_settings_shared_examples.rb | 26 + ...l_authorization_service_shared_examples.rb | 2 +- ...uables_requiring_filter_shared_examples.rb | 0 .../paginated_collection_shared_examples.rb | 30 + ...er_from_user_preference_shared_examples.rb | 6 +- .../cycle_analytics_stage_examples.rb | 74 + ...rchive_download_buttons_shared_examples.rb | 59 + .../assignees_filter_shared_examples.rb | 12 + .../notes_on_noteables_shared_examples.rb | 2 +- .../active_record_enum_shared_examples.rb} | 0 .../models/chat_service_shared_examples.rb | 199 +- ...luster_application_core_shared_examples.rb | 4 + .../move_quick_action_shared_examples.rb | 49 + .../zoom_quick_actions_shared_examples.rb | 111 + .../requests/api/discussions.rb | 54 + .../requests/api/issues_shared_examples.rb | 21 + .../pipelines/visibility_table_examples.rb | 235 + .../requests/rack_attack_shared_examples.rb | 221 + .../services/count_service_shared_examples.rb | 54 + .../notification_service_shared_examples.rb | 44 + ...attermost_notifications_shared_examples.rb | 404 +- .../uses_gitlab_url_blocker_examples.rb | 155 + spec/tasks/gitlab/gitaly_rake_spec.rb | 4 +- spec/uploaders/gitlab_uploader_spec.rb | 2 +- spec/uploaders/object_storage_spec.rb | 2 +- spec/uploaders/records_uploads_spec.rb | 2 +- spec/uploaders/uploader_helper_spec.rb | 2 +- .../addressable_url_validator_spec.rb | 37 + .../named_ecdsa_key_validator_spec.rb | 54 + .../shared/_signin_box.html.haml_spec.rb | 2 +- spec/views/groups/edit.html.haml_spec.rb | 2 +- spec/views/help/index.html.haml_spec.rb | 6 +- .../instance_configuration.html.haml_spec.rb | 2 +- .../projects/_home_panel.html.haml_spec.rb | 34 + spec/views/projects/edit.html.haml_spec.rb | 56 + .../projects/issues/show.html.haml_spec.rb | 59 +- .../pages_domains/show.html.haml_spec.rb | 66 + .../ci_cd/_autodevops_form.html.haml_spec.rb | 8 +- .../operations/show.html.haml_spec.rb | 1 - spec/views/search/_results.html.haml_spec.rb | 33 + .../views/shared/_label_row.html.haml_spec.rb | 1 + .../ci/archive_traces_cron_worker_spec.rb | 16 +- .../repository_remove_remote_worker_spec.rb | 2 +- ...sitory_update_remote_mirror_worker_spec.rb | 2 +- .../run_pipeline_schedule_worker_spec.rb | 2 +- ...date_external_pull_requests_worker_spec.rb | 54 + spec/workers/upload_checksum_worker_spec.rb | 2 +- tmp/.gitignore | 5 + vendor/gitignore/C++.gitignore | 0 vendor/gitignore/Java.gitignore | 0 vendor/jupyter/values.yaml | 2 +- vendor/licenses.csv | 2 +- yarn.lock | 245 +- 4577 files changed, 74085 insertions(+), 32075 deletions(-) create mode 100644 .gitlab/issue_templates/Problem_Validation.md create mode 100644 .license_encryption_key.pub create mode 100644 .markdownlint.json delete mode 100644 .mdlrc delete mode 100644 .mdlrc.style create mode 100644 .overcommit.yml.example create mode 100644 16790-render-xml-artifacts.yml create mode 100644 CHANGELOG-EE.md create mode 100644 app/assets/javascripts/admin/statistics_panel/components/app.vue create mode 100644 app/assets/javascripts/admin/statistics_panel/constants.js create mode 100644 app/assets/javascripts/admin/statistics_panel/index.js create mode 100644 app/assets/javascripts/admin/statistics_panel/store/actions.js create mode 100644 app/assets/javascripts/admin/statistics_panel/store/getters.js create mode 100644 app/assets/javascripts/admin/statistics_panel/store/index.js create mode 100644 app/assets/javascripts/admin/statistics_panel/store/mutation_types.js create mode 100644 app/assets/javascripts/admin/statistics_panel/store/mutations.js create mode 100644 app/assets/javascripts/admin/statistics_panel/store/state.js create mode 100644 app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/cluster_form_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/create_eks_cluster.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/eks_cluster_configuration_form.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/role_name_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/security_group_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/service_credentials_form.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/subnet_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/components/vpc_dropdown.vue create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/index.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/services/aws_services_facade.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/actions.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/getters.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/index.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/mutation_types.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/mutations.js create mode 100644 app/assets/javascripts/create_cluster/eks_cluster/store/state.js rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_dropdown_mixin.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_machine_type_dropdown.vue (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_project_id_dropdown.vue (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_zone_dropdown.vue (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/constants.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/index.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/store/actions.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/store/getters.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/store/index.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/store/mutation_types.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/store/mutations.js (100%) rename app/assets/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/store/state.js (100%) create mode 100644 app/assets/javascripts/cycle_analytics/components/stage_card_list_item.vue create mode 100644 app/assets/javascripts/cycle_analytics/components/stage_nav_item.vue create mode 100644 app/assets/javascripts/event_tracking/issue_sidebar.js create mode 100644 app/assets/javascripts/gl_dropdown/render.js create mode 100644 app/assets/javascripts/image_diff/helpers/init_image_diff.js create mode 100644 app/assets/javascripts/jobs/components/job_log_json.vue create mode 100644 app/assets/javascripts/jobs/components/log/duration_badge.vue create mode 100644 app/assets/javascripts/jobs/components/log/line.vue create mode 100644 app/assets/javascripts/jobs/components/log/line_header.vue create mode 100644 app/assets/javascripts/jobs/components/log/line_number.vue create mode 100644 app/assets/javascripts/jobs/components/log/log.vue create mode 100644 app/assets/javascripts/jobs/store/utils.js rename app/assets/javascripts/monitoring/components/charts/{area.vue => time_series.vue} (61%) rename app/assets/javascripts/pages/admin/application_settings/{show => general}/index.js (100%) create mode 100644 app/assets/javascripts/pages/projects/clusters/new/index.js create mode 100644 app/assets/javascripts/pages/projects/issues/designs/index.js create mode 100644 app/assets/javascripts/pipelines/mixins/graph_width_mixin.js delete mode 100644 app/assets/javascripts/registry/components/svg_message.vue create mode 100644 app/assets/javascripts/releases/components/milestone_list.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/assignee_avatar_link.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/collapsed_assignee.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/collapsed_assignee_list.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/uncollapsed_assignee_list.vue rename app/assets/javascripts/{project_edit.js => transfer_edit.js} (51%) delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/comment.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/comment_mr_note.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/comment_post.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/comment_storage.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/form_elements.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/index.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/login.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/mr_id.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/note.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/utils.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/wrapper.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/components/wrapper_icons.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/index.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/shared/constants.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/shared/index.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/shared/storage_utils.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/store/events.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/store/index.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/store/state.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/store/utils.js delete mode 100644 app/assets/javascripts/visual_review_toolbar/styles/toolbar.css create mode 100644 app/assets/javascripts/vue_shared/components/gl_toggle_vuex.vue create mode 100644 app/assets/javascripts/vue_shared/directives/autofocusonshow.js create mode 100644 app/assets/javascripts/vue_shared/plugins/global_toast.js delete mode 100644 app/assets/stylesheets/csslab.scss create mode 100644 app/assets/stylesheets/framework/job_log.scss create mode 100644 app/controllers/concerns/paginated_collection.rb create mode 100644 app/controllers/concerns/renders_assignees.rb create mode 100644 app/controllers/concerns/sorting_preference.rb create mode 100644 app/controllers/concerns/static_object_external_storage.rb create mode 100644 app/finders/award_emojis_finder.rb delete mode 100644 app/finders/awarded_emoji_finder.rb delete mode 100644 app/graphql/functions/base_function.rb delete mode 100644 app/graphql/functions/echo.rb create mode 100644 app/graphql/resolvers/echo_resolver.rb delete mode 100644 app/graphql/types/order.rb create mode 100644 app/graphql/types/root_storage_statistics_type.rb delete mode 100644 app/graphql/types/sort.rb create mode 100644 app/graphql/types/sort_enum.rb create mode 100644 app/helpers/external_link_helper.rb create mode 100644 app/helpers/jobs_helper.rb create mode 100644 app/helpers/releases_helper.rb create mode 100644 app/models/concerns/analytics/cycle_analytics/stage.rb delete mode 100644 app/models/concerns/ignorable_column.rb create mode 100644 app/models/concerns/notification_branch_selection.rb create mode 100644 app/models/external_pull_request.rb create mode 100644 app/models/list_user_preference.rb create mode 100644 app/models/milestone_release.rb create mode 100644 app/models/pages/lookup_path.rb create mode 100644 app/models/pages/virtual_domain.rb create mode 100644 app/policies/concerns/find_group_projects.rb create mode 100644 app/policies/namespace/root_storage_statistics_policy.rb create mode 100644 app/presenters/event_presenter.rb create mode 100644 app/serializers/cluster_basic_entity.rb create mode 100644 app/serializers/merge_request_noteable_entity.rb create mode 100644 app/serializers/merge_request_sidebar_basic_entity.rb create mode 100644 app/services/award_emojis/add_service.rb create mode 100644 app/services/award_emojis/base_service.rb create mode 100644 app/services/award_emojis/collect_user_emoji_service.rb create mode 100644 app/services/award_emojis/destroy_service.rb create mode 100644 app/services/award_emojis/toggle_service.rb create mode 100644 app/services/boards/lists/update_service.rb create mode 100644 app/services/clusters/applications/check_progress_service.rb delete mode 100644 app/services/clusters/gcp/kubernetes.rb delete mode 100644 app/services/clusters/gcp/kubernetes/create_or_update_namespace_service.rb delete mode 100644 app/services/clusters/gcp/kubernetes/create_or_update_service_account_service.rb delete mode 100644 app/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service.rb create mode 100644 app/services/clusters/kubernetes/create_or_update_namespace_service.rb create mode 100644 app/services/clusters/kubernetes/create_or_update_service_account_service.rb create mode 100644 app/services/clusters/kubernetes/fetch_kubernetes_token_service.rb create mode 100644 app/services/clusters/kubernetes/kubernetes.rb create mode 100644 app/services/external_pull_requests/create_pipeline_service.rb create mode 100644 app/services/issues/zoom_link_service.rb create mode 100644 app/services/milestones/find_or_create_service.rb create mode 100644 app/services/milestones/transfer_service.rb delete mode 100644 app/services/self_monitoring/project/create_service.rb create mode 100644 app/validators/named_ecdsa_key_validator.rb create mode 100644 app/views/admin/application_settings/_repository_static_objects.html.haml rename app/views/admin/application_settings/{show.html.haml => general.html.haml} (94%) create mode 100644 app/views/clusters/clusters/_configure.html.haml create mode 100644 app/views/clusters/clusters/cloud_providers/_cloud_provider_button.html.haml create mode 100644 app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml create mode 100644 app/views/clusters/clusters/eks/_index.html.haml create mode 100644 app/views/graphiql/rails/editors/show.html.erb delete mode 100644 app/views/projects/milestones/_deprecation_message.html.haml create mode 100644 app/views/projects/pages_domains/_certificate.html.haml delete mode 100644 app/views/projects/wikis/_new.html.haml create mode 100644 app/workers/update_external_pull_requests_worker.rb create mode 100644 config/initializers/countries.rb create mode 100644 config/initializers/hangouts_chat_http_override.rb create mode 100644 config/smime_signature_settings.rb delete mode 100644 config/webpack.config.review_toolbar.js delete mode 100644 core-js/internals/function-to-string.js create mode 100644 core-js/internals/ieee754.js create mode 100644 core-js/internals/inspect-source.js create mode 100644 core-js/internals/is-ios.js create mode 100644 core-js/internals/to-string-tag-support.js create mode 100644 core-js/internals/use-symbol-as-uid.js create mode 100644 core-js/modules/es.json.stringify.js create mode 100644 crowdin.yml delete mode 100644 danger/only_documentation/Dangerfile create mode 100644 db/migrate/20190711200053_change_deploy_tokens_token_not_null.rb create mode 100644 db/migrate/20190711200508_add_token_encrypted_to_deploy_tokens.rb create mode 100644 db/migrate/20190719174505_add_index_to_deploy_tokens_token_encrypted.rb create mode 100644 db/migrate/20190722104947_add_static_object_token_to_users.rb create mode 100644 db/migrate/20190722132830_add_static_objects_external_storage_columns_to_application_settings.rb create mode 100644 db/migrate/20190722144316_create_milestone_releases_table.rb create mode 100644 db/migrate/20190725183432_add_index_to_index_on_static_object_token.rb create mode 100644 db/migrate/20190729180447_add_merge_requests_require_code_owner_approval_to_protected_branches.rb create mode 100644 db/migrate/20190805140353_remove_rendundant_index_from_releases.rb create mode 100644 db/migrate/20190808152507_add_projects_sorting_field_to_user_preferences.rb create mode 100644 db/migrate/20190814205640_import_common_metrics_line_charts.rb create mode 100644 db/migrate/20190819131155_add_cluster_status_index_to_deployments.rb create mode 100644 db/migrate/20190820163320_add_first_last_name_to_user.rb create mode 100644 db/migrate/20190822175441_rename_epics_state_to_state_id.rb create mode 100644 db/migrate/20190822181528_create_list_user_preferences.rb create mode 100644 db/migrate/20190823055948_change_clusters_namespace_per_environment_default.rb create mode 100644 db/migrate/20190826090628_remove_redundant_deployments_index.rb create mode 100644 db/migrate/20190826100605_add_group_column_to_events.rb create mode 100644 db/migrate/20190828083843_add_index_to_ci_job_artifacts_on_project_id_for_security_reports.rb create mode 100644 db/migrate/20190828110802_add_not_null_constraints_to_prometheus_metrics_y_label_and_unit.rb create mode 100644 db/migrate/20190828170945_create_package_metadatum.rb create mode 100644 db/migrate/20190828172831_create_package_tag.rb create mode 100644 db/migrate/20190829131130_create_external_pull_requests.rb create mode 100644 db/migrate/20190830075508_add_external_pull_request_id_to_ci_pipelines.rb create mode 100644 db/migrate/20190830080123_add_index_to_ci_pipelines_external_pull_request.rb create mode 100644 db/migrate/20190830080626_add_foreign_key_to_ci_pipelines_external_pull_request.rb create mode 100644 db/migrate/20190830140240_add_duplicated_to_to_issue.rb create mode 100644 db/migrate/20190902131045_replace_indexes_for_counting_active_users.rb create mode 100644 db/migrate/20190902152329_add_index_for_ci_builds_metrics.rb create mode 100644 db/migrate/20190904173203_add_index_on_users_unconfirmed_email.rb create mode 100644 db/migrate/20190905223800_add_interruptible_to_builds_metadata.rb create mode 100644 db/migrate/20190905223900_add_concurrent_index_to_builds_metadata.rb create mode 100644 db/migrate/20190906104555_create_alerts_service_data.rb create mode 100644 db/migrate/20190907184714_add_show_whitespace_in_diffs_to_user_preferences.rb create mode 100644 db/migrate/20190910103144_replace_events_index_on_group_id_with_partial_index.rb create mode 100644 db/migrate/20190910114843_exclude_nulls_from_index_on_namespaces_type.rb create mode 100644 db/migrate/20190910125852_create_analytics_language_trend_repository_languages.rb create mode 100644 db/migrate/20190910212256_add_any_approver_rule_unique_indexes.rb create mode 100644 db/migrate/20190912061145_add_index_to_members_on_expires_at.rb create mode 100644 db/migrate/20190914223900_modify_concurrent_index_to_builds_metadata.rb create mode 100644 db/migrate/20190918104212_add_merge_request_metrics_merged_at_index.rb create mode 100644 db/migrate/20191120084627_add_encrypted_fields_to_application_settings.rb create mode 100644 db/migrate/20191120115530_encrypt_plaintext_attributes_on_application_settings.rb create mode 100644 db/post_migrate/20190711201818_encrypt_deploy_tokens_tokens.rb create mode 100644 db/post_migrate/20190715193142_migrate_discussion_id_on_promoted_epics.rb create mode 100644 db/post_migrate/20190725080128_set_not_null_on_users_private_profile.rb create mode 100644 db/post_migrate/20190809072552_set_self_monitoring_project_alerting_token.rb create mode 100644 db/post_migrate/20190822185441_cleanup_epics_state_id_rename.rb create mode 100644 db/post_migrate/20190902160015_remove_support_bot_column_from_users.rb create mode 100644 db/post_migrate/20190904205212_remove_id_column_from_intermediate_release_milestones.rb create mode 100644 db/post_migrate/20190905091812_schedule_project_any_approval_rule_migration.rb create mode 100644 db/post_migrate/20190905091831_schedule_merge_request_any_approval_rule_migration.rb create mode 100644 db/post_migrate/20190910000130_add_index_on_application_id_on_oauth_access_tokens.rb create mode 100644 db/post_migrate/20190918104222_schedule_productivity_analytics_backfill.rb create mode 100644 db/post_migrate/20191122135327_remove_plaintext_columns_from_application_settings.rb create mode 100644 doc/administration/geo/replication/version_specific_updates.md create mode 100644 doc/administration/gitaly/img/architecture_v12_4.png create mode 100644 doc/administration/gitaly/reference.md rename doc/administration/monitoring/prometheus/{gitlab_monitor_exporter.md => gitlab_exporter.md} (67%) create mode 100644 doc/administration/packages/container_registry.md create mode 100644 doc/administration/packages/dependency_proxy.md rename doc/{user/project => administration/packages}/img/mitmproxy-docker.png (100%) create mode 100644 doc/administration/packages/index.md create mode 100644 doc/administration/smime_signing_email.md create mode 100644 doc/administration/static_objects_external_storage.md create mode 100644 doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md create mode 100644 doc/administration/troubleshooting/linux_cheat_sheet.md create mode 100644 doc/administration/troubleshooting/test_environments.md create mode 100644 doc/api/statistics.md delete mode 100644 doc/ci/ci_cd_for_external_repos/img/github_repo_list.png delete mode 100644 doc/ci/introduction/img/gitlab_workflow_example_extended_11_11.png create mode 100644 doc/ci/introduction/img/gitlab_workflow_example_extended_v12_3.png create mode 100644 doc/development/dangerbot.md create mode 100644 doc/development/event_tracking/backend.md create mode 100644 doc/development/event_tracking/frontend.md create mode 100644 doc/development/event_tracking/index.md create mode 100644 doc/development/img/elasticsearch_architecture.svg create mode 100644 doc/development/namespaces_storage_statistics.md create mode 100644 doc/development/pipelines.md create mode 100644 doc/development/testing_guide/img/k9s.png create mode 100644 doc/development/uploads.md create mode 100644 doc/security/password_storage.md create mode 100644 doc/user/analytics/productivity_analytics.md delete mode 100644 doc/user/application_security/dependency_list/img/dependency_list_v12_2.png create mode 100644 doc/user/application_security/dependency_list/img/dependency_list_v12_3.png rename doc/user/application_security/{license_management/img/license_management.png => license_compliance/img/license_compliance.png} (100%) create mode 100644 doc/user/application_security/license_compliance/img/license_compliance_add_license_v12_3.png rename doc/user/application_security/{license_management/img/license_management_decision.png => license_compliance/img/license_compliance_decision.png} (100%) create mode 100644 doc/user/application_security/license_compliance/img/license_compliance_pipeline_tab_v12_3.png create mode 100644 doc/user/application_security/license_compliance/img/license_compliance_search_v12_3.png create mode 100644 doc/user/application_security/license_compliance/img/license_compliance_settings_v12_3.png create mode 100644 doc/user/application_security/license_compliance/index.md delete mode 100644 doc/user/application_security/license_management/img/license_management_add_license.png delete mode 100644 doc/user/application_security/license_management/img/license_management_pipeline_tab.png delete mode 100644 doc/user/application_security/license_management/img/license_management_search.png delete mode 100644 doc/user/application_security/license_management/img/license_management_settings.png delete mode 100644 doc/user/application_security/sast/img/security_report.png delete mode 100644 doc/user/application_security/security_dashboard/img/group_security_dashboard.png create 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/pipeline_security_dashboard_v12_3.png delete mode 100644 doc/user/application_security/security_dashboard/img/project_security_dashboard.png create mode 100644 doc/user/application_security/security_dashboard/img/project_security_dashboard_v12_3.png create mode 100644 doc/user/clusters/environments.md create mode 100644 doc/user/clusters/img/cluster_environments_table_v12_3.png create mode 100644 doc/user/packages/container_registry/index.md create mode 100644 doc/user/packages/dependency_proxy/img/group_dependency_proxy.png create mode 100644 doc/user/packages/dependency_proxy/index.md create mode 100644 doc/user/packages/index.md create mode 100644 doc/user/packages/maven_repository/img/maven_package_view.png create mode 100644 doc/user/packages/maven_repository/index.md create mode 100644 doc/user/packages/npm_registry/img/npm_package_view.png create mode 100644 doc/user/packages/npm_registry/index.md create mode 100644 doc/user/profile/account/create_accounts.md create mode 100644 doc/user/profile/account/img/admin_user_button.png create mode 100644 doc/user/profile/account/img/admin_user_form.png create mode 100644 doc/user/profile/account/img/register_tab.png create mode 100644 doc/user/project/clusters/serverless/aws.md delete mode 100644 doc/user/project/img/protected_branches_devs_can_push.png create mode 100644 doc/user/project/img/protected_branches_devs_can_push_v12_3.png delete mode 100644 doc/user/project/img/protected_branches_list.png create mode 100644 doc/user/project/img/protected_branches_list_v12_3.png delete mode 100644 doc/user/project/img/protected_branches_page.png create mode 100644 doc/user/project/img/protected_branches_page_v12_3.png delete mode 100644 doc/user/project/img/protected_tags_list.png create mode 100644 doc/user/project/img/protected_tags_list_v12_3.png delete mode 100644 doc/user/project/img/protected_tags_page.png create mode 100644 doc/user/project/img/protected_tags_page_v12_3.png delete mode 100644 doc/user/project/img/protected_tags_permissions_dropdown.png create mode 100644 doc/user/project/img/protected_tags_permissions_dropdown_v12_3.png delete mode 100644 doc/user/project/import/img/gemnasium/report.png delete mode 100644 doc/user/project/import/img/gitlab_new_project_page.png create mode 100644 doc/user/project/import/img/gitlab_new_project_page_v12_2.png create mode 100644 doc/user/project/integrations/generic_alerts.md create mode 100644 doc/user/project/integrations/img/grafana_live_embed.png create mode 100644 doc/user/project/issues/img/design_added_v12_3.png create mode 100644 doc/user/project/issues/img/design_comments_v12_3.png delete mode 100644 doc/user/project/issues/img/design_management_v12_2.png create mode 100644 doc/user/project/issues/img/design_management_v12_3.png create mode 100644 doc/user/project/issues/img/design_modified_v12_3.png delete mode 100644 doc/user/project/issues/img/link_zoom_call_in_issue.png create mode 100644 doc/user/project/issues/img/zoom-quickaction-button.png delete mode 100644 doc/user/project/merge_requests/img/approvals_premium_project_edit.png create mode 100644 doc/user/project/merge_requests/img/approvals_premium_project_edit_v12_3.png delete mode 100644 doc/user/project/merge_requests/img/code_quality.gif create mode 100644 doc/user/project/merge_requests/img/code_quality.png create mode 100644 doc/user/project/merge_requests/img/ff_merge_mr.png create mode 100644 doc/user/project/merge_requests/img/merge_request_diff_v12_2.png delete mode 100644 doc/user/project/repository/img/repository_languages.png create mode 100644 doc/user/project/repository/img/repository_languages_v12_2.gif delete mode 100644 doc/user/project/web_ide/img/commit_changes.png create mode 100644 doc/user/project/web_ide/img/commit_changes_v12_3.png create mode 100644 doc/user/project/web_ide/img/review_changes_v12_3.png delete mode 100644 doc/user/project/wiki/img/wiki_create_new_page_modal.png delete mode 100644 doc/workflow/time-tracking/time-tracking-example.png create mode 100644 doc/workflow/time_tracking/img/time_tracking_example_v12_2.png rename doc/workflow/{time-tracking/time-tracking-sidebar.png => time_tracking/img/time_tracking_sidebar_v8_16.png} (100%) create mode 100644 lib/api/entities/internal.rb delete mode 100644 lib/api/internal.rb create mode 100644 lib/api/internal/base.rb create mode 100644 lib/api/internal/pages.rb create mode 100644 lib/api/statistics.rb create mode 100644 lib/api/support/git_access_actor.rb create mode 100644 lib/api/validations/types/workhorse_file.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/default_stages.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/issue_created.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/issue_first_mentioned_in_commit.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_created.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_finished.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_last_build_started.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_merged.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/simple_stage_event.rb create mode 100644 lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb create mode 100644 lib/gitlab/background_migration/fix_promoted_epics_discussion_ids.rb create mode 100644 lib/gitlab/ci/build/rules.rb create mode 100644 lib/gitlab/ci/build/rules/rule.rb create mode 100644 lib/gitlab/ci/build/rules/rule/clause.rb create mode 100644 lib/gitlab/ci/build/rules/rule/clause/changes.rb create mode 100644 lib/gitlab/ci/build/rules/rule/clause/if.rb create mode 100644 lib/gitlab/ci/config/entry/rules.rb create mode 100644 lib/gitlab/ci/config/entry/rules/rule.rb create mode 100644 lib/gitlab/ci/templates/Pages/SwaggerUI.gitlab-ci.yml delete mode 100644 lib/gitlab/correlation_id.rb create mode 100644 lib/gitlab/database/obsolete_ignored_columns.rb create mode 100644 lib/gitlab/database_importers/self_monitoring/project/create_service.rb create mode 100644 lib/gitlab/devise_failure.rb delete mode 100644 lib/gitlab/ee_compat_check.rb create mode 100644 lib/gitlab/email/hook/smime_signature_interceptor.rb create mode 100644 lib/gitlab/email/smime/certificate.rb create mode 100644 lib/gitlab/email/smime/signer.rb create mode 100644 lib/gitlab/git/keep_around.rb create mode 100644 lib/gitlab/grape_logging/loggers/client_env_logger.rb create mode 100644 lib/gitlab/graphql/loaders/batch_root_storage_statistics_loader.rb create mode 100644 lib/gitlab/import_export/fast_hash_serializer.rb delete mode 100644 lib/gitlab/import_export/json_hash_builder.rb create mode 100644 lib/gitlab/internal_post_receive/response.rb create mode 100644 lib/gitlab/jwt_authenticatable.rb create mode 100644 lib/gitlab/noteable_metadata.rb create mode 100644 lib/gitlab/performance_bar/with_top_level_warnings.rb create mode 100644 lib/gitlab/repository_set_cache.rb create mode 100644 lib/gitlab/sidekiq_daemon/monitor.rb create mode 100644 lib/gitlab/sidekiq_middleware/monitor.rb create mode 100644 lib/gitlab/slash_commands/issue_close.rb create mode 100644 lib/gitlab/slash_commands/presenters/issue_close.rb delete mode 100644 lib/gitlab/snowplow_tracker.rb create mode 100644 lib/gitlab/tracking.rb create mode 100644 lib/gitlab/url_blockers/url_whitelist.rb create mode 100644 lib/gitlab/usage_data_counters/merge_request_counter.rb create mode 100644 lib/gitlab/usage_data_counters/productivity_analytics_counter.rb create mode 100644 lib/gitlab_danger.rb delete mode 100644 lib/gt_one_coercion.rb create mode 100644 lib/prometheus/cleanup_multiproc_dir_service.rb create mode 100644 lib/system_check/app/authorized_keys_permission_check.rb delete mode 100644 lib/system_check/incoming_email/foreman_configured_check.rb create mode 100644 lib/tasks/db_obsolete_ignored_columns.rake delete mode 100644 lib/tasks/ee_compat_check.rake delete mode 100644 lib/tasks/gitlab/dev.rake create mode 100644 lib/tasks/gitlab_danger.rake create mode 100644 plugins/.gitignore create mode 100644 qa/qa/page/admin/settings/component/ip_limits.rb create mode 100644 qa/qa/page/admin/settings/network.rb create mode 100644 qa/qa/page/component/web_ide/alert.rb create mode 100644 qa/qa/page/group/menu.rb create mode 100644 qa/qa/page/group/settings/general.rb create mode 100644 qa/qa/page/group/sub_menus/common.rb create mode 100644 qa/qa/page/group/sub_menus/members.rb create mode 100644 qa/qa/page/profile/two_factor_auth.rb create mode 100644 qa/qa/page/project/settings/auto_devops.rb create mode 100644 qa/qa/page/project/settings/visibility_features_permissions.rb create mode 100644 qa/qa/page/project/wiki/git_access.rb delete mode 100644 qa/qa/resource/branch.rb create mode 100644 qa/qa/resource/members.rb create mode 100644 qa/qa/resource/project_member.rb create mode 100644 qa/qa/resource/protected_branch.rb create mode 100644 qa/qa/resource/repository/commit.rb create mode 100644 qa/qa/service/cluster_provider/base.rb create mode 100644 qa/qa/service/cluster_provider/gcloud.rb create mode 100644 qa/qa/service/cluster_provider/k3d.rb create mode 100644 qa/qa/service/cluster_provider/minikube.rb create mode 100644 qa/qa/specs/features/api/1_manage/rate_limits_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/2_plan/issue/close_issue_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb create mode 100644 rubocop/cop/graphql/descriptions.rb create mode 100644 rubocop/cop/migration/add_limit_to_string_columns.rb create mode 100644 rubocop/cop/qa/ambiguous_page_object_name.rb create mode 100644 rubocop/cop/rspec/be_success_matcher.rb create mode 100644 rubocop/cop/scalability/file_uploads.rb delete mode 100644 rubocop/spec_helpers.rb create mode 100755 scripts/ee-specific-lines-check create mode 100755 scripts/frontend/check_dependencies.sh create mode 100755 scripts/prepare_postgres_fdw.sh create mode 100644 scripts/review_apps/base-config.yaml mode change 100644 => 100755 scripts/schema_changed.sh create mode 100644 shared/.gitignore create mode 100644 spec/config/smime_signature_settings_spec.rb create mode 100644 spec/controllers/concerns/sorting_preference_spec.rb create mode 100644 spec/controllers/concerns/static_object_external_storage_spec.rb create mode 100644 spec/controllers/dashboard/snippets_controller_spec.rb create mode 100644 spec/controllers/explore/snippets_controller_spec.rb create mode 100644 spec/factories/external_pull_requests.rb create mode 100644 spec/factories/milestone_releases.rb create mode 100644 spec/features/admin/clusters/applications_spec.rb create mode 100644 spec/features/clusters/installing_applications_shared_examples.rb create mode 100644 spec/features/groups/clusters/applications_spec.rb create mode 100644 spec/features/merge_request/user_edits_assignees_sidebar_spec.rb create mode 100644 spec/finders/award_emojis_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/cluster_basic.json create mode 100644 spec/fixtures/api/schemas/entities/merge_request_noteable.json create mode 100644 spec/fixtures/api/schemas/internal/pages/lookup_path.json create mode 100644 spec/fixtures/api/schemas/internal/pages/virtual_domain.json create mode 100644 spec/fixtures/api/schemas/statistics.json delete mode 100644 spec/fixtures/security-reports/dependency_list/gl-dependency-scanning-report.json delete mode 100644 spec/fixtures/security-reports/deprecated/gl-dependency-scanning-report.json delete mode 100644 spec/fixtures/security-reports/deprecated/gl-sast-report.json delete mode 100644 spec/fixtures/security-reports/feature-branch.zip delete mode 100644 spec/fixtures/security-reports/feature-branch/gl-container-scanning-report.json delete mode 100644 spec/fixtures/security-reports/feature-branch/gl-dast-report.json delete mode 100644 spec/fixtures/security-reports/feature-branch/gl-dependency-scanning-report.json delete mode 100644 spec/fixtures/security-reports/feature-branch/gl-license-management-report.json delete mode 100644 spec/fixtures/security-reports/feature-branch/gl-sast-report.json delete mode 100644 spec/fixtures/security-reports/master.zip delete mode 100644 spec/fixtures/security-reports/master/gl-container-scanning-report.json delete mode 100644 spec/fixtures/security-reports/master/gl-dast-report.json delete mode 100644 spec/fixtures/security-reports/master/gl-dependency-scanning-report.json delete mode 100644 spec/fixtures/security-reports/master/gl-license-management-report.json delete mode 100644 spec/fixtures/security-reports/master/gl-sast-report.json delete mode 100644 spec/fixtures/security-reports/remediations/gl-dependency-scanning-report.json delete mode 100644 spec/fixtures/security-reports/remediations/remediation.patch delete mode 100644 spec/fixtures/security-reports/remediations/yarn.lock create mode 100644 spec/frontend/admin/statistics_panel/components/app_spec.js create mode 100644 spec/frontend/admin/statistics_panel/mock_data.js create mode 100644 spec/frontend/admin/statistics_panel/store/actions_spec.js create mode 100644 spec/frontend/admin/statistics_panel/store/getters_spec.js create mode 100644 spec/frontend/admin/statistics_panel/store/mutations_spec.js create mode 100644 spec/frontend/create_cluster/eks_cluster/components/cluster_form_dropdown_spec.js create mode 100644 spec/frontend/create_cluster/eks_cluster/components/role_name_dropdown_spec.js create mode 100644 spec/frontend/cycle_analytics/stage_nav_item_spec.js create mode 100644 spec/frontend/diffs/components/diff_content_spec.js create mode 100644 spec/frontend/diffs/components/diff_file_header_spec.js create mode 100644 spec/frontend/ide/components/preview/clientside_spec.js create mode 100644 spec/frontend/jobs/components/log/duration_badge_spec.js create mode 100644 spec/frontend/jobs/components/log/line_header_spec.js create mode 100644 spec/frontend/jobs/components/log/line_number_spec.js create mode 100644 spec/frontend/jobs/components/log/line_spec.js create mode 100644 spec/frontend/jobs/components/log/log_spec.js create mode 100644 spec/frontend/jobs/components/log/mock_data.js create mode 100644 spec/frontend/jobs/store/utils_spec.js create mode 100644 spec/frontend/lib/utils/axios_utils_spec.js create mode 100644 spec/frontend/project_find_file_spec.js create mode 100644 spec/frontend/releases/components/milestone_list_spec.js create mode 100644 spec/frontend/releases/components/release_block_spec.js create mode 100644 spec/frontend/releases/mock_data.js create mode 100644 spec/frontend/sidebar/components/assignees/assignee_avatar_link_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/assignee_avatar_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/collapsed_assignee_list_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/collapsed_assignee_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/uncollapsed_assignee_list_spec.js create mode 100644 spec/frontend/sidebar/user_data_mock.js create mode 100644 spec/frontend/transfer_edit_spec.js create mode 100644 spec/frontend/vue_mr_widget/components/states/mr_widget_auto_merge_failed_spec.js create mode 100644 spec/frontend/vue_shared/components/file_icon_spec.js create mode 100644 spec/frontend/vue_shared/components/gl_toggle_vuex_spec.js create mode 100644 spec/frontend/vue_shared/plugins/global_toast_spec.js create mode 100644 spec/frontend/wikis_spec.js create mode 100644 spec/graphql/resolvers/echo_resolver_spec.rb create mode 100644 spec/graphql/types/root_storage_statistics_type_spec.rb create mode 100644 spec/helpers/external_link_helper_spec.rb create mode 100644 spec/helpers/releases_helper_spec.rb create mode 100644 spec/initializers/action_mailer_hooks_spec.rb create mode 100644 spec/initializers/hangouts_chat_http_override_spec.rb rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_machine_type_dropdown_spec.js (92%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_project_id_dropdown_spec.js (90%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/components/gke_zone_dropdown_spec.js (90%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/helpers.js (100%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/mock_data.js (100%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/stores/actions_spec.js (95%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/stores/getters_spec.js (95%) rename spec/javascripts/{projects/gke_cluster_dropdowns => create_cluster/gke_cluster}/stores/mutations_spec.js (94%) delete mode 100644 spec/javascripts/diffs/components/diff_content_spec.js delete mode 100644 spec/javascripts/diffs/components/diff_file_header_spec.js delete mode 100644 spec/javascripts/ide/components/preview/clientside_spec.js create mode 100644 spec/javascripts/image_diff/helpers/init_image_diff_spec.js delete mode 100644 spec/javascripts/monitoring/charts/area_spec.js create mode 100644 spec/javascripts/monitoring/charts/time_series_spec.js rename spec/javascripts/monitoring/{ => components}/dashboard_spec.js (98%) create mode 100644 spec/javascripts/monitoring/components/graph_group_spec.js delete mode 100644 spec/javascripts/vue_mr_widget/components/states/mr_widget_auto_merge_failed_spec.js delete mode 100644 spec/javascripts/vue_shared/components/file_icon_spec.js create mode 100644 spec/javascripts/vue_shared/directives/autofocusonshow_spec.js create mode 100644 spec/lib/api/helpers/label_helpers_spec.rb create mode 100644 spec/lib/api/support/git_access_actor_spec.rb create mode 100644 spec/lib/gitlab/analytics/cycle_analytics/stage_events/stage_event_spec.rb create mode 100644 spec/lib/gitlab/background_migration/fix_promoted_epics_discussion_ids_spec.rb create mode 100644 spec/lib/gitlab/ci/build/rules/rule_spec.rb create mode 100644 spec/lib/gitlab/ci/build/rules_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/rules/rule_spec.rb create mode 100644 spec/lib/gitlab/ci/config/entry/rules_spec.rb create mode 100644 spec/lib/gitlab/database/obsolete_ignored_columns_spec.rb rename spec/{services => lib/gitlab/database_importers}/self_monitoring/project/create_service_spec.rb (61%) create mode 100644 spec/lib/gitlab/email/hook/smime_signature_interceptor_spec.rb create mode 100644 spec/lib/gitlab/email/smime/certificate_spec.rb create mode 100644 spec/lib/gitlab/email/smime/signer_spec.rb create mode 100644 spec/lib/gitlab/fogbugz_import/project_creator_spec.rb create mode 100644 spec/lib/gitlab/git/keep_around_spec.rb create mode 100644 spec/lib/gitlab/graphql/loaders/batch_root_storage_statistics_loader_spec.rb create mode 100644 spec/lib/gitlab/import_export/attributes_finder_spec.rb create mode 100644 spec/lib/gitlab/import_export/fast_hash_serializer_spec.rb create mode 100644 spec/lib/gitlab/internal_post_receive/response_spec.rb create mode 100644 spec/lib/gitlab/jwt_authenticatable_spec.rb create mode 100644 spec/lib/gitlab/noteable_metadata_spec.rb create mode 100644 spec/lib/gitlab/pages_spec.rb create mode 100644 spec/lib/gitlab/performance_bar/with_top_level_warnings_spec.rb create mode 100644 spec/lib/gitlab/repository_set_cache_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_daemon/monitor_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/monitor_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/issue_close_spec.rb create mode 100644 spec/lib/gitlab/slash_commands/presenters/issue_close_spec.rb delete mode 100644 spec/lib/gitlab/snowplow_tracker_spec.rb create mode 100644 spec/lib/gitlab/tracking_spec.rb create mode 100644 spec/lib/gitlab/url_blockers/url_whitelist_spec.rb create mode 100644 spec/lib/gitlab/usage_data_counters/merge_request_counter_spec.rb create mode 100644 spec/lib/gitlab/usage_data_counters/productivity_analytics_counter_spec.rb create mode 100644 spec/lib/gitlab_danger_spec.rb create mode 100644 spec/lib/peek/views/detailed_view_spec.rb create mode 100644 spec/lib/prometheus/cleanup_multiproc_dir_service_spec.rb create mode 100644 spec/lib/system_check/app/authorized_keys_permission_check_spec.rb create mode 100644 spec/migrations/encrypt_deploy_tokens_tokens_spec.rb create mode 100644 spec/migrations/encrypt_plaintext_attributes_on_application_settings_spec.rb create mode 100644 spec/migrations/migrate_discussion_id_on_promoted_epics_spec.rb delete mode 100644 spec/models/concerns/ignorable_column_spec.rb create mode 100644 spec/models/external_pull_request_spec.rb create mode 100644 spec/models/list_user_preference_spec.rb create mode 100644 spec/models/milestone_release_spec.rb create mode 100644 spec/models/oauth_access_token_spec.rb create mode 100644 spec/models/pages/lookup_path_spec.rb create mode 100644 spec/models/pages/virtual_domain_spec.rb create mode 100644 spec/models/project_services/data_fields_spec.rb create mode 100644 spec/policies/namespace/root_storage_statistics_policy_spec.rb create mode 100644 spec/presenters/event_presenter_spec.rb delete mode 100644 spec/rails_helper.rb create mode 100644 spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb rename spec/requests/api/{internal_spec.rb => internal/base_spec.rb} (94%) create mode 100644 spec/requests/api/internal/pages_spec.rb create mode 100644 spec/requests/api/statistics_spec.rb create mode 100644 spec/requests/projects/merge_requests_discussions_spec.rb create mode 100644 spec/requests/projects/uploads_spec.rb create mode 100644 spec/rubocop/cop/graphql/descriptions_spec.rb create mode 100644 spec/rubocop/cop/migration/add_limit_to_string_columns_spec.rb create mode 100644 spec/rubocop/cop/qa/ambiguous_page_object_name_spec.rb create mode 100644 spec/rubocop/cop/rspec/be_success_matcher_spec.rb create mode 100644 spec/rubocop/cop/scalability/file_uploads_spec.rb create mode 100644 spec/serializers/cluster_basic_entity_spec.rb create mode 100644 spec/serializers/merge_request_sidebar_basic_entity_spec.rb create mode 100644 spec/services/award_emojis/add_service_spec.rb rename spec/{finders/awarded_emoji_finder_spec.rb => services/award_emojis/collect_user_emoji_service_spec.rb} (92%) create mode 100644 spec/services/award_emojis/destroy_service_spec.rb create mode 100644 spec/services/award_emojis/toggle_service_spec.rb create mode 100644 spec/services/boards/lists/update_service_spec.rb rename spec/services/clusters/{gcp => }/kubernetes/create_or_update_namespace_service_spec.rb (88%) rename spec/services/clusters/{gcp => }/kubernetes/create_or_update_service_account_service_spec.rb (92%) rename spec/services/clusters/{gcp => }/kubernetes/fetch_kubernetes_token_service_spec.rb (97%) create mode 100644 spec/services/external_pull_requests/create_pipeline_service_spec.rb create mode 100644 spec/services/issues/zoom_link_service_spec.rb create mode 100644 spec/services/milestones/find_or_create_service_spec.rb create mode 100644 spec/services/milestones/transfer_service_spec.rb create mode 100644 spec/support/helpers/rails_helpers.rb create mode 100644 spec/support/helpers/smime_helper.rb create mode 100644 spec/support/shared_examples/award_emoji_todo_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/application_settings_shared_examples.rb rename spec/support/{ => shared_examples/controllers}/issuables_requiring_filter_shared_examples.rb (100%) create mode 100644 spec/support/shared_examples/controllers/paginated_collection_shared_examples.rb create mode 100644 spec/support/shared_examples/cycle_analytics_stage_examples.rb create mode 100644 spec/support/shared_examples/features/archive_download_buttons_shared_examples.rb rename spec/support/{active_record_enum.rb => shared_examples/models/active_record_enum_shared_examples.rb} (100%) create mode 100644 spec/support/shared_examples/quick_actions/issue/zoom_quick_actions_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/pipelines/visibility_table_examples.rb create mode 100644 spec/support/shared_examples/requests/rack_attack_shared_examples.rb create mode 100644 spec/support/shared_examples/services/count_service_shared_examples.rb create mode 100644 spec/support/shared_examples/uses_gitlab_url_blocker_examples.rb create mode 100644 spec/validators/named_ecdsa_key_validator_spec.rb create mode 100644 spec/views/projects/pages_domains/show.html.haml_spec.rb create mode 100644 spec/views/search/_results.html.haml_spec.rb create mode 100644 spec/workers/update_external_pull_requests_worker_spec.rb create mode 100644 tmp/.gitignore mode change 100644 => 100755 vendor/gitignore/C++.gitignore mode change 100644 => 100755 vendor/gitignore/Java.gitignore diff --git a/.dockerignore b/.dockerignore index b8e239e404..d556861916 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,11 +4,13 @@ # the files we need to build the QA image are in these folders. # Following are the files we need: # - ./config/initializers/0_inject_enterprise_edition_module.rb +# - ./ee/app/models/license.rb # - ./lib/gitlab.rb # - ./qa/ # - ./INSTALLATION_TYPE # - ./VERSION +/.git/ /app/ /bin/ /builds/ @@ -23,7 +25,14 @@ /db/ /doc/ /docker/ -/ee/ +/ee/bin/ +/ee/changelogs/ +/ee/config/ +/ee/db/ +/ee/fixtures/ +/ee/lib/ +/ee/locale/ +/ee/spec/ /fixtures/ /templates/ /lint/ @@ -61,6 +70,7 @@ /locale/ /log/ /modules/ +/node_modules/ /plugins/ /public/ /rubocop/ diff --git a/.eslintrc.yml b/.eslintrc.yml index 95cbc602d5..70a71baa59 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -8,7 +8,6 @@ globals: IS_EE: false plugins: - import - - html - "@gitlab/i18n" - "@gitlab/vue-i18n" settings: diff --git a/.gitattributes b/.gitattributes index 7282c9e61b..0b87a97df9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ +VERSION merge=ours Dangerfile gitlab-language=ruby db/schema.rb merge=merge_db_schema diff --git a/.gitignore b/.gitignore index cb718a6939..7310c04d11 100644 --- a/.gitignore +++ b/.gitignore @@ -61,22 +61,23 @@ eslint-report.html /shared/artifacts/ /rails_best_practices_output.html /tags -/tmp/* /vendor/bundle/* /vendor/gitaly-ruby /builds* -/shared/* /.gitlab_workhorse_secret +/.gitlab_pages_shared_secret /webpack-report/ /knapsack/ /rspec_flaky/ /locale/**/LC_MESSAGES /locale/**/*.time_stamp /.rspec -/plugins/* /.gitlab_pages_secret +/.gitlab_smime_key +/.gitlab_smime_cert package-lock.json /junit_*.xml /coverage-frontend/ jsdoc/ -**/tmp/rubocop_cache/** \ No newline at end of file +**/tmp/rubocop_cache/** +.overcommit.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f926cbc293..6c10c4853c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,15 @@ image: "dev.gitlab.org:5005/gitlab/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: + - prepare + - quick-test + - test + - review-prepare + - review + - qa + - post-test + - pages + variables: RAILS_ENV: "test" NODE_ENV: "test" @@ -8,28 +18,15 @@ variables: GIT_SUBMODULE_STRATEGY: "none" GET_SOURCES_ATTEMPTS: "3" KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master.json + EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH: knapsack/${CI_PROJECT_NAME}/rspec_report-master-ee.json FLAKY_RSPEC_SUITE_REPORT_PATH: rspec_flaky/report-suite.json BUILD_ASSETS_IMAGE: "false" - -before_script: - - date - - source scripts/utils.sh - - source scripts/prepare_build.sh - - date + ES_JAVA_OPTS: "-Xms256m -Xmx256m" + ELASTIC_URL: "http://elastic:changeme@docker.elastic.co-elasticsearch-elasticsearch:9200" after_script: - date -stages: - - build - - prepare - - merge - - test - - review - - qa - - post-test - - pages - include: - local: .gitlab/ci/global.gitlab-ci.yml - local: .gitlab/ci/cng.gitlab-ci.yml diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index dae3c349ff..0f2dd081e9 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -9,12 +9,13 @@ app/assets/ @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter *.scss @annabeldunstone @ClemMakesApps @fatihacet @filipa @mikegreiling @timzallmann @kushalpandya @pslaughter -# Maintainers from the Database team should review changes in `db/` -db/ @gl-database -lib/gitlab/background_migration/ @gl-database -lib/gitlab/database/ @gl-database -lib/gitlab/sql/ @gl-database -/ee/db/ @gl-database +# Database maintainers should review changes in `db/` +db/ @gitlab-org/maintainers/database +lib/gitlab/background_migration/ @gitlab-org/maintainers/database +lib/gitlab/database/ @gitlab-org/maintainers/database +lib/gitlab/sql/ @gitlab-org/maintainers/database +lib/gitlab/github_import/ @gitlab-org/maintainers/database +/ee/db/ @gitlab-org/maintainers/database # Feature specific owners /ee/lib/gitlab/code_owners/ @reprazent diff --git a/.gitlab/ci/cng.gitlab-ci.yml b/.gitlab/ci/cng.gitlab-ci.yml index d624e8d09f..35859a1ab3 100644 --- a/.gitlab/ci/cng.gitlab-ci.yml +++ b/.gitlab/ci/cng.gitlab-ci.yml @@ -1,16 +1,16 @@ cloud-native-image: image: ruby:2.6-alpine - before_script: [] dependencies: [] stage: post-test allow_failure: true variables: GIT_DEPTH: "1" - cache: {} when: manual script: - install_gitlab_gem - CNG_PROJECT_PATH="gitlab-org/build/CNG" BUILD_TRIGGER_TOKEN=$CI_JOB_TOKEN ./scripts/trigger-build cng only: - - tags@gitlab-org/gitlab-ce - - tags@gitlab-org/gitlab-ee + 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 39ae62a43c..87023da3c2 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -1,76 +1,69 @@ -.review-docs: &review-docs - extends: .single-script-job-dedicated-runner +.review-docs: + extends: + - .default-tags + - .default-retry + - .only-docs-changes + only: + refs: + - merge_requests + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + image: ruby:2.6-alpine + stage: review + dependencies: [] variables: - SCRIPT_NAME: trigger-build-docs + GIT_STRATEGY: none environment: name: review-docs/$CI_COMMIT_REF_SLUG # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables - # Discussion: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14236/diffs#note_40140693 + # Discussion: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14236/diffs#note_40140693 url: http://$CI_ENVIRONMENT_SLUG.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX on_stop: review-docs-cleanup - -# Trigger a manual docs build in gitlab-docs only on non docs-only branches. -# Useful to preview the docs changes live. -review-docs-deploy-manual: - extends: - - .review-docs - - .no-docs-and-no-qa - stage: review - script: + before_script: + # We don't clone the repo by using GIT_STRATEGY: none and only download the + # single script we need here so it's much faster than cloning. + - apk add --update openssl + - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/trigger-build-docs + - chmod 755 trigger-build-docs - gem install gitlab --no-document - - ./$SCRIPT_NAME deploy - when: manual - only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee # Always trigger a docs build in gitlab-docs only on docs-only branches. # Useful to preview the docs changes live. review-docs-deploy: - <<: *review-docs - stage: review + extends: .review-docs script: - - gem install gitlab --no-document - - ./$SCRIPT_NAME deploy - only: - - /(^docs[\/-].+|.+-docs$)/@gitlab-org/gitlab-ce - - /(^docs[\/-].+|.+-docs$)/@gitlab-org/gitlab-ee - except: - - /(^qa[\/-].*|.*-qa$)/ + - ./trigger-build-docs deploy + when: manual # Cleanup remote environment of gitlab-docs review-docs-cleanup: - <<: *review-docs - stage: review + extends: .review-docs environment: name: review-docs/$CI_COMMIT_REF_SLUG action: stop script: - - gem install gitlab --no-document - - ./$SCRIPT_NAME cleanup + - ./trigger-build-docs cleanup when: manual - only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee docs lint: - extends: .dedicated-runner + extends: + - .default-tags + - .default-retry + - .default-only + - .only-docs-changes image: "registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-docs-lint" stage: test - cache: {} dependencies: [] - before_script: [] script: - scripts/lint-doc.sh + # Lint Markdown + - markdownlint --config .markdownlint.json 'doc/**/*.md' + # Prepare docs for build - mv doc/ /tmp/gitlab-docs/content/$DOCS_GITLAB_REPO_SUFFIX - cd /tmp/gitlab-docs - # Lint Markdown - - bundle exec mdl content/$DOCS_GITLAB_REPO_SUFFIX -c $CI_PROJECT_DIR/.mdlrc # Build HTML from Markdown - bundle exec nanoc # Check the internal links - bundle exec nanoc check internal_links # Check the internal anchor links - bundle exec nanoc check internal_anchors - except: - - /(^qa[\/-].*|.*-qa$)/ diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 5c3278fcf5..2f53c6e3fc 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -1,23 +1,22 @@ -.assets-compile-cache: &assets-compile-cache +.assets-compile-cache: cache: - key: "assets-compile:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v6" paths: - vendor/ruby/ - .yarn-cache/ - tmp/cache/assets/sprockets -.use-pg: &use-pg - services: - - name: postgres:9.6.14 - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - - name: redis:alpine - .gitlab:assets:compile-metadata: - <<: *assets-compile-cache - extends: .dedicated-no-docs-pull-cache-job + extends: + - .default-tags + - .default-retry + - .default-only + - .default-before_script + - .assets-compile-cache + - .only-code-qa-changes image: dev.gitlab.org:5005/gitlab/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 - dependencies: - - setup-test-env + stage: test + dependencies: ["setup-test-env"] + needs: ["setup-test-env"] services: - docker:19.03.0-dind variables: @@ -30,6 +29,14 @@ NODE_OPTIONS: --max_old_space_size=3584 DOCKER_DRIVER: overlay2 DOCKER_HOST: tcp://docker:2375 + cache: + key: "assets-compile:production:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v6" + artifacts: + name: webpack-report + expire_in: 31d + paths: + - webpack-report/ + - public/assets/ script: - node --version - retry yarn install --frozen-lockfile --production --cache-folder .yarn-cache --prefer-offline @@ -38,47 +45,39 @@ - time scripts/build_assets_image - scripts/clean-old-cached-assets - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here - # Play dependent manual jobs - - install_api_client_dependencies_with_apt - - play_job "review-build-cng" || true # this job might not exist so ignore the failure if it cannot be played - - play_job "schedule:review-build-cng" || true # this job might not exist so ignore the failure if it cannot be played - artifacts: - name: webpack-report - expire_in: 31d - paths: - - webpack-report/ - - public/assets/ only: - - /.+/@gitlab-org/gitlab-ce - - /.+/@gitlab-org/gitlab-ee - - /.+/@gitlab/gitlabhq - - /.+/@gitlab/gitlab-ee + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + - $CI_SERVER_HOST == "dev.gitlab.org" tags: - - docker - gitlab-org + - docker gitlab:assets:compile: extends: .gitlab:assets:compile-metadata + only: + refs: + - master cache: policy: pull-push - only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee gitlab:assets:compile pull-cache: extends: .gitlab:assets:compile-metadata - cache: - policy: pull except: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - /(^docs[\/-].+|.+-docs$)/ + - master + cache: + policy: pull .compile-assets-metadata: - extends: .dedicated-runner - <<: *use-pg - <<: *assets-compile-cache + extends: + - .default-tags + - .default-retry + - .default-only + - .default-before_script + - .assets-compile-cache + - .only-code-qa-changes + - .use-pg stage: prepare script: - node --version @@ -89,6 +88,8 @@ gitlab:assets:compile pull-cache: variables: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 + cache: + key: "assets-compile:test:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v6" artifacts: expire_in: 7d paths: @@ -97,29 +98,33 @@ gitlab:assets:compile pull-cache: compile-assets: extends: .compile-assets-metadata + only: + refs: + - master cache: policy: pull-push - only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee compile-assets pull-cache: extends: .compile-assets-metadata - cache: - policy: pull except: refs: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - /(^docs[\/-].+|.+-docs$)/ + - master + cache: + policy: pull + +.only-code-frontend-job-base: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script + - .only-code-changes + - .use-pg + dependencies: ["compile-assets", "compile-assets pull-cache", "setup-test-env"] karma: - extends: .dedicated-no-docs-pull-cache-job - <<: *use-pg - dependencies: - - compile-assets - - compile-assets pull-cache - - setup-test-env + extends: .only-code-frontend-job-base variables: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 @@ -142,12 +147,7 @@ karma: junit: junit_karma.xml jest: - extends: .dedicated-no-docs-and-no-qa-pull-cache-job - <<: *use-pg - dependencies: - - compile-assets - - compile-assets pull-cache - - setup-test-env + extends: .only-code-frontend-job-base script: - scripts/gitaly-test-spawn - date @@ -170,36 +170,42 @@ jest: - tmp/jest/jest/ policy: pull-push -qa:internal: - extends: .dedicated-no-docs-no-db-pull-cache-job - services: [] - script: +.qa-job-base: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .only-code-qa-changes + dependencies: [] + stage: test + before_script: - cd qa/ - bundle install + +qa:internal: + extends: .qa-job-base + script: - bundle exec rspec - dependencies: - - setup-test-env qa:selectors: - extends: .dedicated-no-docs-no-db-pull-cache-job - services: [] + extends: .qa-job-base script: - - cd qa/ - - bundle install - bundle exec bin/qa Test::Sanity::Selectors - dependencies: - - setup-test-env -.qa-frontend-node: &qa-frontend-node - extends: .dedicated-no-docs-no-db-pull-cache-job - stage: test +.qa-frontend-node: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .only-code-changes + dependencies: [] cache: key: "$CI_JOB_NAME" paths: - .yarn-cache/ policy: pull-push - dependencies: [] - before_script: [] script: - date - yarn install --frozen-lockfile --cache-folder .yarn-cache --prefer-offline @@ -207,44 +213,28 @@ qa:selectors: - yarn run webpack-prod qa-frontend-node:8: - <<: *qa-frontend-node + extends: .qa-frontend-node image: node:carbon qa-frontend-node:10: - <<: *qa-frontend-node + extends: .qa-frontend-node image: node:dubnium qa-frontend-node:latest: - <<: *qa-frontend-node + extends: .qa-frontend-node image: node:latest allow_failure: true -lint:javascript:report: - extends: .dedicated-no-docs-no-db-pull-cache-job - stage: post-test - dependencies: [] - before_script: [] +webpack-dev-server: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .only-code-changes + dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"] + variables: + WEBPACK_MEMORY_TEST: "true" script: - - date - - yarn run eslint-report || true # ignore exit code - artifacts: - name: eslint-report - expire_in: 31d - paths: - - eslint-report.html - -jsdoc: - extends: .dedicated-no-docs-no-db-pull-cache-job - stage: post-test - dependencies: - - compile-assets - - compile-assets pull-cache - before_script: [] - script: - - date - - yarn run jsdoc || true # ignore exit code - artifacts: - name: jsdoc - expire_in: 31d - paths: - - jsdoc/ + - node --version + - node --expose-gc node_modules/.bin/webpack-dev-server --config config/webpack.config.js diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index 78ef346d41..ec842856d0 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -1,78 +1,125 @@ -.dedicated-runner: +.default-tags: + tags: + - gitlab-org + +.default-retry: retry: max: 2 # This is confusing but this means "3 runs at max". when: - unknown_failure - api_failure - runner_system_failure - tags: - - gitlab-org -.default-cache: &default-cache - key: "debian-stretch-ruby-2.6.3-node-12.x" - paths: - - vendor/ruby - - .yarn-cache/ - - vendor/gitaly-ruby - -.dedicated-runner-default-cache: - extends: .dedicated-runner - cache: - <<: *default-cache +.default-before_script: + before_script: + - date + - source scripts/utils.sh + - source scripts/prepare_build.sh + - date # Jobs that only need to pull cache -.dedicated-pull-cache-job: - extends: .dedicated-runner +.default-cache: cache: - <<: *default-cache + key: "debian-stretch-ruby-2.6.3-node-12.x" + paths: + - vendor/ruby + - .yarn-cache/ + - vendor/gitaly-ruby policy: pull - stage: test -.no-docs: +.default-only: + only: + refs: + - master + - /^[\d-]+-stable(-ee)?$/ + - /^\d+-\d+-auto-deploy-\d+$/ + - 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,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-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,public,rubocop,scripts,spec,symbol,vendor}/**/*" + - "doc/README.md" # Some RSpec test rely on this file + - ".dockerignore" + - "qa/**/*" + +.only-review: + only: + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + kubernetes: active except: refs: - - /(^docs[\/-].+|.+-docs$)/ + - master + - /^\d+-\d+-auto-deploy-\d+$/ -.no-docs-and-no-qa: - except: +.only-review-schedules: + only: refs: - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ + - schedules + variables: + - $REVIEW_APP_CLEANUP && $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + kubernetes: active -.dedicated-no-docs-pull-cache-job: - extends: - - .dedicated-pull-cache-job - - .no-docs +.use-pg: + services: + - name: postgres:9.6.14 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine -.dedicated-no-docs-and-no-qa-pull-cache-job: - extends: - - .dedicated-pull-cache-job - - .no-docs-and-no-qa +.use-pg-10: + image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33" + services: + - name: postgres:10.9 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine -# Jobs that do not need a DB -.dedicated-no-docs-no-db-pull-cache-job: - extends: .dedicated-no-docs-pull-cache-job - variables: - SETUP_DB: "false" - -# Jobs that need a dedicated runner, with no cache -.dedicated-no-docs: - extends: - - .dedicated-runner - - .no-docs - -.single-script-job-dedicated-runner: - extends: .dedicated-runner - image: ruby:2.6-alpine - stage: test - cache: {} - dependencies: [] - variables: - GIT_STRATEGY: none - before_script: - # We don't clone the repo by using GIT_STRATEGY: none and only download the - # single script we need here so it's much faster than cloning. - - export SCRIPT_NAME="${SCRIPT_NAME:-$CI_JOB_NAME}" - - apk add --update openssl - - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/$SCRIPT_NAME - - chmod 755 $(basename $SCRIPT_NAME) +.only-ee: + only: + variables: + - $CI_PROJECT_NAME == "gitlab" + - $CI_PROJECT_NAME == "gitlab-ee" # Support former project name for forks/mirrors diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index 9923732e58..d990c7eefa 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -1,5 +1,16 @@ +.only-code-memory-job-base: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script + - .only-code-changes + memory-static: - extends: .dedicated-no-docs-no-db-pull-cache-job + extends: .only-code-memory-job-base + variables: + SETUP_DB: "false" script: # Uses two different reports from the 'derailed_benchmars' gem. @@ -23,7 +34,9 @@ memory-static: # The application is booted in `production` environment. # All tests are run without a webserver (directly using Rack::Mock by default). memory-on-boot: - extends: .rspec-metadata-pg-10 + extends: + - .only-code-memory-job-base + - .use-pg-10 variables: NODE_ENV: "production" RAILS_ENV: "production" diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index f7b18b809b..a59b84fe1c 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -1,26 +1,25 @@ pages: - extends: .dedicated-no-docs-no-db-pull-cache-job - before_script: [] + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .only-code-qa-changes + only: + refs: + - master + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" stage: pages - dependencies: - - coverage - - karma - - gitlab:assets:compile - - lint:javascript:report - - jsdoc + dependencies: ["coverage", "karma", "gitlab:assets:compile"] script: - mv public/ .public/ - mkdir public/ - mv coverage/ public/coverage-ruby/ || true - mv coverage-javascript/ public/coverage-javascript/ || true - - mv eslint-report.html public/ || true - mv webpack-report/ public/webpack-report/ || true - cp .public/assets/application-*.css public/application.css || true - cp .public/assets/application-*.css.gz public/application.css.gz || true - - mv jsdoc/ public/jsdoc/ || true artifacts: paths: - public - only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index dcc681294d..013af3d61a 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -1,9 +1,8 @@ .package-and-qa-base: + extends: .default-only image: ruby:2.6-alpine - stage: review # So even if review-deploy failed we can still run this - before_script: [] + stage: qa dependencies: [] - cache: {} variables: GIT_DEPTH: "1" retry: 0 @@ -12,18 +11,36 @@ - install_gitlab_gem - ./scripts/trigger-build omnibus only: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + +package-and-qa-manual: + extends: + - .package-and-qa-base + - .only-code-changes + except: + refs: + - master + when: manual + needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] + +package-and-qa-manual:master: + extends: + - .package-and-qa-base + - .only-code-qa-changes + only: + refs: + - master@gitlab-org/gitlab-foss + - master@gitlab-org/gitlab + when: manual + needs: ["build-qa-image", "gitlab:assets:compile"] package-and-qa: - extends: .package-and-qa-base - when: manual + extends: + - .package-and-qa-base + - .only-qa-changes except: - - /(^qa[\/-].*|.*-qa$)/ - -package-and-qa-always: - extends: .package-and-qa-base + refs: + - master + needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] allow_failure: true - only: - - /(^qa[\/-].*|.*-qa$)/@gitlab-org/gitlab-ce - - /(^qa[\/-].*|.*-qa$)/@gitlab-org/gitlab-ee diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 50476b43dd..04e8105103 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -1,52 +1,40 @@ -.use-pg: &use-pg - services: - - name: postgres:9.6.14 - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - - name: redis:alpine - -.use-pg-10: &use-pg-10 - services: - - name: postgres:10.9 - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - - name: redis:alpine - -.only-schedules-master: &only-schedules-master +.only-master: only: - - schedules@gitlab-org/gitlab-ce - - schedules@gitlab-org/gitlab-ee - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - master@gitlab/gitlabhq - - master@gitlab/gitlab-ee + refs: + - master -.gitlab-setup: &gitlab-setup +.rake-exec: extends: - - .dedicated-no-docs-and-no-qa-pull-cache-job - - .use-pg + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script variables: SETUP_DB: "false" - script: - # Manually clone gitlab-test and only seed this project in - # db/fixtures/development/04_project.rb thanks to SIZE=1 below - - git clone https://gitlab.com/gitlab-org/gitlab-test.git - /home/git/repositories/gitlab-org/gitlab-test.git - - scripts/gitaly-test-spawn - - force=yes SIZE=1 FIXTURE_PATH="db/fixtures/development" bundle exec rake gitlab:setup - artifacts: - when: on_failure - expire_in: 1d - paths: - - log/development.log - -.rake-exec: &rake-exec - extends: .dedicated-no-docs-no-db-pull-cache-job script: - bundle exec rake $CI_JOB_NAME -.rspec-metadata: &rspec-metadata +.only-code-rails-job-base: extends: - - .dedicated-pull-cache-job - - .no-docs-and-no-qa + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script + - .only-code-changes + +.only-code-qa-rails-job-base: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script + - .only-code-qa-changes + +.rspec-base: + extends: .only-code-rails-job-base stage: test script: - JOB_NAME=( $CI_JOB_NAME ) @@ -83,29 +71,133 @@ reports: junit: junit_rspec.xml -.rspec-metadata-pg: &rspec-metadata-pg - <<: *rspec-metadata - <<: *use-pg +.rspec-base-pg: + extends: + - .rspec-base + - .use-pg -.rspec-metadata-pg-10: &rspec-metadata-pg-10 - <<: *rspec-metadata - <<: *use-pg-10 - image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.22-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.33" +.rspec-base-pg-10: + extends: + - .rspec-base + - .use-pg-10 -# DB migration, rollback, and seed jobs -.db-migrate-reset: &db-migrate-reset - extends: .dedicated-no-docs-and-no-qa-pull-cache-job +setup-test-env: + extends: + - .only-code-qa-rails-job-base + - .use-pg + stage: prepare script: - - bundle exec rake db:migrate:reset - dependencies: - - setup-test-env + - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' + - scripts/gitaly-test-build # Do not use 'bundle exec' here + artifacts: + expire_in: 7d + paths: + - tmp/tests + - config/secrets.yml + - vendor/gitaly-ruby -.migration-paths: &migration-paths - extends: .dedicated-no-docs-and-no-qa-pull-cache-job +rspec unit pg: + extends: .rspec-base-pg + parallel: 20 + +rspec integration pg: + extends: .rspec-base-pg + parallel: 6 + +rspec system pg: + extends: .rspec-base-pg + parallel: 24 + +rspec unit pg-10: + extends: + - .rspec-base-pg-10 + - .only-master + parallel: 20 + +rspec integration pg-10: + extends: + - .rspec-base-pg-10 + - .only-master + parallel: 6 + +rspec system pg-10: + extends: + - .rspec-base-pg-10 + - .only-master + parallel: 24 + +rspec-fast-spec-helper: + extends: .rspec-base-pg + script: + - bundle exec rspec spec/fast_spec_helper.rb + +rspec quarantine pg: + extends: + - .rspec-base-pg + - .only-master + script: + - export NO_KNAPSACK=1 CACHE_CLASSES=true + - scripts/gitaly-test-spawn + - bin/rspec --color --format documentation --tag quarantine -- spec/ + allow_failure: true + +static-analysis: + extends: .only-code-qa-rails-job-base + dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"] variables: SETUP_DB: "false" script: - - git fetch https://gitlab.com/gitlab-org/gitlab-ce.git v11.11.0 + - scripts/static-analysis + cache: + key: "debian-stretch-ruby-2.6.3-and-rubocop" + paths: + - vendor/ruby + - tmp/rubocop_cache + policy: pull-push + +downtime_check: + extends: + - .rake-exec + - .only-code-changes + except: + refs: + - master + - tags + variables: + - $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ + stage: test + dependencies: ["setup-test-env"] + needs: ["setup-test-env"] + +.db-job-base: + extends: + - .only-code-rails-job-base + - .use-pg + stage: test + dependencies: ["setup-test-env"] + needs: ["setup-test-env"] + +# DB migration, rollback, and seed jobs +db:migrate:reset: + extends: .db-job-base + script: + - bundle exec rake db:migrate:reset + +db:check-schema: + extends: .db-job-base + script: + - source scripts/schema_changed.sh + +db:migrate-from-v11.11.0: + extends: .db-job-base + variables: + SETUP_DB: "false" + script: + - export PROJECT_TO_CHECKOUT="gitlab-foss" + - export TAG_TO_CHECKOUT="v11.11.0" + - '[[ ! -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"' + - '[[ ! -d "ee/" ]] || export TAG_TO_CHECKOUT="v11.11.0-ee"' + - git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT - git checkout -f FETCH_HEAD - sed -i "s/gem 'oj', '~> 2.17.4'//" Gemfile - sed -i "s/gem 'bootsnap', '~> 1.0.0'/gem 'bootsnap'/" Gemfile @@ -121,155 +213,32 @@ - . scripts/prepare_build.sh - date - bundle exec rake db:migrate - dependencies: - - setup-test-env -setup-test-env: - extends: - - .dedicated-runner-default-cache - - .no-docs - - .use-pg - stage: prepare - script: - - bundle exec ruby -Ispec -e 'require "spec_helper" ; TestEnv.init' - - scripts/gitaly-test-build # Do not use 'bundle exec' here - artifacts: - expire_in: 7d - paths: - - tmp/tests - - config/secrets.yml - - vendor/gitaly-ruby - -rspec unit pg: - <<: *rspec-metadata-pg - parallel: 20 - -rspec integration pg: - <<: *rspec-metadata-pg - parallel: 6 - -rspec system pg: - <<: *rspec-metadata-pg - parallel: 24 - -rspec unit pg-10: - <<: *rspec-metadata-pg-10 - <<: *only-schedules-master - parallel: 20 - -rspec integration pg-10: - <<: *rspec-metadata-pg-10 - <<: *only-schedules-master - parallel: 6 - -rspec system pg-10: - <<: *rspec-metadata-pg-10 - <<: *only-schedules-master - parallel: 24 - -rspec-fast-spec-helper: - <<: *rspec-metadata-pg - script: - - bundle exec rspec spec/fast_spec_helper.rb - -.rspec-quarantine: &rspec-quarantine - <<: *only-schedules-master - script: - - export CACHE_CLASSES=true - - scripts/gitaly-test-spawn - - bin/rspec --color --format documentation --tag quarantine -- spec/ - -rspec quarantine pg: - <<: *rspec-metadata-pg - <<: *rspec-quarantine - allow_failure: true - -static-analysis: - extends: .dedicated-no-docs-no-db-pull-cache-job - dependencies: - - compile-assets - - compile-assets pull-cache - - setup-test-env - script: - - scripts/static-analysis - cache: - key: "debian-stretch-ruby-2.6.3-node-12.x-and-rubocop" - paths: - - vendor/ruby - - .yarn-cache/ - - tmp/rubocop_cache - policy: pull-push - -downtime_check: - <<: *rake-exec - except: - refs: - - master - - tags - - /^[\d-]+-stable(-ee)?$/ - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ - dependencies: - - setup-test-env - -ee_compat_check: - <<: *rake-exec - dependencies: [] - except: - refs: - - master - - tags - - /[\d-]+-stable(-ee)?/ - - /^security-/ - - branches@gitlab-org/gitlab-ee - - branches@gitlab/gitlab-ee - - /(^docs[\/-].+|.+-docs$)/ - retry: 0 - artifacts: - name: "${CI_JOB_NAME}_${CI_COMIT_REF_NAME}_${CI_COMMIT_SHA}" - when: always - expire_in: 10d - paths: - - ee_compat_check/patches/*.patch - -db:migrate:reset-pg: - <<: *db-migrate-reset - <<: *use-pg - -db:check-schema-pg: - <<: *db-migrate-reset - <<: *use-pg - script: - - source scripts/schema_changed.sh - -migration:path-pg: - <<: *migration-paths - <<: *use-pg - -.db-rollback: &db-rollback - extends: .dedicated-no-docs-and-no-qa-pull-cache-job +db:rollback: + extends: .db-job-base script: - bundle exec rake db:migrate VERSION=20180101160629 - bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true - dependencies: - - setup-test-env -db:rollback-pg: - <<: *db-rollback - <<: *use-pg - -gitlab:setup-pg: - <<: *gitlab-setup - <<: *use-pg - dependencies: - - setup-test-env +gitlab:setup: + extends: .db-job-base + variables: + SETUP_DB: "false" + script: + # Manually clone gitlab-test and only seed this project in + # db/fixtures/development/04_project.rb thanks to SIZE=1 below + - git clone https://gitlab.com/gitlab-org/gitlab-test.git + /home/git/repositories/gitlab-org/gitlab-test.git + - scripts/gitaly-test-spawn + - force=yes SIZE=1 FIXTURE_PATH="db/fixtures/development" bundle exec rake gitlab:setup + artifacts: + when: on_failure + expire_in: 1d + paths: + - log/development.log coverage: - # Don't include dedicated-no-docs-no-db-pull-cache-job here since we need to - # download artifacts from all the rspec jobs instead of from setup-test-env only - extends: - - .dedicated-runner-default-cache - - .no-docs-and-no-qa + extends: .only-code-rails-job-base cache: policy: pull variables: @@ -286,3 +255,115 @@ coverage: - coverage/index.html - coverage/assets/ - tmp/memory_test/ + +## EE-specific content +.rspec-base-ee: + extends: + - .rspec-base + - .only-ee + script: + - JOB_NAME=( $CI_JOB_NAME ) + - TEST_TOOL=${JOB_NAME[0]} + - TEST_LEVEL=${JOB_NAME[1]} + - DATABASE=${JOB_NAME[2]} + - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_ee_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec + - export CACHE_CLASSES=true + - cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} + - scripts/gitaly-test-spawn + - date + - 'export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new(%(ee/)).pattern(:${TEST_LEVEL})")' + - mkdir -p tmp/memory_test + - export MEMORY_TEST_PATH="tmp/memory_test/ee_${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv" + - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo" + - date + +.rspec-base-pg-ee: + extends: .rspec-base-ee + services: + - name: postgres:9.6 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine + - name: docker.elastic.co/elasticsearch/elasticsearch:5.6.12 + +rspec unit pg ee: + extends: .rspec-base-pg-ee + parallel: 7 + +rspec integration pg ee: + extends: .rspec-base-pg-ee + parallel: 3 + +rspec system pg ee: + extends: .rspec-base-pg-ee + parallel: 5 + +.rspec-base-geo: + extends: .rspec-base-ee + parallel: 3 + script: + - JOB_NAME=( $CI_JOB_NAME ) + - TEST_TOOL=${JOB_NAME[0]} + - TEST_LEVEL=${JOB_NAME[1]} + - DATABASE=${JOB_NAME[2]} + - export KNAPSACK_TEST_FILE_PATTERN="ee/spec/**{,/*/**}/*_spec.rb" KNAPSACK_GENERATE_REPORT=true CACHE_CLASSES=true + - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - cp ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} ${KNAPSACK_REPORT_PATH} + - source scripts/prepare_postgres_fdw.sh + - scripts/gitaly-test-spawn + - mkdir -p tmp/memory_test + - export MEMORY_TEST_PATH="tmp/memory_test/ee_${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_memory.csv" + - knapsack rspec "-Ispec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag geo" + +rspec geo pg ee: + extends: + - .rspec-base-geo + - .use-pg + except: + variables: + - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/ + +rspec geo pg-10 ee: + extends: + - .rspec-base-geo + - .use-pg-10 + except: + variables: + - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/ + +quick-rspec geo pg ee: + extends: + - .rspec-base-geo + - .use-pg + stage: quick-test + only: + variables: + - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/ + +quick-rspec geo pg-10 ee: + extends: + - .rspec-base-geo + - .use-pg-10 + stage: quick-test + only: + variables: + - $CI_COMMIT_REF_NAME =~ /(^geo[\/-].*|.*-geo$)/ + +rspec quarantine pg ee: + extends: + - rspec quarantine pg + - .only-ee + script: + - export NO_KNAPSACK=1 CACHE_CLASSES=true + - scripts/gitaly-test-spawn + - bin/rspec --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag quarantine -- ee/spec/ + +db:rollback geo: + extends: + - db:rollback + - .only-ee + script: + - bundle exec rake geo:db:migrate VERSION=20170627195211 + - bundle exec rake geo:db:migrate + +## END of EE-specific content diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index ca55bbd32a..38da73034d 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -1,26 +1,236 @@ -include: - - template: Code-Quality.gitlab-ci.yml - - template: Security/SAST.gitlab-ci.yml - - template: Security/Dependency-Scanning.gitlab-ci.yml +# include: +# - template: Code-Quality.gitlab-ci.yml +# - template: Security/SAST.gitlab-ci.yml +# - template: Security/Dependency-Scanning.gitlab-ci.yml +# - template: Security/DAST.gitlab-ci.yml +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. code_quality: - extends: .dedicated-no-docs - # gitlab-org runners set `privileged: false` but we need to have it set to true - # since we're using Docker in Docker - tags: [] - before_script: [] - cache: {} - -sast: - extends: .dedicated-no-docs - tags: [] - before_script: [] - cache: {} + extends: + - .default-retry + - .default-only + - .only-code-changes + stage: test + image: docker:stable + allow_failure: true + services: + - docker:stable-dind variables: - SAST_BRAKEMAN_LEVEL: 2 + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + script: + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - docker run + --env SOURCE_CODE="$PWD" + --volume "$PWD":/code + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/codequality:12-0-stable" /code + artifacts: + reports: + codequality: gl-code-quality-report.json + expire_in: 1 week + dependencies: [] + except: + variables: + - $CODE_QUALITY_DISABLED +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. +sast: + extends: + - .default-retry + - .default-only + - .only-code-changes + stage: test + image: docker:stable + variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + SAST_BRAKEMAN_LEVEL: 2 + SAST_EXCLUDED_PATHS: qa,spec,doc,ee/spec + allow_failure: true + services: + - docker:stable-dind + script: + - export SAST_VERSION=${SP_VERSION:-$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')} + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - | # this is required to avoid undesirable reset of Docker image ENV variables being set on build stage + function propagate_env_vars() { + CURRENT_ENV=$(printenv) + + for VAR_NAME; do + echo $CURRENT_ENV | grep "${VAR_NAME}=" > /dev/null && echo "--env $VAR_NAME " + done + } + - | + docker run \ + $(propagate_env_vars \ + SAST_BANDIT_EXCLUDED_PATHS \ + SAST_ANALYZER_IMAGES \ + SAST_ANALYZER_IMAGE_PREFIX \ + SAST_ANALYZER_IMAGE_TAG \ + SAST_DEFAULT_ANALYZERS \ + SAST_PULL_ANALYZER_IMAGES \ + SAST_BRAKEMAN_LEVEL \ + SAST_FLAWFINDER_LEVEL \ + SAST_GITLEAKS_ENTROPY_LEVEL \ + SAST_GOSEC_LEVEL \ + SAST_EXCLUDED_PATHS \ + SAST_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \ + SAST_PULL_ANALYZER_IMAGE_TIMEOUT \ + SAST_RUN_ANALYZER_TIMEOUT \ + SAST_JAVA_VERSION \ + ANT_HOME \ + ANT_PATH \ + GRADLE_PATH \ + JAVA_OPTS \ + JAVA_PATH \ + JAVA_8_VERSION \ + JAVA_11_VERSION \ + MAVEN_CLI_OPTS \ + MAVEN_PATH \ + MAVEN_REPO_PATH \ + SBT_PATH \ + FAIL_NEVER \ + ) \ + --volume "$PWD:/code" \ + --volume /var/run/docker.sock:/var/run/docker.sock \ + "registry.gitlab.com/gitlab-org/security-products/sast:$SAST_VERSION" /app/bin/run /code + artifacts: + expire_in: 7 days + paths: + - gl-sast-report.json + reports: + sast: gl-sast-report.json + dependencies: [] + only: + variables: + - $GITLAB_FEATURES =~ /\bsast\b/ + except: + variables: + - $SAST_DISABLED + +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. dependency_scanning: - extends: .dedicated-no-docs - tags: [] - before_script: [] - cache: {} + extends: + - .default-retry + - .default-only + - .only-code-changes + stage: test + image: docker:stable + variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + allow_failure: true + services: + - docker:stable-dind + script: + - export DS_VERSION=${SP_VERSION:-$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')} + - | + if ! docker info &>/dev/null; then + if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then + export DOCKER_HOST='tcp://localhost:2375' + fi + fi + - | # this is required to avoid undesirable reset of Docker image ENV variables being set on build stage + function propagate_env_vars() { + CURRENT_ENV=$(printenv) + + for VAR_NAME; do + echo $CURRENT_ENV | grep "${VAR_NAME}=" > /dev/null && echo "--env $VAR_NAME " + done + } + - | + docker run \ + $(propagate_env_vars \ + DS_ANALYZER_IMAGES \ + DS_ANALYZER_IMAGE_PREFIX \ + DS_ANALYZER_IMAGE_TAG \ + DS_DEFAULT_ANALYZERS \ + DS_EXCLUDED_PATHS \ + DEP_SCAN_DISABLE_REMOTE_CHECKS \ + DS_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \ + DS_PULL_ANALYZER_IMAGE_TIMEOUT \ + DS_RUN_ANALYZER_TIMEOUT \ + DS_PYTHON_VERSION \ + DS_PIP_DEPENDENCY_PATH \ + PIP_INDEX_URL \ + PIP_EXTRA_INDEX_URL \ + ) \ + --volume "$PWD:/code" \ + --volume /var/run/docker.sock:/var/run/docker.sock \ + "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$DS_VERSION" /code + artifacts: + reports: + dependency_scanning: gl-dependency-scanning-report.json + dependencies: [] + only: + variables: + - $GITLAB_FEATURES =~ /\bdependency_scanning\b/ + except: + variables: + - $DEPENDENCY_SCANNING_DISABLED + +# We need to duplicate this job's definition because it seems it's impossible to +# override an included `only.refs`. +# See https://gitlab.com/gitlab-org/gitlab/issues/31371. +dast: + extends: + - .default-retry + - .default-only + - .only-code-qa-changes + - .only-review + stage: qa + dependencies: ["review-deploy"] + before_script: + - export DAST_WEBSITE="$(cat review_app_url.txt)" + image: + name: "registry.gitlab.com/gitlab-org/security-products/dast:$CI_SERVER_VERSION_MAJOR-$CI_SERVER_VERSION_MINOR-stable" + variables: + # URL to scan: + # DAST_WEBSITE: https://example.com/ + # + # Time limit for target availability (scan is attempted even when timeout): + # DAST_TARGET_AVAILABILITY_TIMEOUT: 60 + # + # Set these variables to scan with an authenticated user: + # DAST_AUTH_URL: https://example.com/sign-in + # DAST_USERNAME: john.doe@example.com + # DAST_PASSWORD: john-doe-password + # DAST_USERNAME_FIELD: session[user] # the name of username field at the sign-in HTML form + # DAST_PASSWORD_FIELD: session[password] # the name of password field at the sign-in HTML form + # DAST_AUTH_EXCLUDE_URLS: http://example.com/sign-out,http://example.com/sign-out-2 # optional: URLs to skip during the authenticated scan; comma-separated, no spaces in between + # + # Perform ZAP Full Scan, which includes both passive and active scanning: + # DAST_FULL_SCAN_ENABLED: "true" + allow_failure: true + script: + - export DAST_WEBSITE=${DAST_WEBSITE:-$(cat environment_url.txt)} + - /analyze -t $DAST_WEBSITE + artifacts: + expire_in: 7 days + paths: + - gl-dast-report.json + reports: + dast: gl-dast-report.json + only: + variables: + - $GITLAB_FEATURES =~ /\bdast\b/ + except: + variables: + - $DAST_DISABLED diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index 3cbfa32d9a..893e3feea4 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -1,94 +1,87 @@ -.review-only: &review-only - only: - refs: - - branches@gitlab-org/gitlab-ce - - branches@gitlab-org/gitlab-ee - kubernetes: active - except: - refs: - - master - - /^\d+-\d+-auto-deploy-\d+$/ - - /(^docs[\/-].+|.+-docs$)/ - -.review-schedules-only: &review-schedules-only - only: - refs: - - schedules@gitlab-org/gitlab-ce - - schedules@gitlab-org/gitlab-ee - kubernetes: active - variables: - - $REVIEW_APP_CLEANUP - except: - refs: - - tags - - /(^docs[\/-].+|.+-docs$)/ - -.review-base: &review-base - extends: .dedicated-runner - <<: *review-only +.review-base: + extends: + - .default-tags + - .default-retry + - .default-only + - .only-review + - .only-code-qa-changes image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base - cache: {} dependencies: [] before_script: - source scripts/utils.sh -.review-docker: &review-docker - <<: *review-base +.review-docker: + extends: + - .default-tags + - .default-retry + - .default-only image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa-alpine services: - docker:19.03.0-dind tags: - gitlab-org - docker - variables: &review-docker-variables + variables: DOCKER_DRIVER: overlay2 DOCKER_HOST: tcp://docker:2375 - LATEST_QA_IMAGE: "gitlab/${CI_PROJECT_NAME}-qa:nightly" - QA_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/${CI_PROJECT_NAME}-qa:${CI_COMMIT_REF_SLUG}" + GITLAB_EDITION: "ce" build-qa-image: - <<: *review-docker - stage: test + extends: + - .review-docker + - .only-code-qa-changes + only: + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + stage: prepare script: - - time docker build --cache-from ${LATEST_QA_IMAGE} --tag ${QA_IMAGE} --file ./qa/Dockerfile ./ + - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' + - export QA_IMAGE="${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/gitlab-${GITLAB_EDITION}-qa:${CI_COMMIT_REF_SLUG}" + - time docker build --cache-from gitlab/gitlab-${GITLAB_EDITION}-qa:nightly --tag ${QA_IMAGE} --file ./qa/Dockerfile ./ - echo "${CI_JOB_TOKEN}" | docker login --username gitlab-ci-token --password-stdin ${CI_REGISTRY} - time docker push ${QA_IMAGE} -.review-build-cng-base: &review-build-cng-base +.review-build-cng-base: + extends: + - .default-only + - .only-code-qa-changes image: ruby:2.6-alpine - stage: test - when: manual + stage: review-prepare before_script: - source scripts/utils.sh - install_api_client_dependencies_with_apk - install_gitlab_gem dependencies: [] - cache: {} script: - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng review-build-cng: - <<: *review-only - <<: *review-build-cng-base + extends: + - .review-build-cng-base + - .only-review + needs: ["gitlab:assets:compile pull-cache"] schedule:review-build-cng: - <<: *review-schedules-only - <<: *review-build-cng-base + extends: + - .review-build-cng-base + - .only-review-schedules + needs: ["gitlab:assets:compile"] -.review-deploy-base: &review-deploy-base - <<: *review-base +.review-deploy-base: + extends: .review-base allow_failure: true - retry: 1 stage: review variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" GITLAB_HELM_CHART_REF: "master" - environment: &review-environment + GITLAB_EDITION: "ce" + environment: name: review/${CI_COMMIT_REF_NAME} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} on_stop: review-stop before_script: + - '[[ ! -d "ee/" ]] || export GITLAB_EDITION="ee"' - export GITLAB_SHELL_VERSION=$( ${NEW_PARALLEL_SPECS_REPORT}' - scripts/merge-html-reports ${NEW_PARALLEL_SPECS_REPORT} ${BASE_ARTIFACT_URL}${ARTIFACT_DIRS} qa/gitlab-qa-run-*/**/rspec.htm -.review-performance-base: &review-performance-base - <<: *review-qa-base +review-performance: + extends: .review-qa-base allow_failure: true before_script: - export CI_ENVIRONMENT_URL="$(cat review_app_url.txt)" @@ -230,19 +239,17 @@ parallel-spec-reports: reports: performance: performance.json -review-performance: - <<: *review-performance-base - schedule:review-performance: - <<: *review-performance-base - <<: *review-schedules-only - dependencies: - - schedule:review-deploy + extends: + - review-performance + - .only-review-schedules + dependencies: ["schedule:review-deploy"] schedule:review-cleanup: - <<: *review-base - <<: *review-schedules-only - stage: build + extends: + - .review-base + - .only-review-schedules + stage: prepare allow_failure: true environment: name: review/auto-cleanup @@ -254,22 +261,23 @@ schedule:review-cleanup: - ruby -rrubygems scripts/review_apps/automated_cleanup.rb danger-review: - extends: .dedicated-pull-cache-job + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only image: registry.gitlab.com/gitlab-org/gitlab-build-images:danger stage: test dependencies: [] - before_script: [] only: variables: - $DANGER_GITLAB_API_TOKEN except: refs: - master - - /^\d+-\d+-auto-deploy-\d+$/ - - /^[\d-]+-stable(-ee)?$/ variables: - - $CI_COMMIT_REF_NAME =~ /^ce-to-ee-.*/ - - $CI_COMMIT_REF_NAME =~ /.*-stable(-ee)?-prepare-.*/ + - $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ + - $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ script: - git version - node --version diff --git a/.gitlab/ci/setup.gitlab-ci.yml b/.gitlab/ci/setup.gitlab-ci.yml index c1fc3a893c..861f3f1af5 100644 --- a/.gitlab/ci/setup.gitlab-ci.yml +++ b/.gitlab/ci/setup.gitlab-ci.yml @@ -1,41 +1,48 @@ # Insurance in case a gem needed by one of our releases gets yanked from # rubygems.org in the future. cache gems: - extends: .dedicated-no-docs-no-db-pull-cache-job + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-before_script + - .only-code-qa-changes + stage: test + dependencies: ["setup-test-env"] + needs: ["setup-test-env"] + variables: + SETUP_DB: "false" script: - bundle package --all --all-platforms artifacts: paths: - vendor/cache only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - tags - dependencies: - - setup-test-env + refs: + - master + - tags + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + +.minimal-job: + extends: + - .default-tags + - .default-retry + - .default-only + - .only-code-changes + dependencies: [] gitlab_git_test: - extends: - - .dedicated-runner - - .no-docs-and-no-qa - variables: - SETUP_DB: "false" - before_script: [] - dependencies: [] - cache: {} + extends: .minimal-job script: - spec/support/prepare-gitlab-git-test-for-commit --check-for-changes no_ee_check: - extends: - - .dedicated-runner - - .no-docs-and-no-qa - variables: - SETUP_DB: "false" - before_script: [] - dependencies: [] - cache: {} + extends: .minimal-job script: - scripts/no-ee-check only: - - /.+/@gitlab-org/gitlab-ce + variables: + - $CI_PROJECT_NAME == "gitlab-foss" + - $CI_PROJECT_NAME == "gitlab-ce" # Support former project name for forks/mirrors + - $CI_PROJECT_NAME == "gitlabhq" # Support former project name for dev diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 4c97a4feb1..5e2523e8a9 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -1,5 +1,6 @@ -.tests-metadata-state: &tests-metadata-state - extends: .dedicated-runner +.tests-metadata-state: + extends: + - .default-only variables: TESTS_METADATA_S3_BUCKET: "gitlab-ce-cache" before_script: @@ -14,7 +15,7 @@ retrieve-tests-metadata: extends: - .tests-metadata-state - - .no-docs-and-no-qa + - .only-code-changes stage: prepare cache: key: tests_metadata @@ -27,9 +28,13 @@ retrieve-tests-metadata: - mkdir -p rspec_profiling/ - wget -O $FLAKY_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$FLAKY_RSPEC_SUITE_REPORT_PATH || rm $FLAKY_RSPEC_SUITE_REPORT_PATH - '[[ -f $FLAKY_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_SUITE_REPORT_PATH}' + - '[[ ! -d "ee/" ]] || wget -O $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH http://${TESTS_METADATA_S3_BUCKET}.s3.amazonaws.com/$EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH || rm $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH' + - '[[ ! -d "ee/" ]] || [[ -f $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH ]] || echo "{}" > ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH}' update-tests-metadata: - <<: *tests-metadata-state + extends: + - .tests-metadata-state + - .only-code-changes stage: post-test cache: key: tests_metadata @@ -42,6 +47,9 @@ update-tests-metadata: - echo "{}" > ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_node_*.json - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' + - '[[ ! -d "ee/" ]] || echo "{}" > ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH}' + - '[[ ! -d "ee/" ]] || scripts/merge-reports ${EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_ee_*node_*.json' + - '[[ ! -d "ee/" ]] || [[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $EE_KNAPSACK_RSPEC_SUITE_REPORT_PATH' - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH} @@ -49,30 +57,26 @@ update-tests-metadata: - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json - scripts/insert-rspec-profiling-data only: - - master@gitlab-org/gitlab-ce - - master@gitlab-org/gitlab-ee - - master@gitlab/gitlabhq - - master@gitlab/gitlab-ee - -flaky-examples-check: - extends: .dedicated-runner - image: ruby:2.6-alpine - services: [] - before_script: [] - variables: - SETUP_DB: "false" - USE_BUNDLE_INSTALL: "false" - NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json - stage: post-test - allow_failure: true - retry: 0 - only: - - branches - except: refs: - master - - /(^docs[\/-].+|.+-docs$)/ - - /(^qa[\/-].*|.*-qa$)/ + variables: + - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" + - $CI_SERVER_HOST == "dev.gitlab.org" + +flaky-examples-check: + extends: + - .default-tags + - .default-retry + - .default-only + - .only-code-changes + image: ruby:2.6-alpine + stage: post-test + variables: + NEW_FLAKY_SPECS_REPORT: rspec_flaky/report-new.json + allow_failure: true + only: + refs: + - merge_requests artifacts: expire_in: 30d paths: diff --git a/.gitlab/ci/yaml.gitlab-ci.yml b/.gitlab/ci/yaml.gitlab-ci.yml index b7aa418d8f..323f94b6d0 100644 --- a/.gitlab/ci/yaml.gitlab-ci.yml +++ b/.gitlab/ci/yaml.gitlab-ci.yml @@ -1,9 +1,14 @@ # Yamllint of *.yml for .gitlab-ci.yml. # This uses rules from project root `.yamllint`. lint-ci-gitlab: - extends: .dedicated-runner - before_script: [] - dependencies: [] + extends: + - .default-tags + - .default-retry + - .default-only + only: + changes: + - "**/*.yml" image: sdesbure/yamllint:latest + dependencies: [] script: - yamllint .gitlab-ci.yml .gitlab/ci lib/gitlab/ci/templates changelogs diff --git a/.gitlab/issue_templates/Feature proposal.md b/.gitlab/issue_templates/Feature proposal.md index 2ba6b68a53..2d6d03c313 100644 --- a/.gitlab/issue_templates/Feature proposal.md +++ b/.gitlab/issue_templates/Feature proposal.md @@ -5,7 +5,17 @@ ### Intended users + +* [Parker (Product Manager)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#parker-product-manager) +* [Delaney (Development Team Lead)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#delaney-development-team-lead) +* [Sasha (Software Developer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sasha-software-developer) +* [Presley (Product Designer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#presley-product-designer) +* [Devon (DevOps Engineer)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#devon-devops-engineer) +* [Sidney (Systems Administrator)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sidney-systems-administrator) +* [Sam (Security Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#sam-security-analyst) +* [Dana (Data Analyst)](https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/#dana-data-analyst) + +Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/ --> ### Further details @@ -17,12 +27,13 @@ Personas can be found at https://about.gitlab.com/handbook/marketing/product-mar ### Permissions and Security - + ### Documentation +Add all known Documentation Requirements here, per https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements +If this feature requires changing permissions, this document https://docs.gitlab.com/ee/user/permissions.html must be updated accordingly. --> ### Testing @@ -32,6 +43,10 @@ Add all known Documentation Requirements here, per https://docs.gitlab.com/ee/de +### What is the type of buyer? + + + ### Links / references /label ~feature diff --git a/.gitlab/issue_templates/Problem_Validation.md b/.gitlab/issue_templates/Problem_Validation.md new file mode 100644 index 0000000000..d2bab21eb0 --- /dev/null +++ b/.gitlab/issue_templates/Problem_Validation.md @@ -0,0 +1,41 @@ +## Problem Statement + + + +## Reach + + + + + +## Impact + + + +## Confidence + + + +## Effort + + + +/label ~"workflow::problem backlog" diff --git a/.gitlab/merge_request_templates/Documentation.md b/.gitlab/merge_request_templates/Documentation.md index ba9624aeea..e502614b5c 100644 --- a/.gitlab/merge_request_templates/Documentation.md +++ b/.gitlab/merge_request_templates/Documentation.md @@ -15,6 +15,7 @@ ## Author's checklist - [ ] Follow the [Documentation Guidelines](https://docs.gitlab.com/ee/development/documentation/) and [Style Guide](https://docs.gitlab.com/ee/development/documentation/styleguide.html). +- [ ] If applicable, update the [permissions table](https://docs.gitlab.com/ee/user/permissions.html). - [ ] Link docs to and from the higher-level index page, plus other related docs where helpful. - [ ] Apply the ~Documentation label. diff --git a/.license_encryption_key.pub b/.license_encryption_key.pub new file mode 100644 index 0000000000..68f241b974 --- /dev/null +++ b/.license_encryption_key.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Hxv3MkkZbMrKtIs6np9 +ccP4OwGBkNhIvhPjcQP48hbbascv5RqsOquQGrYSD2ZrE/kbkRdkIcoHEeTZLif+ +bDKFZFI7o5x0H92o9/GSvxHJhQ8mkmvwxD7lssGShwZEm8WG+U7BZqUV/gGmCDqe +9W8H8Fq2B0ck8IXjbQ4Zz+JlyV/NHZTZcs69plFiLKh4N6GYVftOVwSomh0bbypP +OB9WnLC7RC9a2LRrhtf8sqa2rRFmtyMMfgFFzLMzS+w+1K4+QLnWP1gKQVzaFnzk +pnwKPrqbGFYbRztIVEWbs8jPYlLkGb8ME4C84YVtQgbQcbyisU/VW3wUGkhT+J0k +xwIDAQAB +-----END PUBLIC KEY----- diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000000..f06c0766c3 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,30 @@ +{ + "default": true, + "first-header-h1": true, + "header-style": { + "style": "atx" + }, + "ul-style": { + "style": "dash" + }, + "line-length": false, + "no-duplicate-header": { + "allow_different_nesting": true + }, + "no-trailing-punctuation": { + "punctuation": ".,;:!。,;:!?" + }, + "ol-prefix": { + "style": "one" + }, + "no-inline-html": false, + "hr-style": { + "style": "---" + }, + "no-emphasis-as-heading": false, + "fenced-code-language": false, + "first-line-h1": false, + "code-block-style": { + "style": "fenced" + } +} diff --git a/.mdlrc b/.mdlrc deleted file mode 100644 index 151c54f7d4..0000000000 --- a/.mdlrc +++ /dev/null @@ -1,7 +0,0 @@ -# This is the options file for mdl, configured in .gitlab/ci/docs.gitlab-ci.yml, -# and related to the style file ./mdlrc.style - -# See https://github.com/markdownlint/markdownlint/blob/master/docs/configuration.md - -ignore_front_matter true -style File.expand_path('.mdlrc.style', __dir__) diff --git a/.mdlrc.style b/.mdlrc.style deleted file mode 100644 index b315c99e3f..0000000000 --- a/.mdlrc.style +++ /dev/null @@ -1,32 +0,0 @@ -# This is the style file for mdl, configured in .gitlab/ci/docs.gitlab-ci.yml, -# and related to the options file ./mdlrc - -# See https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md -# for more detailed information on the rules and styles. - -rule "MD001" -rule "MD002" -rule "MD003", :style => :atx -rule "MD006" -rule "MD010" -rule "MD011" -rule "MD012" -rule "MD019" -rule "MD022" -rule "MD023" -rule "MD025" -rule "MD028" -rule "MD029", :style => :one -rule "MD030" -rule "MD032" -rule "MD034" -rule "MD037" -rule "MD038" - -# Should not be used currently: - -# rule "MD004", :style => :dash # unordered list style - dash -# False positives, see https://github.com/markdownlint/markdownlint/issues/261 - -# rule "MD039" # Spaces inside link text -# Crashes when link text has certain punctuation diff --git a/.overcommit.yml.example b/.overcommit.yml.example new file mode 100644 index 0000000000..25823b9a8b --- /dev/null +++ b/.overcommit.yml.example @@ -0,0 +1,28 @@ +# Use this file to configure the Overcommit hooks you wish to use. This will +# extend the default configuration defined in: +# https://github.com/sds/overcommit/blob/master/config/default.yml +# +# At the topmost level of this YAML file is a key representing type of hook +# being run (e.g. pre-commit, commit-msg, etc.). Within each type you can +# customize each hook, such as whether to only run it on certain files (via +# `include`), whether to only display output if it fails (via `quiet`), etc. +# +# For a complete list of hooks, see: +# https://github.com/sds/overcommit/tree/master/lib/overcommit/hook +# +# For a complete list of options that you can use to customize hooks, see: +# https://github.com/sds/overcommit#configuration +# +# Uncomment the following lines to make the configuration take effect. + +PreCommit: + RuboCop: + enabled: true +# on_warn: fail # Treat all warnings as failures +# +#PostCheckout: +# ALL: # Special hook name that customizes all hooks of this type +# quiet: true # Change all post-checkout hooks to only display output on failure +# +# IndexTags: +# enabled: true # Generate a tags file with `ctags` each time HEAD changes diff --git a/.rubocop.yml b/.rubocop.yml index b75c63e1f5..693ee0ae84 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -50,7 +50,9 @@ Style/FrozenStringLiteralComment: - 'config/**/*' - 'danger/**/*' - 'db/**/*' - - 'ee/**/*' + - 'ee/db/**/*' + - 'ee/spec/**/*' + - 'ee/lib/tasks/**/*' - 'lib/tasks/**/*' - 'qa/**/*' - 'rubocop/**/*' @@ -91,6 +93,7 @@ Naming/FileName: - JSON - LDAP - SAML + - SSO - IO - HMAC - QA @@ -178,6 +181,9 @@ Gitlab/ModuleWithInstanceVariables: Gitlab/HTTParty: Enabled: true + Exclude: + - 'spec/**/*' + - 'ee/spec/**/*' GitlabSecurity/PublicSend: Enabled: true @@ -211,3 +217,73 @@ ActiveRecordAssociationReload: Exclude: - 'spec/**/*' - 'ee/spec/**/*' + +RSpec/FactoriesInMigrationSpecs: + Enabled: true + Include: + - 'spec/migrations/**/*.rb' + - 'ee/spec/migrations/**/*.rb' + - 'spec/lib/gitlab/background_migration/**/*.rb' + - 'ee/spec/lib/gitlab/background_migration/**/*.rb' + +Cop/IncludeActionViewContext: + Enabled: true + Exclude: + - 'spec/**/*' + - 'ee/spec/**/*' + +Cop/IncludeSidekiqWorker: + Enabled: true + Exclude: + - 'spec/**/*' + - 'ee/spec/**/*' + +Gitlab/Union: + Enabled: true + Exclude: + - 'spec/**/*' + - 'ee/spec/**/*' + +Cop/SidekiqOptionsQueue: + Enabled: true + Exclude: + - 'spec/**/*.rb' + - 'ee/spec/**/*.rb' + +Graphql/AuthorizeTypes: + Enabled: true + Exclude: + - 'spec/**/*.rb' + - 'ee/spec/**/*.rb' + +RSpec/EnvAssignment: + Enable: true + Include: + - 'spec/**/*.rb' + - 'ee/spec/**/*.rb' + Exclude: + - 'spec/**/fast_spec_helper.rb' + - 'ee/spec/**/fast_spec_helper.rb' + - 'spec/**/spec_helper.rb' + - 'ee/spec/**/spec_helper.rb' +RSpec/BeSuccessMatcher: + Enabled: true + Include: + - 'spec/controllers/**/*' + - 'ee/spec/controllers/**/*' + - 'spec/support/shared_examples/controllers/**/*' + - 'ee/spec/support/shared_examples/controllers/**/*' + - 'spec/support/controllers/**/*' + - 'ee/spec/support/controllers/**/*' + +Scalability/FileUploads: + Enabled: true + Include: + - 'lib/api/**/*.rb' + - 'ee/lib/api/**/*.rb' + +Graphql/Descriptions: + Enabled: true + Include: + - 'app/graphql/**/*' + - 'ee/app/graphql/**/*' diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 3898206e3b..48b840b4af 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -218,7 +218,7 @@ Lint/UriEscapeUnescape: - 'app/models/project_services/drone_ci_service.rb' - 'spec/lib/google_api/auth_spec.rb' - 'spec/requests/api/files_spec.rb' - - 'spec/requests/api/internal_spec.rb' + - 'spec/requests/api/internal/base_spec.rb' # Offense count: 1 # Configuration parameters: CheckForMethodsWithNoSideEffects. @@ -565,16 +565,6 @@ Style/EmptyLiteral: Style/EmptyMethod: Enabled: false -# Offense count: 40 -# Cop supports --auto-correct. -Style/Encoding: - Enabled: false - -# Offense count: 2 -Style/EvalWithLocation: - Exclude: - - 'app/models/service.rb' - # Offense count: 203 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle. diff --git a/16790-render-xml-artifacts.yml b/16790-render-xml-artifacts.yml new file mode 100644 index 0000000000..d9cfcc04a6 --- /dev/null +++ b/16790-render-xml-artifacts.yml @@ -0,0 +1,5 @@ +--- +title: Render xml artifact files in GitLab +merge_request: 16790 +author: +type: added diff --git a/CHANGELOG-EE.md b/CHANGELOG-EE.md new file mode 100644 index 0000000000..b5a8d2fa30 --- /dev/null +++ b/CHANGELOG-EE.md @@ -0,0 +1,5316 @@ +Please view this file on the master branch, on stable branches it's out of date. + +## 12.3.6 + +### Security (4 changes) + +- Do not index system notes for issue update. +- Redact search results based on Ability.allowed?. +- Do not show private cross references in epic notes. +- Filter out packages the user does'nt have permission to see at group level. + + +## 12.3.5 + +- No changes. + +## 12.3.4 + +### Fixed (2 changes) + +- Fix replies to service desk emails for projects with issue access as Only Project Members. !17401 +- Geo: LFS not being synced. !17633 + + +## 12.3.3 + +### Security (1 change) + +- Restrict access for security reports in MR widget. + + +## 12.3.2 + +### Security (2 changes) + +- Hide approvers if a rule has any hidden groups. +- Prevent IDOR when adding groups to protected environments. + + +## 12.3.1 + +- No changes. + +## 12.3.0 + +### Security (3 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Filter out old system notes for epics in notes api endpoint response. +- Do not allow creation of projects from group templates if project is not descendant of that group. + +### Removed (1 change) + +- Remove Ruby Elasticsearch indexer. !15641 + +### Fixed (53 changes, 5 of them are from the community) + +- LDAP group sync: check parent group membership and improve performance. !13435 (Alex Lossent) +- Added a migration which fixes discussions for existing promoted epics. !14708 +- Fix Docker Registry access when Group SAML session enforcement is active. !14843 +- Fix missing borders between settings items. !14877 +- SCIM uses fallbacks when name.formatted not present. !14878 +- Fix visibility of link to dependency-list in project sidebar based on permissions. !15066 +- Hide info for unlicensed projects on Ops Dashboard. !15099 +- Fix focus-visibility of vulnerability-actions within security dashboard. !15115 +- Resolve Design viewer does not respect version. !15119 +- Fix bug to display alert menu correctly in dashboards. !15261 +- Allow developer role to access group-level templates when creating a new project. !15364 +- Maintain related issues after moving issue. !15391 +- Fix the documentation link on the empty Dependency List page. !15402 +- Fix broken docs link on security dashboard. !15404 +- Change epics count in sidebar to only count open epics. !15459 +- Include ancestor group labels in autocomplete for epics. !15460 +- Enable target users across all feature flag environment scopes. !15500 +- Change payload for comparing security reports in MR widget. !15531 +- Add space between CI usage warning messages. !15563 (briankabiro) +- Make sure groups with templates finder returns subgroups. !15631 +- Properly delete files when a package is removed. !15634 +- Fix x-axis burndown chart offset by timezone. !15690 +- Resolve SRV records for DB load balancing. !15691 +- Ensure all CI minutes used are reset for all namespaces and relative projects. !15744 +- Show proper error in SCIM create user endpoint. !15756 +- Update permissions on Dependency List page. !15771 +- Allow ancestor group milestones in issue board scope. !15858 +- Show weight on new board issue. !16028 (Lee Tickett) +- Do not show 'automatically removed' suffix for manually removed labels. !16079 +- Link to the embedded doc in the Geo callout about hashed storage. !16114 +- Fix LFS authentication URL in EE. !16146 +- Prevent project's approval rules having same name. !16216 +- Fix create issue for container scanning from security dashboard. !16226 +- Add current_user to security report comparison services. !16252 +- Fix setting of weight of a new issue in board list. !16299 +- Update ExternalPullRequest on :synchronize action to ensure source_sha is updated locally. !16318 +- Fix wrong tier error message for Operations dashboard. !16319 +- Perform case insensitive diff on license names. !16335 +- Moves Buy additional minutes button to the pipelines tab. !16443 +- Update GitHub Importer Personal Access Token field description for CI/CD projects only to reflect latest OAuth changes. !16453 +- Use Pull Request number instead of internal Pull Request ID. !16504 +- Fix service desk emails not creating issues intermittently. !16577 +- Reinitialize metrics files on webserver master process start. !16623 +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !16628 (wdmcheng) +- Fix issue redirects going to /issues/:id/designs. !16638 +- Eliminate analytics feature flag requirement for /analytics routes. !16663 +- Match environment names case insensitively for feature flag spec search. !16691 +- Fix merge request redirects going to /commits page. !16705 +- Align text color for edited with issue/mr. !16721 +- Added Packages top item to the group level packages fly out navigation menu. !16791 +- Restores data for assignee changes in merge request webhooks. !16812 (Jesse Hall @jessehall3) +- Fix alignment of comments count in issue and MR lists. !16829 +- Wait until pipeline is completed before checking for software license violations. !16853 + +### Changed (27 changes, 1 of them is from the community) + +- Geo: Refactor data-sources to allow for replication of content in Object Storage. !13997 +- Improve UX multi assignees in MR. !14851 +- Add ability to block API pushes to protected branches when contents match CODEOWNERS rule. !14900 +- Add browser notications to add/edit/delete vulnability dismissal reasons. !15015 +- Geo: Add orphaned project registry cleaner. !15021 +- Update Security Dashboard for improved usability. !15050 +- Present SAST report comparison logic to backend. !15114 +- Ensure design notifications are sent. !15250 +- Apply the group setting "Restrict access by IP address" to API requests. !15282 +- Hide boards-switcher on group boards. !15293 (briankabiro) +- Group Security Dashboard shows projects with security reports only. !15334 +- Use GlEmptyState component for design management empty state. !15374 +- DB Load Balancing: Log Prometheus current number of hosts and current index. !15440 +- Clarify SSO enforcement setting behaviour. !15533 +- DB Load Balancing: Support SRV lookups. !15558 +- Add status checking behaviors to pipeline triggers. !15580 +- Only show Service Desk email address to project members. !15676 +- Use static status check names on GitHub integrations. !15737 +- Display the Security Dashboard in the Security tab of the pipeline view. !15824 +- Remove primary button from feature flags empty state and update text. !15841 +- Extend License Compliance entity for Pipelines and MR view. !15957 +- Improve DB load balancing log to log host offline due to replication lag. !15995 +- Eliminating `analytics` feature flag and introduce separate feature flags for Analytics features. !16102 +- Add asterisk to name field in new feature flag form. !16248 +- Update Container Scanning job template, use klar image. !16342 +- Improve projects list page UI. !16656 +- Add user feedback to exit routine of onboarding tour. + +### Performance (2 changes) + +- Send only necessary fields on mr-widget auto-refresh. !15495 +- Two step Routable lookup. !16621 + +### Added (46 changes, 1 of them is from the community) + +- Public project-level approval rule API. !13895 +- Support reordering issues and epics using Drag&Drop. !14565 +- Add deletion support for designs. !14656 +- Add Epics select dropdown to Issue sidebar. !14763 +- Edit delete vuln dismissal message. !14770 +- add Productivity Analytics page with basic charts. !14772 +- Add License information to the Dependency List based on current license rules. !14905 +- Adds an api to generate suggestions for username. !15048 +- Add Upgrade button to the User Billing page. !15075 +- Enable "only/except: external_pull_request" with GitHub integration when a pull request is open for the given ref. !15082 +- Allow to filter epics by timeframe or state using GraphQL. !15110 +- Support restricting group access by multiple IP subnets. !15142 +- Merge License info to Dependency List report. !15157 +- Add Licenses info into Dependencies response. !15160 +- Add 'License-Check' approval rule to enforce license compliance policy. !15196 +- Added a toggle to show/hide dismissed vulnerabilities in the security dashboard. !15333 +- Add audit event for archiving & unarchiving projects. !15362 +- Pressing the Escape key now closes designs in Design Management. !15379 +- Expose a count of Notes for a Design in a new notes_count property of DesignType in GraphQL. !15433 +- Implement public MR-level approval rules API. !15441 +- Cancel redundant merge train pipelines. !15450 +- Add vulnerabilities to Dependencies API. !15485 +- Expose a new events property of DesignType in GraphQL that represents the change that happened to a Design within a given version. !15561 +- Add new layout for trial. !15630 +- Track repository pushes as audit events. !15667 +- Create Metadata/Tags table. !15770 +- Allow SmartCard authentication to use SAN extensions. !15773 +- Maximum Users metric in Admin Dashboard includes current active user count. !15810 +- Public MR-level approval state API endpoint. !15859 +- Add secondary lag message on Git push over HTTP. !15901 +- Expose epic_iid in issues API. !15998 +- Refresh license approval check when a license is blacklisted. !16070 +- Disable editing of the 'License-Check' approval rule name. !16149 +- Implement Cluster Environments polling. !16316 +- Support creating project from template via API. !16352 +- Add link to additional shared minutes from pipeline quote overview. !16389 +- Add audit events for protected branches. !16399 +- Geo: Exit LogCursor if it has been failing for too long. !16408 +- Implement design comment counts and current-version status icon indicator. !16416 +- Track page view counts for Cycle Analytics and Productivity Analytics features. !16431 +- Update release blocks to support association of milestones. !16562 +- Set default whitespace diff behaviour. !16570 (Lee Tickett) +- Implement `/zoom` and `/remove_zoom` quick actions. !16609 +- Add Snowplow click tracking for issue sidebar. !16833 +- Upgrade pages to 1.9.0. +- Adds total usage information to the usage quotas page. + +### Other (27 changes, 8 of them are from the community) + +- Update Pipelines Minutes expiry banner to Alert Component. !14786 +- Add internal API for group cluster environments. !15096 +- Rename approval rule. !15140 +- Productivity Analytics: Add error handling for reporting on groups which have no plan. !15291 +- Convert Issue Analytics chart into ECharts. !15389 +- Display group's full name when creating a project from custom group-level project templates. !15392 +- Only in ee available selection entries in user settings adapted to match ce. !15452 (Marc Schwede) +- Rename Approvers field and modal title. !15461 +- Add a tooltip to Add Designs button. !15471 +- Show the paths for groups in groups dropdown. !15513 +- Turn epic dates into one clickable block. !15722 (Lee Tickett) +- Add default route for admin/geo. !15726 (Lee Tickett) +- Improve unapproved MR merge button text. !15745 (Lee Tickett) +- Update the ES indexer to v1.3.0. !15821 +- Groups dropdown: Fix group styles in dropdown. !15839 +- Document SRV handling for DB load balancing. !16000 +- Internationalization of shared/promotions/_promote_audit_events.html.haml. !16033 (Takuya Noguchi) +- Remove vue-resource from service_desk_service.js. !16041 (Lee Tickett) +- Remove unused classes for report comparison. !16045 +- Remove vue-resource from related-issues. !16057 (Lee Tickett) +- Add CI variable for repository languages. !16477 +- SAST template that doesn't rely on Docker-in-Docker. !16487 +- Adding docs for Web IDE Default Commit Options. !16629 +- Adding top border back to snippet files. !16709 +- Remove vue-resource from drafts. (Lee Tickett) +- Changing instance of key-modern icon to key icon. +- Fixes style-lint errors and warnings for EE builds.scss file. + + +## 12.2.5 + +### Security (1 change) + +- Do not allow creation of projects from group templates if project is not descendant of that group. + + +## 12.2.4 + +### Fixed (1 change) + +- Fix group hooks not firing in PostReceive. !15598 + + +## 12.2.3 + +### Security (2 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Filter out old system notes for epics in notes api endpoint response. + + +## 12.2.2 + +### Security (2 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Filter out old system notes for epics in notes api endpoint response. + + +## 12.2.1 + +- No changes. + +## 12.2.0 + +### Security (5 changes) + +- Gate MR head_pipeline behind read_pipeline ability. +- Queries for Upload should be scoped by model. +- Grant admin note permissions in epics for maintainers and owners. +- Fix bypass email verification when SCIM user is created via API. +- Do not allow localhost urls in GitHub Integration. + +### Removed (1 change) + +- Removes support for matching on app label for Kubernetes deploy boards, terminals, and pod logs. !14020 + +### Fixed (67 changes, 2 of them are from the community) + +- Fix error when creating issues in scoped boards. !11080 +- Resolve Snowplow tracking for notes does not work in Firefox. !12578 +- Fix License App user count for ultimate. !14055 +- Enable incremental elasticsearch index updates for wikis. !14057 +- Ensure U2F javascript runs on GroupSAML callback. !14262 +- Fix to allow adding multiple instance-level clusters. !14270 +- Initialize chart data in same order as config. !14283 +- Make side-nav expanded when on dependency list. !14314 +- Add anchor to learn-more-button on the dependency list page so it links to the right location in the docs. !14316 +- Un-block UI interactions while Code Quality MR widget is loading. !14323 +- Enforce SSO on subgroups and projects. !14364 +- Fix race condition on merge train that it cannot process merge request sometimes. !14386 +- Fix MWPS/ADMTWPS system notes shows wrong sha. !14397 +- Show position of merge trains in system notes. !14398 +- Respect limited indexing when importing projects. !14413 +- replace dropdown in project cards in Operations Dashboards with a remove icon. !14419 +- Allow blank values for IP restriction setting. !14427 +- Fix weight quick action to support 0 value. !14432 +- Fix cluster health charts on instance level. !14440 +- Fix on_environment scope to not re-order whole query. !14481 +- Tick instance runner after customer purchases additional CI minutes. !14494 +- Fix race condition of `refs/merge` competing overwrite. !14495 +- Fix 'learn more'-link on dependency page. !14496 +- Allow subgroups to use their parent group's custom project templates. !14499 +- Support creating/publishing drafts with commit ID. !14520 +- Do not include milestone attribute when promoting issue to epic. !14532 +- Include Subgroups in Contribution Analytics calcualtions. !14536 +- Fix GeoNode#name backward compatibility. !14564 +- Starting a new discussion only on line without Draft note created on it. !14569 +- Fix reply to discussion on promoted epic. !14576 +- Fix UI breaking on forms on Bootstrap Grid system. !14581 (Takuya Noguchi) +- Geo - Show why node is unhealthy in the rake task to check the health of the secondary node. !14615 +- Fix displaying feature flag names in the audit log. !14621 +- Support emails as ID in SCIM. !14625 +- Fix negative values in burndown charts. !14632 +- Fixes #12780 by avoiding incorrect cached values. !14651 +- Avoid Design Management thumbnails from being distorted/stretched. !14670 +- Support 0 weight in issue sidebar. !14683 +- Adds a downard chevron to Dashboards icon in the header. !14711 +- Handling use case for repeat trial. !14714 +- Fix suggested namespace in deploy boards help text. !14739 +- Fix duplicated issues while sorting by weight. !14750 (Vasiliy Yaklushin) +- Resolve Make sure not to redirect to the onboarding welcome page on mobile devices. !14842 +- Fix Jira DVCS integration not working when project name has dots. !14855 +- Fix the Epics filter bar alignment. !14857 +- Fix max attachment size used in CSV export email messages. !14884 +- Fix issue that caused the "Merge Immediately" option not to be available when merge trains were enabled. !14894 +- Fix error fetching project security dashboard data for maintainers with access to a project but not to its group & fix routing error for project security dashboard for projects not in a group. !14896 +- fix: operation dashboard delete icon tooltip title. !14899 +- Improve help text and docs about custom metrics. !14912 +- Geo - Disable built-in Sidekiq retry for verification workers. !14946 +- Remove visual review app feature flag. !14958 +- Geo - Warn when reusing an existing tracking database. !14981 +- Fix min approvals required for new MR rules. !14988 +- Fix admin notes internationalization text. !15001 +- Batching minutes reset queries to avoid query timeouts. !15002 +- Only show a pull mirror if mirroring is actually enabled. !15049 +- Update epic dates when creating an issue that adds the epic using commands. !15062 +- Show correct historic max user count for a license. !15107 +- Fix job scheduling when extra CI minutes purchased and minutes usage is above application shared Runners minutes limit. !15120 +- Skip ES commit results for deleted projects. !15236 +- Align "New metric" page title correctly to the rest of the page. !15259 +- Bypass push rules for merge to ref service. +- Ensure LDAP Group Sync by Filter normalizes DNs. +- Add support for partial approval in chat message merge request event handler. +- Insights: Only display page config with valid values. +- Shrink empty/loading states for cluster health charts. + +### Changed (33 changes, 2 of them are from the community) + +- Update merge requests section description text on project settings page. !11098 +- First pass at auto remediation changes. !12010 +- Create incident issues by default for alerts. !12814 +- Resolve Move approval user password input from inline to a modal. !14123 +- Add Copy to Clipboard Button to Review App Modal. !14290 +- Remove "Allow merge trains" option from project settings page. !14429 +- Change epics reordering to not update timestamps. !14441 +- Remove feature flag behind MR's multiple assignees. !14506 +- Prioritize mirrors for CI over other mirrors. !14575 +- Move external authorization service API management to EE. !14598 +- Improve default title and description of issues opened from managed Prometheus alerts. !14614 +- Add 'Security & Compliance' as top-level navigation item to the project-sidebar. !14628 +- Add "Security" as nav-item to group-view sidebar. !14639 +- MVC: Group and User Billing Page Improvement - Avatar and Name. !14660 (Ammar Alakkad) +- Geo: Increase HTTP read timeout of proxy requests to 60 s. !14671 +- Show threshold in incident title for gitlab alerts. !14688 +- Expose licence management reports comparison. !14723 +- Move metrics alerts form to modal. !14760 +- Add new documentation and link for automating Visual Review feedback. !14789 +- Expose licence management report for pipeline. !14796 +- Present container scanning report comparison via API. !14898 +- Allow approvals_required to be lower than project. !14902 +- Rename snowplow_collector_uri to snowplow_collector_hostname. !14963 +- Remove duplicated 'New metric' button in prometheus configuration. !14964 +- Remove validation of MR level approval rules in merge requests. !14968 +- Add missing merge request committer approval setting to API. !15019 (jramsay) +- Move dependency scanning comparision logic to backend. !15023 +- Update permissions for Dependency List. !15044 +- Dependency List Job Failed Alert - Hide link to job if payload from API does not include 'job_path'. !15068 +- Use vulnerability message on Dependency list. !15125 +- Rename License Management to License Compliance. !15163 +- Elasticsearch: index snippet content only up to 1 MB. !15215 +- Add note count, updated timestamp, and closed tag to epics list view. + +### Performance (9 changes) + +- Remove support for checking legacy security reports. !14291 +- Cache Geo checks for a certain time period instead of per request. !14513 +- Cache vulnerability history per project. !14619 +- Fix N+1 queries in vulnerabilities API. !14638 +- Improve Elasticsearch database import by retrying only failed cases first. !14657 +- Refactor feature flag scopes for_unleash_client. !14768 +- Split MR widget into cached and non-cached serializers. !15045 +- Geo: Don't wait when exiting the log cursor. !15070 +- Geo: Improve performance of clean up worker for selective sync. + +### Added (60 changes, 1 of them is from the community) + +- Enabled setting the Security Dashboard as a default view for groups. !7889 +- Paginate license management. !10983 +- Allows any user to comment on a dismissed vulnerability. !12067 +- Enable security gates for merge requests. !13109 +- Enable deployment boards and pod logs for instance and group clusters. !13307 +- Support for blocking merge requests. !13506 +- Add the ability to publish and install NPM packages from groups and subgroups. !13986 +- Expose saml_provider_id in the users API. !14045 +- Allow adding groups to CODEOWNERS file. !14071 +- Add group packages page. !14089 +- Add merge train helper text to merge request widget. !14097 +- Support remapping of Git repos via SSH with project aliases. !14108 +- Allow bulk editing group issues. !14141 +- Expose reject_unsigned_commits option via the API. !14165 +- Add instance level analytics. !14173 +- Show design boards at previous versions. !14292 +- Build cascading train refs for parallel execution of Pipelines for merge trains. !14296 +- Add notifications for CI Minutes quota limit approaching. !14328 +- Require session with smartcard login for Git access. !14368 +- Add analytics top navigation link. !14377 +- Add Quick Actions for adding/removing epic parent relations. !14451 +- Geo: Validate file transfers (attachments, LFS objects, artifacts). !14477 +- Create system notes for scoped labels. !14487 +- Show deploy boards for group cluster deployments. !14504 +- Support feature flag gradualRolloutUserId strategy on backend. !14515 +- Add percentage rollout support to feature flag UI. !14538 +- Added new Design Management feature for GitLab Premium. With Design Management, you can upload design assets to issues and view them all together to easily share and collaborate with your team. !14582 +- Add Ability to Enable Feature Flags by User ID. !14596 +- Add ability to view different design versions. !14601 +- Allow bulk editing group merge request milestones. !14616 +- Add cycle analytics on group level. !14627 +- Resolve Add point of interest discussions to designs. !14648 +- Limit creation of the Alert Bot in usage ping. !14649 +- Audit strategies for feature flag scopes. !14652 +- Read and write User Admin notes via API. !14662 +- Add date range dropdown for Analytics. !14681 +- Allow auditors to see the group and project security dashboards. !14695 +- Add `Incident` label to issues created by the Alert Bot. !14705 +- Merge vulnerabilities data into Dependency List report. !14706 +- Support an alert template field to allow for incident customization. !14710 +- Add a rake task to run a LDAP group sync. !14735 (Harish Ramachandran and Cindy Pallares) +- Log impersonation actions in audit log. !14740 +- Support feature flag userWithId strategy on backend. !14752 +- Add vulnerabilities to dependency list. !14761 +- Add project download & project export audit events. !14775 +- Count design usage, in order to meet SMAU OKR. !14779 +- Support multiple sites in DAST reports. !14787 +- Allow adding email domain to group to limit users to ones with email in this particular domain. !14800 +- Allow global search on comments. !14818 +- Add filtering by vulnerabilities to Dependency List. !14825 +- Support for bulk editing labels at a group level. !14827 +- Add an Upgrade button to Group's billings page. !14849 +- Add authorization to the dependency list. !14867 +- Add cycle analytics on a group level - FE. !14891 +- Add Dependency Scanning information to the Dependency List. !14955 +- Tweak Geo node form text. !14957 +- Geo: Make Object Storage synchronization in Geo Nodes configurable via Admin UI. !15000 +- Enable security report approvals by default. !15087 +- Add Collapse buttons to Operations settings. !15117 +- Geo: Support replication for Docker container registries. !15135 + +### Other (19 changes, 2 of them are from the community) + +- Update License Management section information under CI/CD settings. !4295 +- Adds a popover to vulnerability-check approvals. !14038 +- Show warning for deploy boards if legacy app label is used. !14103 +- Change spelling of wildcare to wildcard on feature flag new and edit forms. !14171 +- Rename `TOKEN_TYPES` to `USER_TOKEN_TYPES`. !14209 (Arun Kumar Mohan) +- Improved dependency proxy page with some small UI enhancements. !14448 +- Replace 'JIRA' with 'Jira' for EE-specific code comments. !14479 (Takuya Noguchi) +- Remove unused EE::GitPushService. !14483 +- Improved project level navigation for package features. !14492 +- Add Ability to Remove Projects From the Envivonment Dashboard. !14563 +- Increase rate at which UpdateAllMirrorsWorker schedules jobs and reschedules itself. !14573 +- Cleaned up package list icons to improve consistency inside package section. !14607 +- Limit width for onboarding popovers. !14641 +- Updates the security dashboard documentation link. !14669 +- Add counter columns to geo_node_statuses database table. !14943 +- Geo - Rename recheck actions to reverify. !14979 +- Remove deprecated name sast_container from licensed features. !14980 +- Remove default relative_position from epic_issues. !15008 +- Fix alignment of activity dropdown in epic tabs; add counter to discussion tab. + + +## 12.1.5 + +- No changes. + +## 12.1.4 + +### Fixed (3 changes) + +- Don't send CI usage email notifications when quota is unlimited. !14810 +- Fix variable mismatch in code quality widget. !14829 +- Change package validation scope to fix Maven package naming functionality. !14922 + + +## 12.1.3 + +### Fixed (3 changes) + +- Allow bulk editing group issues for reporter access level and higher. !14744 +- Initialize Application Table on Instance-wide Cluster Details. !14749 +- Hide "Buy additional minutes" button for self-managed installs. !14826 + +### Added (4 changes) + +- Add Vulnerabilities API scoping: pipeline. !14376 +- Add policy for accessing dependencies. !14561 +- Add filtering by package manager for dependencies. !14562 +- Add dependency list public endpoint. !14612 + + +## 12.1.2 + +### Security (1 change) + +- Ensure the Insights configuration project is part of the group and is accessible to the current user. + +### Security (6 changes) + +- Don't override approval rules if not allowed. +- Grant admin note permissions in epics for maintainers and owners. +- Queries for Upload should be scoped by model. +- Fix bypass email verification when SCIM user is created via API. +- Prevent an XSS vector in the add approver email. +- Make vulnerability feedback invisible if limited access to repo. + + +## 12.1.1 + +### Fixed (1 change) + +- Don't send CI usage email notifications for self-hosted instances. !14809 + + +## 12.0.7 + +### Security (3 changes) + +- Limit number of jobs in running pipelines for the past hour on per plan basis. !1182 +- Queries for Upload should be scoped by model. +- Filter out old system notes for epics in notes api endpoint response. + + +## 12.0.6 + +- No changes. + +## 12.0.2 (2019-06-25) + +### Fixed (1 change) + +- Take into account events created before milestone start. !14184 + + +## 12.0.1 (2019-06-24) + +- No changes. + +## 12.0.0 (2019-06-22) + +### Security (2 changes) + +- Filter relative links in wiki for XSS. +- Fix XSS in Ancestor tooltip title. + +### Removed (2 changes) + +- Remove old approver system in favor of new approval rule system. !12436 +- Geo: Remove deprecated wikis_count and repositories_count fields from the public API. !13025 + +### Fixed (36 changes, 1 of them is from the community) + +- Group SAML identities cleaned up when leaving a group. !5817 +- Make root relative URLs clickable in vulnerability modal. !9767 +- Make burndown chart timezone aware. !10328 +- Prevent files paths from overflowing in vulnerability info modal. !10606 +- Fixed a bug where removing related issues could get stuck. !12316 +- Fix anchor link in UI. !12737 +- Add feature flag to group_scim javascript. !13078 +- Geo - Enable Cron job to perform repository checks on a Geo secondary node. !13103 +- Restrict child_epic and remove_child_epic quick actions when using mysql. !13152 +- Disable licenses_app feature flag by default. !13291 +- Fix security dashboard errors on IE11. !13319 +- Respect limited indexing settings in rake tasks. !13437 +- Geo - Does not redirect user to the custom home page URL on a Geo secondary. !13447 +- Use quarantine size to check push size against repository size limit. !13460 +- Fix SSO Enforcement when used with 2FA. !13473 +- Fix Git over HTTP when using SAML SSO Enforcement. !13485 +- Only use elasticsearch when it is enabled. !13495 +- Add referenced-commands in no overflow list. !13550 +- Hide action buttons while security dashboard is loading. !13576 +- Fix alignment of label for admin notes on admin. !13592 (Takuya Noguchi) +- Use elasticsearch go indexer for wikis. !13743 +- Handle case where site property is an array in DAST report. !13775 +- Fix dast report parsing regression caused by change in zaproxy. !13789 +- Fix port validation in .gitlab-webide.yml. !13846 +- Fix "rule_type does not exist" error during consume_remaining_migrate_approver_to_approval_rules_in_batch_jobs migration. !13947 +- Hide operations nav icon for small screens. !13960 +- Remove free user info from non-ultimate license. !14010 +- Use fallback approval rule if no eligible rules exist. !14042 +- Fix 'Group > Usage Quota' menu item. !14043 +- Fix incorrect epic ancestor links. !14092 +- Show Usage Quotas regardless of namespace subscription. !14135 +- Fix calculation of used extra CI minutes. !14217 +- Remove class hiding spinner in board switcher. +- Fix broken filter by approvers. +- Remove extra spaces in MR list view approval counts. +- Remove extra border on tracing empty state page. + +### Changed (18 changes) + +- Allow merge requests to be merged even when it does not have up-to-date pipeline when merge request pipeline is enabled. !12309 +- Migrate code_owners to rule_type enum on approval_merge_request_rules. !13036 +- Avoid failing pull mirroring if LFS import fails. !13133 +- Updates Pipeline Quota page to accomodate for Storage Quotas. !13139 +- Align group and project level security dashboard UX. !13180 +- Remove shared_runner_minutes_on_root_namespace feature flag. !13208 +- Enable dependency proxy per group by default. !13574 +- Move dependencies API endpoint to "security" namespace. !13897 +- Allow developers to configure dependency proxy. !13899 +- Use real data in `:project/security/dependencies` endpoint. !13906 +- Use bulk-indexing API for project associations. !13917 +- Update response schema for DependencyList endpoint and add status. !13918 +- Geo - Make foreign data wrapper a hard requirement. !13940 +- Polish SAML SSO configuration page. !13982 +- Make Insights Generally Available. !14067 +- Automatically index wikis in elasticsearch. !14095 +- Require Hashed Storage to be enabled to create new Geo Nodes. !14102 +- Changes to default insights charts. + +### Performance (7 changes) + +- Omit page counts in admin audit logs. !1306 +- Improve scheduling of mirror updates to reduce frequency of database queries. !11217 +- Limit count to improve query performance. !12231 +- Avoid loading database objects for Elasticsearch results. !12691 +- Avoid hitting Elasticsearch more than once on search. !13120 +- Add index to count pending mirror updates. !13901 +- Performance improvement when loading epics list. !13904 + +### Added (34 changes, 1 of them is from the community) + +- Provide application-wide LDAP membership lock setting. !4354 +- Added a "Require user password to approve" option on projects for merge request approvals to enable compliance in FDA regulated fields". !10364 (James Davila, Paul Knopf, Greg Smethells) +- Add "Allow merge trains" option to project settings page. !10803 +- Add optional reason when dismissing vulnerabilities. !11226 +- System notes for adding and removing epic relationships. !11416 +- Show if user is using a license seat on admin user page. !11449 +- Allow merge requests to block other MRs from being merged. !11600 +- SSO enforement redirects to group sign in when not using SAML. !12246 +- When a merge request is blocked by other unmerged merge requests, display them on the show page of a merge request. !12357 +- Group SAML can be used to sign into a GitLab instance. !12660 +- IP address restriction for groups. !12669 +- Make the number of Elasticsearch shards and replicas configurable. !12713 +- Add quick actions for adding and removing child epic relations to epic. !12772 +- Adds a confidence filter to the Group Security Dashboard. !12805 +- Expose Design blobs through GraphQL. !13037 +- Expand pipeline variables passed downstream. !13197 +- Add support for querying epics with GraphQL. !13248 +- Add Merge Train auto merge strategy. !13278 +- Adds Storage Counter. !13294 +- Allow design blobs to be stored in Git LFS. !13389 +- JIT users provisioning for group SAML. !13552 +- Add Ability for Maintainers to Rotate Instance Id in Feature Flags. !13722 +- Notify users when their CI minutes quota has run out. !13735 +- Use Flipper as an A/B testing framework. !13755 +- [New Auto Merge Strategy] Add To Merge Train When Pipeline Succeeds. !13767 +- Add `dependency_list` report. !13900 +- Add admin form to enforce a pipeline on an instance. !13923 +- Count usage of DependencyList endpoint. !13962 +- Add preliminary Dependency List frontend implementation. !13968 +- Add Admin settings to disable project deletion. !14002 +- Usage ping: Track amount of incident issues. !14013 +- Sync file changes from Web IDE to Web Terminal. !14035 +- Add report_approver to approval_merge_request_rules. !14050 +- Add merge train position message under pipeline in merge request widget. !14064 + +### Other (9 changes, 2 of them are from the community) + +- New user flow for SSOing into a GitLab.com group. !10338 +- Improve vulnerability API. !12760 (Robert Schilling) +- Add action popover component for user onboarding. !13346 +- Add help content popover component for user onboarding. !13363 +- Expose services in the web ide terminal entity. !13665 +- Rename boards spec name. !13725 (George Tsiolis) +- Fix typos in i18n strings for onboarding tour. !14153 +- Externalize strings of chat page in user profile. !28632 +- Remove commit count from storage quotass. + + +## 11.11.8 + +- No changes. + +## 11.11.7 + +### Security (5 changes) + +- Don't override approval rules if not allowed. +- Grant admin note permissions in epics for maintainers and owners. +- Prevent an XSS vector in the add approver email. +- Ensure the Insights configuration project is part of the group and is accessible to the current user. +- Make vulnerability feedback invisible if limited access to repo. + + +## 11.11.4 (2019-06-26) + +### Fixed (1 change) + +- Use quarantine size to check push size against repository size limit. !14269 + + +## 11.11.3 (2019-06-10) + +### Fixed (1 change) + +- Fix create mr from vuln modal regression. !13524 + + +## 11.11.2 (2019-06-04) + +### Performance (1 change) + +- Geo - Does not apply selective sync restrictions while counting registries on the tracking database. !13257 + + +## 11.11.0 (2019-05-22) + +### Security (1 change) + +- Destroy project remote pull mirrors instead of disabling. !10355 + +### Fixed (26 changes) + +- Add missing endpoint for user information to GitHub API. !10482 +- Remove slack slash commands double up. !10555 +- Display Scoped Labels on Issue Board. !10669 +- Ensure custom group template feature is available only for groups on gold and silver. !10678 +- Fix removing and updating insights config, and foreign key constraints. !11030 +- Geo: Fix broken button to delete orphaned upload registries through Admin. !11156 +- Resolve: Epic labels in system notes point to the epic itself. !11234 +- Geo: Fix: Project sync failures usually double-increment *_retry_count. !11381 +- Fix unauthenticated GET of public Epics API. !11485 +- Hide ScopedBadge overflow notes. !11548 +- Fixes a CI failure in jest. !11586 +- Fix error when reordering/deleting subgroup epics. !11837 +- Fix some filter bar tokens not showing up when multiple assignees are enabled. !11939 +- Geo: Fix OAuth authentication with relative URLs. !11976 +- Fix for not being able to remove the last namespace/project from elasticsearch limited namespaces/projects. !11989 +- Fix approvals project settings section when merge requests disabled. !12070 +- Enable alert bot to use quick actions. !12127 +- Geo: Remove counts over geo_event_log table. !12146 +- Geo: Prevent RegistryFinder calls on the primary. !12183 +- Fix placement of LDAP icon in members list. !12304 +- Use path instead of a URL for accessing approval settings. !12414 +- Remove non-semantic use of `.row` in member listing controls. !12466 +- Force tag overwrite on mirror update. !12491 +- Fixes the feedback paths on the project security dashboard. !12849 +- Fixed starting a review on images. +- Fix updating board attributes through API. + +### Changed (13 changes) + +- Group SAML enforcement requires active SSO session for group access. !10034 +- Geo: Rename "Disable" to "Pause|Resume" (Admin > Geo Nodes). !10297 +- Upgrade group security dashboard to use gitlab-ui line chart. !10479 +- Geo - Implement selective sync support for the LFS objects FDW queries. !10757 +- Documentation : Improve selective sync documentation. !11072 +- Geo: Implement selective sync support for the FDW queries to count the number of attachments to sync. !11107 +- Allowing Elasticsearch indexing gap recovering. !11408 +- Geo - Implement selective sync support for the FDW queries to count attachments. !11518 +- Geo - Implement selective sync support for the FDW queries to find attachments. !11544 +- Geo - Add selective sync support for the job artifacts FDW queries. !11892 +- Fetch all available groups when creating MR approval rule. !12096 +- SSO enforcement requires active SAML session for web access to project resources. !12109 +- Perform LDAP group sync on sign in only for new users. + +### Performance (3 changes) + +- Swap conditions to reduce frequency of database query. !11217 +- Add index for mirror_user_id to projects table. !11422 +- Geo - Improve performance of the selective sync cleanup worker. !11998 + +### Added (27 changes, 2 of them are from the community) + +- Proxy websocket requests to build services. !9723 +- Add dependency proxy for containers. !9750 +- Added gitlab:elastic:projects_not_indexed rake task. !9854 (Jason Colyer) +- Added Snowplow tracking to notes. !10104 +- Support multiple assignees for merge requests. !10161 +- Add UI to enable/disable a dependency proxy on a group level. !10386 +- Let the GitLab Alert bot open incident issues. !10460 +- Remove feature flag `:incident_management`. !10569 +- Allow multiple secondary nodes behind a load balancer. !10755 +- Copy LFS objects from pull mirror. !10779 +- Geo: Inform users about current replication lag in the UI on secondaries. !10807 +- Autosave description in epics. !10844 +- Keep track of packages_file in ProjectStatistics. !11020 +- Adds a dismissal item to the vulnerability modal. !11028 +- Add project level config for merge train. !11065 +- Support pie charts in Insights. !11186 +- Create ActiveRecordModel and table for Merge Train feature. !11204 +- Allow adding GitLab license at installation time. !11244 +- Added ZAP Full Scan support for DAST. !11269 +- Add created_at and updated_at filters to Epics API. !11315 (jramsay) +- Add API to retrieve security vulnerabilities. !11539 +- Basic Rails implementation for BOM. !11613 +- Add Frontend Store and UI For Environments Dashboard MVC. !11702 +- Track clicks on uninstall button for kubernetes implementation. !12048 +- Add Vulnerabilities API scoping: severity, confidence, and dismissal. !12076 +- Alert users that protected environments affects feature flags. !12168 +- Support creating a new child epic from the API. + +### Other (8 changes, 1 of them is from the community) + +- Improve project settings page layout and UX. !10388 +- Uses the more explicit vulnerability feedback endpoints on the front end. !10461 +- Automatically enable multiple MR assignees feature flag. !10558 +- Move geo_log_cursor binary to the ee folder. !10821 +- Move sidekiq-cluster to ee/bin. !11001 +- Move ee-specific code from boards/components/issue_card_inner.vue. !11032 (Roman Rodionov) +- Make all billing cards fit in view. !11602 +- Extracted EE specific lines for spec/javascripts/vue_mr_widget/mock_data.js. !11847 + + +## 11.10.8 (2019-06-27) + +- No changes. +### Security (2 changes) + +- Gate MR head_pipeline behind read_pipeline ability. +- Do not allow localhost urls in GitHub Integration. + + +## 11.10.7 (2019-06-26) + +### Fixed (1 change) + +- Use quarantine size to check push size against repository size limit. !14271 + + +## 11.10.6 (2019-06-04) + +### Fixed (5 changes, 1 of them is from the community) + +- Fix removing and updating insights config, and foreign key constraints. !11030 +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !11312 (wdmcheng) +- Fix approvals project settings section when merge requests disabled. !12070 +- Use path instead of a URL for accessing approval settings. !12414 +- Fix relative url root issues with license management. !12488 + + +## 11.10.4 (2019-05-01) + +### Fixed (1 change, 1 of them is from the community) + +- Fix error retrieving licenses when relative URL in use. !11717 (Hiroyuki Sato) + +### Changed (1 change) + +- [Insights] Change the default weeks period limit to 12. !11498 + + +## 11.10.3 (2019-04-30) + +- No changes. + +## 11.10.2 (2019-04-25) + +### Security (1 change) + +- Handle race condition when creating an MR approval. + + +## 11.10.1 (2019-04-23) + +### Fixed (4 changes) + +- Fix approval rules when used with relative url root. !10819 +- Fix add/remove pipeline dashboard issue. !11029 +- Fix JWT token check when repository does not exist. !11033 +- Fix preventing approval of merge requests by an author. !11263 + +### Changed (2 changes) + +- Improve SAML settings with validation, design, and help text. !10450 +- Use a single color for the Insights time series bar charts. !11076 + + +## 11.10.0 (2019-04-22) + +### Security (3 changes) + +- Check label_ids parent when updating issue board. +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Expose only basic group attributes in boards API. + +### Fixed (25 changes) + +- User Statistics in Admin Dashboard now a button. !8807 +- Fix misalignment of dropdowns in edit board modal of issue boards. !9909 +- Geo: Support archive recovery or streaming replication types in health check. !9935 +- Geo: Only display Geo-specific clone instructions button on a Geo Secondary node. !10007 +- Resolve Deletion of vulnerability-associated issuables prevents security report from loading. !10016 +- Elasticsearch API: Fix project_id showing as 0 for all blobs. A reindex will be required. !10020 +- Make editing the filters in the Group Security Dashboard easier. !10138 +- Geo - Reset the verification checksum after deployment refs are created. !10160 +- Search snippets via elasticsearch. !10325 +- Fixed bug preventing users from adding child epics with multiple children. !10331 +- Fix merge requests being added to Jira Development Panel. !10342 +- Fix authors of merge commits being excluded from approving an MR. !10359 +- Fix ChatOps Slack responder for gitlab.com. !10416 +- Fix sorting by priority with filtering by approvers. !10446 +- Make UpdateRepositoryStorageService idempotent. !10457 +- Fix broken links to protected environments on the CI/CD settings page. !10470 +- Notify owner that group is invalid when LDAP "Sync now" fails. !10509 +- Fix user agent string for Hosted Jira. !10545 +- Fix query used to calculate number of users over license. !10556 +- Fix pipeline bridge serialization error. !10565 +- Correct path to cluster health partial. !10638 +- Ensure Insights charts show all periods even if there are no data. !10733 +- Hide scoped labels help text without corresponding license. !10737 +- Fix merge request operation failure (e.g. assigning user) when project approvers required increases. !10766 +- Include subgroups when finding Insights issuables. !10801 + +### Changed (27 changes) + +- Move project search bar into modal dialog on Operations Dashboard page. !9260 +- Geo - Add selective sync support for the FDW queries to count synced registries. !9445 +- Geo - Add selective sync support for the FDW queries to count failed registries. !9527 +- Convert enable group authentication checkbox to toggle button. !9816 +- Geo: Limit max backoff time by 1 hour, instead of 7 days. !9893 +- Documented Guide to using Geo in HA with RDS cross-region replicas. !9985 +- Dynamically resize security group dashboard vuln graph. !10028 +- Add self approval of merge requests setting to merge requests approvals API. !10050 +- elasticsearch: Switch from LZ4 to DEFLATE compression. !10072 +- Geo - Store the invalid checksum when we have a mismatch. !10101 +- Add requested resources to cluster health metrics. !10135 +- Allow self-approvals in fallback approval rules. !10218 +- Geo - Add selective sync support for FDW queries to find verified registries. !10255 +- Add file line number to vuln modal. !10265 +- Geo - Add selective sync support for FDW queries to find registries where verification has failed. !10266 +- Enforce Geo JWT tokens scope for repository sync. !10303 +- Display link to review note in text email, similar to HTML email. !10401 +- Geo - Add selective sync support for the FDW queries to find mismatch registries. !10434 +- Geo - Add selective sync support for queries to find registries retrying verification. !10436 +- Geo - Add selective sync support for the FDW queries to find registries to verify. !10438 +- Improve DAST location fingerprints. !10487 +- Change order in dast location fingerprint. !10487 +- Geo: Add selective sync support for the FDW queries to find unsynced projects. !10522 +- Enrich container scanning with more data on the frontend. !10526 +- [Geo] Don't mark sync as successful if repo does not exist because of some problems. !10578 +- Move operations dashboard from Ultimate to Premium. !10586 +- Support multiple chart per page for Insights. + +### Performance (3 changes) + +- Avoid a Gitaly N+1 when loading commits for Elasticsearch search results. !9760 +- Geo: Optimize repository and wiki verification counts. !9939 +- Avoid N+1 when loading Code search results with Elasticsearch enabled. !10394 + +### Added (31 changes, 1 of them is from the community) + +- Add approval and unapproval webhooks. !8742 +- Adding pipelines to the operations dashboard. !9197 +- Add operations dashboard usage counts to usage data. !9291 +- Automatically deprovision and update users from a configured identity via SCIM. !9388 +- Add SCIM Token section to SAML SSO Settings. !9619 +- Use merge request MERGE ref for attached merge request pipelines. !9622 +- Geo: Support syncing over non-publicly accessible URLs. !9634 +- Prevent merge if the merge request pipeline is stale. !9643 +- Block possibility to change email for users with group managed account. !9712 +- Geo admin panel for upload verification. !9720 +- Geo: Create separate models for different registries. !9755 +- Add ability to purchase extra CI minutes. !9815 +- Update Web IDE config to accept ports. !9818 +- Allow per-project and per-group enabling of Elasticsearch indexing. !9861 +- Geo: Help admins diagnose configuration problems. !9988 +- Added MAVEN_CLI_OPTS env var support to License Management CI job. !10012 +- Show DAST vulnerabilities in the Group Security Dashboard. !10271 +- Show DAST in Group Security Dashboard Back-End. !10277 +- Removing pipeline dashboard feature flag. !10302 +- Update user name upon LDAP sync. !10316 (@icode1) +- Collect usage of pod logs feature. !10370 +- Added metrics reports widget to merge request page. !10380 +- IP whitelisting for Geo-enabling functionality in the primary. !10383 +- Persist in the URL the page and day range of vulnerabilities viewed in the Group Security Dashboard. !10402 +- Add 'Metrics' job artifact report type. !10452 +- Create a user via SCIM. !10456 +- Geo: Display secondary replication lag on console (if lag > 0 seconds). !10471 +- Add Roadmap to Epic page. !10488 +- Expose merge request pipeline parameters for MR widget. !10502 +- Allow instance admins to link all projects to Jira DVCS. !10541 +- Added mutually exclusive key value labels. + +### Other (4 changes) + +- Simplify admin instance licenses page. !9785 +- Extract EE specific files and externalize strings in admin application settings. !9930 +- Add specs for coerced labels parameter in Epics API. !9932 +- Improve project service desk settings. !10381 + + +## 11.9.12 (2019-05-30) + +### Security (3 changes, 1 of them is from the community) + +- Filter relative links in wiki for XSS. (kerrizor) +- Fix XSS in Ancestor tooltip title. +- Ignore out of range epic IDs. + + +## 11.9.10 (2019-04-26) + +### Security (1 change) + +- Handle race condition when creating an MR approval. + +### Fixed (1 change, 1 of them is from the community) + +- Fix the group's epic page. The Paste issue link placeholder shown as 'undefinedundefinedundefined' in Chinese environment. And the error message showed nothing. !11312 (wdmcheng) + + +## 11.9.9 (2019-04-23) + +### Fixed (1 change) + +- Fix approval rules when used with relative url root. !10819 + + +## 11.9.8 (2019-04-11) + +### Fixed (1 change) + +- Fix sorting by priority with filtering by approvers. !10446 + + +## 11.9.7 (2019-04-09) + +### Security (1 change) + +- Expose only basic group attributes in boards API. + + +## 11.9.6 (2019-04-04) + +### Fixed (3 changes) + +- Fix project approval rule with only private group being considered as approved when override is allowed. !10356 +- Fix approval rule sourcing from forked MR. !10474 +- Guard against ldap_sync_last_sync_at being nil. !10505 + +### Added (1 change) + +- Add Insights frontend to retrieve and render chart. !9856 + + +## 11.9.5 (2019-04-03) + +### Fixed (3 changes) + +- Fix project approval rule with only private group being considered as approved when override is allowed. !10356 +- Fix approval rule sourcing from forked MR. !10474 +- Guard against ldap_sync_last_sync_at being nil. !10505 + +### Added (1 change) + +- Add Insights frontend to retrieve and render chart. !9856 + + +## 11.9.3 (2019-03-27) + +### Security (1 change) + +- Check label_ids parent when updating issue board. + + +## 11.9.2 (2019-03-26) + +### Security (2 changes) + +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Check label_ids parent when updating issue board. + + +## 11.9.1 (2019-03-25) + +### Fixed (1 change) + +- Fix date save for Epic to reflect on UI immediately after save. !10321 + + +## 11.9.0 (2019-03-22) + +### Security (4 changes) + +- Prevent Group SAML authorizing sign in without prior user approval. +- Respect group membership lock when importing a member from another group. +- Remove the possibility to share a project with a group that a user is not a member of. +- Prevent SAML access when disabled by group admin on GitLab.com. + +### Fixed (22 changes) + +- Allow assigning Prometheus alerts to multiple environments. !7361 +- Fix repo pushes while initial Elasticsearch indexing not permitting initial indexing to complete. !9478 +- Fix vulnerability occurrence scope to trailing 30 days. !9494 +- Skip whitelisted vulnerabilities in Container Scanning reports. !9528 +- Fix npm registry for yarn. !9599 +- Renders inline downstream & upstream pipelines. !9627 +- Prunes whole Geo event when there's only a primary. !9630 +- Fix alert notifications for non-public projects. !9636 +- Fix 500 error when visiting merged merge request. !9648 +- Allow plus symbol in maven package version. !9657 +- Show commands applied message when promoting issues to epics. !9669 +- Ensure comments from merge request review is displayed in the same order as user commenting order. !9684 +- Geo - Fix selective sync by namespace. !9732 +- Fix bridge jobs than can be hidden keys too. !9796 +- Fix approval-related UI showing up in free plan. !9819 +- Add 'No approvals required' view to approval rules (behind feature flag). !9899 +- Fix npm package install with a dot in the name. !9900 +- GroupSAML for GitLab.com prevents blank NameID. !9907 +- Fix protected environment initializer. !10150 +- Fix SSH pull mirrors not working. !10272 +- Fix HTML spew in Locked Files page. +- Fixes Broken new/edit feature flag form. + +### Changed (9 changes, 1 of them is from the community) + +- Remove authorization from /managed_licenses. !8541 +- Consider dismissed items in security reports summary. !9275 +- Add backend for cross-project pipeline dashboard MVC. !9396 +- Create merge request approval rule for each code owner entry. !9455 +- Split severity and confidence values for vulnerabilities. !9495 +- Enforce Geo JWT tokens scope for file uploads and Geo API. !9502 +- Update cluster health empty state. !9540 (George Tsiolis) +- Add extra graph spacing on the Security Dashboard Group Vulnerability Chart. !9780 +- Add Kerberos URL back to clone panel. !9840 + +### Performance (1 change) + +- Eliminate N+1 queries in Epics API. !9897 + +### Added (23 changes, 1 of them is from the community) + +- Enabled setting the Security Dashboard as a default view for groups. !7889 +- Add reordering of child epics. !9283 +- Create MR from Vulnerability Solution. !9326 +- Create pool repositories on Geo secondaries. !9428 +- Add date range for security dashboard graph. !9446 +- Add filtering merge requests by approvers. !9468 +- Add audit log for managing feature flags. !9487 +- Add DELETE package API endpoint. !9623 +- Enrich container scanning report. !9641 +- Adapt feedback for Container Scanning vulnerabilities. !9655 +- Enforce merge request approvals from code owners. !9656 +- Added vendored CI/CD template for Dependency Scanning job. !9660 +- Add Insights config behind the "group_insights" feature flag. !9665 +- Add single package API endpoint. !9667 +- Added GET /licenses and DELETE /license/:id endpoints. !9733 +- Add container scanning results to group security dashboard. !9736 +- Add an incident management settings form and create issues from alertmanager alerts. !9773 +- Add API for reordering child epics. !9781 +- Allow guests to comment on epics. !9783 +- Display Recent Boards in Board switcher. !9808 +- Add Ancestors in Epic Sidebar. !9817 +- Add vendored templates for SAST, DAST, Container Scanning and License Management job definitions. !9921 +- Add realtime validation for user fullname and username on validation. !25017 (Ehsan Abdulqader @EhsanZ) + +### Other (12 changes, 1 of them is from the community) + +- Use export-import svg from gitlab-svgs. !9453 +- Renames 'revert dismissal' to 'undo dismiss' on the Group security dashboard. !9500 +- Using positional arguments in request specs have been deprecated. !9506 (Jasper Maes) +- Splits the severity and confidence constants in the group security dashboard frontend. !9535 +- Add Gitlab.com gold trial callout to /billings. !9611 +- Update project settings section titles and info. !9614 +- Improve visual consistency of values in vulnerability modal. !9616 +- Limit Group Security Dashboard to selected types of report. !9626 +- Make related issues components reusable. !9730 +- sidekiq-cluster: put each sidekiq in a new pgroup. !9775 +- License Management: Load up to a 100 licenses per default. !9913 +- Adds documentation for autoremediation. !10054 + + +## 11.8.10 (2019-04-30) + +- No changes. + +## 11.8.3 (2019-03-19) + +- No changes. + +## 11.8.2 (2019-03-13) + +### Fixed (4 changes) + +- Fix 500 error when visiting merged merge request. !9648 +- Fix bridge jobs than can be hidden keys too. !9796 +- Fix approval-related UI showing up in free plan. !9819 +- Add 'No approvals required' view to approval rules (behind feature flag). !9899 + + +## 11.8.0 (2019-02-22) + +### Security (2 changes) + +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !790 +- Hide personal access tokens from other maintainers. + +### Fixed (28 changes, 1 of them is from the community) + +- Add keyboard navigation to issue board switcher and remove duplicate scroll bar. !8591 +- Geo: Always update the default branch on the secondary. !9064 +- Fix public group milestones not shown in epics autocomplete. !9068 +- Check hosts file for nameserver IP. !9071 +- Fixes the icon for fixed vulnerability in Container Scanning report. !9120 +- Return 400 error instead of 500 when upload maven package with invalid version. !9125 +- Fix mirrors that have invalid SSH public auth mode set. !9135 +- Hide packages without version from UI. !9151 +- Remove duplicate "Operations Dashboard" header/breadcrumb. !9152 (Nathan Friend) +- Create UTC date in subscription table. !9166 +- Display epic icon in related epics list. !9166 +- Don't validate Jenkins username if password is blank. !9198 +- Don't show Alert widget for non-licensed users. !9224 +- Group security dashboard: Fix overflow for Vulnerabilities with long titles. !9271 +- Geo - Respect shard restriction while loading new resources to verify on the Geo secondary node. !9343 +- When cleaning up repositories, ensure orphaned entries do not remain in the tracking database. !9344 +- Geo - Make sure project does not meet selective sync rule before deleting it. !9345 +- Fix alert notification emails are not being sent. !9393 +- Fix alert notifications for managed Prometheus. !9402 +- Replacing old blob methods in ElasticSerach module. !9418 +- Add checks to prevent cycling hierarchy in epics structure. !9438 +- Fix bug where users could not be added in protected branch rules. !9474 +- Avoid SAML required_groups indiscriminately unblocking users on login. !9489 +- Resolve Cannot scroll forwards in time for roadmap view. !9530 +- Fix unleash server side cannot return feature flags. !9532 +- Show alerts settings only for manual configuration. !9538 +- Fix access to constant Gitlab::RepositorySizeError. !9579 +- Clear our import data credentials when adding new mirrors. !24339 + +### Deprecated (1 change) + +- Geo: Show hashed storage warnings on geo nodes page. !8433 + +### Changed (14 changes) + +- Prevent commit authors from self approvaling merge requests. !9007 +- Add docs link to explain legacy and new email format. !9020 +- Recursively expands upstream and downstream pipelines. !9073 +- Geo: Don't show external link icon on current node. !9130 +- Issues created from vulnerabilities are now confidential by default. !9157 +- Validate custom metrics. !9178 +- Change paginate number to 20. !9213 +- Convert buttons to button group on Group Security Dashboard. !9220 +- Make it possible to edit Geo primary through API. !9328 +- Geo: Handle repository and wiki sync separately in Geo::ProjectSyncWorker. !9360 +- Geo: Add settings page empty state. !9415 +- Renders New and Edit forms for feature flag in Vue and allow to define scopes. +- Improves title in feature flags empty states. +- Adds environment column to the feature flags page. + +### Performance (5 changes) + +- Solve a N+1 issue in Groups::AnalyticsController. !4508 +- Refactored Epic app in Vuex for better performance and maintenance. !9361 +- Optimize slow pipelines.js response. !9387 +- Disable commit checks when no push rules are active. !9569 +- Enable some frozen string in ee/lib. + +### Added (22 changes, 1 of them is from the community) + +- Elasticsearch: Support for Gitaly. !7434 +- Canary deployment callout on the environments page. !8457 +- Allow to filter notes in epics. !8978 +- Multiple blocking merge request approval rules (behind feature flag). !9001 +- Add support for auto-expanding Roadmap timeline on horizontal scroll. !9018 +- Added Snowplow tracking to issues import. !9067 +- Persist Group Level Security Dashboard state in URL. !9108 +- Multiple environments support for feature flags (Unleash API standpoint). !9110 +- Shows the approval given/required counts and its status for each MR when viewing the Merge Requests page. !9142 (Glavin Wiechert, Andy Steele) +- Support CURD operation for feature flag scopes. !9182 +- Add epic links API endpoints. !9188 +- Store DAST scan results in the database. !9192 +- Add LDAP integration to smartcard authentication. !9235 +- Allow SSO enforcement in group settings for GitLab.com. !9240 +- Add API endpoint for project packages. !9259 +- Add upvote/downvote information to epics API. !9264 +- Resolve Implement access controls when SSO enforcement enabled. !9270 +- Add package files API endpoint. !9305 +- Support alerts from external Prometheus servers. !9334 +- Cross-project pipelines support in .gitlab-ci.yml. !9374 +- Enable mails for external alerts. !9457 +- Moving repository across shards leaves the pool. + +### Other (13 changes, 7 of them are from the community) + +- Gather JIRA DVCS integration usage data. !8949 +- ActiveRecord::Migration -> ActiveRecord::Migration[5.0] for AddAlertManagerTokenToClustersApplicationPrometheus and EnqueuePrometheusUpdates. !9049 (Jasper Maes) +- Track navbar links in Snowplow. !9059 +- Adds snowplough tracking for the group security dashboard filters. !9119 +- Support Ajax endpoints for FeatureFlagsController. !9127 +- Fix deprecation: Passing an argument to force an association to reload is now deprecated. !9140 (Jasper Maes) +- Fix deprecation: #original_exception is deprecated. Use #cause instead. !9141 (Jasper Maes) +- Uses GLDropdown for licence management. !9237 +- Replace deprecated render text. !9346 (Jasper Maes) +- Fix several ActionController::Parameters deprecations. !9347 (Jasper Maes) +- Fix deprecation: uniq is deprecated and will be removed from Rails 5.1. !9348 (Jasper Maes) +- Turn on rubocop for frozen string in ee/. (gfyoung) +- Creates an EE component for the pipeline graph. + + +## 11.7.12 (2019-04-23) + +- No changes. + +## 11.7.11 (2019-04-09) + +### Security (1 change) + +- Expose only basic group attributes in boards API. + + +## 11.7.10 (2019-03-28) + +### Security (1 change) + +- Check label_ids parent when updating issue board. + + +## 11.7.8 (2019-03-26) + +### Security (2 changes) + +- Geo - Improve security while redirecting user back to the secondary after a logout & re-login via the primary. +- Check label_ids parent when updating issue board. + + +## 11.7.7 (2019-03-19) + +- No changes. + +## 11.7.5 (2019-02-05) + +### Fixed (2 changes) + +- Fix Kerberos authentication. !9390 +- Fix background migration error when project repository is missing. !9392 + + +## 11.7.2 (2019-01-29) + +### Security (6 changes) + +- Avoid leaking unauthorized approver group members. !766 +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !791 +- Check access rights when creating/updating ProtectedRefs. +- Fix locked file visibility issue for private repositories. +- Filter out non-project member approvers. +- Remove HTTP POST in JIRA OAuth access_token endpoint. + + +## 11.7.1 (2019-01-28) + +### Security (6 changes) + +- Avoid leaking unauthorized approver group members. !766 +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !791 +- Check access rights when creating/updating ProtectedRefs. +- Fix locked file visibility issue for private repositories. +- Filter out non-project member approvers. +- Remove HTTP POST in JIRA OAuth access_token endpoint. + + +## 11.7.0 (2019-01-22) + +### Security (1 change) + +- Add a shared secret to prevent abuse of the alert endpoint. + +### Fixed (27 changes, 2 of them are from the community) + +- Defaults to feature flags link for Operations entry. !8622 +- Fix error on explore page when logged out due to gold trial callout. !8674 +- Prevents the empty state from showing when the dashboard errors. !8703 +- Allow matching only the repo-root for CODEOWNERS. !8708 +- Fix adding labels to epics using quick actions. !8772 +- Geo: Keep the minimum cursor last event. !8832 +- Reinstate sorting issuable by weight. !8834 +- Geo - Show the proper label for the last repository check run on Geo projects page. !8844 +- Resolve Reorder gitlab:elastic:index rake tasks to ensure wikis and database are completed even if projects error out. !8852 +- Remove dash on issue weight for unauthorized users. !8882 (George Tsiolis) +- Dismiss epic promotion and persist it across reloads. !8885 +- Fix JIRA Development Panel links with subgroups. !8908 +- Remove epic field in sidebar for projects without groups. !8919 +- Remove duplicate padding from issue board switcher. !8928 +- Resolve Ctrl+Enter immediately adds MR comment. !8932 +- Geo: Ignore invalid attributes when updating Geo node status. !8957 +- Fix border-radius for related issues. !8958 (Johann Hubert Sonntagbauer) +- Fix Security Dashboard Header font size. !9011 +- Fix title and description for issue created from a vulnerability. !9022 +- Pseudonymizer: Gracefully handle empty pseudo entries. !9044 +- Fix permission check when creating an issue from a vulnerability. !9055 +- Docfix - broken doc links for Secure/Autodevops features. !9058 +- Fix Error 500 when deleting a pipeline via the API. !9104 +- Uses project_id instead of project on the group security dashboard. !9109 +- Recursively get all of a groups projects. !9205 +- Fix data migration failure if approvals_before_merge is set to too high. !9217 +- Don't remove milestones when moving issues to board backlog from non-milestone list. + +### Changed (5 changes, 1 of them is from the community) + +- Update Geo nodes empty state. !8576 (George Tsiolis) +- Add search field to issue board switcher. !8862 +- Allow downloading package files from UI. !8888 +- Changes to the data model for counts on the Group Security Dashboard. !9035 +- Fix packages UI mentioned only Maven packages support. !9132 + +### Performance (2 changes, 1 of them is from the community) + +- Fix timeout loading Open list when board contains assignee lists. +- Enable some frozen string in ee/lib. (gfyoung) + +### Added (17 changes) + +- Add an instance-level endpoint for downloading maven packages. !8274 +- Add NPM registry support to GitLab packages. !8673 +- Store container scanning CI jobs results into the database. !8797 +- Add a group-level endpoint for downloading maven packages. !8798 +- Add Filtering vulnerabilities in the Group Security Dashboard. !8817 +- Allow to filter Feature Flags. !8821 +- Geo - Show last verification time on Geo projects page. !8845 +- Adds basic filtering to the Group Security Dashboard frontend. !8886 +- Autocomplete issues and MRs in epics. !8936 +- Adds project filtering to the GSD. !8944 +- Allow using TCP for DB load balancing DNS lookups. !8961 +- Add filtering for summary and history on security dashboard. !8972 +- Add solution card to the vulnerability modal. !9030 +- Allows the Group Security Dashboard to select multiple filters. !9031 +- Added Snowplow tracking to issues export. !9045 +- Add support for relationship between epics. !9051 +- Added pagination to epics API endpoint. + +### Other (13 changes, 3 of them are from the community) + +- Promote starting a GitLab.com Gold trial on the dashboard. !6947 +- Adds event tracking to navbar. !7787 +- Update tracing settings to match error tracking settings. !8786 +- Adapt subscriptions page for free plans and trials. !8838 +- Support for new SAST and dependency scanning report format. !8869 +- Remove deprecated ActionDispatch::ParamsParser. !8897 (Jasper Maes) +- Fix deprecation: Comparing equality between ActionController::Parameters and a Hash is deprecated. !8914 (Jasper Maes) +- Removes Notes from GitLab Pseudonymizer config. !8923 +- Add count of projects with tracing enabled to usage ping data. !8940 +- Adds dependency scanning to the report type filters on GSD. !9034 +- Fix deprecation: Using positional arguments in specs for EE spes in spec/. !9040 (Jasper Maes) +- Pass issuable-type in AddIssuableForm. !9111 +- Gather deepest epic relationship data. + + +## 11.6.11 (2019-04-23) + +- No changes. + +## 11.6.10 (2019-02-28) + +### Security (5 changes) + +- Remove the possibility to share a project with a group that a user is not a member of. +- Prevent Group SAML authorizing sign in without prior user approval. +- Prevent SAML access when disabled by group admin on GitLab.com. +- Respect group membership lock when importing a member from another group. +- Ignore out of range epic IDs. + + +## 11.6.9 (2019-02-04) + +- No changes. + +## 11.6.8 (2019-01-30) + +- No changes. + +## 11.6.5 (2019-01-17) + +### Fixed (1 change) + +- Fix Error 500 when deleting a pipeline via the API. !9104 + + +## 11.6.4 (2019-01-15) + +- No changes. + +## 11.6.3 (2019-01-04) + +### Fixed (1 change) + +- Fix instance project templates no longer working. !9019 + + +## 11.6.2 (2019-01-02) + +### Fixed (1 change) + +- Fix issue ID wrapping and avatar counter shrinking in Related Issues list. !8854 + + +## 11.6.1 (2018-12-28) + +### Security (1 change) + +- Add a shared secret to prevent abuse of the alert endpoint. + + +## 11.6.0 (2018-12-22) + +### Security (7 changes) + +- Switch from CBC to GCM for Geo logout tokens. !8518 +- Prevent reporter roles from viewing the Jaeger tracing settings page. +- Sanitize tracing external_urls before saving to DB and when displaying the URL to prevent XSS issues. +- Fix IDOR at /drafts/publish. +- Authorize users when listing board users and milestones. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. + +### Fixed (27 changes, 2 of them are from the community) + +- Ensure that avatars in approvals have correct tooltip. !6269 +- Geo: Fix push to secondary over SSH for LFS. !8044 +- Don't show packages tab and settings for starter license. !8270 +- Makes the vulnerability name on the Group Security Dashboard a button for better A11y. !8341 +- Used the iid instead of the id for linked issues on the Group Security Dashboard. !8357 +- Show navigation line separator when instance etrics is disabled. !8379 (George Tsiolis) +- Fix project deploy key creation and deletion as admin. !8432 +- Changes initial state for disabled prometheus integrations. !8434 +- Fix a typo in Admin: intergration -> integration. !8444 (Vincent AUBERT) +- Geo: Moving registry deletion into the job that deletes the files and project record. !8480 +- Parameterize alerting rules with variables. !8481 +- Fix PostReceive failing for project mirrors missing local branch. !8495 +- Rails 5: Fix the check whether the database is in read-only mode. !8594 +- Raisl 5: Fix Gitlab::Database::LoadBalancing#caught_up? check. !8595 +- Renders upstream and downstream pipelines in the main pipeline graph. !8607 +- Fix issue board api with special milestones. !8653 +- fix pod dropdown not switching pod logs. !8660 +- Geo - Respect the next retry time when re-verifying failed repositories. !8661 +- Update elasticsearch system check to check for new supported versions. !8683 +- Handle null start or due dates for dates sourcing milestone in Epics. !8689 +- Fixed license managment path in MR widget for fork cases. !8700 +- Fix gitlab:geo:check rake task. !8714 +- Fix ability to choose shards for selective sync. !8717 +- Add Rails.version to the Geo cache keys. !8775 +- Support older NGINX version forwarding the client certificate for smartcard auth. !8784 +- Remove duplicated smartcard login button. !8793 +- Disable password autocomplete in mirror form fill. + +### Deprecated (1 change) + +- Deprecate non-hashed repository storage for Geo installations. !8739 + +### Changed (17 changes, 1 of them is from the community) + +- Adds Group SAML metadata endpoint. !5782 +- Group SAML SSO page warns when linking account. !8295 +- Change the delete custom metric alert. !8430 +- Replace weight icon. !8448 (George Tsiolis) +- Switch snowplows stateStorageStrategy to cookie. !8461 +- Move merge request approval settings. !8493 +- Geo: Constantly reverify repositories. !8550 +- Add file and line numbers to issues created from SAST vulnerabilities. !8578 +- Redesign MR header sections and approvals (EE). !8593 +- Add packages_enabled attribute to Projects API. !8604 +- Run geo check task from gitlab check. !8616 +- Change issue create weight dropdown to an input. !8648 +- Add epics state filtering in roadmap view. !8658 +- Users can unlink Group SAML from accounts page. !8682 +- Update casing in Built-in on project templates tab. !8688 +- Epic issue list and related issue list re-design. +- Add sort direction button with sort dropdown for Epics and Roadmap. + +### Performance (5 changes, 3 of them are from the community) + +- Remove partial index for projects on mirror and mirror_last_update_at. !8585 +- Enable some frozen string in ee/app. !8667 (gfyoung) +- Remove redundant indices for is_sample on push_rules and next_execution_timestamp on project_mirror_data. !8695 +- Enable some frozen string in ee/app. (gfyoung) +- Enable some frozen string in ee/app. (gfyoung) + +### Added (10 changes) + +- Add support for Group-level project templates. !6878 +- Added web terminals to Web IDE. !7386 +- Promote an Issue to an Epic using quick action. !8051 +- Smartcard authentication. !8120 +- Adds Security dashboard empty state. !8443 +- Add vulnerability history at group level. !8603 +- Adds group security dashboard metrics chart. !8631 +- Add milestones autocomplete for epics. !8632 +- Parse and store dependency scanning reports in database. !8642 +- Adds EE store to handle upstream & downstream pipelines. + +### Other (13 changes, 4 of them are from the community) + +- Add subscription table to GitLab.com billing areas. !7885 +- UX improvements for the group security dashboard. !8217 +- Restyles the dismissed vulnerabilities. !8401 +- Adds PHILOSOPHY.md and references GitLab Product Handbook. !8515 +- Make sidekiq-cluster play well with Sidekiq 5.2.2+. !8522 +- Rails5: Passing a class as a value in an Active Record query is deprecated. !8540 (Jasper Maes) +- render :nothing option is deprecated, Use head method to respond with empty response body. !8560 (Jasper Maes) +- Add help page link for licence management in CI/CD settings. !8561 (George Tsiolis) +- Re-orders the Group Security Dashboard. !8624 +- Move EE only differences for finders. !8629 (George Tsiolis) +- Add count of projects with at least one package to a usage ping data. !8641 +- Added recommendations for handling deleted documents in Elasticsearch. +- Use new information-o icon for Security Dashboard. + + +## 11.5.11 (2019-04-23) + +### Security (1 change) + +- Respect group membership lock when importing a member from another group. + + +## 11.5.8 (2019-01-28) + +### Security (6 changes) + +- Avoid leaking unauthorized approver group members. !766 +- Sanitize user full name to clean up any URL to prevent mail clients from auto-linking URLs. !793 +- Check access rights when creating/updating ProtectedRefs. +- Fix locked file visibility issue for private repositories. +- Filter out non-project member approvers. +- Remove HTTP POST in JIRA OAuth access_token endpoint. + + +## 11.5.5 (2018-12-20) + +- No changes. + +## 11.5.3 (2018-12-06) + +- No changes. + +## 11.5.2 (2018-12-03) + +### Fixed (2 changes) + +- Fix inability to scroll dashboard. !8459 +- Fix issues analytics query when ordering issues by priority. !8509 + + +## 11.5.1 (2018-11-26) + +### Security (6 changes) + +- Sanitize tracing external_urls before saving to DB and when displaying the URL to prevent XSS issues. +- Prevent reporter roles from viewing the Jaeger tracing settings page. +- Fix IDOR at /drafts/publish. +- Authorize users when listing board users and milestones. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. + + +## 11.5.0 (2018-11-22) + +### Security (2 changes) + +- Escape entity title while autocomplete template rendering to prevent XSS. !696 +- Prevent templated services from being imported. + +### Removed (1 change) + +- Remove security report summary from pipelines view. !7844 + +### Fixed (25 changes, 3 of them are from the community) + +- Geo: Remove connectivity check from primary to secondary from gitlab:geo:check rake task. !7821 +- Include (closed) for closed epics in parsed text. !7946 +- Add new state to the cluster application vue app. !7954 +- Do not allow to assign an issue to an epic twice. !8004 +- [Geo] Fix: Deleting a project leaves orphaned LFS objects and CI Job artifacts around. !8031 +- Support `/client/features` Unleash endpoint. !8045 +- Fix button rendering in license management in FF. !8046 +- Geo: Handle orphaned Uploads records. !8054 +- Geo - Redirect user back to the secondary after a logout & re-login via the primary. !8157 +- Fix approver removal still being conducted even when "Cancel" is clicked in confirmation prompt. !8178 +- Link project short SHA to commit url. !8214 +- Update ops dashboard remove dropdown button. !8236 (George Tsiolis) +- Clear ops dashboard project search input on submit. !8239 (George Tsiolis) +- Fixes a dismissed vulnerability bug on the group security dashboard. !8343 +- Fixes missing fields on the group security dashboard. !8360 +- Fixes the view issue button in the Group Security Dashboard. !8385 +- Ops Dashboard should be available for public projects on GitLab.com. !8399 +- Update draft comments design to match new design. !8405 +- Change issues analytics breadcrumb. !8414 (George Tsiolis) +- Include classification label in project API. !8426 +- Fix Pod Log topbar position when perf bar is disabled. +- Always proxy reports downloads. +- Removes extra rigth margin from job page. +- Geo: Rails console message display primary/secondary state incorrectly. +- Disable Feature Flags and Packages if repository is disabled. + +### Changed (13 changes, 1 of them is from the community) + +- Add test button to Group SAML settings. !5622 +- Group SAML status badges on members page. !5807 +- Update related issues list styling to be more space efficient. !7784 +- Refactor test reports to use new artifact architecture. !7827 +- Add timeline icon for issue weights. !7847 (George Tsiolis) +- Added a search bar to `Admin > Geo > Projects`. !8079 +- Geo: Deprecate source installations instructions. !8134 +- Does not synchronize default branch for pull mirrors. !8138 +- Adds split error states for the group security dashboard. !8208 +- Geo: Improve read-only message in secondary nodes for actionable screens. !8238 +- Improve error messages for operations dashboard. !8244 +- Add documentation link to ops dashboard. !8296 +- Issue board card design. !21229 + +### Added (24 changes, 1 of them is from the community) + +- Group-level file templates. !7391 +- Adds group-level Security Dashboard counts. !7564 +- Parse SAST reports and store vulnerabilities in database. !7578 +- elasticsearch 6 support - migrate from parent/child relationships to join. !7618 +- Geo: Admin > Geo > Projects support for batch operations. !7806 +- Create system notes for epic close and reopen. !7850 +- Add Tracing landing and settings page. !7903 +- Add modals and actions to the vulnerabilities in the Group security dashboard. !7910 +- Assign code owner as approver. !7933 +- Enable previewing of draft review comments. !7936 +- Audit log: Add logging for project feature changes. !7962 +- Add project operations dashboard. !7973 +- Audit log: Add audit events for group setting changes. !7987 +- Add approve quick action. !7989 +- Show actual Milestone dates within tooltips for Milestones in Epics sidebar. !8048 +- Allow filtering by weight in issues API. !8140 (Heinrich Lee Yu) +- Filter epics by state in API. !8179 +- Support epics autocomplete for project objects. !8180 +- Add 'l', 'r' and 'e' keyboard shortcuts support in Epic. !8203 +- Configurable GitHub static context for statuses integration. !8235 +- Send notifications for epic status change. !8247 +- Support license management and performance using new reports syntax. +- Support reports: for project security dashboard. +- Add chart of issues created per month. + +### Other (17 changes, 11 of them are from the community) + +- Update boards list selector specs. !6266 (George Tsiolis) +- Write some Geo development documentation. !7452 +- Connects the Group Security Dashboard API and Frontend. !7793 +- Rails5: Fix epics finder count_key method In Rails5, the state enum value is passed instead of the database integer. !7822 (Jasper Maes) +- Rails 5: fix presence message validation for prometheus_alert. !7823 (Jasper Maes) +- Rails 5: fix mysql milliseconds problem in prometheus alert event spec. !7828 (Jasper Maes) +- Rails5: fix VulnerabilitySummaryEntity. !7893 (Jasper Maes) +- Update feature flags empty state. !7967 (George Tsiolis) +- Adds the security dashboard link. !7974 +- Remove tooltip on sidebar text buttons. !8021 (George Tsiolis) +- Add a metric to the usage ping data to track the number of projects with at least one alert. !8058 +- Remove unneeded permission checks from the mirror repositories partial. !8077 +- Rails5: fix flaky mysql reset pipeline minutes spec. !8122 (Jasper Maes) +- Move `prepend` outside the `class` block for finders. !8192 (George Tsiolis) +- Rails5: fix operations controller spec nil parameter. !8209 (Jasper Maes) +- Update related issues title typography. !8267 (George Tsiolis) +- Geo: Clarify Geo HA documentation. + + +## 11.4.9 (2018-12-03) + +- No changes. + +## 11.4.8 (2018-11-27) + +### Security (5 changes) + +- Escape entity title while autocomplete template rendering to prevent XSS. !707 +- Authorize users when listing board users and milestones. +- Fix IDOR at /drafts/publish. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. + + +## 11.4.7 (2018-11-20) + +### Fixed (1 change) + +- Fix code owner as merge request suggestion not available under Starter plan. !8248 + + +## 11.4.6 (2018-11-18) + +### Security (1 change) + +- Prevent templated services from being imported. + + +## 11.4.5 (2018-11-04) + +### Fixed (1 change) + +- Stops showing review actions on commit discussions in merge requests. !8007 + +### Performance (1 change) + +- Add indexes to all geo event foreign keys. !7990 + + +## 11.4.4 (2018-10-30) + +- No changes. + +## 11.4.3 (2018-10-26) + +- No changes. + +## 11.4.2 (2018-10-25) + +### Security (1 change) + +- Escape entity title while autocomplete template rendering to prevent XSS. !707 + + +## 11.4.1 (2018-10-23) + +- No changes. + +## 11.4.0 (2018-10-22) + +### Security (3 changes) + +- Properly filter private references from system notes. +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + +### Removed (1 change) + +- remove unnecessary help text from container scanning results. !7304 + +### Fixed (18 changes, 1 of them is from the community) + +- Prune all the Geo event log tables correctly. !6175 +- Synchronize the default branch when updating a pull mirror. !7242 +- Pushing to a merge request clears the approvals list even if the respective project setting is enabled and there is no fixed required number of approvals configured. !7328 +- Align epics and roadmap empty state buttons to the center. !7358 (George Tsiolis) +- Add link to issue on epic. !7407 +- Check for force env var when rebuilding auth_keys. !7419 +- Update popover URL to point to help page of same domain. !7446 +- Geo - Does not raise error 500 on Geo projects list page for orphaned entries. !7565 +- Show promotion for epics on issues. !7602 +- Fix Epic subscription toggle behaviour. !7723 +- Geo - Send a cache invalidation event via the log cursor whenever features are changed on the primary. !7738 +- Fix epic milestone dates incorrect after issue is linked to another epic. !7809 +- Fixes warning for used minutes in runner showing when user still has minutes. !7843 +- Fix disappearing weight input in Firefox. !7869 +- Don't synchronize default branch when updating a SSH mirror. !7891 +- Fix broken tokenization for filtered search bar in Epics. !7972 +- Fix bug when resolving a discussion via a batch comment published right away. +- Fix wrong color in resolve/unresolve checkbox when using MR reviews. + +### Changed (14 changes) + +- Geo: Decrease frequency of project shard schedulers when few projects to schedule. !7287 +- Added placeholder to weight input for issue sidebar. !7346 +- updated icons used in filtered search dropdowns. !7356 +- Geo: Display helpful feedback when proxying an SSH git push to secondary request. !7357 +- Geo - Include keep-around and other Gitlab-specific references in the checksum calculation. !7367 +- Polish security report externalizations. !7373 +- Listen for resolved Prometheus alerts. !7382 +- Rename date related labels for Epics. !7447 +- Add reports CI syntax for Code Quality reports. !7465 +- Support short reference to epics from project entities. !7475 +- Geo: Downgrade Exclusive Lease warnings from Log Cursor to debug. !7476 +- Geo: Allow nodes to be editable in more scenarios. !7832 +- Account for issues created in the middle of a milestone in burndown chart. +- [Geo] Add CI job artifact numbers to rake geo:status. + +### Performance (1 change) + +- Update DB model for security reports. + +### Added (20 changes, 1 of them is from the community) + +- Batch comments on merge requests. !4213 +- Use Geo log to remove files when migrated to object storage. !5966 +- Add support for closing epics. !7302 +- Add `auditor_groups` configuration so Audit users can be specified using SAML groups. !7340 (St. John Johnson) +- Geo - Add an event to reset checksums on Geo secondary nodes. !7394 +- Starts adding the dashboard page view. !7400 +- Add `Manage licenses` button to MR widget and pipelines view. !7411 +- Add Open/Closed epics tabs in list view. !7424 +- Add Feature Flags MVC. !7433 +- Suggest approvers based on code owners. !7437 +- Geo: Add a backoff time to few Geo workers to save resources. !7470 +- Persist Prometheus alert events. !7493 +- Geo: Added a button to Admin UI > Geo Nodes to open Geo Projects screen of any secondary node. !7512 +- Show Alert Thresholds on monitoring dashboards. !7538 +- Support autocomplete for commands in epics. !7588 +- Add form to enter licenses manually. !7603 +- Geo: Added `All` tab in Geo Nodes > Projects. !7745 +- Geo: Add a Geo Status Widget to Admin > Projects. !7789 +- Add data model and migration for vulnerabilities. +- Adds Batch Comments to Merge Requests [EEP]. + +### Other (8 changes, 1 of them is from the community) + +- Add runner quota information to job API. !7233 +- Resolve "ee:geo QA specs are failing as of !7210". !7315 +- remove readme checkbox from "create project" page. !7332 +- Create a generic JS function that we can apply to being able to track arbitrary events. !7403 +- Rename Admin Area Geo Nodes nav item to Geo. !7466 +- Group weight icon and text on issue list and issue boards. !7484 (George Tsiolis) +- Adds expandable/collapsable section for Snowplow. !7798 +- API: Allow issue weight parameter to be greater than or equal to zero. + + +## 11.3.14 (2018-12-20) + +- No changes. + +## 11.3.13 (2018-12-13) + +- No changes. + +## 11.3.11 (2018-11-26) + +### Security (7 changes) + +- Escape entity title while autocomplete template rendering to prevent XSS. !697 +- Properly filter private references from system notes. +- Authorize users when listing board users and milestones. +- Project groups approvers no longer leak private groups info. +- Resolve: Guest can set weight of a new issue. +- Fixes XSS with merge request approvers selection. +- Protect against CSRF attacks when adding Slack app. + + +## 11.3.10 (2018-11-18) + +- No changes. + +## 11.3.9 (2018-10-31) + +- No changes. + +## 11.3.8 (2018-10-27) + +- No changes. + +## 11.3.7 (2018-10-26) + +### Security (1 change) + +- Escape entity title while autocomplete template rendering to prevent XSS. !697 + + +## 11.3.6 (2018-10-17) + +### Fixed (1 change) + +- Don't reset the default branch when repository mirroring is enabled. !7944 + + +## 11.3.5 (2018-10-15) + +### Fixed (1 change) + +- Fix epic milestone dates incorrect after issue is linked to another epic. !7809 + + +## 11.3.4 (2018-10-05) + +### Security (1 change) + +- Properly filter private references from system notes. + + +## 11.3.3 (2018-10-04) + +- No changes. + +## 11.3.2 (2018-10-03) + +### Fixed (1 change) + +- Geo: repository shard verification job should have unique lease keys per shard name. !7474 + + +## 11.3.1 (2018-09-26) + +### Security (2 changes) + +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + + +## 11.3.0 (2018-09-22) + +### Security (1 change) + +- Prevent regular users from moving projects to different storage shards. + +### Fixed (29 changes, 11 of them are from the community) + +- don't add empty query params to boards. !4441 +- Geo: sync disabled wikis. !6420 +- Rails 5 fix alerts controller spec for post json parameters. !6795 (Jasper Maes) +- Fixes 500 error on user creation from admin panel with spaced username. !6804 (Jacopo Beschi @jacopo-beschi) +- Don't show search results for projects that have been deleted when using elastic search. !6830 +- Geo: Use database-cached status if redis-cached status is unavailable. !6854 +- [Geo] Fix: Custom favicons not being replicated by Geo. !6860 +- Rails5 fix AddMilestoneToLists migration rollback deleting wrong foreign key. !6865 (Jasper Maes) +- Rails5 fix passing Group objects array into for_projects_and_groups milestone scope. !6873 (Jasper Maes) +- Rails5: fix mysql milliseconds problem in project_import_state_spec. !6874 (Jasper Maes) +- Fix Jira integration duplicating branches and MRs. !6876 +- Rails5: fix mysql milliseconds problem in project_spec. !6880 (Jasper Maes) +- Remove https from Snowplow Collector URI placeholder in Admin Areawq. !6886 +- Geo: Replicate keep around refs. !6922 +- Fixes bug that prevented a user from seeing the system header and footer settings on the admin dashboard. !6926 +- Rails5 fix duplicate gpg signature in path lock spec. !6939 (Jasper Maes) +- Rails5: Fix audit event spec. !6940 (Jasper Maes) +- Rails5: fix mysql milliseconds problem in project registry spec. !6943 (Jasper Maes) +- LDAP - Does not update permissions on a read-only database. !6965 +- Rails5 fix project import spec. !6981 (Jasper Maes) +- Geo: Resolve sticky failures when attachments are missing on primary. !6991 +- Geo: LFS batch downloads are OK to be handled by secondary. !7209 +- Geo - Synchronize the default branch in secondary nodes. !7218 +- Handle fixed dates seperately from selected dates in Epics. !7227 +- Fix tooltip string to support dynamic date type in Epic sidebar. !7243 +- Fix an error in docs about fetching artifacts using API. !7244 +- Return proper status code when creation of an alert fails. !7360 (Peter Leitzen) +- Geo - Find the remote root ref using a JWT header for authentication. !7405 +- Add weight to issue hook. + +### Changed (3 changes, 1 of them is from the community) + +- Allow push_code when auth'd via Geo JWT. !6455 +- Prefer From address over Sender for Service Desk emails. !7006 (Andreas Josephson) +- Add CI Job token support to Maven packages API. !7249 + +### Performance (3 changes) + +- Reduce queries needed for CI artifacts on merge request widget. !6978 +- Use limited count approach on Protected Environments view. !6987 +- Limit sidekiq-cluster concurrency to a maximum of 50. !7025 + +### Added (15 changes, 2 of them are from the community) + +- Allow custom notification for new epic event. !5863 +- Geo: SSH git push to secondary -> proxy to Primary. !6456 +- Allow epic start/due dates to be sourceable from issue milestones. !6470 +- Add ability to upload and download maven packages from/to GitLab. !6607 +- Added an instance-level license template project. !6631 (Dan Barker) +- Add backend structure for ProtectedEnvironments. !6672 +- Add UI for GitLab private Maven repository feature. !6781 +- Add support for sorting epics. !6885 +- Allow specifying code owners in a CODEOWNERS file. !6916 +- Quick action for adding/removing epic to issues. !6934 +- Show total and completed instances deployed on deploy boards. !6955 +- Show security analysis status on the environments page. !6987 +- Add Instance Review for Core users. !6995 +- Introduce custom instance-level templates for Dockerfile, .gitignore, and .gitlab-ci.yml files. !7000 +- Adds Rubocop rule to enforce class_methods over module ClassMethods. !7044 (Jacopo Beschi @jacopo-beschi) + +### Other (4 changes) + +- Removes feature flag code surrounding Protected Environments feature. !7338 +- Creates vue component for shared runner limit. +- Allow MR authors to approve their MRs. +- Remove differences between CE and EE settings panel component. + + +## 11.2.8 (2018-10-31) + +- No changes. + +## 11.2.7 (2018-10-27) + +- No changes. + +## 11.2.6 (2018-10-26) + +### Security (1 change) + +- Escape entity title while autocomplete template rendering to prevent XSS. !698 + + +## 11.2.5 (2018-10-05) + +### Security (1 change) + +- Properly filter private references from system notes. + + +## 11.2.4 (2018-09-26) + +### Security (2 changes) + +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + + +## 11.2.3 (2018-08-28) + +- No changes. + +## 11.2.2 (2018-08-27) + +### Security (1 change) + +- Prevent regular users from moving projects to different storage shards. + + +## 11.2.1 (2018-08-22) + +- No changes. + +## 11.2.0 (2018-08-22) + +### Security (1 change) + +- Don't expose project names in EE counters. + +### Fixed (32 changes, 11 of them are from the community) + +- Allow Geo node to be edited once the database is failed over. !6248 +- Fix a bug where user was unable to delete a branch when repo size was above the limit. !6373 +- Rails5 fix AttachmentRegistryFinder arel queries. !6396 (Jasper Maes) +- Add Premium license checks for system messages. !6460 +- Fixes arrow-icon color and alignment in linked pipeline in merge request widget. !6479 +- Rails 5 fix the matcher expected the ApplicationSetting to be invalid, but it was valid instead. !6488 (Jasper Maes) +- Geo: Gracefully handle deleted events from Geo event log. !6506 +- Rails5 fix NoMethodError: undefined method 'message' for nil:NilClass. !6507 (Jasper Maes) +- Fix billing card title colors. !6563 +- Rails5 fix undefined method 'namespace_project_settings_repository_path'. !6581 (Jasper Maes) +- Rails5 fix no implicit conversion of Symbol into Integer. !6582 (Jasper Maes) +- Rails 5 fix NoMethodError: undefined method 'message' for nil:NilClass in host_spec.rb. !6589 (Jasper Maes) +- Fix mobile view of pod logs. !6597 +- Add left-padding to diverged-from-upstream label. !6647 +- List groups with developer maintainer access on project creation. !6678 +- no longer fail when setting up Geo database with GDK. !6680 +- Allow Pseudonymizer to write to a bucket without having permissions to see all buckets. !6682 +- Hide Expand button on empty MR widget Performance section. !6685 +- Ensure that Create issue button is shown in vulnerability dialog. !6708 +- Use same gem versions for Rails 5 as for Rails 4. !6712 (Jasper Maes) +- Rails5 correct wrong geo job name. !6713 (Jasper Maes) +- Elasticsearch: Fix a bug causing some types of note to miss being indexed. !6736 +- Rails 5 fix product array method delagation by manually calling .to_a in NotificationService. !6753 (Jasper Maes) +- Adjust self-hosted Jira development panel integration. !6756 +- Ensure that push size checks only count the size of newly-pushed files. !6767 +- Fix the UI for listing system-level labels. !6805 +- Rails5: fix slice in burndown fixture. !6813 (Jasper Maes) +- Rails5: fix Arel::UpdateManager in MigrateOldElasticsearchSettings migration. !6815 (Jasper Maes) +- Corrected URL for snowplow client side JS. !6899 +- [Geo] Fix the Storage config parameter in Geo nodes admin page. +- Fix exporting issues to CSV when sorting by label priority is used. +- Fix handling of annotated tags when Gitaly is not in use. + +### Changed (9 changes, 2 of them are from the community) + +- Add related issues loading icon top margin. !6527 (George Tsiolis) +- Add security products to usage ping. !6602 +- Changed copy for "Approved" state in merge request widget. !6635 (Constance Okoghenun) +- Track the Geo event log gaps in redis and handle them later. !6640 +- Replace clipboard icon in Service Desk settings. !6643 +- Removes "show all" on security reports and adds a button to take you to the pipeline page. !6675 +- Shows license reports when there are no reports in the source branch. !6720 +- Removes status text from licence reports. !6802 +- Opens "view full report" links in a new window. !6806 + +### Performance (2 changes) + +- Geo: Improve Geo Status API performance with cached counters in SiteStatistic. !6328 +- Geo: Improve performance in Log Cursor gap tracking. !6754 + +### Added (19 changes) + +- Geo: Add repository verification failures to API. !6137 +- Add support for todos on epics. !6142 +- Summed issue weights in board columns. !6218 +- Add an API endpoint for managed licenses of a project. !6246 +- Implement custom project templates. !6436 +- Projects page under Admin > Geo Nodes to display detailed synchronization information. !6452 +- Enables configuration of pull mirroring through API. !6485 +- Adds SLI alerts to custom prometheus metrics. !6590 +- Add support for milestones lists on the issue boards. !6615 +- Persist Epic Roadmap timescale choice. !6637 +- Add license management frontend. !6638 +- Add Snowplow integration. !6642 +- Add Security Dashboard to project quick links. !6652 +- Show License Management at pipeline level. !6688 +- Add Frontend for Instance-level project templates. !6740 +- Geo - Actively try to correct verification failures on the secondary. !6759 +- Add Prometheus metrics to track Geo autocorrect numbers. !6778 +- Link the License Management report in the MR widget with the pipeline level one. !6800 +- Allow creating assignee lists via API. + +### Other (8 changes, 1 of them is from the community) + +- Move merge requests EE helper methods. !6461 (George Tsiolis) +- Add additional logging for Geo Log Cursor. !6513 +- Ensure no weight change system notes end with a superfluous comma. !6571 +- Track registries marked as synced when repository does not found. !6694 +- Removes EE specific CSS that was moved to CE. !6723 +- Geo: Add rake task to resync projects where verification has failed. !6727 +- updates column sizes in licence and security modals. !6808 +- Geo: Log to geo.log when the Log Cursor skips an event. + + +## 11.1.7 (2018-09-26) + +### Security (2 changes) + +- Project groups approvers no longer leak private groups info. +- Protect against CSRF attacks when adding Slack app. + + +## 11.1.6 (2018-08-28) + +- No changes. + +## 11.1.5 (2018-08-27) + +- No changes. +### Security (1 change) + +- Prevent regular users from moving projects to different storage shards. + + +## 11.1.4 (2018-07-30) + +- No changes. + +## 11.1.3 (2018-07-27) + +### Fixed (1 change) + +- Resolve Environments dropdown is showing on the cluster health page. !6528 + + +## 11.1.2 (2018-07-26) + +### Security (1 change) + +- Don't expose project names in EE counters. + + +## 11.1.1 (2018-07-23) + +### Fixed (2 changes) + +- Fix geo download service ImportExportDownloader unitialized constant. !6567 +- Geo - Allow repository verification to be disabled on a secondary node. !6599 + + +## 11.1.0 (2018-07-22) + +### Removed (1 change) + +- Drop ignored Geo repository_storage_path columns. !5468 + +### Fixed (19 changes, 7 of them are from the community) + +- Log audit and Geo events within a project destroy transaction. !6059 +- Do not pre-select previous user(s) when creating protected branches. !6112 +- Group SAML settings link hidden when unlicensed. !6147 +- Geo: Fix repository/wiki sync race condition with multiple updates, especially in quick succession. !6161 +- [Rails5] Fix error on missed :authenticate_user callback. !6257 (@blackst0ne) +- Rails5 fix expected: ({...}) got: ( to clipboard. !1048 + +## 8.15.8 (2017-03-19) + +- No changes. +- No changes. +- Elastic security fix: Respect feature visibility level. + +## 8.15.7 (2017-02-15) + +- No changes. + +## 8.15.6 (2017-02-14) + +- No changes. + +## 8.15.5 (2017-01-20) + +- No changes. + +## 8.15.4 (2017-01-09) + +- No changes. + +## 8.15.3 (2017-01-06) + +- Disable LDAP permission override in project members edit list. +- Perform only one fetch per push on Geo secondary nodes. + +## 8.15.2 (2016-12-27) + +- No changes. +- Fix ES search for non-default branches. + +## 8.15.1 (2016-12-23) + +- Fix 404/500 error while navigating to the 'show/destroy' pages. !993 + +## 8.15.0 (2016-12-22) + +- Adds a check ensure only active, ie. non-blocked users can be emailed from the admin panel. +- Add user activities API. +- Add milestone total weight to the milestone summary. +- Allow master/owner to change permission levels when LDAP group sync is enabled. !822 +- Geo: Improve project view UI to teach users how to clone from a secondary Geo node and push to a primary. !905 +- Technical debt follow-up from restricting pushes / merges by group. !927 +- Geo: Enables nodes to be removed even without proper license. !978 +- Update validates_hostname to 1.0.6 to fix a bug in parsing hexadecimal-looking domain names. !982 + +## 8.14.10 (2017-02-15) + +- No changes. + +## 8.14.9 (2017-02-14) + +- No changes. + +## 8.14.8 (2017-01-25) + +- No changes. + +## 8.14.7 (2017-01-21) + +- No changes. + +## 8.14.6 (2017-01-10) + +- No changes. + +## 8.14.5 (2016-12-14) + +- Add milestone total weight to the milestone summary. + +## 8.14.4 (2016-12-08) + +- No changes. + +## 8.14.3 (2016-12-02) + +- No changes. + +## 8.14.2 (2016-12-01) + +- No changes. + +## 8.14.1 (2016-11-28) + +- Fix: MergeRequestSerializer breaks on MergeRequest#rebase_dir_path when source_project doesn't exist anymore. + +## 8.14.0 (2016-11-22) + +- Added Backfill service for Geo. !861 +- Fix for autosuggested approvers(https://gitlab.com/gitlab-org/gitlab-ee/issues/1273). +- Gracefully recover from previously failed rebase. +- Disable retries for remote mirror update worker. !848 +- Fix Approvals API documentation. +- Add ability to set approvals_before_merge for project through the API. +- gitlab:check rake task checks ES version according to requirements +- Convert ASCII-8BIT LDAP DNs to UTF-8 to avoid unnecessary user deletions +- [Fix] Only owner can see "Projects" button in group edit menu + +## 8.13.12 (2017-01-21) + +- No changes. + +## 8.13.11 (2017-01-10) + +- No changes. + +## 8.13.10 (2016-12-14) + +- No changes. + +## 8.13.9 (2016-12-08) + +- No changes. + +## 8.13.8 (2016-12-02) + +- No changes. + +## 8.13.7 (2016-11-28) + +- No changes. + +## 8.13.6 (2016-11-17) + +- Disable retries for remote mirror update worker. !848 +- Fixed cache clearing on secondary Geo nodes. !869 +- Geo: fix a problem that prevented git cloning from secondary node. !873 + +## 8.13.5 (2016-11-08) + +- No changes + +## 8.13.4 (2016-11-07) + +- Weight dropdown in issue filter form does not stay selected. !826 + +## 8.13.3 (2016-11-02) + +- No changes + +## 8.13.2 (2016-10-31) + +- Don't pass a current user to Member#add_user in LDAP group sync. !830 + +## 8.13.1 (2016-10-25) + +- Hide multiple board actions if user doesnt have permissions. !816 +- Fix Elasticsearch::Transport::Transport::Errors::BadRequest when ES is enabled. !818 + +## 8.13.0 (2016-10-22) + +- Cache the last usage data to avoid unicorn timeouts +- Add user activity table and service to query for active users +- Fix 500 error updating mirror URLs for projects +- Restrict protected branch access to specific groups !645 +- Fix validations related to mirroring settings form. !773 +- Add multiple issue boards. !782 +- Fix Git access panel for Wikis when Kerberos authentication is enabled (Borja Aparicio) +- Decrease maximum time that GitLab waits for a mirror to finish !791 (Borja Aparicio) +- User groups (that can be assigned as approvers) +- Fix a search for non-default branches when ES is enabled +- Re-organized the Sidekiq queues for EE specific workers + +## 8.12.12 (2016-12-08) + +- No changes. + +## 8.12.11 (2016-12-02) + +- No changes. + +## 8.12.10 (2016-11-28) + +- No changes. + +## 8.12.9 (2016-11-07) + +- No changes + +## 8.12.8 (2016-11-02) + +- No changes + +## 8.12.7 + + - No EE-specific changes + +## 8.12.6 + + - No EE-specific changes + +## 8.12.5 + + - No EE-specific changes + +## 8.12.4 + + - [ES] Indexer works with smaller batches of repositories to not exceed NOFILE limit. !774 + +## 8.12.3 + + - Fix prevent_secrets checkbox on admin view + +## 8.12.2 + + - Fix bug when protecting a branch due to missing url paramenter in request !760 + - Ignore unknown project ID in RepositoryUpdateMirrorWorker + +## 8.12.1 + + - Prevent secrets to be pushed to the repository + - Prevent secrets to be pushed to the repository + +## 8.12.0 (2016-09-22) + + - Include more data in EE usage ping + - Reduce UPDATE queries when moving between import states on projects + - [ES] Instrument Elasticsearch::Git::Repository + - Request only the LDAP attributes we need + - Add 'Sync now' to group members page !704 + - Add repository size limits and enforce them !740 + - [ES] Instrument other Gitlab::Elastic classes + - [ES] Fix: Elasticsearch does not find partial matches in project names + - Faster Active Directory group membership resolution !719 + - [ES] Global code search + - [ES] Improve logging + - Fix projects with remote mirrors asynchronously destruction + +## 8.11.11 (2016-11-07) + +- No changes + +## 8.11.10 (2016-11-02) + +- No changes + +## 8.11.9 + + - No EE-specific changes + +## 8.11.8 + + - No EE-specific changes + +## 8.11.7 + + - Refactor Protected Branches dropdown. !687 + - Fix mirrored projects allowing empty import urls. !700 + +## 8.11.6 + + - Exclude blocked users from potential MR approvers. + +## 8.11.5 + + - API: Restore backward-compatibility for POST /projects/:id/members when membership is locked + +## 8.11.4 + + - No EE-specific changes + +## 8.11.3 + + - [ES] Add logging to indexer + - Fix missing EE-specific service parameters for Jenkins CI + - Set the correct `GL_PROTOCOL` when rebasing !691 + - [ES] Elasticsearch workers checks ES settings before running + +## 8.11.2 + + - Additional documentation on protected branches for EE + - Change slash commands docs location + +## 8.11.1 + + - Pulled due to packaging error. + +## 8.11.0 (2016-08-22) + + - Allow projects to be moved between repository storages + - Add rake task to remove old repository copies from repositories moved to another storage + - Performance improvement of push rules + - Temporary fix for #825 - LDAP sync converts access requests to members. !655 + - Optimize commit and diff changes access check to reduce git operations + - Allow syncing a group against all providers at once + - Change LdapGroupSyncWorker to use new LDAP group sync classes + - Allow LDAP `sync_ssh_keys` setting to be set to `true` + - Removed unused GitLab GEO database index + - Restrict protected branch access to specific users !581 + - Enable monitoring for ES classes + - [Elastic] Improve code search + - [Elastic] Significant improvement of global search performance + - [Fix] Push rules check existing commits in some cases + - [ES] Limit amount of retries for sidekiq jobs + - Fix Projects::UpdateMirrorService to allow tags pointing to blob objects + +## 8.10.12 + + - No EE-specific changes + +## 8.10.11 + + - No EE-specific changes + +## 8.10.10 + + - No EE-specific changes + +## 8.10.9 + + - Exclude blocked users from potential MR approvers. + +## 8.10.8 + + - No EE-specific changes + +## 8.10.7 + + - No EE-specific changes + +## 8.10.6 + + - Fix race condition with UpdateMirrorWorker Lease. !641 + +## 8.10.5 + + - Used cached value of project count in `Elastic::RepositoriesSearch` to reduce DB load. !637 + +## 8.10.4 + + - Fix available users in userselect dropdown when there is more than one userselect on the page. !604 (Rik de Groot) + - Fix updating skipped approvers in search list on removal. !604 (Rik de Groot) + +## 8.10.3 + + - Fix regression in Git Annex permission check. !599 + - [Elastic] Fix commit search for some URLs. !605 + - [Elastic][Fix] Commit search breaks for some URLs on gitlab-ce project + +## 8.10.2 + + - Fix pagination on search result page when ES search is enabled. !592 + - Decouple an ES index update from `RepositoryUpdateMirrorWorker`. !593 + - Fix broken `user_allowed?` check in Git Annex push. !597 + +## 8.10.1 + + - No EE-specific changes + +## 8.10.0 (2016-07-22) + + - Add EE license usage ping !557 + - Rename Git Hooks to Push Rules + - Fix EE keys fingerprint add index migration if came from CE + - Add todos for MR approvers !547 + - Replace LDAP group sync exclusive lease with state machine + - Prevent the author of an MR from being on the approvers list + - Isolate EE LDAP library code in EE module (Part 1) !511 + - Make Elasticsearch indexer run as an async task + - Fix of removing wiki data from index when project is deleted + - Ticket-based Kerberos authentication (SPNEGO) + - [Elastic] Suppress ActiveRecord::RecordNotFound error in ElasticIndexWorker + +## 8.9.10 + + - No EE-specific changes + +## 8.9.9 + + - No EE-specific changes + +## 8.9.8 + + - No EE-specific changes + +## 8.9.7 + + - No EE-specific changes + +## 8.9.6 + + - Avoid adding index for key fingerprint if it already exists. !539 + +## 8.9.5 + + - Fix of quoted text in lock tooltip. !518 + +## 8.9.4 + + - Improve how File Lock feature works with nested items. !497 + +## 8.9.3 + + - Fix encrypted data backwards compatibility after upgrading attr_encrypted gem. !502 + - Fix creating MRs on forks of deleted projects. !503 + - Roll back Grack::Auth to fix Git HTTP SPNEGO. !504 + +## 8.9.2 + + - [Elastic] Fix visibility of snippets when searching. + +## 8.9.1 + + - Improve Geo documentation. !431 + - Fix remote mirror stuck on started issue. !491 + - Fix MR creation from forks where target project has approvals enabled. !496 + - Fix MR edit where target project has approvals enabled. !496 + - Fix vertical alignment of git-hooks page. !499 + +## 8.9.0 (2016-06-22) + + - Fix JenkinsService test button + - Fix nil user handling in UpdateMirrorService + - Allow overriding the number of approvers for a merge request + - Allow LDAP to mark users as external based on their group membership. !432 + - Instrument instance methods of Gitlab::InsecureKeyFingerprint class + - Add API endpoint for Merge Request Approvals !449 + - Send notification email when merge request is approved + - Distribute RepositoryUpdateMirror jobs in time and add exclusive lease on them by project_id + - [Elastic] Move ES settings to application settings + - Always allow merging a merge request whenever fast-forward is possible. !454 + - Disable mirror flag for projects without import_url + - UpdateMirror service return an error status when no mirror + - Don't reset approvals when rebasing an MR from the UI + - Show flash notice when Git Hooks are updated successfully + - Remove explicit Gitlab::Metrics.action assignments, are already automatic. + - [Elastic] Project members with guest role can't access confidential issues + - Ability to lock file or folder in the repository + - Fix: Git hooks don't fire when committing from the UI + +## 8.8.9 + + - No EE-specific changes + +## 8.8.8 + + - No EE-specific changes + +## 8.8.7 + + - No EE-specific changes + +## 8.8.6 + + - [Elastic] Fix visibility of snippets when searching. + +## 8.8.5 + + - Make sure OAuth routes that we generate for Geo matches with the ones in Rails routes !444 + +## 8.8.4 + + - Remove license overusage message + +## 8.8.3 + + - Add standard web hook headers to Jenkins CI post. !374 + - Gracefully handle malformed DNs in LDAP group sync. !392 + - Reduce load on DB for license upgrade check. !421 + - Make it clear the license overusage message is visible only to admins. !423 + - Fix Git hook validations for fast-forward merges. !427 + - [Elastic] In search results, only show notes on confidential issues that the user has access to. + +## 8.8.2 + + - Fix repository mirror updates for new imports stuck in started + - [Elastic] Search through the filenames. !409 + - Fix repository mirror updates for new imports stuck in "started" state. !416 + +## 8.8.1 + + - No EE-specific changes + +## 8.8.0 (2016-05-22) + + - [Elastic] Database indexer prints its status + - [Elastic][Fix] Database indexer skips projects with invalid HEAD reference + - Fix skipping pages when restoring backups + - Add EE license via API !400 + - [Elastic] More efficient snippets search + - [Elastic] Add rake task for removing all indexes + - [Elastic] Add rake task for clearing indexing status + - [Elastic] Improve code search + - [Elastic] Fix encoding issues during indexing + - Warn admin if current active count exceeds license + - [Elastic] Search through the filenames + - Set KRB5 as default clone protocol when Kerberos is enabled and user is logged in (Borja Aparicio) + - Add support for Admin Groups to SAML + - Reduce emails-on-push HTML size by using a simple monospace font + - API requests to /internal/authorized_keys are now tagged properly + - Geo: Single Sign Out support !380 + +## 8.7.9 + + - No EE-specific changes + +## 8.7.8 + + - [Elastic] Fix visibility of snippets when searching. + +## 8.7.7 + + - No EE-specific changes + +## 8.7.6 + + - Bump GitLab Pages to 0.2.4 to fix Content-Type for predefined 404 + +## 8.7.5 + + - No EE-specific changes + +## 8.7.4 + + - Delete ProjectImportData record only if Project is not a mirror !370 + - Fixed typo in GitLab GEO license check alert !379 + - Fix LDAP access level spillover bug !499 + +## 8.7.3 + + - No EE-specific changes + +## 8.7.2 + + - Fix MR notifications for slack and hipchat when approvals are fullfiled. !325 + - GitLab Geo: Merge requests on Secondary should not check mergeable status + +## 8.7.1 + + - No EE-specific changes + +## 8.7.0 (2016-04-22) + + - Update GitLab Pages to 0.2.1: support user-defined 404 pages + - Refactor group sync to pull access level logic to its own class. !306 + - [Elastic] Stabilize database indexer if database is inconsistent + - Add ability to sync to remote mirrors. !249 + - GitLab Geo: Many replication improvements and fixes !354 + +## 8.6.9 + + - No EE-specific changes + +## 8.6.8 + + - No EE-specific changes + +## 8.6.7 + + - No EE-specific changes + +## 8.6.6 + + - Concat AD group recursive member results with regular member results. !333 + - Fix LDAP group sync regression for groups with member value `uid=`. !335 + - Don't attempt to include too large diffs in e-mail-on-push messages (Stan Hu). !338 + +## 8.6.5 + + - No EE-specific changes + +## 8.6.4 + + - No EE-specific changes + +## 8.6.3 + + - Fix other cases where git hooks would fail due to old commits. !310 + - Exit ElasticIndexerWorker's job happily if record cannot be found. !311 + - Fix "Reload with full diff" button not working (Stan Hu). !313 + +## 8.6.2 + + - Fix old commits triggering git hooks on new branches branched off another branch. !281 + - Fix issue with deleted user in audit event (Stan Hu). !284 + - Mark pending todos as done when approving a merge request. !292 + - GitLab Geo: Display Attachments from Primary node. !302 + +## 8.6.1 + + - Only rename the `light_logo` column in the `appearances` table if its not there yet. !290 + - Fix diffs in text part of email-on-push messages (Stan Hu). !293 + - Fix an issue with methods not accessible in some controllers. !295 + - Ensure Projects::ApproversController inherits from Projects::ApplicationController. !296 + +## 8.6.0 (2016-03-22) + + - Handle duplicate appearances table creation issue with upgrade from CE to EE + - Add confidential issues + - Improve weight filter for issues + - Update settings and documentation for per-install LDAP sync time + - Fire merge request webhooks when a merge request is approved + - Add full diff highlighting to Email on push + - Clear "stuck" mirror updates before periodically updating all mirrors + - LDAP: Don't render Linked LDAP groups forms when LDAP is disabled + - [Elastic] Add elastic checker to gitlab:check + - [Elastic] Added UPDATE_INDEX option to rake task + - [Elastic] Removing repository and wiki index after removing project + - [Elastic] Update index on push to wiki + - [Elastic] Use subprocesses for ElasticSearch index jobs + - [Elastic] More accurate as_indexed_json (More stable database indexer) + - [Elastic] Fix: Don't index newly created system messages and awards + - [Elastic] Fixed exception on branch removing + - [Elastic] Fix bin/elastic_repo_indexer to follow config + - GitLab Geo: OAuth authentication + - GitLab Geo: Wiki synchronization + - GitLab Geo: ReadOnly Middleware improvements + - GitLab Geo: SSH Keys synchronization + - Allow SSL verification to be configurable when importing GitHub projects + - Disable git-hooks for git annex commits + +## 8.5.13 + + - No EE-specific changes + +## 8.5.12 + + - No EE-specific changes + +## 8.5.11 + + - Fix vulnerability that made it possible to enumerate private projects belonging to group + +## 8.5.10 + + - No EE-specific changes + +## 8.5.9 + + - No EE-specific changes + +## 8.5.8 + + - GitLab Geo: Documentation + +## 8.5.7 + + - No EE-specific changes + +## 8.5.6 + + - No EE-specific changes + +## 8.5.5 + + - GitLab Geo: Repository synchronization between primary and secondary nodes + - Add documentation for GitLab Pages + - Fix importing projects from GitHub Enterprise Edition + - Fix syntax error in init file + - Only show group member roles if explicitly requested + - GitLab Geo: Improve GeoNodes Admin screen + - GitLab Geo: Avoid locking yourself out when adding a GeoNode + +## 8.5.4 + + - [Elastic][Security] Notes exposure + +## 8.5.3 + + - Prevent LDAP from downgrading a group's last owner + - Update gitlab-elastic-search gem to 0.0.11 + +## 8.5.2 + + - Update LDAP groups asynchronously + - Fix an issue when weight text was displayed in Issuable collapsed sidebar +## 8.5.2 + + - Fix importing projects from GitHub Enterprise Edition. + +## 8.5.1 + + - Fix adding pages domain to projects in groups + +## 8.5.0 (2016-02-22) + + - Fix Elasticsearch blob results linking to the wrong reference ID (Stan Hu) + - Show warning when mirror repository default branch could not be updated because it has diverged from upstream. + - More reliable wiki indexer + - GitLab Pages gets support for custom domain and custom certificate + - Fix of Elastic indexer. It should not trigger record validation for projects + - Fix of Elastic indexer. Stabilze indexer when serialized data is corrupted + - [Elastic] Don't index unnecessary data into elastic + +## 8.4.11 + + - No EE-specific changes + +## 8.4.10 + + - No EE-specific changes + +## 8.4.9 + + - Fix vulnerability that made it possible to enumerate private projects belonging to group + +## 8.4.8 + + - No EE-specific changes + +## 8.4.7 + + - No EE-specific changes + +## 8.4.6 + + - No EE-specific changes + +## 8.4.5 + + - Update LDAP groups asynchronously + +## 8.4.4 + + - Re-introduce "Send email to users" link in Admin area + - Fix category values for Jenkins and JenkinsDeprecated services + - Fix Elasticsearch indexing for newly added snippets + - Make Elasticsearch indexer more stable + - Update gitlab-elasticsearch-git to 0.0.10 which contain a few important fixes + +## 8.4.3 + + - Elasticsearch: fix partial blob indexing on push + - Elasticsearch: added advanced indexer for repositories + - Fix Mirror User dropdown + +## 8.4.2 + + - Elasticsearch indexer performance improvements + - Don't redirect away from Mirror Repository settings when repo is empty + - Fix updating of branches in mirrored repository + - Fix a 500 error preventing LDAP users with 2FA enabled from logging in + - Rake task gitlab:elastic:index_repositories handles errors and shows progress + - Partial indexing of repo on push (indexing changes only) + +## 8.4.1 + + - No EE-specific changes + +## 8.4.0 (2016-01-22) + + - Add ability to create a note for user by admin + - Fix "Commit was rejected by git hook", when max_file_size was set null in project's Git hooks + - Fix "Approvals are not reset after a new push is made if the request is coming from a fork" + - Fix "User is not automatically removed from suggested approvers list if user is deleted" + - Add option to enforce a semi-linear history by only allowing merge requests to be merged that have been rebased + - Add option to trigger builds when branches or tags are updated from a mirrored upstream repository + - Ability to use Elasticsearch as a search engine + +## 8.3.10 + + - No EE-specific changes + +## 8.3.9 + + - No EE-specific changes + +## 8.3.8 + + - Fix vulnerability that made it possible to enumerate private projects belonging to group + +## 8.3.7 + + - No EE-specific changes + +## 8.3.6 + + - No EE-specific changes + +## 8.3.5 + + - No EE-specific changes + +## 8.3.4 + + - No EE-specific changes + +## 8.3.3 + + - Fix undefined method call in Jenkins integration service + +## 8.3.2 + + - No EE-specific changes + +## 8.3.1 + + - Rename "Group Statistics" to "Contribution Analytics" + +## 8.3.0 (2015-12-22) + + - License information can now be retrieved via the API + - Show Kerberos clone url when Kerberos enabled and url different than HTTP url (Borja Aparicio) + - Fix bug with negative approvals required + - Add group contribution analytics page + - Add GitLab Pages + - Add group contribution statistics page + - Automatically import Kerberos identities from Active Directory when Kerberos is enabled (Alex Lossent) + - Canonicalization of Kerberos identities to always include realm (Alex Lossent) + +## 8.2.6 + + - No EE-specific changes + +## 8.2.5 + + - No EE-specific changes + +## 8.2.4 + + - No EE-specific changes + +## 8.2.3 + + - No EE-specific changes + +## 8.2.2 + + - Fix 404 in redirection after removing a project (Stan Hu) + - Ensure cached application settings are refreshed at startup (Stan Hu) + - Fix Error 500 when viewing user's personal projects from admin page (Stan Hu) + - Fix: Raw private snippets access workflow + - Prevent "413 Request entity too large" errors when pushing large files with LFS + - Ensure GitLab fires custom update hooks after commit via UI + +## 8.2.1 + + - Forcefully update builds that didn't want to update with state machine + - Fix: saving GitLabCiService as Admin Template + +## 8.2.0 (2015-11-22) + + - Invalidate stored jira password if the endpoint URL is changed + - Fix: Page is not reloaded periodically to check if rebase is finished + - When someone as marked as a required approver for a merge request, an email should be sent + - Allow configuring the Jira API path (Alex Lossent) + - Fix "Rebase onto master" + - Ensure a comment is properly recorded in JIRA when a merge request is accepted + - Allow groups to appear in the `Share with group` share if the group owner allows it + - Add option to mirror an upstream repository. + +## 8.1.4 + + - Fix bug in JIRA integration which prevented merge requests from being accepted when using issue closing pattern + +## 8.1.3 + + - Fix "Rebase onto master" + +## 8.1.2 + + - Prevent a 500 error related to the JIRA external issue tracker service + +## 8.1.1 + + - Removed, see 8.1.2 + +## 8.1.0 (2015-10-22) + + - Add documentation for "Share project with group" API call + - Added an issues template (Hannes Rosenögger) + - Add documentation for "Share project with group" API call + - Ability to disable 'Share with Group' feature (via UI and API) + +## 8.0.6 + + - No EE-specific changes + +## 8.0.5 + + - "Multi-project" and "Treat unstable builds as passing" parameters for + the Jenkins CI service are now correctly persisted. + - Correct the build URL when "Multi-project" is enabled for the Jenkins CI + service. + +## 8.0.4 + + - Fix multi-project setup for Jenkins + +## 8.0.3 + + - No EE-specific changes + +## 8.0.2 + + - No EE-specific changes + +## 8.0.1 + + - Correct gem dependency versions + - Re-add the "Help Text" feature that was inadvertently removed + +## 8.0.0 (2015-09-22) + + - Fix navigation issue when viewing Group Settings pages + - Guests and Reporters can approve merge request as well + - Add fast-forward merge option in project settings + - Separate rebase & fast-forward merge features + +## 7.14.3 + + - No changes + +## 7.14.2 + + - Fix the rebase before merge feature + +## 7.14.1 + + - Fix sign in form when just Kerberos is enabled + +## 7.14.0 (2015-08-22) + + - Disable adding, updating and removing members from a group that is synced with LDAP + - Don't send "Added to group" notifications when group is LDAP synched + - Fix importing projects from GitHub Enterprise Edition. + - Automatic approver suggestions (based on an authority of the code) + - Add support for Jenkins unstable status + - Automatic approver suggestions (based on an authority of the code) + - Support Kerberos ticket-based authentication for Git HTTP access + +## 7.13.3 + + - Merge community edition changes for version 7.13.3 + - Improved validation for an approver + - Don't resend admin email to everyone if one delivery fails + - Added migration for removing of invalid approvers + +## 7.13.2 + + - Fix group web hook + - Don't resend admin email to everyone if one delivery fails + +## 7.13.1 + + - Merge community edition changes for version 7.13.1 + - Fix: "Rebase before merge" doesn't work when source branch is in the same project + +## 7.13.0 (2015-07-22) + + - Fix git hook validation on initial push to master branch. + - Reset approvals on push + - Fix 500 error when the source project of an MR is deleted + - Ability to define merge request approvers + +## 7.12.2 + + - Fixed the alignment of project settings icons + +## 7.12.1 + + - No changes specific to EE + +## 7.12.0 (2015-06-22) + + - Fix error when viewing merge request with a commit that includes "Closes #". + - Enhance LDAP group synchronization to check also for member attributes that only contain "uid=" + - Enhance LDAP group synchronization to check also for submember attributes + - Prevent LDAP group sync from removing a group's last owner + - Add Git hook to validate maximum file size. + - Project setting: approve merge request by N users before accept + - Support automatic branch jobs created by Jenkins in CI Status + - Add API support for adding and removing LDAP group links + +## 7.11.4 + + - no changes specific to EE + +## 7.11.3 + + - Fixed an issue with git annex + +## 7.11.2 + + - Fixed license upload and verification mechanism + +## 7.11.0 (2015-05-22) + + - Skip git hooks commit validation when pushing new tag. + - Add Two-factor authentication (2FA) for LDAP logins + +## 7.10.1 + + - Check if comment exists in Jira before sending a reference + +## 7.10.0 (2015-04-22) + + - Improve UI for next pages: Group LDAP sync, Project git hooks, Project share with groups, Admin -> Appearance settigns + - Default git hooks for new projects + - Fix LDAP group links page by using new group members route. + - Skip email confirmation when updated via LDAP. + +## 7.9.0 (2015-03-22) + + - Strip prefixes and suffixes from synced SSH keys: + `SSHKey:ssh-rsa keykeykey` and `ssh-rsa keykeykey (SSH key)` will now work + - Check if LDAP admin group exists before querying for user membership + - Use one custom header logo for all GitLab themes in appearance settings + - Escape wildcards when searching LDAP by group name. + - Group level Web Hooks + - Don't allow project to be shared with the group it is already in. + +## 7.8.0 (2015-02-22) + + - Improved Jira issue closing integration + - Improved message logging for Jira integration + - Added option of referencing JIRA issues from GitLab + - Update Sidetiq to 0.6.3 + - Added Github Enterprise importer + - When project has MR rebase enabled, MR will have rebase checkbox selected by default + - Minor UI fixes for sidebar navigation + - Manage large binaries with git annex + +## 7.7.0 (2015-01-22) + + - Added custom header logo support (Drew Blessing) + - Fixed preview appearance bug + - Improve performance for selectboxes: project share page, admin email users page + +## 7.6.2 + + - Fix failing migrations for MySQL, LDAP + +## 7.6.1 + + - No changes + +## 7.6.0 (2014-12-22) + + - Added Audit events related to membership changes for groups and projects + - Added option to attempt a rebase before merging merge request + - Dont show LDAP groups settings if LDAP disabled + - Added member lock for groups to disallow membership additions on project level + - Rebase on merge request. Introduced merge request option to rebase before merging + - Better message for failed pushes because of git hooks + - Kerberos support for web interface and git HTTP + +## 7.5.3 + + - Only set up Sidetiq from a Sidekiq server process (fixes Redis::InheritedError) + +## 7.5.0 (2014-11-22) + + - Added an ability to check each author commit's email by regex + - Added an ability to restrict commit authors to existing GitLab users + - Add an option for automatic daily LDAP user sync + - Added git hook for preventing tag removal to API + - Added git hook for setting commit message regex to API + - Added an ability to block commits with certain filenames by regex expression + - Improved a jenkins parser + +## 7.4.4 + + - Fix broken ldap migration + +## 7.4.0 (2014-10-22) + + - Support for multiple LDAP servers + - Skip AD specific LDAP checks + - Do not show ldap users in dropdowns for groups with enabled ldap-sync + - Update the JIRA integration documentation + - Reset the homepage to show the GitLab logo by deleting the custom logo. + +## 7.3.0 (2014-09-22) + + - Add an option to change the LDAP sync time from default 1 hour + - User will receive an email when unsubscribed from admin notifications + - Show group sharing members on /my/project/team + - Improve explanation of the LDAP permission reset + - Fix some navigation issues + - Added support for multiple LDAP groups per GitLab group + +## 7.2.0 (2014-08-22) + + - Improve Redmine integration + - Better logging for the JIRA issue closing service + - Administrators can now send email to all users through the admin interface + - JIRA issue transition ID is now customizable + - LDAP group settings are now visible in admin group show page and group members page + +## 7.1.0 (2014-07-22) + + - Synchronize LDAP-enabled GitLab administrators with an LDAP group (Marvin Frick, sponsored by SinnerSchrader) + - Synchronize SSH keys with LDAP (Oleg Girko (Jolla) and Marvin Frick (SinnerSchrader)) + - Support Jenkins jobs with multiple modules (Marvin Frick, sponsored by SinnerSchrader) + +## 7.0.0 (2014-06-22) + + - Fix: empty brand images are displayed as empty image_tag on login page (Marvin Frick, sponsored by SinnerSchrader) + +## 6.9.4 + + - Fix bug in JIRA Issue closing triggered by commit messages + - Fix JIRA issue reference bug + +## 6.9.3 + + - Fix check CI status only when CI service is enabled(Daniel Aquino) + +## 6.9.2 + + - Merge community edition changes for version 6.9.2 + +## 6.9.1 + + - Merge community edition changes for version 6.9.1 + +## 6.9.0 (2014-05-22) + + - Add support for closing Jira tickets with commits and MR + - Template for Merge Request description can be added in project settings + - Jenkins CI service + - Fix LDAP email upper case bug + +## 6.8.0 (2014-04-22) + + - Customise sign-in page with custom text and logo + +## 6.7.1 + + - Handle LDAP errors in Adapter#dn_matches_filter? + +## 6.7.0 (2014-03-22) + + - Improve LDAP sign-in speed by reusing connections + - Add support for Active Directory nested LDAP groups + - Git hooks: Commit message regex + - Git hooks: Deny git tag removal + - Fix group edit in admin area + +## 6.6.0 (2014-02-22) + + - Permission reset button for LDAP groups + - Better performance with large numbers of users with access to one project + +## 6.5.0 (2014-01-22) + + - Add reset permissions button to Group#members page + +## 6.4.0 (2013-12-22) + + - Respect existing group permissions during sync with LDAP group (d3844662ec7ce816b0a85c8b40f66ee6c5ae90a1) + +## 6.3.0 (2013-11-22) + + - When looking up a user by DN, use single scope (bc8a875df1609728f1c7674abef46c01168a0d20) + - Try sAMAccountName if omniauth nickname is nil (9b7174c333fa07c44cc53b80459a115ef1856e38) + +## 6.2.0 (2013-10-22) + + - API: expose ldap_cn and ldap_access group attributes + - Use omniauth-ldap nickname attribute as GitLab username + - Improve group sharing UI for installation with many groups + - Fix empty LDAP group raises exception + - Respect LDAP user filter for git access diff --git a/CHANGELOG.md b/CHANGELOG.md index f5a632ab57..79dcefc8f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,28 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. -## 12.2.9 +## 12.3.8 -### Security (14 changes) +- No changes. + +## 12.3.7 + +### Security (9 changes) + +- Check permissions before showing a forked project's source. +- Encrypt application setting tokens. +- Update Workhorse and Gitaly to fix a security issue. +- Hide commit counts from guest users in Cycle Analytics. +- Limit potential for DNS rebind SSRF in chat notifications. +- Fix 500 error caused by invalid byte sequences in links. +- Ensure are cleaned by ImportExport::AttributeCleaner. +- Remove notes regarding Related Branches from Issue activity feeds for guest users. +- Escape namespace in label references to prevent XSS. + + +## 12.3.6 + +### Security (15 changes) - Standardize error response when route is missing. - Do not display project labels that are not visible for user accessing group labels. @@ -17,38 +36,331 @@ entry. - Return 404 on LFS request if project doesn't exist. - Mask sentry auth token in Error Tracking dashboard. - Fixes a Open Redirect issue in `InternalRedirect`. +- Remove deploy access level when project/group link is deleted. - Sanitize search text to prevent XSS. - Sanitize all wiki markup formats with GitLab sanitization pipelines. - Fix stored XSS issue for grafana_url. -## 12.2.8 +## 12.3.5 -- No changes. +### Security (1 change) -## 12.2.7 +- Limit search for IID to a type to avoid leaking records with the same IID that the user does not have access to. + + +## 12.3.4 + +### Fixed (2 changes) + +- Fix cannot merge icon showing in dropdown for users who can merge. !17306 +- Fix pipelines for merge requests in project exports. !17844 + + +## 12.3.3 ### Security (1 change) - Fix private feature Elasticsearch leak. -## 12.2.6 +## 12.3.2 -### Security (10 changes) +### Security (12 changes) +- Fix Gitaly SearchBlobs flag RPC injection. - Add a policy check for system notes that may not be visible due to cross references to private items. - Display only participants that user has permission to see on milestone page. - Do not disclose project milestones on group milestones page when project milestones access is disabled in project settings. +- Check permissions before showing head pipeline blocking merge requests. - Fix new project path being disclosed through unsubscribe link of issue/merge requests. - Prevent bypassing email verification using Salesforce. - Do not show resource label events referencing not accessible labels. - Cancel all running CI jobs triggered by the user who is just blocked. -- Fix Gitaly SearchBlobs flag RPC injection [Gitaly v1.59.3]. +- Fix Gitaly SearchBlobs flag RPC injection. - Only render fixed number of mermaid blocks. - Prevent GitLab accounts takeover if SAML is configured. +## 12.3.1 + +### Fixed (4 changes) + +- Fix ordering of issue board lists not being persisted. !17356 +- Fix error when duplicate users are merged in approvers list. !17406 +- Fix bug that caused a merge to show an error message. !17466 +- Fix CSS leak in job log. + + +## 12.3.0 + +### Security (23 changes) + +- Filter out old system notes for epics in notes api endpoint response. +- Fix SSRF via DNS rebinding in Kubernetes Integration. +- Fix project import restricted visibility bypass via API. +- Prevent disclosure of merge request ID via email. +- Use admin_group authorization in Groups::RunnersController. +- Gitaly: ignore git redirects. +- Prevent DNS rebind on JIRA service integration. +- Make sure HTML text is always escaped when replacing label/milestone references. +- Fix HTML injection for label description. +- Avoid exposing unaccessible repo data upon GFM post processing. +- Remove EXIF from users/personal snippet uploads. +- Fix weak session management by clearing password reset tokens after login (username/email) are updated. +- Added image proxy to mitigate potential stealing of IP addresses. +- Restrict MergeRequests#test_reports to authenticated users with read-access on Builds. +- Ensure only authorised users can create notes on Merge Requests and Issues. +- Send TODOs for comments on commits correctly. +- Check permissions before responding in MergeController#pipeline_status. +- Limit the size of issuable description and comments. +- Enforce max chars and max render time in markdown math. +- Speed up regexp in namespace format by failing fast after reaching maximum namespace depth. +- Add :login_recaptcha_protection_enabled setting to prevent bots from brute-force attacks. +- Upgrade pages to 1.8.1. +- Show cross-referenced MR-id in issues' activities only to authorized users. + +### Removed (1 change) + +- Removed redundant index on releases table. !31487 + +### Fixed (78 changes, 25 of them are from the community) + +- Avoid Devise "401 Unauthorized" responses. !16519 +- Allow close status to be shown on locked issues. !16685 +- Changed todo/done quick actions to work not only for first usage. !16837 (Marc Schwede) +- Adds missing error handling. !16896 (toptalo) +- Prevent the user from seeing an invalid "Purchase more minutes" prompt. !16979 +- Fix missing board lists when other users collapse / expand the list. !17318 +- Uses projects_authorizations.access_level in MembersFinder. !28887 (Jacopo Beschi @jacopo-beschi) +- Let project reporters create issue from group boards. !29866 +- Remove margin from user header. !30878 (lucyfox) +- Improve application settings API. !31149 (Mathieu Parent) +- Fix encoding of special characters in "Find File". !31311 (Jan Beckmann) +- Avoid conflicts between ArchiveTracesCronWorker and ArchiveTraceWorker. !31376 +- Disable "Transfer group" button when no group is selected. !31387 (Jan Beckmann) +- Prevent archived projects from showing up in global search. !31498 (David Palubin) +- Fixed embeded metrics tooltip inconsistent styling. !31517 +- Fix 500 errors caused by pattern matching with variables in CI Lint. !31719 +- Fixed removing directories in Web IDE. !31727 +- All of discussion expand/collapse button is clickable. !31730 +- Only show /copy_metadata quick action when usable. !31735 (Lee Tickett) +- Read pipelines from public projects through API without an access token. !31816 +- fix charts scroll handle icon to use gitlab svg. !31825 +- Remove "Commit" from pipeline status tooltips. !31861 +- Fix top-nav search bar dropdown on xl displays. !31864 (Kemais Ehlers) +- Fix loading icon causing text to jump in file row of Web IDE. !31884 +- Fix MR reports section loading icon alignment. !31897 +- Fix broken git clone box on wiki git access page. !31898 +- Exempt user gitlab-ci-token from rate limiting. !31909 +- Fix search preserving space when change branch. !31973 (minghuan lei) +- Fix file header style and position during scroll in a merge conflict resolution. !31991 +- Allow latency measurements of sidekiq jobs taking > 2.5s. !32001 +- Return correct user for manual deployments. !32004 +- Fix style of secondary profile tab buttons. !32010 (Wolfgang Faust) +- Fix serverless entry page layout. !32029 +- Fix HTML rendering for fast-forward rebases in merge request widget. !32032 +- Update the timestamp in Operations > Environments to show correct deployment date for manual deploy jobs. !32072 +- Fix dropdowns closing when click is released outside the dropdown. !32084 +- Hide duplicate board list while dragging. !32099 +- Don't check external authorization when disabling the service. !32102 (Robert Schilling) +- Makes custom Pages domain open as external link in new tab. !32130 (jakeburden) +- Change default visibility level for FogBugz imported projects to Private. !32142 +- Move visual review toolbar code to NPM. !32159 +- Fix parsing of months in time tracking commands. !32165 +- Wrong format on MS teams integration push events with multi line commit messages. !32180 (Massimeddu Cireddu) +- Guard against deleted project feature entry in project permissions. !32187 +- Fix ref switcher separators from conflicting with branch names. !32198 +- Fix performance bar on Puma. !32213 +- Remove token field from runners edit form. !32231 +- Fix 500 error in CI lint when included templates are an array. !32232 +- Fix users cannot access job detail page when deployable does not exist. !32247 +- Do not translate system notes into author's language. !32264 +- Fix moving issues API failing when text includes commit URLs. !32317 +- Fix issue due notification emails not being threaded correctly. !32325 +- Allow project feature permissions to be overridden during import with override_params. !32348 +- Handle invalid mirror url. !32353 (Lee Tickett) +- New project milestone primary button. !32355 (Lee Tickett) +- Display `more information` docs link on error tracking page when users do not have permissions to enable that feature. !32365 (Romain Maneschi) +- Quick action label must be first in issue comment. !32367 (Romain Maneschi) +- Fix for missing avatar images dislpayed in commit trailers. !32374 (Jesse Hall @jessehall3) +- Make it harder to delete issuables accidentally. !32376 +- Replaced vue resource to axios in the Markdown field preview component. !32386 (Prakash Chokalingam @prakash_Chokalingam) +- Fix create MR from issue using a tag as ref. !32392 (Jacopo Beschi @jacopo-beschi) +- Add X-GitLab-NotificationReason header to note emails. !32422 +- Expand textarea for CA cert in cluster form. !32508 +- Prevent empty external authorization classification labels from overriding the default label. !32517 (Will Chandler) +- Allow not resolvable urls when dns rebind protection is disabled. !32523 +- Avoid checking dns rebind protection when validating. !32577 +- Passing job rules downstream and E2E specs for job:rules configuration. !32609 +- Quote branch names in how to merge instructions. !32639 (Lee Tickett) +- Fix removal of install pods. !32667 +- Fix sharing localStorage with all MRs. !32699 +- Default the asset proxy whitelist to the installation domain. !32703 +- Add some padding to details markdown element. !32716 +- Use `ChronicDuration` in a thread-safe way. !32817 +- Fix watch button styling and notifications buttons consistency. !32827 +- Fix encoding error in MR diffs when using external diffs. !32862 (Hiroyuki Sato) +- Add bottom margin to snippet title. !32877 +- Bump markdown cache version to fix any incorrect links from asset proxy defaults. +- Persist `needs:` validation as config error. + +### Changed (39 changes, 6 of them are from the community) + +- Extend pipeline graph scroll area to full width. !14870 +- Frontend support for saving issue board preferences on the current user. !16421 +- Switch Milestone and Release to a many-to-many relationship. !16517 +- Align project selector search box better with design system. !16795 +- Adds the runners_token of the group if the user that requests the group info is admin of it. !16831 (Ignacio Lorenzo Subirá Otal nachootal@gmail.com) +- Upgrade to Gitaly v1.65.0. !17135 +- Make flash notifications sticky. !30141 +- Add Issue and Merge Request titles to Todo items. !30435 (Arun Kumar Mohan) +- Remove wiki page slug dialog step when creating wiki page. !31362 +- Improve system notes for Zoom links. !31410 (Jacopo Beschi @jacopo-beschi) +- Updated WebIDE default commit options. !31449 +- Remove oauth form from GitHub CI/CD only import authentication. !31488 +- Update assignee (cannot merge) style. !31545 +- Updated latest pipeline tag tooltip to be more descriptive. !31624 +- Add optional label_id parameter to label API for PUT and DELETE. !31804 +- Updates issues REST API to allow extended sort options. !31849 +- Fix to show renamed file in mr. !31888 +- Replaced expand diff icons. !31907 +- Upgrade to Gitaly 1.60.0. !31981 +- Make MR pipeline widget text more descriptive. !32025 +- Fix wording on milestone due date when milestone is due today. !32096 +- Improve search result labels. !32101 +- Limit access request emails to ten most recently active owners or maintainers. !32141 +- Improve chatops help output. !32208 +- Update merge train documentation. !32218 +- Add caret icons to the monitoring dashboard. !32239 +- Install cert-manager v0.9.1. !32243 +- Bring text mail for new issue & MR more in line. !32254 +- Add cluster domain warning. !32260 +- Rename epic column state to state_id. !32270 +- Use moved instead of closed in issue references. !32277 (juliette-derancourt) +- Standardize use of `content` parameter in snippets API. !32296 +- Show meaningful message on /due quick action with invalid date. !32349 (Jacopo Beschi @jacopo-beschi) +- Remove dynamically constructed feature flags starting with prometheus_transaction_. !32395 (Jacopo Beschi @jacopo-beschi) +- Indicate on Issue Status if an Issue was Duplicated. !32472 +- Avoid dns rebinding checks when the domain is whitelisted. !32603 +- Upgrade to Gitaly v1.62.0. !32608 +- Unified presentation of the filter input field for projects listings. !32706 +- Hide resolve thread button from guest. !32859 + +### Performance (20 changes) + +- Lower search counters. !11777 +- Considerably improve the query performance for MR discussions load. !16635 +- Eliminate Gitaly N+1 queries with notes API. !32089 +- Optimise UpdateBuildQueueService. !32095 +- Remove N+1 SQL query loading project feature in dashboard. !32169 +- Reduce the number of SQL requests on MR-show. !32192 +- Makes LFS object linker process OIDs in batches. !32268 +- Preload routes information to fix N+1 issue. !32352 +- Reduce N+1 when doing project export. !32423 +- Skip requesting diverging commit counts if no branches are listed. !32496 +- Support selective highlighting of lines. !32514 +- Replace indexes for counting active users. !32538 +- Create partial index for gitlab-monitor CI metrics. !32546 +- Optimize queries for snippet listings. !32576 +- Preprocess wiki attachments with GitLab-Workhorse. !32663 +- Create index for users.unconfirmed_email. !32664 +- Optimize /admin/applications so that it does not timeout. !32852 +- Replace events index with partial one. !32874 +- Partial index for namespaces.type. !32876 +- Fix member expiration not always working. !32951 + +### Added (42 changes, 10 of them are from the community) + +- Enable modsecurity in nginx-ingress apps. !15774 +- Database table for tracking programming language trends over time. !16491 +- Add DAST full scan domain validation. !16680 +- Add not param to Issues API endpoint. !16748 +- Allow specifying timeout per-job in .gitlab-ci.yml. !16777 (Michał Siwek) +- Document forwarding CI variables to docker build in Auto DevOps. !16783 +- Add links for latest pipelines. !20865 (Alex Ives) +- New interruptible attribute for CI/CD jobs. !23464 (Cédric Tabin) +- API: Promote project labels to group labels. !25218 (Robert Schilling) +- Introduced Build::Rules configuration for Ci::Build. !29011 +- Notification emails can be signed with SMIME. !30644 (Diego Louzán) +- Allow milestones to be associated with a release (backend). !30816 +- Enable serving static objects from an external storage. !31025 +- Save collapsed option for board lists in database. !31069 +- Apply quickactions when modifying comments. !31136 +- Add SwaggerUI Pages template for .gitlab-ci.yml. !31183 (mdhtr) +- Add ability to see project deployments at cluster level (FE). !31575 +- Create component to display area and line charts in monitor dashboards. !31639 +- Add persistance to last choice of projects sorting on projects dashboard page. !31669 +- Run Pipeline button & API for MR Pipelines. !31722 +- Add service to transfer Group Milestones when transferring a Project. !31778 +- Allow $CI_REGISTRY_USER to delete tags. !31796 +- Support adding and removing labels w/ push opts. !31831 +- Enable line charts in dashbaord panels and embedded charts. !31920 +- Add First and Last name columns to User model. !31985 +- Add option to allow OAuth providers to bypass two factor. !31996 (Dodocat) +- Expose namespace storage statistics with GraphQL. !32012 +- Add usage pings for merge request creating. !32059 +- Add warning about initial deployment delay for GitLab Pages sites. !32122 +- Allow Knative to be installed on group and instance level clusters. !32128 +- Add a close issue slack slash command. !32150 +- Support chat notifications to be fired for protected branches. !32176 +- Add system hooks for project/group membership updates. !32371 (Brandon Williams) +- Add source and merge_request fields to pipeline event webhook. !32373 (Bian Jiaping) +- Allow ECDSA certificates for pages domains. !32393 +- Show link to cluster used on job page. !32446 +- Group level JupyterHub. !32512 +- Creates utility parser for the job log. !32555 +- Expose update project service endpoint JSON. !32759 +- Expose 'protected' field for Tag API endpoint. !32790 (Andrea Leone) +- Create table `alerts_service_data`. !32860 +- Creates base components for the new job log. + +### Other (42 changes, 13 of them are from the community) + +- Setting NOT NULL constraint to users.private_profile column. !14838 +- Schedule productivity analytics recalculation for EE. !15137 +- Document Lambda deploys via GitLab CI/CD. !16858 +- Add Redis interceptor tracing. !30238 +- Encrypt existing and new deploy tokens. !30679 +- Clean up keyboard shortcuts help modal, removing and adding as needed. !31642 +- Add warning to pages domains that obtaining/deploying SSL certificates through Let's Encrypt can take some time. !31765 +- Add new API method in Api.js: projectUsers. !31801 +- Upgrade babel to 7.5.5. !31819 (Takuya Noguchi) +- Update docs to reflect the rename of gitlab-monitor to gitlab-exporter. !31901 +- Count comments on commits and merge requests. !31912 +- Resolve Badge counter: Very low contrast between foreground and background colors. !31922 +- Add index to improve group cluster deployments query performance. !31988 +- Replace finished_at with deployed_at for the internal API Deployment entity. !32000 +- Update to GitLab Shell v9.4.0. !32009 +- Default clusters namespace_per_environment column to true. !32139 +- Remove deprecation message for milestone tabs. !32252 +- Refactored Karma spec to Jest for mr_widget_auto_merge_failed. !32282 (Illya Klymov) +- Update GitLab Runner Helm Chart to 0.8.0. !32289 +- Refactor showStagedIcon property to reflect the behavior its name represents. !32333 (Arun Kumar Mohan) +- Upgrade pages to 1.8.0. !32334 +- Change prioritized labels empty state message. !32338 (Lee Tickett) +- make test of note app with comments disabled dry. !32383 (Romain Maneschi) +- Use new location for gitlab-runner helm charts. !32384 +- Mention in docs how to disable project snippets. !32391 (Jacopo Beschi @jacopo-beschi) +- delete animation width on global search input. !32399 (Romain Maneschi) +- Remove vue resource from sidebar service. !32400 (Lee Tickett) +- Remove vue resource from issue. !32421 (Lee Tickett) +- Remove vue resource from remove issue. !32425 (Lee Tickett) +- Remove vue-resource from PerformanceBarService. !32428 (Lee Tickett) +- Added warning note on the project container registry setting informing users that the registry is public for public projects. !32447 +- Admin dashboard: Fetch and render statistics async. !32449 +- Update GitLab Workhorse to v8.10.0. !32501 +- Remove Users.support_bot column. !32554 +- Add padding to left of "Sort by" in members dropdown. !32602 +- Log errors for failed pipeline creation in PostReceive. !32633 +- Avoid prefilling target branch when source branch is the default one. !32701 +- Bump Kubeclient to 4.4.0. !32811 +- Remove vue-resource from notes service. !32934 (Lee Tickett) +- Added board name to page title in boards view. +- Remove vue resource from group service. (Lee Tickett) +- Updates tooltip of 'detached' label/state. + + ## 12.2.5 ### Security (1 change) @@ -75,6 +387,10 @@ entry. ## 12.2.3 +- No changes. + +## 12.2.2 + ### Security (22 changes) - Ensure only authorised users can create notes on Merge Requests and Issues. @@ -101,12 +417,17 @@ entry. - Fix SSRF via DNS rebinding in Kubernetes Integration. -## 12.2.2 - -- Unreleased due to QA failure. - ## 12.2.1 +### Fixed (2 changes) + +- Fix for embedded metrics undefined params. !31975 +- Fix "ERR value is not an integer or out of range" errors. !32126 + +### Performance (1 change) + +- Fix Gitaly N+1 calls with listing issues/MRs via API. !31938 + ### Fixed (3 changes) - Fix for embedded metrics undefined params. !31975 @@ -694,6 +1015,34 @@ entry. - Removes EE differences for app/views/admin/users/show.html.haml. +## 12.0.7 + +### Security (22 changes) + +- Ensure only authorised users can create notes on Merge Requests and Issues. +- Add :login_recaptcha_protection_enabled setting to prevent bots from brute-force attacks. +- Queries for Upload should be scoped by model. +- Speed up regexp in namespace format by failing fast after reaching maximum namespace depth. +- Limit the size of issuable description and comments. +- Send TODOs for comments on commits correctly. +- Restrict MergeRequests#test_reports to authenticated users with read-access on Builds. +- Added image proxy to mitigate potential stealing of IP addresses. +- Filter out old system notes for epics in notes api endpoint response. +- Avoid exposing unaccessible repo data upon GFM post processing. +- Fix HTML injection for label description. +- Make sure HTML text is always escaped when replacing label/milestone references. +- Prevent DNS rebind on JIRA service integration. +- Use admin_group authorization in Groups::RunnersController. +- Prevent disclosure of merge request ID via email. +- Show cross-referenced MR-id in issues' activities only to authorized users. +- Enforce max chars and max render time in markdown math. +- Check permissions before responding in MergeController#pipeline_status. +- Remove EXIF from users/personal snippet uploads. +- Fix project import restricted visibility bypass via API. +- Fix weak session management by clearing password reset tokens after login (username/email) are updated. +- Fix SSRF via DNS rebinding in Kubernetes Integration. + + ## 12.0.6 - No changes. @@ -740,16 +1089,16 @@ entry. ### Security (10 changes) +- Prevent bypass of restriction disabling web password sign in. - Hide confidential issue title on unsubscribe for anonymous users. +- Resolve: Milestones leaked via search API. - Fix url redaction for issue links. +- Add extra fields for handling basic auth on import by url page. - Fix confidential issue label disclosure on milestone view. - Filter relative links in wiki for XSS. -- Prevent XSS injection in note imports. -- Resolve: Milestones leaked via search API. -- Prevent bypass of restriction disabling web password sign in. -- Add extra fields for handling basic auth on import by url page. -- Protect Gitlab::HTTP against DNS rebinding attack. - Prevent invalid branch for merge request. +- Prevent XSS injection in note imports. +- Protect Gitlab::HTTP against DNS rebinding attack. ### Removed (5 changes, 1 of them is from the community) @@ -759,7 +1108,7 @@ entry. - Make Kubernetes service templates readonly. !29044 - Remove Content-Type override for Mattermost OAuth login. (Harrison Healey) -### Fixed (116 changes, 28 of them are from the community) +### Fixed (115 changes, 28 of them are from the community) - Fix col-sm-* in forms to keep layout. !24885 (Takuya Noguchi) - Avoid 500 when rendering users ATOM data. !25408 @@ -772,7 +1121,6 @@ entry. - Bring secondary button styles up to design standard. !27920 - Use FindOrCreateService to create labels and check for existing ones. !27987 (Matt Duren) - Fix "too many loops" error by handling gracefully cron schedules for non existent days. !28002 -- Handle errors in successful notes reply. !28082 - Fix 500 error when accessing charts with an anonymous user. !28091 (Diego Silva) - Allow user to set primary email first when 2FA is required. !28097 (Kartikey Tanna) - Auto-DevOps: allow to disable rollout status check. !28130 (Sergej Nikolaev ) @@ -869,14 +1217,14 @@ entry. - Move Dropdown to Stick to MR View App Button. !29767 - Fix IDE commit using latest ref in branch and overriding contents. !29769 - Revert concurrent pipeline creation for pipeline schedules. !29794 -- Fix layout of group milestone header. -- Fix remote mirrors not updating after tag push. +- Fix border radii on diff files and repo files. - Fix padding of unclickable pipeline dropdown items to match links. +- Fix pipeline schedules when owner is nil. +- Fix remote mirrors not updating after tag push. +- Fix layout of group milestone header. +- Fixed show whitespace button not refetching diff content. - Change resolve button text to mark comment as resolved. - Align system note within discussion with other notes. -- Fix border radii on diff files and repo files. -- Fixed show whitespace button not refetching diff content. -- Fix pipeline schedules when owner is nil. ### Changed (35 changes, 13 of them are from the community) @@ -976,9 +1324,9 @@ entry. - Link to an external dashboard from metrics dashboard. !29369 - Add labels to note event payload. !29384 (Sujay Patel) - Add Join meeting button to issues with Zoom links. !29454 -- Make task completion status available via GraphQL. - Add backtraces to Peek performance bar for SQL calls. - Added diff suggestion feature discovery popover. +- Make task completion status available via GraphQL. ### Other (62 changes, 14 of them are from the community) @@ -1033,17 +1381,17 @@ entry. - Changed the 'Created' label to 'Last Updated' on the container registry table to more accurately reflect what the date represents. !29464 - Update GitLab Pages to v1.6.1. !29559 - Indent collapsible sections. !29804 -- Group download buttons into a .btn-group. -- Change default color of award emoji button. -- Use blue for activity stream links; use monospace font for commit sha. -- Remove fixed height from MR diff headers. -- Moves the table pagination shared component. -- Add warning that gitlab-secrets isn't included in backup. -- Update merge request tabs so they no longer scroll. -- Reduce height of issue board input to align with buttons. -- Increase height of move issue dropdown. - Use grid and correct border radius for status badge. +- Remove fixed height from MR diff headers. +- Use blue for activity stream links; use monospace font for commit sha. - Moves snowplow to CE repo. +- Reduce height of issue board input to align with buttons. +- Change default color of award emoji button. +- Group download buttons into a .btn-group. +- Add warning that gitlab-secrets isn't included in backup. +- Increase height of move issue dropdown. +- Update merge request tabs so they no longer scroll. +- Moves the table pagination shared component. ## 11.11.8 @@ -1112,7 +1460,7 @@ entry. - Destroy project remote mirrors instead of disabling. !27087 -### Fixed (74 changes, 19 of them are from the community) +### Fixed (75 changes, 19 of them are from the community) - Don't create a temp reference for branch comparisons within project. !24038 - Fix some label links not appearing on group labels page and label title being a link on project labels page. !24060 (Tanya Pazitny) @@ -1173,6 +1521,7 @@ entry. - Fix uploading of LFS tracked file through UI. !28052 - Render Next badge only for gitlab.com. !28056 - Fix update head pipeline process of Pipelines for merge requests. !28057 +- Handle errors in successful notes reply. !28082 - Fix visual issues in set status modal. !28147 - Use a path for the related merge requests endpoint. !28171 - disable SSH key validation in key details view. !28180 (Roger Meier) @@ -1183,10 +1532,10 @@ entry. - Fix project visibility level validation. !28305 (Peter Marko) - Fix incorrect prefix used in new uploads for personal snippets. !28337 - Fix Rugged get_tree_entries recursive flag not working. !28494 -- Fixes next badge being always visible. - Next badge must visible when canary flag is true. -- Adds arrow icons to select option in CI/CD settings. - Vertically aligns the play button for stages. +- Fixes next badge being always visible. +- Adds arrow icons to select option in CI/CD settings. - Allow replying to individual notes from API. ### Changed (19 changes, 3 of them are from the community) @@ -1253,10 +1602,10 @@ entry. - Leave project/group from access granted email. !27892 - Allow Sentry client-side DSN to be passed on gitlab.yml. !27967 - GraphQL: improve evaluation of query complexity based on arguments and query limits. !28017 -- Adds badge for Canary environment and help link. - Support negative matches. -- Show category icons in user popover. - Added Omniauth UltraAuth strategy to GitLab. (Kartikey Tanna) +- Adds badge for Canary environment and help link. +- Show category icons in user popover. ### Other (29 changes, 8 of them are from the community) @@ -1286,9 +1635,22 @@ entry. - Remove the note in the docs that multi-line suggestions are not yet available. !28119 (hardysim) - Update gitlab-shell to v9.1.0. !28184 - Add EE fixtures to SeedFu list. !28241 +- Add some frozen string to spec/**/*.rb. (gfyoung) - Replaces CSS with BS4 utility class for pipeline schedules. - Creates a vendors folder for external CSS. -- Add some frozen string to spec/**/*.rb. (gfyoung) + +### Performance (1 change) + +- Add improvements to global search of issues and merge requests. !27817 + + +## 11.10.7 (2019-06-26) + +### Fixed (3 changes) + +- Remove a default git depth in Pipelines for merge requests. !28926 +- Fix label click scrolling to top. !29202 +- Fix scrolling to top on assignee change. !29500 ## 11.10.8 (2019-06-27) @@ -1328,7 +1690,6 @@ entry. - Fix input group height. - ## 11.10.4 (2019-05-01) ### Fixed (12 changes) @@ -1704,31 +2065,11 @@ entry. ## 11.9.3 (2019-03-27) -### Security (8 changes) - -- Disallow guest users from accessing Releases. -- Fix PDF.js vulnerability. -- Hide "related branches" when user does not have permission. -- Fix XSS in resolve conflicts form. -- Added rake task for removing EXIF data from existing uploads. -- Return cached languages if they've been detected before. -- Disallow updating namespace when updating a project. -- Use UntrustedRegexp for matching refs policy. - +- No changes. ## 11.9.2 (2019-03-26) -### Security (8 changes) - -- Disallow guest users from accessing Releases. -- Fix PDF.js vulnerability. -- Hide "related branches" when user does not have permission. -- Fix XSS in resolve conflicts form. -- Added rake task for removing EXIF data from existing uploads. -- Return cached languages if they've been detected before. -- Disallow updating namespace when updating a project. -- Use UntrustedRegexp for matching refs policy. - +- No changes. ## 11.9.1 (2019-03-25) @@ -2343,16 +2684,7 @@ entry. ## 11.7.8 (2019-03-26) -### Security (7 changes) - -- Disallow guest users from accessing Releases. -- Fix PDF.js vulnerability. -- Hide "related branches" when user does not have permission. -- Fix XSS in resolve conflicts form. -- Added rake task for removing EXIF data from existing uploads. -- Disallow updating namespace when updating a project. -- Use UntrustedRegexp for matching refs policy. - +- No changes. ## 11.7.7 (2019-03-19) @@ -2362,7 +2694,7 @@ entry. - Fixed ability to see private groups by users not belonging to given group. -## 11.7.5 (2019-02-06) +## 11.7.5 (2019-02-05) ### Fixed (8 changes) @@ -2601,10 +2933,9 @@ entry. ## 11.6.11 (2019-04-23) -### Security (2 changes) +### Security (1 change) - Fixed ability to see private groups by users not belonging to given group. -- Fix XSS in resolve conflicts form. ### Fixed (2 changes) @@ -2650,6 +2981,13 @@ entry. - Fix leaking private repository information in API. +## 11.6.9 (2019-02-04) + +### Security (1 change) + +- Use sanitized user status message for user popover. + + ## 11.6.8 (2019-01-30) - No changes. @@ -3174,7 +3512,6 @@ entry. - Fix a race condition intermittently breaking GitLab startup. !23028 - Adds margin after a deleted branch name in the activity feed. !23038 - Ignore environment validation failure. !23100 -- Fixes broken borders for reports section in MR widget. - Adds CI favicon back to jobs page. - Redirect to the pipeline builds page when a build is canceled. (Eva Kadlecova) - Fixed diff stats not showing when performance bar is enabled. @@ -3183,12 +3520,13 @@ entry. - Fix bug causing not all emails to show up in commit email selectbox. - Remove duplicate escape in job sidebar. - Fixing styling issues on the scheduled pipelines page. +- Fixes broken test in master. - Renders stuck block when runners are stuck. - Removes extra border from test reports in the merge request widget. +- Fixes broken borders for reports section in MR widget. - Only render link to branch when branch still exists in pipeline page. - Fixed source project not filtering in merge request creation compare form. - Do not reload self on hooks when creating deployment. -- Fixes broken test in master. ### Changed (38 changes, 12 of them are from the community) @@ -9646,4 +9984,3 @@ entry. ## 8.15.8 through 0.8.0 - See [changelogs/archive.md](changelogs/archive.md) - diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4c954448a..030624b8df 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,9 @@ -## Developer Certificate of Origin + License +## Contributor license agreement -By contributing to GitLab B.V., You accept and agree to the following terms and -conditions for Your present and future Contributions submitted to GitLab B.V. -Except for the license granted herein to GitLab B.V. and recipients of software -distributed by GitLab B.V., You reserve all right, title, and interest in and to -Your Contributions. All Contributions are subject to the following DCO + License -terms. - -[DCO + License](https://gitlab.com/gitlab-org/dco/blob/master/README.md) +By submitting code as an individual you agree to the +[individual contributor license agreement](doc/legal/individual_contributor_license_agreement.md). +By submitting code as an entity you agree to the +[corporate contributor license agreement](doc/legal/corporate_contributor_license_agreement.md). All Documentation content that resides under the [doc/ directory](/doc) of this repository is licensed under Creative Commons: diff --git a/Dangerfile b/Dangerfile index 094d55e865..228190cd53 100644 --- a/Dangerfile +++ b/Dangerfile @@ -1,23 +1,12 @@ # frozen_string_literal: true + +require_relative 'lib/gitlab_danger' + danger.import_plugin('danger/plugins/helper.rb') danger.import_plugin('danger/plugins/roulette.rb') unless helper.release_automation? - danger.import_dangerfile(path: 'danger/metadata') - danger.import_dangerfile(path: 'danger/changes_size') - danger.import_dangerfile(path: 'danger/changelog') - danger.import_dangerfile(path: 'danger/specs') - danger.import_dangerfile(path: 'danger/gemfile') - danger.import_dangerfile(path: 'danger/database') - danger.import_dangerfile(path: 'danger/documentation') - danger.import_dangerfile(path: 'danger/frozen_string') - danger.import_dangerfile(path: 'danger/commit_messages') - danger.import_dangerfile(path: 'danger/duplicate_yarn_dependencies') - danger.import_dangerfile(path: 'danger/prettier') - danger.import_dangerfile(path: 'danger/eslint') - danger.import_dangerfile(path: 'danger/roulette') - danger.import_dangerfile(path: 'danger/single_codebase') - danger.import_dangerfile(path: 'danger/gitlab_ui_wg') - danger.import_dangerfile(path: 'danger/ce_ee_vue_templates') - danger.import_dangerfile(path: 'danger/only_documentation') + GitlabDanger.new(helper.gitlab_helper).rule_names.each do |file| + danger.import_dangerfile(path: File.join('danger', file)) + end end diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index c1c39d3628..9b933b454c 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.59.3 +1.65.2 diff --git a/GITLAB_ELASTICSEARCH_INDEXER_VERSION b/GITLAB_ELASTICSEARCH_INDEXER_VERSION index 26aaba0e86..f0bb29e763 100644 --- a/GITLAB_ELASTICSEARCH_INDEXER_VERSION +++ b/GITLAB_ELASTICSEARCH_INDEXER_VERSION @@ -1 +1 @@ -1.2.0 +1.3.0 diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION index f8a696c8dc..f8e233b273 100644 --- a/GITLAB_PAGES_VERSION +++ b/GITLAB_PAGES_VERSION @@ -1 +1 @@ -1.7.2 +1.9.0 diff --git a/GITLAB_SHELL_VERSION b/GITLAB_SHELL_VERSION index b13d146a7b..a13e7b9c87 100644 --- a/GITLAB_SHELL_VERSION +++ b/GITLAB_SHELL_VERSION @@ -1 +1 @@ -9.3.0 +10.0.0 diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index eec6dacbd4..8324573a58 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.8.1 +8.10.1 diff --git a/Gemfile b/Gemfile index a91399ab3a..864e514ae0 100644 --- a/Gemfile +++ b/Gemfile @@ -48,6 +48,9 @@ gem 'omniauth-salesforce', '~> 1.0.5' gem 'rack-oauth2', '~> 1.9.3' gem 'jwt', '~> 2.1.0' +# Kerberos authentication. EE-only +gem 'gssapi', group: :kerberos + # Spam and anti-bot protection gem 'recaptcha', '~> 4.11', require: 'recaptcha/rails' gem 'akismet', '~> 2.0' @@ -83,7 +86,10 @@ gem 'grape-entity', '~> 0.7.1' gem 'rack-cors', '~> 1.0.0', require: 'rack/cors' # GraphQL API -gem 'graphql', '~> 1.8.0' +gem 'graphql', '~> 1.9.11' +# NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab-ce/issues/67293 +# TODO: remove app/views/graphiql/rails/editors/show.html.erb when https://github.com/rmosolgo/graphiql-rails/pull/71 is released: +# https://gitlab.com/gitlab-org/gitlab-ce/issues/67263 gem 'graphiql-rails', '~> 1.4.10' gem 'apollo_upload_server', '~> 2.0.0.beta3' gem 'graphql-docs', '~> 1.6.0', group: [:development, :test] @@ -106,7 +112,7 @@ gem 'fog-aws', '~> 3.5' # Locked until fog-google resolves https://github.com/fog/fog-google/issues/421. # Also see config/initializers/fog_core_patch.rb. gem 'fog-core', '= 2.1.0' -gem 'fog-google', '~> 1.8' +gem 'fog-google', '~> 1.9' gem 'fog-local', '~> 0.6' gem 'fog-openstack', '~> 1.0' gem 'fog-rackspace', '~> 0.1.1' @@ -121,6 +127,13 @@ gem 'unf', '~> 0.1.4' # Seed data gem 'seed-fu', '~> 2.3.7' +# Search +gem 'elasticsearch-model', '~> 0.1.9' +gem 'elasticsearch-rails', '~> 0.1.9', require: 'elasticsearch/rails/instrumentation' +gem 'elasticsearch-api', '5.0.3' +gem 'aws-sdk' +gem 'faraday_middleware-aws-signers-v4' + # Markdown and HTML processing gem 'html-pipeline', '~> 2.8' gem 'deckar01-task_list', '2.2.0' @@ -171,7 +184,7 @@ gem 'acts-as-taggable-on', '~> 6.0' gem 'sidekiq', '~> 5.2.7' gem 'sidekiq-cron', '~> 1.0' gem 'redis-namespace', '~> 1.6.0' -gem 'gitlab-sidekiq-fetcher', '0.5.1', require: 'sidekiq-reliable-fetch' +gem 'gitlab-sidekiq-fetcher', '0.5.2', require: 'sidekiq-reliable-fetch' # Cron Parser gem 'fugit', '~> 1.2.1' @@ -215,7 +228,8 @@ gem 'discordrb-webhooks-blackst0ne', '~> 3.3', require: false gem 'hipchat', '~> 1.5.0' # Jira integration -gem 'jira-ruby', '~> 1.4' +gem 'jira-ruby', '~> 1.7' +gem 'atlassian-jwt', '~> 0.2.0' # Flowdock integration gem 'flowdock', '~> 0.7' @@ -233,7 +247,7 @@ gem 'asana', '~> 0.8.1' gem 'ruby-fogbugz', '~> 0.2.1' # Kubernetes integration -gem 'kubeclient', '~> 4.2.2' +gem 'kubeclient', '~> 4.4.0' # Sanitize user input gem 'sanitize', '~> 4.6' @@ -262,7 +276,7 @@ gem 'fast_blank' # Parse time & duration gem 'chronic', '~> 0.10.2' -gem 'chronic_duration', '~> 0.10.6' +gem 'gitlab_chronic_duration', '~> 0.10.6.1' gem 'webpack-rails', '~> 0.9.10' gem 'rack-proxy', '~> 0.6.0' @@ -275,16 +289,17 @@ gem 'font-awesome-rails', '~> 4.7' gem 'gemojione', '~> 3.3' gem 'gon', '~> 6.2' gem 'request_store', '~> 1.3' -gem 'virtus', '~> 1.0.1' gem 'base32', '~> 0.3.0' +gem "gitlab-license", "~> 1.0" + # Sentry integration gem 'sentry-raven', '~> 2.9' gem 'premailer-rails', '~> 1.9.7' # LabKit: Tracing and Correlation -gem 'gitlab-labkit', '~> 0.4.2' +gem 'gitlab-labkit', '~> 0.5' # I18n gem 'ruby_parser', '~> 3.8', require: false @@ -296,7 +311,8 @@ gem 'gettext', '~> 3.2.2', require: false, group: :development gem 'batch-loader', '~> 1.4.0' # Perf bar -gem 'peek', '~> 1.0.1' +# https://gitlab.com/gitlab-org/gitlab-ee/issues/13996 +gem 'gitlab-peek', '~> 0.0.1', require: 'peek' # Snowplow events tracking gem 'snowplow-tracker', '~> 0.6.1' @@ -310,13 +326,14 @@ group :metrics do gem 'influxdb', '~> 0.2', require: false # Prometheus - gem 'prometheus-client-mmap', '~> 0.9.8' + gem 'prometheus-client-mmap', '~> 0.9.10' gem 'raindrops', '~> 0.18' end group :development do gem 'foreman', '~> 0.84.0' gem 'brakeman', '~> 4.2', require: false + gem 'danger', '~> 6.0', require: false gem 'letter_opener_web', '~> 1.3.4' gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false @@ -368,15 +385,12 @@ group :development, :test do gem 'haml_lint', '~> 0.31.0', require: false gem 'simplecov', '~> 0.16.1', require: false gem 'bundler-audit', '~> 0.5.0', require: false - gem 'mdl', '~> 0.5.0', require: false gem 'benchmark-ips', '~> 2.3.0', require: false gem 'license_finder', '~> 5.4', require: false gem 'knapsack', '~> 1.17' - gem 'activerecord_sane_schema_dumper', '1.0' - gem 'stackprof', '~> 0.2.10', require: false gem 'simple_po_parser', '~> 1.1.2', require: false @@ -402,7 +416,7 @@ gem 'mail_room', '~> 0.9.1' gem 'email_reply_trimmer', '~> 0.1' gem 'html2text' -gem 'ruby-prof', '~> 0.17.0' +gem 'ruby-prof', '~> 1.0.0' gem 'rbtrace', '~> 0.4', require: false gem 'memory_profiler', '~> 0.9', require: false gem 'benchmark-memory', '~> 0.1', require: false @@ -418,6 +432,9 @@ gem 'health_check', '~> 2.6.0' gem 'vmstat', '~> 2.3.0' gem 'sys-filesystem', '~> 1.1.6' +# NTP client +gem 'net-ntp' + # SSH host key support gem 'net-ssh', '~> 5.2' gem 'sshkey', '~> 2.0' @@ -441,7 +458,14 @@ gem 'toml-rb', '~> 1.0.0', require: false gem 'flipper', '~> 0.13.0' gem 'flipper-active_record', '~> 0.13.0' gem 'flipper-active_support_cache_store', '~> 0.13.0' +gem 'unleash', '~> 0.1.5' # Structured logging gem 'lograge', '~> 0.5' gem 'grape_logging', '~> 1.7' + +# DNS Lookup +gem 'net-dns', '~> 0.9.0' + +# Countries list +gem 'countries', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index fcc0fb6489..fec34622be 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -41,8 +41,6 @@ GEM activerecord-explain-analyze (0.1.0) activerecord (>= 4) pg - activerecord_sane_schema_dumper (1.0) - rails (>= 5, < 6) activestorage (5.2.3) actionpack (= 5.2.3) activerecord (= 5.2.3) @@ -76,10 +74,20 @@ GEM asciidoctor-plantuml (0.0.9) asciidoctor (>= 1.5.6, < 3.0.0) ast (2.4.0) + atlassian-jwt (0.2.0) + jwt (~> 2.1.0) attr_encrypted (3.1.0) 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-sigv4 (~> 1.0) + jmespath (~> 1.0) + aws-sdk-resources (2.9.32) + aws-sdk-core (= 2.9.32) + aws-sigv4 (1.0.0) axiom-types (0.1.1) descendants_tracker (~> 0.0.4) ice_nine (~> 0.11.0) @@ -136,23 +144,31 @@ GEM childprocess (0.9.0) ffi (~> 1.0, >= 1.0.11) chronic (0.10.2) - chronic_duration (0.10.6) - numerizer (~> 0.1.1) chunky_png (1.3.5) citrus (3.0.2) + claide (1.0.3) + claide-plugins (0.9.2) + cork + nap + open4 (~> 1.3) coderay (1.1.2) coercible (1.0.0) descendants_tracker (~> 0.0.1) + colored2 (3.1.2) commonmarker (0.17.13) ruby-enum (~> 0.5) concord (0.1.5) adamantium (~> 0.2.0) equalizer (~> 0.0.9) concurrent-ruby (1.1.5) - concurrent-ruby-ext (1.1.5) - concurrent-ruby (= 1.1.5) connection_pool (2.2.2) contracts (0.11.0) + cork (0.3.0) + colored2 (~> 3.1) + countries (3.0.0) + i18n_data (~> 0.8.0) + sixarm_ruby_unaccent (~> 1.1) + unicode_utils (~> 1.4) crack (0.4.3) safe_yaml (~> 1.0.0) crass (1.0.4) @@ -160,6 +176,19 @@ GEM css_parser (1.5.0) addressable daemons (1.2.6) + danger (6.0.9) + claide (~> 1.0) + claide-plugins (>= 0.9.2) + colored2 (~> 3.1) + cork (~> 0.1) + faraday (~> 0.9) + faraday-http-cache (~> 2.0) + git (~> 1.5) + kramdown (~> 2.0) + kramdown-parser-gfm (~> 1.0) + no_proxy_fix + octokit (~> 4.7) + terminal-table (~> 1) database_cleaner (1.7.0) debug_inspector (0.0.3) debugger-ruby_core_source (1.3.8) @@ -205,6 +234,19 @@ GEM doorkeeper (~> 4.3) json-jwt (~> 1.6) ed25519 (1.2.4) + elasticsearch (5.0.3) + elasticsearch-api (= 5.0.3) + elasticsearch-transport (= 5.0.3) + elasticsearch-api (5.0.3) + multi_json + elasticsearch-model (0.1.9) + activesupport (> 3) + elasticsearch (> 0.4) + hashie + elasticsearch-rails (0.1.9) + elasticsearch-transport (5.0.3) + faraday + multi_json email_reply_trimmer (0.1.6) email_spec (2.2.0) htmlentities (~> 4.3.3) @@ -229,8 +271,13 @@ GEM railties (>= 3.0.0) faraday (0.12.2) multipart-post (>= 1.2, < 3) + faraday-http-cache (2.0.0) + faraday (~> 0.8) faraday_middleware (0.12.2) faraday (>= 0.7.4, < 1.0) + faraday_middleware-aws-signers-v4 (0.1.7) + aws-sdk-resources (~> 2) + faraday (~> 0.9) faraday_middleware-multi_json (0.0.6) faraday_middleware multi_json @@ -263,7 +310,7 @@ GEM excon (~> 0.58) formatador (~> 0.2) mime-types - fog-google (1.8.2) + fog-google (1.9.1) fog-core (<= 2.1.0) fog-json (~> 1.2) fog-xml (~> 0.1.0) @@ -310,23 +357,30 @@ GEM gettext_i18n_rails (>= 0.7.1) po_to_json (>= 1.0.0) rails (>= 3.2.0) + git (1.5.0) gitaly (1.58.0) grpc (~> 1.0) github-markup (1.7.0) - gitlab-labkit (0.4.2) + gitlab-labkit (0.5.2) actionpack (~> 5) activesupport (~> 5) grpc (~> 1.19) jaeger-client (~> 0.10) opentracing (~> 0.4) + redis (> 3.0.0, < 5.0.0) + gitlab-license (1.0.0) gitlab-markup (1.7.0) - gitlab-sidekiq-fetcher (0.5.1) + gitlab-peek (0.0.1) + railties (>= 4.0.0) + gitlab-sidekiq-fetcher (0.5.2) sidekiq (~> 5) gitlab-styles (2.8.0) rubocop (~> 0.69.0) rubocop-gitlab-security (~> 0.1.0) rubocop-performance (~> 1.1.0) rubocop-rspec (~> 1.19) + gitlab_chronic_duration (0.10.6.1) + numerizer (~> 0.1.1) gitlab_omniauth-ldap (2.1.1) net-ldap (~> 0.16) omniauth (~> 1.3) @@ -376,7 +430,7 @@ GEM graphiql-rails (1.4.10) railties sprockets-rails - graphql (1.8.1) + graphql (1.9.11) graphql-docs (1.6.0) commonmarker (~> 0.16) escape_utils (~> 1.2) @@ -388,6 +442,8 @@ GEM grpc (1.19.0) google-protobuf (~> 3.1) googleapis-common-protos-types (~> 1.0.0) + gssapi (1.2.0) + ffi (>= 1.0.1) haml (5.0.4) temple (>= 0.8.0) tilt @@ -433,6 +489,7 @@ GEM httpclient (2.8.3) i18n (1.6.0) concurrent-ruby (~> 1.0) + i18n_data (0.8.0) icalendar (2.4.1) ice_nine (0.11.2) influxdb (0.2.3) @@ -445,10 +502,12 @@ GEM opentracing (~> 0.3) thrift jaro_winkler (1.5.3) - jira-ruby (1.4.1) + jira-ruby (1.7.1) activesupport + atlassian-jwt multipart-post oauth (~> 0.5, >= 0.5.0) + jmespath (1.3.1) js_regex (3.1.1) character_set (~> 1.1) regexp_parser (~> 1.1) @@ -476,8 +535,10 @@ GEM kgio (2.11.2) knapsack (1.17.0) rake - kramdown (1.17.0) - kubeclient (4.2.2) + kramdown (2.1.0) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + kubeclient (4.4.0) http (~> 3.0) recursive-open-struct (~> 1.0, >= 1.0.4) rest-client (~> 2.0) @@ -512,10 +573,6 @@ GEM mail_room (0.9.1) marcel (0.3.3) mimemagic (~> 0.3.2) - mdl (0.5.0) - kramdown (~> 1.12, >= 1.12.0) - mixlib-cli (~> 1.7, >= 1.7.0) - mixlib-config (~> 2.2, >= 2.2.1) memoist (0.16.0) memoizable (0.4.2) thread_safe (~> 0.3, >= 0.3.1) @@ -529,21 +586,23 @@ GEM mini_mime (1.0.1) mini_portile2 (2.4.0) minitest (5.11.3) - mixlib-cli (1.7.0) - mixlib-config (2.2.18) - tomlrb msgpack (1.3.0) multi_json (1.13.1) multi_xml (0.6.0) multipart-post (2.0.0) + murmurhash3 (0.1.6) mustermann (1.0.3) mustermann-grape (1.0.0) mustermann (~> 1.0.0) nakayoshi_fork (0.0.4) + nap (1.1.0) + net-dns (0.9.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) mini_portile2 (~> 2.4.0) nokogumbo (1.5.0) @@ -620,6 +679,7 @@ GEM addressable (~> 2.5) omniauth (~> 1.3) openid_connect (~> 1.1) + open4 (1.3.4) openid_connect (1.1.6) activemodel attr_required (>= 1.0.0) @@ -640,10 +700,6 @@ GEM parser (2.6.3.0) ast (~> 2.4.0) parslet (1.8.2) - peek (1.0.1) - concurrent-ruby (>= 0.9.0) - concurrent-ruby-ext (>= 0.9.0) - railties (>= 4.0.0) pg (1.1.4) po_to_json (1.0.1) json (>= 1.6.0) @@ -659,7 +715,7 @@ GEM parser unparser procto (0.0.3) - prometheus-client-mmap (0.9.8) + prometheus-client-mmap (0.9.10) pry (0.11.3) coderay (~> 1.1.0) method_source (~> 0.9.0) @@ -714,7 +770,7 @@ GEM rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) - rails-html-sanitizer (1.0.4) + rails-html-sanitizer (1.2.0) loofah (~> 2.2, >= 2.2.2) rails-i18n (5.1.1) i18n (>= 0.7, < 2) @@ -837,7 +893,7 @@ GEM i18n ruby-fogbugz (0.2.1) crack (~> 0.4) - ruby-prof (0.17.0) + ruby-prof (1.0.0) ruby-progressbar (1.10.1) ruby-saml (1.7.2) nokogiri (>= 1.5.10) @@ -903,6 +959,7 @@ GEM json (>= 1.8, < 3) simplecov-html (~> 0.10.0) simplecov-html (0.10.2) + sixarm_ruby_unaccent (1.2.0) slack-notifier (1.5.1) snowplow-tracker (0.6.1) contracts (~> 0.7, <= 0.11) @@ -934,7 +991,9 @@ GEM sys-filesystem (1.1.6) ffi sysexits (1.2.0) - temple (0.8.0) + temple (0.8.1) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) test-prof (0.2.5) text (1.3.1) thin (1.7.2) @@ -944,14 +1003,13 @@ GEM thor (0.19.4) thread_safe (0.3.6) thrift (0.11.0.0) - tilt (2.0.8) + tilt (2.0.9) timecop (0.8.1) timfel-krb5-auth (0.8.3) toml (0.2.0) parslet (~> 1.8.0) toml-rb (1.0.0) citrus (~> 3.0, > 3.0) - tomlrb (1.2.8) truncato (0.7.11) htmlentities (~> 4.3.1) nokogiri (>= 1.7.0, <= 2.0) @@ -966,6 +1024,7 @@ GEM unf_ext unf_ext (0.0.7.5) unicode-display_width (1.6.0) + unicode_utils (1.4.0) unicorn (5.4.1) kgio (~> 2.6) raindrops (~> 0.7) @@ -973,6 +1032,8 @@ GEM get_process_mem (~> 0) unicorn (>= 4, < 6) uniform_notifier (1.10.0) + unleash (0.1.5) + murmurhash3 (~> 0.1.6) unparser (0.4.5) abstract_type (~> 0.0.7) adamantium (~> 0.2.0) @@ -1028,7 +1089,6 @@ DEPENDENCIES ace-rails-ap (~> 4.1.0) acme-client (~> 2.0.2) activerecord-explain-analyze (~> 0.1) - activerecord_sane_schema_dumper (= 1.0) acts-as-taggable-on (~> 6.0) addressable (~> 2.5.2) akismet (~> 2.0) @@ -1037,8 +1097,10 @@ DEPENDENCIES asciidoctor (~> 2.0.10) asciidoctor-include-ext (~> 0.3.1) asciidoctor-plantuml (= 0.0.9) + atlassian-jwt (~> 0.2.0) attr_encrypted (~> 3.1.0) awesome_print + aws-sdk babosa (~> 1.0.2) base32 (~> 0.3.0) batch-loader (~> 1.4.0) @@ -1058,11 +1120,12 @@ DEPENDENCIES carrierwave (~> 1.3) charlock_holmes (~> 0.7.5) chronic (~> 0.10.2) - chronic_duration (~> 0.10.6) commonmarker (~> 0.17) concurrent-ruby (~> 1.1) connection_pool (~> 2.0) + countries (~> 3.0) creole (~> 0.5.0) + danger (~> 6.0) database_cleaner (~> 1.7.0) deckar01-task_list (= 2.2.0) default_value_for (~> 3.2.0) @@ -1075,11 +1138,15 @@ DEPENDENCIES doorkeeper (~> 4.3) doorkeeper-openid_connect (~> 1.5) ed25519 (~> 1.2) + elasticsearch-api (= 5.0.3) + elasticsearch-model (~> 0.1.9) + elasticsearch-rails (~> 0.1.9) email_reply_trimmer (~> 0.1) email_spec (~> 2.2.0) escape_utils (~> 1.1) factory_bot_rails (~> 4.8.2) faraday (~> 0.12) + faraday_middleware-aws-signers-v4 fast_blank ffaker (~> 2.10) flipper (~> 0.13.0) @@ -1089,7 +1156,7 @@ DEPENDENCIES fog-aliyun (~> 0.3) fog-aws (~> 3.5) fog-core (= 2.1.0) - fog-google (~> 1.8) + fog-google (~> 1.9) fog-local (~> 0.6) fog-openstack (~> 1.0) fog-rackspace (~> 0.1.1) @@ -1103,10 +1170,13 @@ DEPENDENCIES gettext_i18n_rails_js (~> 1.3) gitaly (~> 1.58.0) github-markup (~> 1.7.0) - gitlab-labkit (~> 0.4.2) + gitlab-labkit (~> 0.5) + gitlab-license (~> 1.0) gitlab-markup (~> 1.7.0) - gitlab-sidekiq-fetcher (= 0.5.1) + gitlab-peek (~> 0.0.1) + gitlab-sidekiq-fetcher (= 0.5.2) gitlab-styles (~> 2.7) + gitlab_chronic_duration (~> 0.10.6.1) gitlab_omniauth-ldap (~> 2.1.1) gon (~> 6.2) google-api-client (~> 0.23) @@ -1117,9 +1187,10 @@ DEPENDENCIES grape-path-helpers (~> 1.1) grape_logging (~> 1.7) graphiql-rails (~> 1.4.10) - graphql (~> 1.8.0) + graphql (~> 1.9.11) graphql-docs (~> 1.6.0) grpc (~> 1.19.0) + gssapi haml_lint (~> 0.31.0) hamlit (~> 2.8.8) hangouts-chat (~> 0.0.5) @@ -1132,27 +1203,28 @@ DEPENDENCIES icalendar influxdb (~> 0.2) invisible_captcha (~> 0.12.1) - jira-ruby (~> 1.4) + jira-ruby (~> 1.7) js_regex (~> 3.1) json-schema (~> 2.8.0) jwt (~> 2.1.0) kaminari (~> 1.0) knapsack (~> 1.17) - kubeclient (~> 4.2.2) + kubeclient (~> 4.4.0) letter_opener_web (~> 1.3.4) license_finder (~> 5.4) licensee (~> 8.9) lograge (~> 0.5) loofah (~> 2.2) mail_room (~> 0.9.1) - mdl (~> 0.5.0) memory_profiler (~> 0.9) method_source (~> 0.8) mimemagic (~> 0.3.2) mini_magick minitest (~> 5.11.0) nakayoshi_fork (~> 0.0.4) + net-dns (~> 0.9.0) net-ldap + net-ntp net-ssh (~> 5.2) nokogiri (~> 1.10.4) oauth2 (~> 1.4) @@ -1176,10 +1248,9 @@ DEPENDENCIES omniauth_crowd (~> 2.2.0) omniauth_openid_connect (~> 0.3.1) org-ruby (~> 0.9.12) - peek (~> 1.0.1) pg (~> 1.1) premailer-rails (~> 1.9.7) - prometheus-client-mmap (~> 0.9.8) + prometheus-client-mmap (~> 0.9.10) pry-byebug (~> 3.5.1) pry-rails (~> 0.3.4) puma (~> 3.12) @@ -1217,7 +1288,7 @@ DEPENDENCIES rubocop-performance (~> 1.1.0) rubocop-rspec (~> 1.22.1) ruby-fogbugz (~> 0.2.1) - ruby-prof (~> 0.17.0) + ruby-prof (~> 1.0.0) ruby-progressbar ruby_parser (~> 3.8) rubyzip (~> 1.2.2) @@ -1253,9 +1324,9 @@ DEPENDENCIES unf (~> 0.1.4) unicorn (~> 5.4.1) unicorn-worker-killer (~> 0.4.4) + unleash (~> 0.1.5) validates_hostname (~> 1.0.6) version_sorter (~> 2.2.4) - virtus (~> 1.0.1) vmstat (~> 2.3.0) webmock (~> 3.5.1) webpack-rails (~> 0.9.10) diff --git a/PHILOSOPHY.md b/PHILOSOPHY.md index e966d88ef7..483063731d 100644 --- a/PHILOSOPHY.md +++ b/PHILOSOPHY.md @@ -1 +1,4 @@ -This document is intended to communicate the product philosophy GitLab uses in creating GitLab Community Edition. The principles can be found in the [Product Section of the GitLab Handbook](https://about.gitlab.com/handbook/product/#product-at-gitlab). \ No newline at end of file +To learn about the product philosophy GitLab the company uses in creating GitLab +the product, visit our [Product Handbook page]. + +[Product Handbook page]: https://about.gitlab.com/handbook/product/#product-at-gitlab diff --git a/PROCESS.md b/PROCESS.md index 22b68b0aac..f0a82838f6 100644 --- a/PROCESS.md +++ b/PROCESS.md @@ -267,9 +267,7 @@ The two scenarios below can [bypass the exception request in the release process When a bug is found: 1. Create an issue describing the problem in the most detailed way possible. 1. If possible, provide links to real examples and how to reproduce the problem. -1. Label the issue properly, using the [team label](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#team-labels), - the [subject label](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#subject-labels) - and any other label that may apply in the specific case +1. Label the issue properly, by respecting the [Partial triage level](https://about.gitlab.com/handbook/engineering/issue-triage/#partial-triage). 1. Notify the respective Engineering Manager to evaluate and apply the [Severity label](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#severity-labels) and [Priority label](https://docs.gitlab.com/ee/development/contributing/issue_workflow.html#priority-labels). The counterpart Product Manager is included to weigh-in on prioritization as needed. 1. If the ~bug is **NOT** a regression: diff --git a/README.md b/README.md index 054e2d0246..bfc55f2827 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ # GitLab -## Test coverage - -- [![Ruby coverage](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=coverage)](https://gitlab-org.gitlab.io/gitlab-ce/coverage-ruby) Ruby -- [![JavaScript coverage](https://gitlab.com/gitlab-org/gitlab-ce/badges/master/coverage.svg?job=karma)](https://gitlab-org.gitlab.io/gitlab-ce/coverage-javascript) JavaScript - ## Canonical source The canonical source of GitLab Community Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ce/). +The source of GitLab Enterprise Edition is [hosted on GitLab.com](https://gitlab.com/gitlab-org/gitlab-ee). + +## Free trial + +You can request a free trial of GitLab Ultimate [on our website](https://about.gitlab.com/free-trial/). + ## Open source software to collaborate on code To see how GitLab looks please see the [features page on our website](https://about.gitlab.com/features/). @@ -103,7 +104,7 @@ For upgrading information please see our [update page](https://about.gitlab.com/ ## Documentation -All documentation can be found on [docs.gitlab.com/ce/](https://docs.gitlab.com/ce/). +All documentation can be found on . ## Getting help diff --git a/VERSION b/VERSION index b328ce6d68..212464673d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -12.2.9 +12.3.8 diff --git a/app/assets/javascripts/admin/statistics_panel/components/app.vue b/app/assets/javascripts/admin/statistics_panel/components/app.vue new file mode 100644 index 0000000000..29077d926c --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/components/app.vue @@ -0,0 +1,45 @@ + + + diff --git a/app/assets/javascripts/admin/statistics_panel/constants.js b/app/assets/javascripts/admin/statistics_panel/constants.js new file mode 100644 index 0000000000..2dce19a389 --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/constants.js @@ -0,0 +1,14 @@ +import { s__ } from '~/locale'; + +const statisticsLabels = { + forks: s__('AdminStatistics|Forks'), + issues: s__('AdminStatistics|Issues'), + mergeRequests: s__('AdminStatistics|Merge Requests'), + notes: s__('AdminStatistics|Notes'), + snippets: s__('AdminStatistics|Snippets'), + sshKeys: s__('AdminStatistics|SSH Keys'), + milestones: s__('AdminStatistics|Milestones'), + activeUsers: s__('AdminStatistics|Active Users'), +}; + +export default statisticsLabels; diff --git a/app/assets/javascripts/admin/statistics_panel/index.js b/app/assets/javascripts/admin/statistics_panel/index.js new file mode 100644 index 0000000000..39112e3ddc --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/index.js @@ -0,0 +1,22 @@ +import Vue from 'vue'; +import StatisticsPanelApp from './components/app.vue'; +import createStore from './store'; + +export default function(el) { + if (!el) { + return false; + } + + const store = createStore(); + + return new Vue({ + el, + store, + components: { + StatisticsPanelApp, + }, + render(h) { + return h(StatisticsPanelApp); + }, + }); +} diff --git a/app/assets/javascripts/admin/statistics_panel/store/actions.js b/app/assets/javascripts/admin/statistics_panel/store/actions.js new file mode 100644 index 0000000000..537025f524 --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/store/actions.js @@ -0,0 +1,28 @@ +import Api from '~/api'; +import { s__ } from '~/locale'; +import createFlash from '~/flash'; +import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; +import * as types from './mutation_types'; + +export const requestStatistics = ({ commit }) => commit(types.REQUEST_STATISTICS); + +export const fetchStatistics = ({ dispatch }) => { + dispatch('requestStatistics'); + + Api.adminStatistics() + .then(({ data }) => { + dispatch('receiveStatisticsSuccess', convertObjectPropsToCamelCase(data, { deep: true })); + }) + .catch(error => dispatch('receiveStatisticsError', error)); +}; + +export const receiveStatisticsSuccess = ({ commit }, statistics) => + commit(types.RECEIVE_STATISTICS_SUCCESS, statistics); + +export const receiveStatisticsError = ({ commit }, error) => { + commit(types.RECEIVE_STATISTICS_ERROR, error); + createFlash(s__('AdminDashboard|Error loading the statistics. Please try again')); +}; + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/app/assets/javascripts/admin/statistics_panel/store/getters.js b/app/assets/javascripts/admin/statistics_panel/store/getters.js new file mode 100644 index 0000000000..24437bc76b --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/store/getters.js @@ -0,0 +1,17 @@ +/** + * Merges the statisticsLabels with the state's data + * and returns an array of the following form: + * [{ key: "forks", label: "Forks", value: 50 }] + */ +export const getStatistics = state => labels => + Object.keys(labels).map(key => { + const result = { + key, + label: labels[key], + value: state.statistics && state.statistics[key] ? state.statistics[key] : null, + }; + return result; + }); + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/app/assets/javascripts/admin/statistics_panel/store/index.js b/app/assets/javascripts/admin/statistics_panel/store/index.js new file mode 100644 index 0000000000..ece9e6419d --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/store/index.js @@ -0,0 +1,16 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import * as actions from './actions'; +import * as getters from './getters'; +import mutations from './mutations'; +import state from './state'; + +Vue.use(Vuex); + +export default () => + new Vuex.Store({ + actions, + getters, + mutations, + state: state(), + }); diff --git a/app/assets/javascripts/admin/statistics_panel/store/mutation_types.js b/app/assets/javascripts/admin/statistics_panel/store/mutation_types.js new file mode 100644 index 0000000000..4e0ca4ed3c --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/store/mutation_types.js @@ -0,0 +1,3 @@ +export const REQUEST_STATISTICS = 'REQUEST_STATISTICS'; +export const RECEIVE_STATISTICS_SUCCESS = 'RECEIVE_STATISTICS_SUCCESS'; +export const RECEIVE_STATISTICS_ERROR = 'RECEIVE_STATISTICS_ERROR'; diff --git a/app/assets/javascripts/admin/statistics_panel/store/mutations.js b/app/assets/javascripts/admin/statistics_panel/store/mutations.js new file mode 100644 index 0000000000..d0fac5cfba --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/store/mutations.js @@ -0,0 +1,16 @@ +import * as types from './mutation_types'; + +export default { + [types.REQUEST_STATISTICS](state) { + state.isLoading = true; + }, + [types.RECEIVE_STATISTICS_SUCCESS](state, data) { + state.isLoading = false; + state.error = null; + state.statistics = data; + }, + [types.RECEIVE_STATISTICS_ERROR](state, error) { + state.isLoading = false; + state.error = error; + }, +}; diff --git a/app/assets/javascripts/admin/statistics_panel/store/state.js b/app/assets/javascripts/admin/statistics_panel/store/state.js new file mode 100644 index 0000000000..f2f2dc0a4d --- /dev/null +++ b/app/assets/javascripts/admin/statistics_panel/store/state.js @@ -0,0 +1,5 @@ +export default () => ({ + error: null, + isLoading: false, + statistics: null, +}); diff --git a/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js b/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js new file mode 100644 index 0000000000..6a40f1cbc5 --- /dev/null +++ b/app/assets/javascripts/analytics/cycle_analytics/mixins/add_stage_mixin.js @@ -0,0 +1,11 @@ +export default { + data() { + return { + isCustomStageForm: false, + }; + }, + methods: { + showAddStageForm: () => {}, + hideAddStageForm: () => {}, + }, +}; diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index a649c52140..992c5e5e33 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -14,6 +14,7 @@ const Api = { projectPath: '/api/:version/projects/:id', forkedProjectsPath: '/api/:version/projects/:id/forks', projectLabelsPath: '/:namespace_path/:project_path/-/labels', + projectUsersPath: '/api/:version/projects/:id/users', projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests', projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid', projectMergeRequestChangesPath: '/api/:version/projects/:id/merge_requests/:mrid/changes', @@ -35,6 +36,8 @@ const Api = { branchSinglePath: '/api/:version/projects/:id/repository/branches/:branch', createBranchPath: '/api/:version/projects/:id/repository/branches', releasesPath: '/api/:version/projects/:id/releases', + mergeRequestsPipeline: '/api/:version/projects/:id/merge_requests/:merge_request_iid/pipelines', + adminStatisticsPath: 'api/:version/application/statistics', group(groupId, callback) { const url = Api.buildUrl(Api.groupPath).replace(':id', groupId); @@ -108,6 +111,20 @@ const Api = { }); }, + projectUsers(projectPath, query = '', options = {}) { + const url = Api.buildUrl(this.projectUsersPath).replace(':id', encodeURIComponent(projectPath)); + + return axios + .get(url, { + params: { + search: query, + per_page: 20, + ...options, + }, + }) + .then(({ data }) => data); + }, + // Return single project project(projectPath) { const url = Api.buildUrl(Api.projectPath).replace(':id', encodeURIComponent(projectPath)); @@ -355,12 +372,25 @@ const Api = { }); }, + postMergeRequestPipeline(id, { mergeRequestId }) { + const url = Api.buildUrl(this.mergeRequestsPipeline) + .replace(':id', encodeURIComponent(id)) + .replace(':merge_request_iid', mergeRequestId); + + return axios.post(url); + }, + releases(id) { const url = Api.buildUrl(this.releasesPath).replace(':id', encodeURIComponent(id)); return axios.get(url); }, + adminStatistics() { + const url = Api.buildUrl(this.adminStatisticsPath); + return axios.get(url); + }, + buildUrl(url) { return joinPaths(gon.relative_url_root || '', url.replace(':version', gon.api_version)); }, diff --git a/app/assets/javascripts/behaviors/markdown/render_metrics.js b/app/assets/javascripts/behaviors/markdown/render_metrics.js index 252b98610b..8050604e6e 100644 --- a/app/assets/javascripts/behaviors/markdown/render_metrics.js +++ b/app/assets/javascripts/behaviors/markdown/render_metrics.js @@ -2,7 +2,7 @@ import Vue from 'vue'; import Metrics from '~/monitoring/components/embed.vue'; import { createStore } from '~/monitoring/stores'; -// TODO: Handle copy-pasting - https://gitlab.com/gitlab-org/gitlab-ce/issues/64369. +// TODO: Handle copy-pasting - https://gitlab.com/gitlab-org/gitlab-foss/issues/64369. export default function renderMetrics(elements) { if (!elements.length) { return; diff --git a/app/assets/javascripts/behaviors/preview_markdown.js b/app/assets/javascripts/behaviors/preview_markdown.js index b2571fb840..1909830e9e 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, object-shorthand, prefer-arrow-callback */ +/* eslint-disable func-names, no-var, prefer-arrow-callback */ import $ from 'jquery'; import axios from '~/lib/utils/axios_utils'; @@ -82,7 +82,7 @@ MarkdownPreview.prototype.fetchMarkdownPreview = function(text, url, success) { }) .then(({ data }) => { this.ajaxCache = { - text: text, + text, response: data, }; success(data); diff --git a/app/assets/javascripts/behaviors/shortcuts/shortcuts.js b/app/assets/javascripts/behaviors/shortcuts/shortcuts.js index 7e3515b1f4..66cb9fd767 100644 --- a/app/assets/javascripts/behaviors/shortcuts/shortcuts.js +++ b/app/assets/javascripts/behaviors/shortcuts/shortcuts.js @@ -46,7 +46,6 @@ export default class Shortcuts { $(document).on('click.more_help', '.js-more-help-button', function clickMoreHelp(e) { $(this).remove(); - $('.hidden-shortcut').show(); e.preventDefault(); }); } @@ -104,7 +103,6 @@ export default class Shortcuts { return results; } - $('.hidden-shortcut').show(); return $('.js-more-help-button').remove(); }); } diff --git a/app/assets/javascripts/behaviors/shortcuts/shortcuts_issuable.js b/app/assets/javascripts/behaviors/shortcuts/shortcuts_issuable.js index c8eb96a625..f7b327b2af 100644 --- a/app/assets/javascripts/behaviors/shortcuts/shortcuts_issuable.js +++ b/app/assets/javascripts/behaviors/shortcuts/shortcuts_issuable.js @@ -6,7 +6,7 @@ import { CopyAsGFM } from '../markdown/copy_as_gfm'; import { getSelectedFragment } from '~/lib/utils/common_utils'; export default class ShortcutsIssuable extends Shortcuts { - constructor(isMergeRequest) { + constructor() { super(); Mousetrap.bind('a', () => ShortcutsIssuable.openSidebarDropdown('assignee')); @@ -14,12 +14,6 @@ export default class ShortcutsIssuable extends Shortcuts { Mousetrap.bind('l', () => ShortcutsIssuable.openSidebarDropdown('labels')); Mousetrap.bind('r', ShortcutsIssuable.replyWithSelectedText); Mousetrap.bind('e', ShortcutsIssuable.editIssue); - - if (isMergeRequest) { - this.enabledHelp.push('.hidden-shortcut.merge_requests'); - } else { - this.enabledHelp.push('.hidden-shortcut.issues'); - } } static replyWithSelectedText() { diff --git a/app/assets/javascripts/behaviors/shortcuts/shortcuts_navigation.js b/app/assets/javascripts/behaviors/shortcuts/shortcuts_navigation.js index bef1553703..b46b4132ba 100644 --- a/app/assets/javascripts/behaviors/shortcuts/shortcuts_navigation.js +++ b/app/assets/javascripts/behaviors/shortcuts/shortcuts_navigation.js @@ -23,7 +23,5 @@ export default class ShortcutsNavigation extends Shortcuts { Mousetrap.bind('g e', () => findAndFollowLink('.shortcuts-environments')); Mousetrap.bind('g l', () => findAndFollowLink('.shortcuts-metrics')); Mousetrap.bind('i', () => findAndFollowLink('.shortcuts-new-issue')); - - this.enabledHelp.push('.hidden-shortcut.project'); } } diff --git a/app/assets/javascripts/behaviors/shortcuts/shortcuts_network.js b/app/assets/javascripts/behaviors/shortcuts/shortcuts_network.js index a88c280fa3..3e791e4673 100644 --- a/app/assets/javascripts/behaviors/shortcuts/shortcuts_network.js +++ b/app/assets/javascripts/behaviors/shortcuts/shortcuts_network.js @@ -11,7 +11,5 @@ export default class ShortcutsNetwork extends ShortcutsNavigation { Mousetrap.bind(['down', 'j'], graph.scrollDown); Mousetrap.bind(['shift+up', 'shift+k'], graph.scrollTop); Mousetrap.bind(['shift+down', 'shift+j'], graph.scrollBottom); - - this.enabledHelp.push('.hidden-shortcut.network'); } } diff --git a/app/assets/javascripts/behaviors/shortcuts/shortcuts_wiki.js b/app/assets/javascripts/behaviors/shortcuts/shortcuts_wiki.js index 208c91a1f0..8b7e6a56d2 100644 --- a/app/assets/javascripts/behaviors/shortcuts/shortcuts_wiki.js +++ b/app/assets/javascripts/behaviors/shortcuts/shortcuts_wiki.js @@ -6,8 +6,6 @@ export default class ShortcutsWiki extends ShortcutsNavigation { constructor() { super(); Mousetrap.bind('e', ShortcutsWiki.editWiki); - - this.enabledHelp.push('.hidden-shortcut.wiki'); } static editWiki() { diff --git a/app/assets/javascripts/blob/blob_file_dropzone.js b/app/assets/javascripts/blob/blob_file_dropzone.js index 9010cd0c3c..9f0680cc6a 100644 --- a/app/assets/javascripts/blob/blob_file_dropzone.js +++ b/app/assets/javascripts/blob/blob_file_dropzone.js @@ -1,4 +1,4 @@ -/* eslint-disable func-names, object-shorthand, prefer-arrow-callback */ +/* eslint-disable func-names, prefer-arrow-callback */ import $ from 'jquery'; import Dropzone from 'dropzone'; @@ -32,7 +32,7 @@ export default class BlobFileDropzone { url: form.attr('action'), // Rails uses a hidden input field for PUT // http://stackoverflow.com/questions/21056482/how-to-set-method-put-in-form-tag-in-rails - method: method, + method, clickable: true, uploadMultiple: false, paramName: 'file', @@ -42,7 +42,7 @@ export default class BlobFileDropzone { addRemoveLinks: true, previewsContainer: '.dropzone-previews', headers: csrf.headers, - init: function() { + init() { this.on('addedfile', function() { toggleLoading(submitButton, submitButtonLoadingIcon, false); dropzoneMessage.addClass(HIDDEN_CLASS); @@ -69,7 +69,7 @@ export default class BlobFileDropzone { }); }, // Override behavior of adding error underneath preview - error: function(file, errorMessage) { + error(file, errorMessage) { const stripped = $('
') .html(errorMessage) .text(); diff --git a/app/assets/javascripts/blob/template_selector.js b/app/assets/javascripts/blob/template_selector.js index 37e348d93d..9e69c7d716 100644 --- a/app/assets/javascripts/blob/template_selector.js +++ b/app/assets/javascripts/blob/template_selector.js @@ -1,4 +1,4 @@ -/* eslint-disable class-methods-use-this, no-unused-vars */ +/* eslint-disable class-methods-use-this */ import $ from 'jquery'; @@ -61,7 +61,7 @@ export default class TemplateSelector { return this.requestFile(item); } - requestFile(item) { + requestFile() { // This `requestFile` method is an abstract method that should // be added by all subclasses. } diff --git a/app/assets/javascripts/blob/viewer/index.js b/app/assets/javascripts/blob/viewer/index.js index d246a1f606..9ea455069f 100644 --- a/app/assets/javascripts/blob/viewer/index.js +++ b/app/assets/javascripts/blob/viewer/index.js @@ -1,4 +1,5 @@ import $ from 'jquery'; +import '~/behaviors/markdown/render_gfm'; import Flash from '../../flash'; import { handleLocationHash } from '../../lib/utils/common_utils'; import axios from '../../lib/utils/axios_utils'; @@ -105,7 +106,6 @@ export default class BlobViewer { toggleCopyButtonState() { if (!this.copySourceBtn) return; - if (this.simpleViewer.getAttribute('data-loaded')) { this.copySourceBtn.setAttribute('title', __('Copy source to clipboard')); this.copySourceBtn.classList.remove('disabled'); @@ -152,7 +152,6 @@ export default class BlobViewer { this.activeViewer = newViewer; this.toggleCopyButtonState(); - BlobViewer.loadViewer(newViewer) .then(viewer => { $(viewer).renderGFM(); diff --git a/app/assets/javascripts/boards/components/board.js b/app/assets/javascripts/boards/components/board.js index c6122fbc68..58759fd1ef 100644 --- a/app/assets/javascripts/boards/components/board.js +++ b/app/assets/javascripts/boards/components/board.js @@ -50,6 +50,9 @@ export default Vue.extend({ }; }, computed: { + isLoggedIn() { + return Boolean(gon.current_user_id); + }, counterTooltip() { const { issuesSize } = this.list; return `${n__('%d issue', '%d issues', issuesSize)}`; @@ -106,7 +109,11 @@ export default Vue.extend({ Sortable.create(this.$el.parentNode, sortableOptions); }, created() { - if (this.list.isExpandable && AccessorUtilities.isLocalStorageAccessSafe()) { + if ( + this.list.isExpandable && + AccessorUtilities.isLocalStorageAccessSafe() && + !this.isLoggedIn + ) { const isCollapsed = localStorage.getItem(`${this.uniqueKey}.expanded`) === 'false'; this.list.isExpanded = !isCollapsed; @@ -120,10 +127,14 @@ export default Vue.extend({ if (this.list.isExpandable) { this.list.isExpanded = !this.list.isExpanded; - if (AccessorUtilities.isLocalStorageAccessSafe()) { + if (AccessorUtilities.isLocalStorageAccessSafe() && !this.isLoggedIn) { localStorage.setItem(`${this.uniqueKey}.expanded`, this.list.isExpanded); } + if (this.isLoggedIn) { + this.list.update(); + } + // When expanding/collapsing, the tooltip on the caret button sometimes stays open. // Close all tooltips manually to prevent dangling tooltips. $('.tooltip').tooltip('hide'); diff --git a/app/assets/javascripts/boards/components/board_card.vue b/app/assets/javascripts/boards/components/board_card.vue index 179148b688..faf722f61a 100644 --- a/app/assets/javascripts/boards/components/board_card.vue +++ b/app/assets/javascripts/boards/components/board_card.vue @@ -83,6 +83,7 @@ export default { }" :index="index" :data-issue-id="issue.id" + data-qa-selector="board_card" class="board-card p-3 rounded" @mousedown="mouseDown" @mousemove="mouseMove" diff --git a/app/assets/javascripts/boards/components/board_list.vue b/app/assets/javascripts/boards/components/board_list.vue index 03a8a92575..de41698ca0 100644 --- a/app/assets/javascripts/boards/components/board_list.vue +++ b/app/assets/javascripts/boards/components/board_list.vue @@ -227,6 +227,7 @@ export default {
diff --git a/app/assets/javascripts/boards/components/board_new_issue.vue b/app/assets/javascripts/boards/components/board_new_issue.vue index 4180023b7d..f9a08f151c 100644 --- a/app/assets/javascripts/boards/components/board_new_issue.vue +++ b/app/assets/javascripts/boards/components/board_new_issue.vue @@ -2,9 +2,9 @@ import $ from 'jquery'; import { GlButton } from '@gitlab/ui'; import { getMilestone } from 'ee_else_ce/boards/boards_util'; +import ListIssue from 'ee_else_ce/boards/models/issue'; import eventHub from '../eventhub'; import ProjectSelect from './project_select.vue'; -import ListIssue from '../models/issue'; import boardsStore from '../stores/boards_store'; export default { @@ -54,6 +54,9 @@ export default { const assignees = this.list.assignee ? [this.list.assignee] : []; const milestone = getMilestone(this.list); + const { weightFeatureAvailable } = boardsStore; + const { weight } = weightFeatureAvailable ? boardsStore.state.currentBoard : {}; + const issue = new ListIssue({ title: this.title, labels, @@ -61,6 +64,7 @@ export default { assignees, milestone, project_id: this.selectedProject.id, + weight, }); eventHub.$emit(`scroll-board-list-${this.list.id}`); @@ -114,7 +118,7 @@ export default { name="issue_title" autocomplete="off" /> - +
+ import('ee_component/sidebar/components/sidebar_item_epics_select.vue'), RemoveBtn, Subscriptions, TimeTracker, diff --git a/app/assets/javascripts/boards/components/boards_selector.vue b/app/assets/javascripts/boards/components/boards_selector.vue index b05de4538f..ebb2f5b23e 100644 --- a/app/assets/javascripts/boards/components/boards_selector.vue +++ b/app/assets/javascripts/boards/components/boards_selector.vue @@ -226,6 +226,7 @@ export default {
diff --git a/app/assets/javascripts/boards/components/new_list_dropdown.js b/app/assets/javascripts/boards/components/new_list_dropdown.js index c8a9cb1c29..229bb82152 100644 --- a/app/assets/javascripts/boards/components/new_list_dropdown.js +++ b/app/assets/javascripts/boards/components/new_list_dropdown.js @@ -1,7 +1,9 @@ -/* eslint-disable func-names, no-new, promise/catch-or-return */ +/* eslint-disable func-names, no-new */ import $ from 'jquery'; +import { __ } from '~/locale'; import axios from '~/lib/utils/axios_utils'; +import flash from '~/flash'; import CreateLabelDropdown from '../../create_label'; import boardsStore from '../stores/boards_store'; @@ -26,18 +28,23 @@ $(document) export default function initNewListDropdown() { $('.js-new-board-list').each(function() { - const $this = $(this); + const $dropdownToggle = $(this); + const $dropdown = $dropdownToggle.closest('.dropdown'); new CreateLabelDropdown( - $this.closest('.dropdown').find('.dropdown-new-label'), - $this.data('namespacePath'), - $this.data('projectPath'), + $dropdown.find('.dropdown-new-label'), + $dropdownToggle.data('namespacePath'), + $dropdownToggle.data('projectPath'), ); - $this.glDropdown({ + $dropdownToggle.glDropdown({ data(term, callback) { - axios.get($this.attr('data-list-labels-path')).then(({ data }) => { - callback(data); - }); + axios + .get($dropdownToggle.attr('data-list-labels-path')) + .then(({ data }) => callback(data)) + .catch(() => { + $dropdownToggle.data('bs.dropdown').hide(); + flash(__('Error fetching labels.')); + }); }, renderRow(label) { const active = boardsStore.findListByLabelId(label.id); diff --git a/app/assets/javascripts/boards/components/project_select.vue b/app/assets/javascripts/boards/components/project_select.vue index e8d25e84be..e5ebb887ce 100644 --- a/app/assets/javascripts/boards/components/project_select.vue +++ b/app/assets/javascripts/boards/components/project_select.vue @@ -6,6 +6,7 @@ import Icon from '~/vue_shared/components/icon.vue'; import { GlLoadingIcon } from '@gitlab/ui'; import eventHub from '../eventhub'; import Api from '../../api'; +import { featureAccessLevel } from '~/pages/projects/shared/permissions/constants'; export default { name: 'BoardProjectSelect', @@ -19,6 +20,10 @@ export default { required: true, default: 0, }, + list: { + type: Object, + required: true, + }, }, data() { return { @@ -49,6 +54,12 @@ export default { selectable: true, data: (term, callback) => { this.loading = true; + const additionalAttrs = {}; + + if (this.list.type && this.list.type !== 'backlog') { + additionalAttrs.min_access_level = featureAccessLevel.EVERYONE; + } + return Api.groupProjects( this.groupId, term, @@ -56,6 +67,7 @@ export default { with_issues_enabled: true, with_shared: false, include_subgroups: true, + ...additionalAttrs, }, projects => { this.loading = false; diff --git a/app/assets/javascripts/boards/components/sidebar/remove_issue.vue b/app/assets/javascripts/boards/components/sidebar/remove_issue.vue index b84722244d..71e5d8058d 100644 --- a/app/assets/javascripts/boards/components/sidebar/remove_issue.vue +++ b/app/assets/javascripts/boards/components/sidebar/remove_issue.vue @@ -1,10 +1,10 @@ diff --git a/app/assets/javascripts/error_tracking/index.js b/app/assets/javascripts/error_tracking/index.js index 3d609448ef..073e2c8f1c 100644 --- a/app/assets/javascripts/error_tracking/index.js +++ b/app/assets/javascripts/error_tracking/index.js @@ -14,9 +14,10 @@ export default () => { render(createElement) { const domEl = document.querySelector(this.$options.el); const { indexPath, enableErrorTrackingLink, illustrationPath } = domEl.dataset; - let { errorTrackingEnabled } = domEl.dataset; + let { errorTrackingEnabled, userCanEnableErrorTracking } = domEl.dataset; errorTrackingEnabled = parseBoolean(errorTrackingEnabled); + userCanEnableErrorTracking = parseBoolean(userCanEnableErrorTracking); return createElement('error-tracking-list', { props: { @@ -24,6 +25,7 @@ export default () => { enableErrorTrackingLink, errorTrackingEnabled, illustrationPath, + userCanEnableErrorTracking, }, }); }, diff --git a/app/assets/javascripts/event_tracking/issue_sidebar.js b/app/assets/javascripts/event_tracking/issue_sidebar.js new file mode 100644 index 0000000000..6909f82c66 --- /dev/null +++ b/app/assets/javascripts/event_tracking/issue_sidebar.js @@ -0,0 +1,2 @@ +export const initSidebarTracking = () => {}; +export const trackEvent = () => {}; diff --git a/app/assets/javascripts/filtered_search/filtered_search_manager.js b/app/assets/javascripts/filtered_search/filtered_search_manager.js index d1f52b91d9..fd335362e5 100644 --- a/app/assets/javascripts/filtered_search/filtered_search_manager.js +++ b/app/assets/javascripts/filtered_search/filtered_search_manager.js @@ -474,7 +474,7 @@ export default class FilteredSearchManager { } }) .catch(() => { - // https://gitlab.com/gitlab-org/gitlab-ce/issues/30821 + // https://gitlab.com/gitlab-org/gitlab-foss/issues/30821 }); } diff --git a/app/assets/javascripts/flash.js b/app/assets/javascripts/flash.js index c239784212..660f0f0ba3 100644 --- a/app/assets/javascripts/flash.js +++ b/app/assets/javascripts/flash.js @@ -1,4 +1,5 @@ import _ from 'underscore'; +import { spriteIcon } from './lib/utils/common_utils'; const hideFlash = (flashEl, fadeTransition = true) => { if (fadeTransition) { @@ -35,16 +36,11 @@ const createAction = config => ` `; -const createFlashEl = (message, type, isFixedLayout = false) => ` -
-
+const createFlashEl = (message, type) => ` +
+
${_.escape(message)} + ${spriteIcon('close', 'close-icon')}
`; @@ -76,15 +72,10 @@ const createFlash = function createFlash( addBodyClass = false, ) { const flashContainer = parent.querySelector('.flash-container'); - const navigation = parent.querySelector('.content'); if (!flashContainer) return null; - const isFixedLayout = navigation - ? navigation.parentNode.classList.contains('container-limited') - : true; - - flashContainer.innerHTML = createFlashEl(message, type, isFixedLayout); + flashContainer.innerHTML = createFlashEl(message, type); const flashEl = flashContainer.querySelector(`.flash-${type}`); removeFlashClickListener(flashEl, fadeTransition); diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js index bdb50606a5..f49246cf07 100644 --- a/app/assets/javascripts/gl_dropdown.js +++ b/app/assets/javascripts/gl_dropdown.js @@ -1,5 +1,4 @@ -/* eslint-disable func-names, no-underscore-dangle, no-var, one-var, vars-on-top, no-unused-vars, no-shadow, no-cond-assign, prefer-arrow-callback, no-return-assign, no-else-return, camelcase, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, prefer-template, no-param-reassign, no-loop-func */ -/* global fuzzaldrinPlus */ +/* eslint-disable func-names, no-underscore-dangle, no-var, one-var, vars-on-top, no-shadow, no-cond-assign, prefer-arrow-callback, no-return-assign, no-else-return, camelcase, no-lonely-if, guard-for-in, no-restricted-syntax, consistent-return, prefer-template, no-param-reassign, no-loop-func */ import $ from 'jquery'; import _ from 'underscore'; @@ -7,6 +6,7 @@ import fuzzaldrinPlus from 'fuzzaldrin-plus'; import axios from './lib/utils/axios_utils'; import { visitUrl } from './lib/utils/url_utility'; import { isObject } from './lib/utils/type_utility'; +import renderItem from './gl_dropdown/render'; var GitLabDropdown, GitLabDropdownFilter, GitLabDropdownRemote, GitLabDropdownInput; @@ -65,12 +65,10 @@ GitLabDropdownInput = (function() { })(); GitLabDropdownFilter = (function() { - var ARROW_KEY_CODES, BLUR_KEYCODES, HAS_VALUE_CLASS; + var BLUR_KEYCODES, HAS_VALUE_CLASS; BLUR_KEYCODES = [27, 40]; - ARROW_KEY_CODES = [38, 40]; - HAS_VALUE_CLASS = 'has-value'; function GitLabDropdownFilter(input, options) { @@ -521,8 +519,8 @@ GitLabDropdown = (function() { html.push( this.renderItem( { - header: name, - // Add header for each group + content: name, + type: 'header', }, name, ), @@ -542,16 +540,7 @@ GitLabDropdown = (function() { }; GitLabDropdown.prototype.renderData = function(data, group) { - if (group == null) { - group = false; - } - return data.map( - (function(_this) { - return function(obj, index) { - return _this.renderItem(obj, group, index); - }; - })(this), - ); + return data.map((obj, index) => this.renderItem(obj, group || false, index)); }; GitLabDropdown.prototype.shouldPropagate = function(e) { @@ -688,104 +677,25 @@ GitLabDropdown = (function() { }; GitLabDropdown.prototype.renderItem = function(data, group, index) { - var field, html, selected, text, url, value, rowHidden; + let parent; - if (!this.options.renderRow) { - value = this.options.id ? this.options.id(data) : data.id; - - if (value) { - value = value.toString().replace(/'/g, "\\'"); - } + if (this.dropdown && this.dropdown[0]) { + parent = this.dropdown[0].parentNode; } - // Hide element - if (this.options.hideRow && this.options.hideRow(value)) { - rowHidden = true; - } - if (group == null) { - group = false; - } - if (index == null) { - // Render the row - index = false; - } - html = document.createElement('li'); - - if (rowHidden) { - html.style.display = 'none'; - } - - if (data === 'divider' || data === 'separator') { - html.className = data; - return html; - } - // Header - if (data.header != null) { - html.className = 'dropdown-header'; - html.innerHTML = data.header; - return html; - } - if (this.options.renderRow) { - // Call the render function - html = this.options.renderRow.call(this.options, data, this); - } else { - if (!selected) { - const { fieldName } = this.options; - - if (value) { - field = this.dropdown.parent().find(`input[name='${fieldName}'][value='${value}']`); - if (field.length) { - selected = true; - } - } else { - field = this.dropdown.parent().find(`input[name='${fieldName}']`); - selected = !field.length; - } - } - // Set URL - if (this.options.url != null) { - url = this.options.url(data); - } else { - url = data.url != null ? data.url : '#'; - } - // Set Text - if (this.options.text != null) { - text = this.options.text(data); - } else { - text = data.text != null ? data.text : ''; - } - if (this.highlight) { - text = data.template - ? this.highlightTemplate(text, data.template) - : this.highlightTextMatches(text, this.filterInput.val()); - } - // Create the list item & the link - var link = document.createElement('a'); - - link.href = url; - - if (this.icon) { - text = `${text}`; - link.classList.add('d-flex', 'align-items-center'); - link.innerHTML = data.icon ? data.icon + text : text; - } else if (this.highlight) { - link.innerHTML = text; - } else { - link.textContent = text; - } - - if (selected) { - link.classList.add('is-active'); - } - - if (group) { - link.dataset.group = group; - link.dataset.index = index; - } - - html.appendChild(link); - } - return html; + return renderItem({ + instance: this, + options: Object.assign({}, this.options, { + icon: this.icon, + highlight: this.highlight, + highlightText: text => this.highlightTextMatches(text, this.filterInput.val()), + highlightTemplate: this.highlightTemplate.bind(this), + parent, + }), + data, + group, + index, + }); }; GitLabDropdown.prototype.highlightTemplate = function(text, template) { @@ -809,7 +719,6 @@ GitLabDropdown = (function() { }; GitLabDropdown.prototype.noResults = function() { - var html; return ''; }; @@ -965,9 +874,8 @@ GitLabDropdown = (function() { }; GitLabDropdown.prototype.addArrowKeyEvent = function() { - var $input, ARROW_KEY_CODES, selector; + var ARROW_KEY_CODES, selector; ARROW_KEY_CODES = [38, 40]; - $input = this.dropdown.find('.dropdown-input-field'); selector = SELECTABLE_CLASSES; if (this.dropdown.find('.dropdown-toggle-page').length) { selector = '.dropdown-page-one ' + selector; diff --git a/app/assets/javascripts/gl_dropdown/render.js b/app/assets/javascripts/gl_dropdown/render.js new file mode 100644 index 0000000000..66546aa834 --- /dev/null +++ b/app/assets/javascripts/gl_dropdown/render.js @@ -0,0 +1,158 @@ +const renderersByType = { + divider(element) { + element.classList.add('divider'); + + return element; + }, + separator(element) { + element.classList.add('separator'); + + return element; + }, + header(element, data) { + element.classList.add('dropdown-header'); + element.innerHTML = data.content; + + return element; + }, +}; + +function getPropertyWithDefault(data, options, property, defaultValue = '') { + let result; + + if (options[property] != null) { + result = options[property](data); + } else { + result = data[property] != null ? data[property] : defaultValue; + } + + return result; +} + +function getHighlightTextBuilder(text, data, options) { + if (options.highlight) { + return data.template + ? options.highlightTemplate(text, data.template) + : options.highlightText(text); + } + + return text; +} + +function getIconTextBuilder(text, data, options) { + if (options.icon) { + const wrappedText = `${text}`; + return data.icon ? `${data.icon}${wrappedText}` : wrappedText; + } + + return text; +} + +function getLinkText(data, options) { + const text = getPropertyWithDefault(data, options, 'text'); + + return [getHighlightTextBuilder, getIconTextBuilder].reduce( + (acc, fn) => fn(acc, data, options), + text, + ); +} + +function escape(text) { + return text ? String(text).replace(/'/g, "\\'") : text; +} + +function getOptionValue(data, options) { + if (options.renderRow) { + return undefined; + } + + return escape(options.id ? options.id(data) : data.id); +} + +function shouldHide(data, { options }) { + const value = getOptionValue(data, options); + + return options.hideRow && options.hideRow(value); +} + +function hideElement(element) { + element.style.display = 'none'; + + return element; +} + +function checkSelected(data, options) { + const value = getOptionValue(data, options); + + if (!options.parent) { + return !data.id; + } else if (value) { + return ( + options.parent.querySelector(`input[name='${options.fieldName}'][value='${value}']`) != null + ); + } + + return options.parent.querySelector(`input[name='${options.fieldName}']`) == null; +} + +function createLink(url, selected, options) { + const link = document.createElement('a'); + + link.href = url; + + if (options.icon) { + link.classList.add('d-flex', 'align-items-center'); + } + + link.classList.toggle('is-active', selected); + + return link; +} + +function assignTextToLink(el, data, options) { + const text = getLinkText(data, options); + + if (options.icon || options.highlight) { + el.innerHTML = text; + } else { + el.textContent = text; + } + + return el; +} + +function renderLink(row, data, { options, group, index }) { + const selected = checkSelected(data, options); + const url = getPropertyWithDefault(data, options, 'url', '#'); + const link = createLink(url, selected, options); + + assignTextToLink(link, data, options); + + if (group) { + link.dataset.group = group; + link.dataset.index = index; + } + + row.appendChild(link); + + return row; +} + +function getOptionRenderer({ options, instance }) { + return options.renderRow && ((li, data) => options.renderRow(data, instance)); +} + +function getRenderer(data, params) { + return renderersByType[data.type] || getOptionRenderer(params) || renderLink; +} + +export default function item({ data, ...params }) { + const renderer = getRenderer(data, params); + const li = document.createElement('li'); + + if (shouldHide(data, params)) { + hideElement(li); + } + + return renderer(li, data, params); +} diff --git a/app/assets/javascripts/groups/components/app.vue b/app/assets/javascripts/groups/components/app.vue index aa50fd8ff6..8d2dac47ff 100644 --- a/app/assets/javascripts/groups/components/app.vue +++ b/app/assets/javascripts/groups/components/app.vue @@ -95,10 +95,8 @@ export default { if (updatePagination) { this.updatePagination(res.headers); } - - return res; + return res.data; }) - .then(res => res.json()) .catch(() => { this.isLoading = false; $.scrollTo(0); @@ -190,11 +188,10 @@ export default { this.targetGroup.isBeingRemoved = true; this.service .leaveGroup(this.targetGroup.leavePath) - .then(res => res.json()) .then(res => { $.scrollTo(0); this.store.removeGroup(this.targetGroup, this.targetParentGroup); - Flash(res.notice, 'notice'); + Flash(res.data.notice, 'notice'); }) .catch(err => { let message = COMMON_STR.FAILURE; diff --git a/app/assets/javascripts/groups/service/groups_service.js b/app/assets/javascripts/groups/service/groups_service.js index b79ba29146..790b581a7c 100644 --- a/app/assets/javascripts/groups/service/groups_service.js +++ b/app/assets/javascripts/groups/service/groups_service.js @@ -1,40 +1,39 @@ -import Vue from 'vue'; -import '../../vue_shared/vue_resource_interceptor'; +import axios from '~/lib/utils/axios_utils'; export default class GroupsService { constructor(endpoint) { - this.groups = Vue.resource(endpoint); + this.endpoint = endpoint; } getGroups(parentId, page, filterGroups, sort, archived) { - const data = {}; + const params = {}; if (parentId) { - data.parent_id = parentId; + params.parent_id = parentId; } else { // Do not send the following param for sub groups if (page) { - data.page = page; + params.page = page; } if (filterGroups) { - data.filter = filterGroups; + params.filter = filterGroups; } if (sort) { - data.sort = sort; + params.sort = sort; } if (archived) { - data.archived = archived; + params.archived = archived; } } - return this.groups.get(data); + return axios.get(this.endpoint, { params }); } // eslint-disable-next-line class-methods-use-this leaveGroup(endpoint) { - return Vue.http.delete(endpoint); + return axios.delete(endpoint); } } diff --git a/app/assets/javascripts/groups/transfer_dropdown.js b/app/assets/javascripts/groups/transfer_dropdown.js index ce0c925614..e94b163dfb 100644 --- a/app/assets/javascripts/groups/transfer_dropdown.js +++ b/app/assets/javascripts/groups/transfer_dropdown.js @@ -14,7 +14,7 @@ export default class TransferDropdown { } buildDropdown() { - const extraOptions = [{ id: '', text: __('No parent group') }, 'divider']; + const extraOptions = [{ id: '-1', text: __('No parent group') }, { type: 'divider' }]; this.groupDropdown.glDropdown({ selectable: true, @@ -33,5 +33,6 @@ export default class TransferDropdown { assignSelected(selected) { this.parentInput.val(selected.id); + this.parentInput.change(); } } diff --git a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue index 685d8a6b24..549324831e 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/actions.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/actions.vue @@ -41,10 +41,16 @@ export default { methods: { ...mapCommitActions(['updateCommitAction']), updateSelectedCommitAction() { - if (this.currentBranch && !this.currentBranch.can_push) { - this.updateCommitAction(consts.COMMIT_TO_NEW_BRANCH); - } else if (this.containsStagedChanges) { + if (!this.currentBranch) { + return; + } + + const { can_push: canPush = false, default: isDefault = false } = this.currentBranch; + + if (canPush && !isDefault) { this.updateCommitAction(consts.COMMIT_TO_CURRENT_BRANCH); + } else { + this.updateCommitAction(consts.COMMIT_TO_NEW_BRANCH); } }, }, @@ -63,7 +69,11 @@ export default { :disabled="currentBranch && !currentBranch.can_push" :title="$options.currentBranchPermissionsTooltip" > - + -import { mapGetters, createNamespacedHelpers } from 'vuex'; +import { createNamespacedHelpers } from 'vuex'; const { mapState: mapCommitState, - mapGetters: mapCommitGetters, mapActions: mapCommitActions, + mapGetters: mapCommitGetters, } = createNamespacedHelpers('commit'); export default { computed: { ...mapCommitState(['shouldCreateMR']), - ...mapCommitGetters(['isCommittingToCurrentBranch', 'isCommittingToDefaultBranch']), - ...mapGetters(['hasMergeRequest', 'isOnDefaultBranch']), - currentBranchHasMr() { - return this.hasMergeRequest && this.isCommittingToCurrentBranch; - }, - showNewMrOption() { - return ( - this.isCommittingToDefaultBranch || !this.currentBranchHasMr || this.isCommittingToNewBranch - ); - }, - }, - mounted() { - this.setShouldCreateMR(); + ...mapCommitGetters(['shouldHideNewMrOption']), }, methods: { - ...mapCommitActions(['toggleShouldCreateMR', 'setShouldCreateMR']), + ...mapCommitActions(['toggleShouldCreateMR']), }, }; diff --git a/app/assets/javascripts/ide/components/error_message.vue b/app/assets/javascripts/ide/components/error_message.vue index 2211369296..500f673783 100644 --- a/app/assets/javascripts/ide/components/error_message.vue +++ b/app/assets/javascripts/ide/components/error_message.vue @@ -44,7 +44,7 @@ export default {