From 2b1ea5b95eb6ae1771c84bbac237e6e283e01934 Mon Sep 17 00:00:00 2001 From: Pirate Praveen Date: Thu, 29 Apr 2021 21:17:54 +0530 Subject: [PATCH] New upstream version 13.11.2+ds1 --- .gitlab-ci.yml | 12 +- .gitlab/CODEOWNERS | 5 +- .gitlab/changelog_config.yml | 38 + .gitlab/ci/build-images.gitlab-ci.yml | 8 +- .gitlab/ci/cache-repo.gitlab-ci.yml | 5 +- .gitlab/ci/dast.gitlab-ci.yml | 2 +- .gitlab/ci/docs.gitlab-ci.yml | 19 +- .gitlab/ci/frontend.gitlab-ci.yml | 25 +- .gitlab/ci/global.gitlab-ci.yml | 10 +- .gitlab/ci/memory.gitlab-ci.yml | 2 - .gitlab/ci/rails.gitlab-ci.yml | 87 +- .gitlab/ci/review.gitlab-ci.yml | 15 +- .gitlab/ci/rules.gitlab-ci.yml | 121 +- .gitlab/ci/untamper-my-lockfile.yml | 26 + .gitlab/ci/vendored-gems.gitlab-ci.yml | 7 + .gitlab/ci/workhorse.gitlab-ci.yml | 14 +- .../Experiment Successful Cleanup.md | 1 + .gitlab/issue_templates/Experimentation.md | 2 +- .../issue_templates/Feature Flag Roll Out.md | 98 +- .gitlab/issue_templates/Feature proposal.md | 2 + ...eo: Replicate a new Git repository type.md | 756 + .../Geo: Replicate a new blob type.md | 722 + .gitlab/issue_templates/Implementation.md | 19 +- .../issue_templates/Lean Feature Proposal.md | 3 + .gitlab/issue_templates/Migrations.md | 67 - .gitlab/issue_templates/OSS_Partner.md | 68 + .../Productivity Improvement.md | 2 +- .../Query Performance Investigation.md | 11 +- .../Security developer workflow.md | 5 +- .../experiment_tracking_template.md | 3 +- .../New End To End Test.md | 2 +- .../Quarantine End to End Test.md | 44 + .haml-lint.yml | 13 +- .haml-lint_todo.yml | 358 +- .rubocop.yml | 28 + .rubocop_manual_todo.yml | 1243 +- .rubocop_todo.yml | 87 - CHANGELOG.md | 902 +- GITALY_SERVER_VERSION | 2 +- GITLAB_KAS_VERSION | 2 +- GITLAB_PAGES_VERSION | 2 +- Gemfile | 50 +- Gemfile.lock | 231 +- README.md | 2 +- Rakefile | 2 + VERSION | 2 +- .../images/learn_gitlab/issue_created.svg | 65 + .../images/learn_gitlab/section_deploy.svg | 16 + .../images/learn_gitlab/section_plan.svg | 1 + .../images/learn_gitlab/section_workspace.svg | 1 + app/assets/javascripts/access_tokens/index.js | 16 +- app/assets/javascripts/activities.js | 33 +- .../admin/statistics_panel/constants.js | 2 +- .../admin/users/components/users_table.vue | 2 +- .../javascripts/admin/users/constants.js | 2 - app/assets/javascripts/admin/users/new.js | 55 + .../alert_management_empty_state.vue | 2 +- .../javascripts/alert_management/list.js | 4 +- .../components/alert_mapping_builder.vue | 18 +- .../components/alerts_integrations_list.vue | 19 +- .../components/alerts_settings_form.vue | 428 +- .../components/alerts_settings_wrapper.vue | 123 +- .../javascripts/alerts_settings/constants.js | 96 +- .../javascripts/alerts_settings/index.js | 40 +- .../alerts_settings/utils/error_messages.js | 8 +- .../usage_trends/components/charts_config.js | 2 +- .../usage_trends/components/usage_counts.vue | 2 +- app/assets/javascripts/api.js | 30 +- app/assets/javascripts/api/user_api.js | 3 +- app/assets/javascripts/awards_handler.js | 2 +- .../javascripts/badges/components/badge.vue | 7 +- .../components/preview_item.vue | 14 +- .../batch_comments/mixins/resolved_status.js | 16 +- .../deprecated_remove_row_behavior.js | 15 + .../behaviors/markdown/render_mermaid.js | 54 +- .../behaviors/shortcuts/keybindings.js | 594 +- .../behaviors/shortcuts/shortcuts.js | 63 +- .../behaviors/shortcuts/shortcuts_blob.js | 3 +- .../shortcuts/shortcuts_find_file.js | 20 +- .../behaviors/shortcuts/shortcuts_help.vue | 8 +- .../behaviors/shortcuts/shortcuts_issuable.js | 29 +- .../shortcuts/shortcuts_navigation.js | 70 +- .../behaviors/shortcuts/shortcuts_network.js | 21 +- .../behaviors/shortcuts/shortcuts_toggle.vue | 6 +- .../behaviors/shortcuts/shortcuts_wiki.js | 3 +- .../blob/components/blob_content.vue | 7 + .../blob/file_template_selector.js | 26 +- app/assets/javascripts/blob/stl_viewer.js | 4 +- .../components/popover.vue | 1 - app/assets/javascripts/blob_edit/edit_blob.js | 4 +- app/assets/javascripts/boards/boards_util.js | 33 +- .../components/board_add_new_column.vue | 56 +- .../components/board_add_new_column_form.vue | 125 +- .../board_add_new_column_trigger.vue | 4 +- .../boards/components/board_blocked_icon.vue | 192 + .../boards/components/board_card_inner.vue | 28 +- .../board_card_loading_skeleton.vue | 26 + .../boards/components/board_content.vue | 29 +- .../components/board_content_sidebar.vue | 96 + .../boards/components/board_extra_actions.vue | 57 - .../boards/components/board_form.vue | 33 +- .../boards/components/board_list.vue | 2 +- .../components/board_list_deprecated.vue | 7 +- .../boards/components/board_list_header.vue | 1 + .../boards/components/board_new_issue.vue | 15 +- .../components/board_new_issue_deprecated.vue | 2 +- .../components/board_settings_sidebar.vue | 8 +- .../boards/components/config_toggle.vue | 12 +- .../boards/components/filtered_search.vue | 54 - .../boards/components/modal/empty_state.vue | 84 - .../boards/components/modal/filters.js | 27 - .../boards/components/modal/footer.vue | 80 - .../boards/components/modal/header.vue | 80 - .../boards/components/modal/index.vue | 151 - .../boards/components/modal/list.vue | 141 - .../components/modal/lists_dropdown.vue | 49 - .../boards/components/modal/tabs.vue | 42 - .../sidebar/board_editable_item.vue | 4 +- .../sidebar/board_sidebar_due_date.vue | 7 +- .../sidebar/board_sidebar_issue_title.vue | 169 - .../sidebar/board_sidebar_labels_select.vue | 12 +- .../board_sidebar_milestone_select.vue | 19 +- .../sidebar/board_sidebar_subscription.vue | 18 +- .../sidebar/board_sidebar_time_tracker.vue | 25 + .../sidebar/board_sidebar_title.vue | 169 + .../boards/components/toggle_focus.vue | 4 +- .../javascripts/boards/config_toggle.js | 5 +- app/assets/javascripts/boards/constants.js | 29 + app/assets/javascripts/boards/ee_functions.js | 1 - .../javascripts/boards/filtered_search.js | 25 - .../board_blocking_issues.query.graphql | 16 + .../boards/graphql/issue.fragment.graphql | 4 + .../issue_set_subscription.mutation.graphql | 2 +- .../graphql/issue_set_title.mutation.graphql | 2 +- app/assets/javascripts/boards/index.js | 71 +- .../boards/mixins/board_new_issue.js | 6 + .../javascripts/boards/mixins/modal_footer.js | 1 - .../javascripts/boards/mixins/modal_mixins.js | 12 - .../javascripts/boards/stores/actions.js | 306 +- .../javascripts/boards/stores/getters.js | 12 +- .../javascripts/boards/stores/modal_store.js | 95 - .../boards/stores/mutation_types.js | 15 +- .../javascripts/boards/stores/mutations.js | 70 +- .../branches/branch_sort_dropdown.js | 25 + .../branches/components/sort_dropdown.vue | 88 + .../javascripts/branches/divergence_graph.js | 8 +- .../captcha/apollo_captcha_link.js | 37 + .../ci_lint/components/ci_lint.vue | 6 +- .../components/triggers_list.vue | 10 +- .../components/ci_variable_modal.vue | 16 +- .../components/ci_variable_popover.vue | 2 +- .../components/ci_variable_table.vue | 7 +- .../javascripts/ci_variable_list/index.js | 9 +- .../clusters/components/application_row.vue | 13 +- app/assets/javascripts/clusters/constants.js | 1 + .../javascripts/clusters/forms/show/index.js | 5 +- .../services/application_state_machine.js | 4 + .../components/node_error_help_text.vue | 2 +- .../commit/pipelines/pipelines_bundle.js | 4 +- .../commit/pipelines/pipelines_table.vue | 33 +- app/assets/javascripts/commits.js | 2 +- .../components/content_editor.vue | 18 + .../javascripts/content_editor/constants.js | 5 + .../extensions/code_block_highlight.js | 38 + .../javascripts/content_editor/index.js | 2 + .../content_editor/services/create_editor.js | 60 + .../services/markdown_serializer.js | 73 + .../contributors/components/contributors.vue | 11 +- app/assets/javascripts/contributors/index.js | 9 +- .../javascripts/contributors/stores/index.js | 6 +- .../javascripts/contributors/stores/state.js | 4 +- .../create_merge_request_dropdown.js | 30 +- app/assets/javascripts/delete_label_modal.js | 16 + .../components/deploy_freeze_modal.vue | 28 +- .../components/deploy_freeze_table.vue | 35 +- .../deploy_freeze/store/actions.js | 47 +- .../deploy_freeze/store/mutation_types.js | 1 + .../deploy_freeze/store/mutations.js | 11 +- .../javascripts/deploy_freeze/store/state.js | 2 + .../components/revoke_button.vue | 81 + .../deploy_tokens/init_revoke_button.js | 26 + .../gl_dropdown_filter.js | 23 +- .../components/delete_button.vue | 2 +- .../components/design_notes/design_note.vue | 7 +- .../components/design_scaler.vue | 16 +- .../components/list/item.vue | 3 +- .../components/toolbar/design_navigation.vue | 24 +- .../components/toolbar/index.vue | 8 +- .../components/upload/button.vue | 3 +- .../javascripts/design_management/index.js | 4 +- .../design_management/pages/design/index.vue | 5 +- .../design_management/pages/index.vue | 7 +- .../javascripts/diffs/components/app.vue | 73 +- .../diffs/components/commit_item.vue | 61 +- .../diffs/components/compare_versions.vue | 52 +- .../diffs/components/diff_discussions.vue | 1 + .../diffs/components/diff_file.vue | 8 +- .../diffs/components/diff_file_header.vue | 18 +- .../diffs/components/diff_line_note_form.vue | 36 +- .../javascripts/diffs/components/diff_row.vue | 40 +- .../diffs/components/image_diff_overlay.vue | 1 + .../components/inline_diff_table_row.vue | 7 +- .../components/parallel_diff_table_row.vue | 14 + app/assets/javascripts/diffs/index.js | 4 + app/assets/javascripts/diffs/store/actions.js | 91 +- app/assets/javascripts/diffs/store/getters.js | 12 +- .../diffs/store/modules/diff_state.js | 6 +- .../javascripts/diffs/store/modules/index.js | 6 +- .../javascripts/diffs/store/mutations.js | 9 +- app/assets/javascripts/diffs/store/utils.js | 17 +- .../diffs/utils/interoperability.js | 49 + app/assets/javascripts/droplab/drop_lab.js | 15 +- app/assets/javascripts/droplab/hook_button.js | 2 + .../extensions/editor_lite_extension_base.js | 76 +- .../javascripts/emoji/awards_app/index.js | 43 + .../emoji/awards_app/store/actions.js | 51 + .../emoji/awards_app/store/index.js | 20 + .../emoji/awards_app/store/mutation_types.js | 6 + .../emoji/awards_app/store/mutations.js | 23 + .../javascripts/emoji/components/category.vue | 2 +- .../javascripts/emoji/components/picker.vue | 5 +- app/assets/javascripts/ensure_data.js | 56 + .../components/enable_review_app_modal.vue | 19 +- .../components/environment_rollback.vue | 1 + app/assets/javascripts/environments/index.js | 1 + .../components/error_details.vue | 2 +- .../components/error_tracking_actions.vue | 2 + .../components/error_tracking_form.vue | 6 +- .../error_tracking_settings/store/getters.js | 4 +- .../experimentation/components/experiment.vue | 15 + .../javascripts/experimentation/constants.js | 2 + .../javascripts/experimentation/utils.js | 18 + .../components/feature_flags_table.vue | 8 +- .../feature_flags/components/form.vue | 19 +- .../feature_flags/components/strategy.vue | 1 + .../components/user_lists_table.vue | 7 +- .../feature_highlight_popover.vue | 1 - .../filtered_search/dropdown_emoji.js | 8 +- .../filtered_search/dropdown_non_user.js | 8 +- .../filtered_search_manager.js | 7 +- app/assets/javascripts/flash.js | 74 +- app/assets/javascripts/gfm_auto_complete.js | 31 +- .../components/grafana_integration.vue | 4 +- .../javascripts/graphql_shared/constants.js | 2 + .../fragments/epic.fragment.graphql | 11 - .../user_availability.fragment.graphql | 5 + .../queries/users_search.query.graphql | 4 +- app/assets/javascripts/group.js | 6 +- .../groups/components/group_item.vue | 14 +- app/assets/javascripts/header.js | 4 + .../ide/components/cannot_push_code_alert.vue | 40 + app/assets/javascripts/ide/components/ide.vue | 13 +- .../ide/components/ide_status_mr.vue | 2 +- .../components/jobs/detail/scroll_button.vue | 1 + .../ide/components/merge_requests/list.vue | 4 +- .../ide/components/nav_dropdown_button.vue | 4 +- .../javascripts/ide/components/nav_form.vue | 2 +- app/assets/javascripts/ide/constants.js | 2 +- app/assets/javascripts/ide/index.js | 1 + .../javascripts/ide/lib/editor_options.js | 2 + .../javascripts/ide/lib/languages/README.md | 10 +- app/assets/javascripts/ide/messages.js | 12 +- .../ide/stores/actions/merge_request.js | 6 +- app/assets/javascripts/ide/stores/getters.js | 38 +- .../javascripts/ide/stores/mutation_types.js | 2 +- .../components/import_status.vue | 27 +- .../javascripts/import_entities/constants.js | 58 +- .../components/provider_repo_table_row.vue | 2 +- .../components/incidents_settings_tabs.vue | 5 +- .../edit/components/dynamic_field.vue | 11 +- .../edit/components/jira_issues_fields.vue | 54 +- .../edit/components/jira_trigger_fields.vue | 147 +- .../edit/components/jira_upgrade_cta.vue | 51 + .../edit/components/trigger_fields.vue | 4 +- .../javascripts/integrations/edit/index.js | 9 +- .../index/components/integrations_list.vue | 59 + .../index/components/integrations_table.vue | 95 + .../javascripts/integrations/index/index.js | 23 + .../components/invite_member_modal.vue | 4 +- .../components/invite_member_trigger.vue | 8 +- .../invite_member/init_invite_member_modal.js | 12 +- .../init_invite_member_trigger.js | 6 +- .../components/invite_members_modal.vue | 19 +- .../components/invite_members_trigger.vue | 71 +- .../javascripts/invite_members/constants.js | 2 + .../issuable/components/csv_export_modal.vue | 18 +- .../components/csv_import_export_buttons.vue | 31 +- .../issuable/components/issuable_by_email.vue | 6 +- .../init_csv_import_export_buttons.js | 11 +- .../issuable_bulk_update_actions.js | 4 +- .../issuable_bulk_update_sidebar.js | 23 +- app/assets/javascripts/issuable_index.js | 2 +- .../components/issuable_item.vue | 6 +- .../components/issuable_list_root.vue | 30 +- .../components/issuable_tabs.vue | 13 +- .../components/issuable_body.vue | 5 + .../components/issuable_edit_form.vue | 8 + .../components/issuable_show_root.vue | 6 + .../components/issuable_title.vue | 7 +- .../queries/issue_sidebar.query.graphql | 16 - .../components/info_popover.vue | 41 + .../issuable_type_selector/index.js | 16 + .../javascripts/issue_show/components/app.vue | 2 +- .../issue_show/components/edit_actions.vue | 12 +- .../issue_show/components/header_actions.vue | 25 +- .../issue_show/components/title.vue | 7 +- .../components/issuables_list_app.vue | 3 + .../components/issues_list_app.vue | 363 +- .../javascripts/issues_list/constants.js | 188 + app/assets/javascripts/issues_list/index.js | 39 + app/assets/javascripts/jira_connect/api.js | 24 +- .../jira_connect/components/app.vue | 64 +- .../components/group_item_name.vue | 34 + .../jira_connect/components/groups_list.vue | 96 +- .../components/groups_list_item.vue | 41 +- .../components/subscriptions_list.vue | 109 + app/assets/javascripts/jira_connect/index.js | 54 +- app/assets/javascripts/jira_connect/utils.js | 40 + .../jobs/components/commit_block.vue | 9 +- .../jobs/components/job_container_item.vue | 2 +- .../jobs/components/job_log_controllers.vue | 20 +- .../jobs/components/manual_variables_form.vue | 22 +- .../javascripts/jobs/components/sidebar.vue | 3 +- .../sidebar_job_details_container.vue | 4 +- .../jobs/components/stages_dropdown.vue | 14 +- .../graphql/queries/get_jobs.query.graphql | 52 + .../jobs/components/table/index.js | 33 + .../jobs/components/table/jobs_table.vue | 67 + .../jobs/components/table/jobs_table_app.vue | 85 + .../jobs/components/table/jobs_table_tabs.vue | 66 + app/assets/javascripts/labels_select.js | 33 +- app/assets/javascripts/lib/graphql.js | 2 + .../javascripts/lib/utils/color_utils.js | 12 + .../javascripts/lib/utils/common_utils.js | 13 + .../javascripts/lib/utils/datetime_utility.js | 76 +- app/assets/javascripts/lib/utils/forms.js | 94 + .../javascripts/lib/utils/text_markdown.js | 4 +- app/assets/javascripts/lib/utils/webpack.js | 6 - app/assets/javascripts/main.js | 55 +- .../approve_access_request_button.vue | 7 +- .../action_buttons/invite_action_buttons.vue | 1 + .../remove_group_link_button.vue | 7 +- .../action_buttons/remove_member_button.vue | 28 +- .../action_buttons/resend_invite_button.vue | 7 +- .../action_buttons/user_action_buttons.vue | 10 +- .../javascripts/members/components/app.vue | 14 +- .../components/avatars/user_avatar.vue | 3 +- .../filter_sort/filter_sort_container.vue | 10 +- .../members_filtered_search_bar.vue | 7 +- .../components/filter_sort/sort_dropdown.vue | 10 +- .../members/components/modals/leave_modal.vue | 23 +- .../modals/remove_group_link_modal.vue | 19 +- .../table/expiration_datepicker.vue | 7 +- .../components/table/members_table.vue | 13 +- .../components/table/members_table_cell.vue | 3 +- .../components/table/role_dropdown.vue | 7 +- app/assets/javascripts/members/index.js | 32 +- app/assets/javascripts/members/store/index.js | 1 + app/assets/javascripts/members/store/state.js | 6 - .../components/diff_file_editor.vue | 32 +- .../components/inline_conflict_lines.vue | 25 +- .../components/parallel_conflict_lines.vue | 17 +- .../javascripts/merge_conflicts/constants.js | 1 + .../merge_conflict_resolver_app.vue | 129 +- .../merge_conflicts/merge_conflict_service.js | 16 - .../merge_conflicts/merge_conflict_store.js | 432 - .../merge_conflicts/merge_conflicts_bundle.js | 92 +- .../mixins/line_conflict_actions.js | 7 - .../merge_conflicts/store/actions.js | 5 + .../merge_conflicts/store/getters.js | 2 +- .../merge_request/components/status_box.vue | 2 +- app/assets/javascripts/merge_request_tabs.js | 2 +- app/assets/javascripts/milestone_select.js | 12 +- .../mini_pipeline_graph_dropdown.js | 113 - .../components/dashboard_header.vue | 7 +- .../components/dashboard_panel_builder.vue | 7 +- .../components/duplicate_dashboard_form.vue | 2 +- .../monitoring/components/links_section.vue | 2 +- .../monitoring/components/refresh_button.vue | 8 +- app/assets/javascripts/mr_notes/init_notes.js | 8 +- .../javascripts/mr_notes/stores/actions.js | 35 +- .../mr_notes/stores/modules/index.js | 4 +- .../mr_notes/stores/mutation_types.js | 2 + .../javascripts/mr_notes/stores/mutations.js | 6 + .../components/lock_popovers.vue | 77 + .../namespaces/cascading_settings/index.js | 15 + .../javascripts/notebook/cells/markdown.vue | 11 +- app/assets/javascripts/notes.js | 31 +- .../notes/components/comment_form.vue | 128 +- .../notes/components/discussion_navigator.vue | 13 +- .../notes/components/discussion_notes.vue | 2 + .../discussion_resolve_with_issue_button.vue | 7 +- .../notes/components/note_actions.vue | 29 +- .../notes/components/note_attachment.vue | 2 +- .../notes/components/note_form.vue | 10 +- .../notes/components/noteable_note.vue | 26 +- .../notes/components/notes_app.vue | 7 + .../notes/components/sort_discussion.vue | 11 +- .../javascripts/notes/mixins/resolvable.js | 17 +- .../javascripts/notes/stores/getters.js | 27 +- .../components/metrics_settings.vue | 4 +- .../list/components/package_search.vue | 30 +- .../list/components/package_title.vue | 10 +- .../list/components/packages_list_app.vue | 63 +- .../javascripts/packages/list/constants.js | 4 + .../packages/list/packages_list_app_bundle.js | 8 - app/assets/javascripts/packages/list/utils.js | 4 +- .../components/package_icon_and_name.vue | 17 + .../shared/components/package_list_row.vue | 22 +- .../javascripts/packages/shared/constants.js | 1 + .../javascripts/packages/shared/utils.js | 16 +- .../infrastructure_icon_and_name.vue | 17 + .../components/infrastructure_search.vue | 45 + .../components/infrastructure_title.vue | 53 + .../list_app_bundle.js | 33 + .../group/components/maven_settings.vue | 4 + .../settings/group/constants.js | 1 + .../shared/constants.js | 1 + .../packages_and_registries/shared/utils.js | 29 + app/assets/javascripts/pager.js | 20 +- .../pages/admin/abuse_reports/index.js | 3 + app/assets/javascripts/pages/admin/admin.js | 13 - .../general/components/signup_checkbox.vue | 50 + .../general/components/signup_form.vue | 417 + .../application_settings/general/index.js | 26 +- .../admin/application_settings/gitpod.js | 24 + .../pages/admin/application_settings/index.js | 4 +- .../signup_restrictions.js | 31 + .../pages/admin/application_settings/utils.js | 21 + .../pages/admin/broadcast_messages/index.js | 6 +- .../pages/admin/groups/new/index.js | 4 +- .../pages/admin/labels/edit/index.js | 2 +- .../pages/admin/labels/index/index.js | 3 + .../pages/admin/labels/new/index.js | 2 +- .../pages/admin/runners/{ => index}/index.js | 0 .../pages/admin/runners/show/index.js | 3 + .../pages/admin/services/edit/index.js | 6 +- .../pages/admin/spam_logs/index.js | 3 + .../users/components/delete_user_modal.vue | 4 +- .../pages/admin/users/new/index.js | 52 +- .../pages/dashboard/activity/index.js | 3 +- .../pages/dashboard/todos/index/todos.js | 35 +- .../javascripts/pages/groups/edit/index.js | 2 + .../pages/groups/group_members/index.js | 5 + .../pages/groups/labels/index/index.js | 2 + .../new/fetch_group_path_availability.js | 11 +- .../pages/groups/new/group_path_validator.js | 9 +- .../javascripts/pages/groups/new/index.js | 6 +- .../pages/groups/settings/ci_cd/show/index.js | 3 - .../pages/groups/settings/index.js | 5 + .../groups/settings/integrations/index.js | 3 + .../settings/packages_and_registries/index.js | 3 - .../groups/settings/repository/show/index.js | 3 - .../javascripts/pages/profiles/show/index.js | 143 +- .../pages/projects/blob/show/index.js | 23 +- .../pages/projects/branches/index/index.js | 11 +- .../forks/new/components/fork_form.vue | 7 + .../javascripts/pages/projects/hooks/index.js | 3 + .../javascripts/pages/projects/issues/form.js | 2 + .../pages/projects/issues/index/index.js | 7 +- .../javascripts/pages/projects/issues/show.js | 14 +- .../pages/projects/jobs/index/index.js | 34 +- .../pages/projects/jobs/show/index.js | 2 +- .../pages/projects/labels/index/index.js | 2 + .../components/learn_gitlab_a.vue | 64 +- .../components/learn_gitlab_b.vue | 6 +- .../components/learn_gitlab_info_card.vue | 2 +- .../components/learn_gitlab_section_card.vue | 52 + .../components/learn_gitlab_section_link.vue | 43 + .../projects/learn_gitlab/constants/index.js | 50 +- .../merge_requests/init_merge_request_show.js | 14 +- .../infrastructure_registry/index/index.js | 3 + .../javascripts/pages/projects/pages/index.js | 3 + .../pages/projects/path_locks/index.js | 3 + .../components/interval_pattern_input.vue | 2 +- .../javascripts/pages/projects/project.js | 17 +- .../pages/projects/project_members/index.js | 5 + .../projects/settings/ci_cd/show/index.js | 3 - .../pages/projects/settings/index.js | 5 + .../settings/integrations/show/index.js | 3 + .../settings/operations/show/index.js | 5 - .../settings/repository/show/index.js | 3 - .../components/project_feature_setting.vue | 7 + .../permissions/components/settings_panel.vue | 87 +- .../pages/projects/tags/index/index.js | 2 + .../pages/shared/mount_runner_instructions.js | 9 +- .../shared/wikis/components/wiki_form.vue | 253 + .../javascripts/pages/shared/wikis/index.js | 23 + .../javascripts/pages/shared/wikis/wikis.js | 75 - .../pages/users/activity_calendar.js | 2 +- .../javascripts/performance/constants.js | 2 +- .../components/detailed_metric.vue | 98 +- .../components/performance_bar_app.vue | 19 +- .../components/request_selector.vue | 4 +- .../components/request_warning.vue | 4 +- .../javascripts/performance_bar/constants.js | 17 + .../javascripts/performance_bar/index.js | 32 +- .../stores/performance_bar_store.js | 13 +- .../javascripts/persistent_user_callouts.js | 2 + .../code_snippet_alert/code_snippet_alert.vue | 42 + .../code_snippet_alert/constants.js | 11 + .../components/commit/commit_form.vue | 2 +- .../editor/ci_config_merged_preview.vue | 76 +- .../components/editor/text_editor.vue | 2 +- .../components/file_nav/branch_switcher.vue | 65 + .../file_nav/pipeline_editor_file_nav.vue | 21 + .../header/pipeline_editor_header.vue | 15 +- .../components/header/pipeline_status.vue | 36 +- .../components/header/validation_segment.vue | 59 +- .../components/lint/ci_lint.vue | 12 +- .../components/lint/ci_lint_results.vue | 30 +- .../components/pipeline_editor_tabs.vue | 75 +- .../components/ui/editor_tab.vue | 66 +- .../javascripts/pipeline_editor/constants.js | 11 +- .../queries/available_branches.graphql | 9 + .../graphql/queries/client/app_status.graphql | 3 + .../graphql/queries/client/pipeline.graphql | 3 +- .../pipeline_editor/graphql/resolvers.js | 24 +- .../javascripts/pipeline_editor/index.js | 21 +- .../pipeline_editor/pipeline_editor_app.vue | 90 +- .../pipeline_editor/pipeline_editor_home.vue | 9 +- .../components/pipeline_new_form.vue | 15 +- .../pipelines/components/dag/dag.vue | 4 + .../pipelines/components/graph/constants.js | 9 + .../components/graph/graph_component.vue | 72 +- .../graph/graph_component_legacy.vue | 2 +- .../graph/graph_component_wrapper.vue | 56 +- .../components/graph/graph_view_selector.vue | 85 + .../components/graph/job_group_dropdown.vue | 37 +- .../pipelines/components/graph/job_item.vue | 114 +- .../components/graph/linked_pipeline.vue | 3 +- .../graph/linked_pipelines_column.vue | 19 +- .../graph/linked_pipelines_column_legacy.vue | 2 +- .../graph/stage_column_component.vue | 67 +- .../graph/stage_column_component_legacy.vue | 4 +- .../pipelines/components/graph/utils.js | 16 +- .../pipelines/components/graph_shared/api.js | 2 +- .../components/graph_shared/links_inner.vue | 26 +- .../components/graph_shared/links_layer.vue | 2 +- .../pipelines/components/header_component.vue | 8 +- .../action_component.vue | 2 +- .../job_name_component.vue | 0 .../notification/pipeline_notification.vue | 90 + .../pipelines/components/parsing_utils.js | 26 + .../components/pipeline_graph/job_pill.vue | 9 +- .../pipeline_graph/pipeline_graph.vue | 218 +- .../components/pipelines_list/blank_state.vue | 30 - .../components/pipelines_list/empty_state.vue | 39 +- .../components/pipelines_list/job_item.vue | 190 + .../pipelines_list/nav_controls.vue | 28 +- .../pipelines_list/pipeline_mini_graph.vue | 2 +- .../pipelines_list/pipeline_stage.vue | 4 +- .../pipelines_list/pipeline_triggerer.vue | 10 +- .../pipelines_list/pipeline_url.vue | 10 +- .../components/pipelines_list/pipelines.vue | 14 +- .../pipelines_list/pipelines_ci_templates.vue | 143 + .../pipelines_list/pipelines_table.vue | 38 - .../pipelines_list/pipelines_table_row.vue | 269 - .../components/pipelines_list/time_ago.vue | 74 +- .../components/test_reports/test_summary.vue | 1 + .../pipelines/components/unwrapping_utils.js | 48 +- app/assets/javascripts/pipelines/constants.js | 3 + .../dismiss_pipeline_notification.graphql | 5 + .../queries/get_dag_vis_data.query.graphql | 1 + .../queries/get_user_callouts.query.graphql | 13 + .../pipelines/mixins/pipelines_mixin.js | 2 +- .../pipelines/pipeline_details_bundle.js | 40 +- .../pipelines/pipeline_details_dag.js | 7 +- .../pipelines/pipeline_details_graph.js | 13 +- .../pipelines/pipeline_details_header.js | 8 +- .../pipeline_details_notification.js | 29 + .../pipelines/pipeline_shared_client.js | 11 + .../javascripts/pipelines/pipelines_index.js | 6 + app/assets/javascripts/pipelines/utils.js | 8 + .../components/commit_comments_button.vue | 42 + .../components/commit_options_dropdown.vue | 107 + .../projects/commit/components/form_modal.vue | 8 +- .../commit/components/form_trigger.vue | 35 - .../javascripts/projects/commit/constants.js | 2 - .../javascripts/projects/commit/index.js | 8 +- .../commit/init_cherry_pick_commit_modal.js | 1 + .../commit/init_cherry_pick_commit_trigger.js | 20 - .../commit/init_commit_comments_button.js | 18 + .../commit/init_commit_options_dropdown.js | 35 + .../commit/init_revert_commit_trigger.js | 20 - .../projects/commit/store/actions.js | 4 +- .../projects/commit_box/info/index.js | 16 +- .../projects/commit_box/info/load_branches.js | 3 +- .../compare/components/app_legacy.vue | 27 +- .../compare/components/repo_dropdown.vue | 9 +- .../compare/components/revision_dropdown.vue | 59 +- .../components/revision_dropdown_legacy.vue | 13 +- .../components/app.vue | 32 +- .../components/welcome.vue | 3 +- .../constants.js | 1 + .../pipelines/charts/components/app.vue | 36 +- .../components/ci_cd_analytics_area_chart.vue | 6 +- .../components/ci_cd_analytics_charts.vue | 4 + .../projects/pipelines/charts/index.js | 6 +- .../registry/explorer/pages/list.vue | 30 +- .../settings/components/settings_form.vue | 14 +- .../releases/components/app_edit_new.vue | 14 +- .../releases/components/app_index.vue | 4 +- .../releases/components/app_show.vue | 56 +- .../releases/components/asset_links_form.vue | 6 +- .../components/release_block_header.vue | 7 +- .../release_block_milestone_info.vue | 2 +- .../releases_pagination_graphql.vue | 4 +- .../components/releases_pagination_rest.vue | 4 +- .../releases/components/releases_sort.vue | 4 +- .../releases/components/tag_field.vue | 2 +- .../components/tag_field_existing.vue | 2 +- .../releases/components/tag_field_new.vue | 6 +- app/assets/javascripts/releases/mount_edit.js | 4 +- .../javascripts/releases/mount_index.js | 8 +- app/assets/javascripts/releases/mount_new.js | 4 +- app/assets/javascripts/releases/mount_show.js | 28 +- .../releases/stores/modules/detail/actions.js | 187 - .../stores/modules/edit_new/actions.js | 187 + .../modules/{detail => edit_new}/getters.js | 0 .../modules/{detail => edit_new}/index.js | 0 .../{detail => edit_new}/mutation_types.js | 0 .../modules/{detail => edit_new}/mutations.js | 0 .../modules/{detail => edit_new}/state.js | 0 .../stores/modules/{list => index}/actions.js | 0 .../stores/modules/{list => index}/index.js | 0 .../modules/{list => index}/mutation_types.js | 0 .../modules/{list => index}/mutations.js | 0 .../stores/modules/{list => index}/state.js | 0 .../grouped_accessibility_reports_app.vue | 1 + .../grouped_codequality_reports_app.vue | 3 +- .../components/grouped_issues_list.vue | 4 +- .../reports/components/issues_list.vue | 4 +- .../reports/components/report_section.vue | 23 +- .../reports/components/summary_row.vue | 2 +- app/assets/javascripts/reports/constants.js | 2 +- .../grouped_test_report/components/modal.vue | 21 +- .../components/test_issue_body.vue | 18 +- .../grouped_test_reports_app.vue | 31 +- .../grouped_test_report/store/actions.js | 2 +- .../store/mutation_types.js | 2 +- .../grouped_test_report/store/mutations.js | 19 +- .../grouped_test_report/store/state.js | 14 +- .../grouped_test_report/store/utils.js | 9 + .../components/blob_content_viewer.vue | 100 + .../repository/components/breadcrumbs.vue | 53 +- .../components/directory_download_links.vue | 12 +- .../repository/components/table/row.vue | 22 +- .../components/tree_action_link.vue | 28 - .../components/upload_blob_modal.vue | 8 +- app/assets/javascripts/repository/index.js | 42 +- .../javascripts/repository/pages/blob.vue | 22 + .../queries/blob_info.query.graphql | 30 + app/assets/javascripts/repository/router.js | 20 + .../runner/runner_details/constants.js | 3 + .../runner/runner_details/index.js | 23 + .../runner_details/runner_details_app.vue | 20 + .../search/sidebar/components/app.vue | 4 +- .../search/sort/components/app.vue | 1 + .../search/topbar/components/app.vue | 6 +- .../topbar/components/searchable_dropdown.vue | 8 +- .../javascripts/search_settings/constants.js | 2 +- .../components/manage_sast.vue | 2 +- .../set_status_modal_wrapper.vue | 65 +- .../assignees/assignee_avatar_link.vue | 4 +- .../assignees/assignees_realtime.vue | 25 +- .../assignees/issuable_assignees.vue | 37 +- .../assignees/sidebar_assignees.vue | 1 + .../assignees/sidebar_assignees_widget.vue | 298 +- .../assignees/sidebar_invite_members.vue | 51 + .../assignees/sidebar_participant.vue | 39 + .../assignees/uncollapsed_assignee_list.vue | 6 +- .../sidebar_confidentiality_form.vue | 11 +- .../sidebar_confidentiality_widget.vue | 17 +- .../components/copy_email_to_clipboard.vue | 35 +- .../due_date/sidebar_due_date_widget.vue | 203 + .../reference/sidebar_reference_widget.vue | 41 +- .../reviewers/uncollapsed_reviewer_list.vue | 8 +- .../components/sidebar_editable_item.vue | 38 +- app/assets/javascripts/sidebar/constants.js | 9 + .../javascripts/sidebar/mount_sidebar.js | 105 +- .../queries/issue_due_date.query.graphql | 10 + .../update_epic_subscription.mutation.graphql | 8 + .../update_epic_title.mutation.graphql | 8 + .../update_issue_due_date.mutation.graphql | 9 + .../javascripts/snippets/components/edit.vue | 54 +- .../snippets/components/embed_dropdown.vue | 1 + .../mutations/createSnippet.mutation.graphql | 2 - .../mutations/updateSnippet.mutation.graphql | 3 - .../static_site_editor/graphql/index.js | 4 +- .../tags/components/sort_dropdown.vue | 77 + app/assets/javascripts/tags/index.js | 24 + app/assets/javascripts/tooltips/index.js | 5 +- app/assets/javascripts/tracking.js | 34 +- .../user_lists/components/user_list.vue | 1 + app/assets/javascripts/users_select/index.js | 11 +- .../deployment/deployment_action_button.vue | 1 + .../components/mr_widget_pipeline.vue | 38 +- .../states/mr_widget_auto_merge_enabled.vue | 8 +- .../components/states/mr_widget_conflicts.vue | 57 +- .../components/states/mr_widget_merged.vue | 2 + .../components/states/ready_to_merge.vue | 56 +- .../components/states/squash_before_merge.vue | 3 +- .../mr_widget_options.vue | 3 +- .../queries/get_state.query.graphql | 9 +- .../states/ready_to_merge.fragment.graphql | 12 +- .../stores/mr_widget_store.js | 3 +- .../components/alert_details.vue | 7 +- .../components/alert_sidebar.vue | 5 - .../alert_details/components/alert_status.vue | 23 +- .../components/sidebar/sidebar_status.vue | 24 +- .../vue_shared/alert_details/constants.js | 11 + .../vue_shared/alert_details/index.js | 4 +- .../components/alert_details_table.vue | 8 + .../vue_shared/components/awards_list.vue | 21 +- .../components/blob_viewers/mixins.js | 10 + .../components/blob_viewers/simple_viewer.vue | 54 +- .../vue_shared/components/clone_dropdown.vue | 2 + .../components/delete_label_modal.vue | 81 + .../components/deprecated_modal.vue | 146 - .../components/file_finder/index.vue | 3 +- .../components/file_icon/file_icon_map.js | 18 +- .../filtered_search_bar_root.vue | 3 +- .../tokens/author_token.vue | 10 +- .../tokens/emoji_token.vue | 105 + .../filtered_search_bar/tokens/epic_token.vue | 133 + .../tokens/label_token.vue | 31 +- .../vue_shared/components/gl_toggle_vuex.vue | 49 - .../components/header_ci_component.vue | 8 +- .../vue_shared/components/help_popover.vue | 17 +- .../components/lib/utils/props_utils.js | 35 + .../components/markdown/apply_suggestion.vue | 3 + .../vue_shared/components/markdown/field.vue | 29 + .../vue_shared/components/markdown/header.vue | 21 +- .../markdown/suggestion_diff_header.vue | 10 +- .../components/markdown/toolbar.vue | 24 +- .../components/modal_copy_button.vue | 1 + .../components/notes/system_note.vue | 7 +- .../components/oncall_schedules_list.vue | 70 + .../components/recaptcha_eventhub.js | 21 - .../vue_shared/components/recaptcha_modal.vue | 90 - .../components/registry/registry_search.vue | 45 +- .../components/remove_member_modal.vue | 45 +- .../rich_content_editor/toolbar_item.vue | 6 +- .../get_runner_platforms.query.graphql | 8 +- .../queries/get_runner_setup.query.graphql | 14 +- .../runner_instructions.vue | 246 +- .../runner_instructions_modal.vue | 249 + .../components/sidebar/copyable_field.vue | 88 + .../sidebar/issuable_move_dropdown.vue | 1 + .../labels_select_vue/labels_select_root.vue | 48 +- .../sidebar/multiselect_dropdown.vue | 3 + .../get_issue_participants.query.graphql | 3 + .../queries/get_mr_participants.query.graphql | 3 + .../update_issue_assignees.mutation.graphql | 3 + .../update_mr_assignees.mutation.graphql | 3 + .../vue_shared/components/url_sync.vue | 20 +- .../components/user_date.vue | 0 .../components/user_popover/user_popover.vue | 25 +- .../javascripts/vue_shared/constants.js | 2 + .../mixins/recaptcha_modal_implementor.js | 36 - ...curity_report_download_paths.query.graphql | 1 + .../security_reports/security_reports_app.vue | 2 + .../javascripts/whats_new/components/app.vue | 58 +- app/assets/javascripts/whats_new/index.js | 6 +- .../javascripts/whats_new/store/actions.js | 10 +- .../whats_new/utils/notification.js | 8 +- .../stylesheets/_page_specific_files.scss | 1 - app/assets/stylesheets/application_dark.scss | 57 + .../components/feature_highlight.scss | 9 + .../stylesheets/fontawesome_custom.scss | 43 - app/assets/stylesheets/framework/awards.scss | 43 +- .../framework/ci_variable_list.scss | 23 - app/assets/stylesheets/framework/common.scss | 10 - app/assets/stylesheets/framework/diffs.scss | 4 - .../stylesheets/framework/dropdowns.scss | 14 +- .../stylesheets/framework/editor-lite.scss | 50 + app/assets/stylesheets/framework/emojis.scss | 13 +- app/assets/stylesheets/framework/filters.scss | 19 +- app/assets/stylesheets/framework/header.scss | 12 +- app/assets/stylesheets/framework/modal.scss | 8 - .../stylesheets/framework/page_header.scss | 25 +- .../framework/responsive_tables.scss | 2 +- .../secondary_navigation_elements.scss | 2 +- app/assets/stylesheets/framework/sidebar.scss | 13 - app/assets/stylesheets/framework/spinner.scss | 4 +- .../stylesheets/framework/typography.scss | 88 +- .../stylesheets/framework/variables.scss | 19 +- app/assets/stylesheets/highlight/common.scss | 28 + .../stylesheets/highlight/themes/dark.scss | 4 + .../stylesheets/highlight/themes/monokai.scss | 4 + .../stylesheets/highlight/themes/none.scss | 4 + .../highlight/themes/solarized-dark.scss | 4 + .../highlight/themes/solarized-light.scss | 4 + .../stylesheets/highlight/white_base.scss | 4 + .../lazy_bundles/select2_overrides.scss | 56 +- .../alert_management_settings.scss | 1 - .../stylesheets/page_bundles/boards.scss | 117 +- .../stylesheets/page_bundles/build.scss | 38 +- .../stylesheets/page_bundles/ci_status.scss | 14 - .../page_bundles/jira_connect.scss | 59 +- .../page_bundles/learn_gitlab.scss | 8 + .../page_bundles/merge_requests.scss | 33 +- .../stylesheets/page_bundles/pipeline.scss | 18 +- app/assets/stylesheets/pages/commits.scss | 8 +- app/assets/stylesheets/pages/editor.scss | 2 +- app/assets/stylesheets/pages/events.scss | 19 +- app/assets/stylesheets/pages/groups.scss | 15 - app/assets/stylesheets/pages/help.scss | 7 - app/assets/stylesheets/pages/issuable.scss | 45 +- app/assets/stylesheets/pages/issues.scss | 5 +- app/assets/stylesheets/pages/labels.scss | 3 +- app/assets/stylesheets/pages/login.scss | 3 +- .../stylesheets/pages/merge_requests.scss | 4 +- app/assets/stylesheets/pages/note_form.scss | 1 - app/assets/stylesheets/pages/notes.scss | 20 + .../stylesheets/pages/notifications.scss | 4 - app/assets/stylesheets/pages/projects.scss | 11 +- app/assets/stylesheets/pages/runners.scss | 56 - app/assets/stylesheets/pages/settings.scss | 4 - app/assets/stylesheets/pages/tree.scss | 2 +- app/assets/stylesheets/performance_bar.scss | 2 +- app/assets/stylesheets/print.scss | 8 + app/assets/stylesheets/themes/_dark.scss | 3 + .../stylesheets/themes/theme_light.scss | 46 - .../admin/application_settings_controller.rb | 10 +- .../admin/clusters/integrations_controller.rb | 11 + .../admin/dev_ops_report_controller.rb | 8 +- app/controllers/admin/groups_controller.rb | 11 +- app/controllers/admin/services_controller.rb | 8 +- app/controllers/admin/users_controller.rb | 6 +- app/controllers/application_controller.rb | 5 +- app/controllers/boards/issues_controller.rb | 6 +- app/controllers/chaos_controller.rb | 6 +- .../clusters/clusters_controller.rb | 6 +- .../clusters/integrations_controller.rb | 34 + .../concerns/authenticates_with_two_factor.rb | 2 +- app/controllers/concerns/creates_commit.rb | 24 +- .../concerns/enforces_admin_authentication.rb | 2 +- app/controllers/concerns/labels_as_hash.rb | 2 +- .../concerns/membership_actions.rb | 11 +- app/controllers/concerns/milestone_actions.rb | 2 +- app/controllers/concerns/redis_tracking.rb | 15 +- app/controllers/concerns/renders_commits.rb | 3 +- .../concerns/runner_setup_scripts.rb | 4 +- app/controllers/concerns/service_params.rb | 3 + .../concerns/sessionless_authentication.rb | 2 +- .../customers_dot/proxy_controller.rb | 21 + app/controllers/graphql_controller.rb | 23 +- app/controllers/groups/boards_controller.rb | 2 +- .../clusters/integrations_controller.rb | 18 + .../groups/email_campaigns_controller.rb | 20 +- app/controllers/groups/labels_controller.rb | 3 +- .../settings/applications_controller.rb | 75 + .../groups/settings/ci_cd_controller.rb | 10 +- .../settings/integrations_controller.rb | 2 + .../packages_and_registries_controller.rb | 1 + .../groups/settings/repository_controller.rb | 1 + .../groups/shared_projects_controller.rb | 14 +- .../groups/variables_controller.rb | 2 + app/controllers/groups_controller.rb | 33 +- app/controllers/ide_controller.rb | 16 +- .../import/gitlab_projects_controller.rb | 6 +- app/controllers/import/manifest_controller.rb | 6 +- app/controllers/invites_controller.rb | 28 +- .../ldap/omniauth_callbacks_controller.rb | 2 +- .../omniauth_callbacks_controller.rb | 4 +- .../profiles/notifications_controller.rb | 23 +- app/controllers/projects/blame_controller.rb | 2 +- app/controllers/projects/blob_controller.rb | 2 +- app/controllers/projects/boards_controller.rb | 3 +- .../projects/branches_controller.rb | 2 +- .../projects/ci/pipeline_editor_controller.rb | 1 + .../clusters/integrations_controller.rb | 15 + app/controllers/projects/commit_controller.rb | 39 +- .../projects/commits_controller.rb | 8 +- .../projects/compare_controller.rb | 2 +- app/controllers/projects/forks_controller.rb | 16 +- app/controllers/projects/issues_controller.rb | 34 +- app/controllers/projects/jobs_controller.rb | 5 + app/controllers/projects/labels_controller.rb | 11 +- app/controllers/projects/logs_controller.rb | 2 +- .../merge_requests/content_controller.rb | 11 +- .../merge_requests/creations_controller.rb | 17 +- .../projects/merge_requests_controller.rb | 48 +- .../projects/network_controller.rb | 5 - app/controllers/projects/notes_controller.rb | 6 +- .../infrastructure_registry_controller.rb | 9 + .../projects/pipelines_controller.rb | 43 +- .../registry/repositories_controller.rb | 15 +- .../projects/releases_controller.rb | 1 - .../projects/services_controller.rb | 2 +- .../settings/access_tokens_controller.rb | 9 +- .../projects/settings/ci_cd_controller.rb | 3 +- .../settings/operations_controller.rb | 1 + .../settings/repository_controller.rb | 1 + app/controllers/projects/tags_controller.rb | 3 + app/controllers/projects_controller.rb | 12 +- .../experience_levels_controller.rb | 2 +- .../registrations/welcome_controller.rb | 2 +- app/controllers/registrations_controller.rb | 6 +- app/controllers/root_controller.rb | 5 - app/controllers/search_controller.rb | 6 +- app/controllers/whats_new_controller.rb | 12 +- app/experiments/application_experiment.rb | 2 +- .../members/invite_email_experiment.rb | 77 +- app/experiments/strategy/round_robin.rb | 78 - .../http_integrations_finder.rb | 2 +- app/finders/applications_finder.rb | 2 +- app/finders/award_emojis_finder.rb | 3 +- app/finders/branches_finder.rb | 3 +- app/finders/ci/commit_statuses_finder.rb | 4 +- ...daily_build_group_report_results_finder.rb | 6 +- app/finders/ci/pipelines_finder.rb | 2 +- app/finders/ci/variables_finder.rb | 14 +- .../concerns/finder_with_group_hierarchy.rb | 74 + app/finders/concerns/merged_at_filter.rb | 20 +- .../concerns/packages/finder_helper.rb | 18 +- app/finders/context_commits_finder.rb | 18 +- app/finders/deployments_finder.rb | 4 +- .../environments_by_deployments_finder.rb | 67 + app/finders/environments_finder.rb | 67 +- app/finders/git_refs_finder.rb | 12 +- app/finders/group_members_finder.rb | 54 +- app/finders/group_projects_finder.rb | 3 +- app/finders/issuable_finder.rb | 17 +- app/finders/issues_finder.rb | 10 +- app/finders/labels_finder.rb | 80 +- app/finders/merge_request/metrics_finder.rb | 4 +- .../merge_requests/by_approvals_finder.rb | 8 +- .../oldest_per_commit_finder.rb | 19 +- .../metrics/dashboards/annotations_finder.rb | 3 +- .../users_starred_dashboards_finder.rb | 4 +- app/finders/namespaces/projects_finder.rb | 3 +- app/finders/notes_finder.rb | 12 +- .../packages/conan/package_file_finder.rb | 3 +- .../packages/debian/distributions_finder.rb | 6 +- app/finders/packages/go/package_finder.rb | 29 + app/finders/packages/go/version_finder.rb | 3 +- app/finders/packages/group_packages_finder.rb | 3 +- app/finders/packages/maven/package_finder.rb | 37 +- app/finders/packages/package_file_finder.rb | 4 +- app/finders/packages/packages_finder.rb | 3 +- app/finders/pending_todos_finder.rb | 15 +- app/finders/projects/export_job_finder.rb | 4 +- .../projects/prometheus/alerts_finder.rb | 4 +- app/finders/projects_finder.rb | 5 +- app/finders/prometheus_metrics_finder.rb | 4 +- app/finders/protected_branches_finder.rb | 4 +- app/finders/releases_finder.rb | 3 +- .../repositories/branch_names_finder.rb | 24 + .../repositories/changelog_tag_finder.rb | 82 + .../repositories/previous_tag_finder.rb | 57 - app/finders/tags_finder.rb | 3 +- ...user_group_notification_settings_finder.rb | 17 + app/finders/users_star_projects_finder.rb | 4 +- app/graphql/gitlab_schema.rb | 13 +- .../admin/sidekiq_queues/delete_jobs.rb | 2 +- .../prometheus_integration/create.rb | 2 +- .../prometheus_integration/update.rb | 2 +- app/graphql/mutations/base_mutation.rb | 40 +- .../boards/issues/issue_move_list.rb | 15 +- .../mutations/ci/ci_cd_settings_update.rb | 12 +- .../concerns/mutations/assignable.rb | 46 +- .../mutations/can_mutate_spammable.rb | 41 +- .../concerns/mutations/spam_protection.rb | 67 + .../container_repositories/destroy_tags.rb | 2 +- app/graphql/mutations/issues/move.rb | 2 +- app/graphql/mutations/issues/set_assignees.rb | 13 + .../mutations/merge_requests/accept.rb | 3 +- .../mutations/merge_requests/set_assignees.rb | 2 +- .../mutations/release_asset_links/delete.rb | 40 + app/graphql/mutations/snippets/create.rb | 13 +- app/graphql/mutations/snippets/update.rb | 13 +- .../get_pipeline_details.query.graphql | 1 + .../http_integrations_resolver.rb | 30 +- .../alert_management/integrations_resolver.rb | 43 +- app/graphql/resolvers/base_resolver.rb | 24 +- app/graphql/resolvers/blobs_resolver.rb | 37 + app/graphql/resolvers/board_lists_resolver.rb | 18 +- app/graphql/resolvers/board_resolver.rb | 2 +- app/graphql/resolvers/ci/config_resolver.rb | 6 +- app/graphql/resolvers/ci/jobs_resolver.rb | 13 +- .../resolvers/ci/pipeline_stages_resolver.rb | 2 +- .../resolvers/ci/runner_platforms_resolver.rb | 3 +- .../resolvers/ci/runner_setup_resolver.rb | 43 +- .../ci/test_report_summary_resolver.rb | 17 + .../resolvers/ci/test_suite_resolver.rb | 40 + .../concerns/board_issue_filterable.rb | 13 +- .../concerns/issue_resolver_arguments.rb | 33 +- app/graphql/resolvers/concerns/looks_ahead.rb | 15 +- .../concerns/manual_authorization.rb | 11 - .../concerns/resolves_merge_requests.rb | 3 +- .../resolvers/concerns/resolves_snippets.rb | 2 +- app/graphql/resolvers/echo_resolver.rb | 6 +- .../resolvers/environments_resolver.rb | 2 +- .../resolvers/group_members_resolver.rb | 6 - .../group_merge_requests_resolver.rb | 2 +- .../resolvers/group_milestones_resolver.rb | 28 +- app/graphql/resolvers/issues_resolver.rb | 3 +- app/graphql/resolvers/members_resolver.rb | 6 + .../resolvers/merge_request_resolver.rb | 8 +- .../resolvers/merge_requests_resolver.rb | 39 +- .../resolvers/metrics/dashboard_resolver.rb | 9 +- app/graphql/resolvers/milestones_resolver.rb | 4 +- .../resolvers/package_details_resolver.rb | 10 +- .../resolvers/project_jobs_resolver.rb | 41 + .../resolvers/project_pipeline_resolver.rb | 2 +- .../resolvers/projects/services_resolver.rb | 12 +- .../repository_branch_names_resolver.rb | 17 + .../resolvers/snippets/blobs_resolver.rb | 3 +- app/graphql/resolvers/timelog_resolver.rb | 112 + .../user_merge_requests_resolver_base.rb | 25 +- .../user_starred_projects_resolver.rb | 6 +- .../resolvers/users/snippets_resolver.rb | 7 + app/graphql/types/base_argument.rb | 4 +- app/graphql/types/base_enum.rb | 27 +- app/graphql/types/base_field.rb | 41 +- app/graphql/types/base_interface.rb | 6 + app/graphql/types/base_object.rb | 8 + app/graphql/types/base_union.rb | 3 + app/graphql/types/board_type.rb | 6 + .../types/boards/assignee_wildcard_id_enum.rb | 13 + .../boards/board_issuable_input_base_type.rb | 20 + .../boards/board_issue_input_base_type.rb | 17 +- .../types/boards/board_issue_input_type.rb | 13 +- .../boards/negated_board_issue_input_type.rb | 10 + app/graphql/types/ci/job_status_enum.rb | 15 + app/graphql/types/ci/job_type.rb | 103 +- .../types/ci/pipeline_config_source_enum.rb | 3 +- app/graphql/types/ci/pipeline_status_enum.rb | 4 +- app/graphql/types/ci/pipeline_type.rb | 45 +- app/graphql/types/ci/recent_failures_type.rb | 20 + app/graphql/types/ci/stage_type.rb | 35 +- app/graphql/types/ci/test_case_status_enum.rb | 15 + app/graphql/types/ci/test_case_type.rb | 41 + .../types/ci/test_report_summary_type.rb | 19 + .../types/ci/test_report_total_type.rb | 33 + .../types/ci/test_suite_summary_type.rb | 41 + app/graphql/types/ci/test_suite_type.rb | 41 + app/graphql/types/concerns/find_closest.rb | 11 + .../concerns/gitlab_style_deprecations.rb | 18 +- app/graphql/types/global_id_type.rb | 13 +- app/graphql/types/group_type.rb | 69 +- app/graphql/types/issue_type.rb | 3 + .../issues/negated_issue_filter_input_type.rb | 27 + .../types/jira_users_mapping_input_type.rb | 12 +- .../types/merge_request_review_state_enum.rb | 11 + app/graphql/types/merge_request_state_enum.rb | 2 +- app/graphql/types/merge_request_type.rb | 7 +- .../types/merge_requests/reviewer_type.rb | 26 + app/graphql/types/milestone_type.rb | 3 + .../types/mutation_operation_mode_enum.rb | 8 + app/graphql/types/mutation_type.rb | 1 + .../packages/conan/file_metadatum_type.rb | 22 + .../conan/metadatum_file_type_enum.rb | 16 + .../types/packages/conan/metadatum_type.rb | 22 + .../types/packages/file_metadata_type.rb | 27 + app/graphql/types/packages/metadata_type.rb | 4 +- .../types/packages/package_details_type.rb | 20 + .../types/packages/package_file_type.rb | 36 + app/graphql/types/packages/package_type.rb | 47 +- .../packages/package_without_versions_type.rb | 44 - app/graphql/types/project_type.rb | 6 + app/graphql/types/query_type.rb | 34 +- app/graphql/types/repository/blob_type.rb | 40 + app/graphql/types/repository_type.rb | 5 + app/graphql/types/sort_enum.rb | 32 +- app/graphql/types/timelog_type.rb | 42 + .../user_merge_request_interaction_type.rb | 47 + app/graphql/types/user_type.rb | 75 +- app/helpers/analytics/unique_visits_helper.rb | 2 +- app/helpers/appearances_helper.rb | 1 + app/helpers/application_helper.rb | 14 +- app/helpers/application_settings_helper.rb | 4 + app/helpers/avatars_helper.rb | 6 +- app/helpers/blob_helper.rb | 16 +- app/helpers/boards_helper.rb | 11 +- app/helpers/button_helper.rb | 4 +- app/helpers/ci/jobs_helper.rb | 15 + app/helpers/ci/pipeline_editor_helper.rb | 18 + app/helpers/ci/pipelines_helper.rb | 40 + app/helpers/ci/runners_helper.rb | 31 +- app/helpers/clusters_helper.rb | 2 + app/helpers/commits_helper.rb | 22 +- app/helpers/diff_helper.rb | 20 +- app/helpers/dropdowns_helper.rb | 4 +- app/helpers/events_helper.rb | 2 +- app/helpers/git_helper.rb | 3 +- app/helpers/gitlab_routing_helper.rb | 2 + app/helpers/graph_helper.rb | 2 +- app/helpers/groups_helper.rb | 62 +- app/helpers/ide_helper.rb | 2 +- app/helpers/in_product_marketing_helper.rb | 63 +- app/helpers/issuables_helper.rb | 9 +- app/helpers/issues_helper.rb | 31 + app/helpers/jira_connect_helper.rb | 16 + app/helpers/learn_gitlab_helper.rb | 5 +- app/helpers/merge_requests_helper.rb | 32 +- app/helpers/namespaces_helper.rb | 27 + app/helpers/nav_helper.rb | 6 +- app/helpers/packages_helper.rb | 3 +- app/helpers/page_layout_helper.rb | 11 +- app/helpers/preferences_helper.rb | 2 +- app/helpers/profiles_helper.rb | 14 + app/helpers/projects_helper.rb | 35 +- app/helpers/search_helper.rb | 2 +- app/helpers/services_helper.rb | 50 +- app/helpers/sidebars_helper.rb | 45 + app/helpers/snippets_helper.rb | 14 +- app/helpers/sorting_helper.rb | 2 +- app/helpers/submodule_helper.rb | 3 +- app/helpers/tab_helper.rb | 61 +- app/helpers/timeboxes_helper.rb | 11 - app/helpers/todos_helper.rb | 20 +- app/helpers/tracking_helper.rb | 4 +- app/helpers/tree_helper.rb | 2 + app/helpers/user_callouts_helper.rb | 13 +- app/helpers/whats_new_helper.rb | 12 +- app/helpers/wiki_helper.rb | 4 +- app/helpers/workhorse_helper.rb | 12 +- app/mailers/emails/in_product_marketing.rb | 7 +- app/mailers/emails/profile.rb | 24 + app/mailers/notify.rb | 4 +- app/models/ability.rb | 3 +- app/models/application_record.rb | 10 +- app/models/application_setting.rb | 11 + .../application_setting_implementation.rb | 13 +- app/models/audit_event_archived.rb | 10 - app/models/blob.rb | 1 + app/models/blob_viewer/dependency_manager.rb | 4 +- app/models/board.rb | 8 - app/models/bulk_imports/entity.rb | 19 - app/models/bulk_imports/stage.rb | 65 + app/models/bulk_imports/tracker.rb | 25 + app/models/ci/build.rb | 53 +- app/models/ci/build_dependencies.rb | 3 +- app/models/ci/build_trace_chunk.rb | 4 +- app/models/ci/build_trace_chunks/redis.rb | 2 +- app/models/ci/group.rb | 7 + app/models/ci/job_artifact.rb | 8 +- app/models/ci/pipeline.rb | 61 +- app/models/ci/pipeline_artifact.rb | 2 + app/models/ci/pipeline_schedule.rb | 2 + app/models/ci/processable.rb | 8 +- app/models/ci/runner.rb | 2 - app/models/ci/stage.rb | 11 +- app/models/ci/test_case.rb | 35 - app/models/ci/test_case_failure.rb | 29 - app/models/ci/unit_test.rb | 46 + app/models/ci/unit_test_failure.rb | 29 + app/models/clusters/agent_token.rb | 30 +- .../clusters/applications/prometheus.rb | 39 +- app/models/clusters/applications/runner.rb | 2 +- app/models/clusters/cluster.rb | 16 +- app/models/clusters/clusters_hierarchy.rb | 2 +- .../clusters/concerns/application_status.rb | 8 +- .../clusters/concerns/application_version.rb | 6 + .../clusters/concerns/prometheus_client.rb | 50 + .../clusters/integrations/prometheus.rb | 21 + app/models/commit.rb | 11 +- app/models/commit_status.rb | 33 +- app/models/concerns/avatarable.rb | 1 - app/models/concerns/boards/listable.rb | 1 + .../concerns/bulk_member_access_load.rb | 26 +- app/models/concerns/cache_markdown_field.rb | 4 +- .../cascading_namespace_setting_attribute.rb | 241 + app/models/concerns/ci/artifactable.rb | 7 +- app/models/concerns/ci/has_status.rb | 13 + app/models/concerns/counter_attribute.rb | 2 +- app/models/concerns/deprecated_assignee.rb | 2 +- app/models/concerns/enums/ci/commit_status.rb | 2 + app/models/concerns/enums/ci/pipeline.rb | 4 +- app/models/concerns/has_repository.rb | 9 +- app/models/concerns/has_timelogs_report.rb | 20 + app/models/concerns/integration.rb | 4 +- app/models/concerns/issuable.rb | 14 +- app/models/concerns/loaded_in_group_list.rb | 4 + app/models/concerns/milestoneable.rb | 4 +- app/models/concerns/milestoneish.rb | 6 +- app/models/concerns/object_storable.rb | 10 + app/models/concerns/participable.rb | 35 +- app/models/concerns/protected_ref.rb | 2 +- app/models/concerns/safe_url.rb | 4 +- .../sidebars/container_with_html_options.rb | 42 + .../concerns/sidebars/has_active_routes.rb | 16 + app/models/concerns/sidebars/has_hint.rb | 16 + app/models/concerns/sidebars/has_icon.rb | 27 + app/models/concerns/sidebars/has_pill.rb | 21 + .../concerns/sidebars/positionable_list.rb | 37 + app/models/concerns/sidebars/renderable.rb | 12 + app/models/concerns/sortable.rb | 1 + app/models/concerns/subscribable.rb | 32 +- app/models/concerns/taskable.rb | 3 +- .../encrypted.rb | 17 +- .../encryption_helper.rb | 26 + .../concerns/vulnerability_finding_helpers.rb | 7 + ...vulnerability_finding_signature_helpers.rb | 7 + app/models/deploy_key.rb | 2 - app/models/deployment.rb | 33 +- app/models/design_management/design_action.rb | 4 +- .../design_management/design_at_version.rb | 3 +- app/models/design_management/repository.rb | 2 +- app/models/design_management/version.rb | 4 +- app/models/environment.rb | 12 +- app/models/experiment.rb | 17 +- app/models/external_issue.rb | 3 +- app/models/gpg_key.rb | 4 +- app/models/group.rb | 62 +- app/models/internal_id.rb | 35 +- app/models/issue.rb | 24 +- app/models/key.rb | 2 + app/models/list.rb | 1 - app/models/member.rb | 15 +- app/models/members/group_member.rb | 4 +- .../members/last_group_owner_assigner.rb | 46 + app/models/members/project_member.rb | 2 + app/models/merge_request.rb | 39 +- app/models/milestone.rb | 4 + app/models/namespace.rb | 41 +- app/models/namespace/admin_note.rb | 7 + app/models/namespace/traversal_hierarchy.rb | 26 +- app/models/namespace_setting.rb | 14 +- app/models/namespaces/traversal/linear.rb | 111 + app/models/namespaces/traversal/recursive.rb | 15 +- app/models/note.rb | 19 +- app/models/notification_setting.rb | 4 + app/models/packages/debian/file_entry.rb | 44 + app/models/packages/debian/file_metadatum.rb | 2 + app/models/packages/dependency.rb | 4 +- app/models/packages/go/module_version.rb | 4 + app/models/packages/maven/metadatum.rb | 1 + app/models/packages/package.rb | 26 +- app/models/packages/tag.rb | 2 +- app/models/pages/lookup_path.rb | 6 +- app/models/pages_deployment.rb | 2 + app/models/preloaders/labels_preloader.rb | 34 + ..._max_access_level_in_projects_preloader.rb | 25 + app/models/project.rb | 67 +- app/models/project_feature.rb | 3 +- app/models/project_feature_usage.rb | 25 +- app/models/project_services/asana_service.rb | 24 +- .../project_services/assembla_service.rb | 2 +- app/models/project_services/bamboo_service.rb | 41 +- .../chat_message/merge_message.rb | 2 +- .../chat_notification_service.rb | 8 +- app/models/project_services/ci_service.rb | 2 +- .../custom_issue_tracker_service.rb | 6 +- .../project_services/datadog_service.rb | 4 +- .../project_services/discord_service.rb | 18 +- .../project_services/drone_ci_service.rb | 12 +- .../emails_on_push_service.rb | 30 +- .../project_services/external_wiki_service.rb | 16 +- .../project_services/hipchat_service.rb | 2 +- app/models/project_services/irker_service.rb | 2 +- .../project_services/issue_tracker_service.rb | 6 +- .../project_services/jenkins_service.rb | 40 +- app/models/project_services/jira_service.rb | 112 +- .../project_services/jira_tracker_data.rb | 21 +- .../project_services/mattermost_service.rb | 19 +- .../mattermost_slash_commands_service.rb | 2 +- .../microsoft_teams_service.rb | 14 +- .../project_services/mock_ci_service.rb | 7 +- .../pipelines_email_service.rb | 8 +- .../project_services/pushover_service.rb | 2 +- .../project_services/redmine_service.rb | 8 +- app/models/project_services/slack_service.rb | 4 +- .../project_services/teamcity_service.rb | 38 +- .../project_services/youtrack_service.rb | 4 +- app/models/project_team.rb | 4 + app/models/protected_branch.rb | 2 +- app/models/raw_usage_data.rb | 4 +- app/models/release.rb | 2 +- app/models/release_highlight.rb | 23 +- app/models/remote_mirror.rb | 39 +- app/models/repository.rb | 16 +- app/models/sent_notification.rb | 2 +- app/models/service.rb | 12 +- app/models/sidebars/context.rb | 21 + app/models/sidebars/menu.rb | 82 + app/models/sidebars/menu_item.rb | 21 + app/models/sidebars/panel.rb | 75 + app/models/sidebars/projects/context.rb | 11 + .../projects/menus/learn_gitlab/menu.rb | 41 + .../projects/menus/project_overview/menu.rb | 45 + .../project_overview/menu_items/activity.rb | 35 + .../project_overview/menu_items/details.rb | 36 + .../project_overview/menu_items/releases.rb | 40 + .../projects/menus/repository/menu.rb | 59 + .../menus/repository/menu_items/branches.rb | 35 + .../menus/repository/menu_items/commits.rb | 35 + .../menus/repository/menu_items/compare.rb | 28 + .../repository/menu_items/contributors.rb | 28 + .../menus/repository/menu_items/files.rb | 28 + .../menus/repository/menu_items/graphs.rb | 28 + .../menus/repository/menu_items/tags.rb | 28 + .../sidebars/projects/menus/scope/menu.rb | 21 + app/models/sidebars/projects/panel.rb | 26 + app/models/timelog.rb | 4 +- app/models/todo.rb | 18 + app/models/user.rb | 76 +- app/models/user_callout.rb | 10 +- app/models/user_detail.rb | 2 +- .../users/in_product_marketing_email.rb | 49 + app/models/users/merge_request_interaction.rb | 44 + app/models/wiki.rb | 59 +- app/policies/base_policy.rb | 2 +- app/policies/group_member_policy.rb | 2 +- app/policies/group_policy.rb | 20 +- app/policies/note_policy.rb | 2 +- .../packages/conan/file_metadatum_policy.rb | 8 + .../packages/conan/metadatum_policy.rb | 8 + app/policies/packages/package_file_policy.rb | 6 + app/policies/project_policy.rb | 27 +- app/policies/timelog_policy.rb | 5 + app/presenters/ci/build_runner_presenter.rb | 18 +- app/presenters/ci/pipeline_presenter.rb | 4 +- app/presenters/clusters/cluster_presenter.rb | 20 +- .../clusters/integration_presenter.rb | 11 + app/presenters/commit_status_presenter.rb | 4 +- .../dev_ops_report/metric_presenter.rb | 2 +- .../packages/detail/package_presenter.rb | 1 - .../packages/npm/package_presenter.rb | 4 +- .../nuget/packages_metadata_presenter.rb | 2 +- app/presenters/project_presenter.rb | 16 +- .../settings/deploy_keys_presenter.rb | 29 +- app/presenters/search_service_presenter.rb | 6 +- app/presenters/user_presenter.rb | 6 +- app/serializers/README.md | 2 +- app/serializers/admin/user_entity.rb | 2 + app/serializers/build_artifact_entity.rb | 10 +- app/serializers/build_details_entity.rb | 8 +- app/serializers/ci/group_variable_entity.rb | 1 + app/serializers/diff_file_entity.rb | 17 +- app/serializers/discussion_entity.rb | 8 +- app/serializers/environment_serializer.rb | 54 +- app/serializers/fork_namespace_entity.rb | 2 +- app/serializers/member_entity.rb | 2 + app/serializers/member_serializer.rb | 6 + ...merge_request_poll_cached_widget_entity.rb | 46 +- .../merge_request_poll_widget_entity.rb | 47 +- .../merge_request_widget_entity.rb | 2 +- .../merge_requests/pipeline_entity.rb | 4 +- app/serializers/note_entity.rb | 3 +- app/serializers/pipeline_details_entity.rb | 2 +- app/serializers/pipeline_serializer.rb | 1 - app/serializers/runner_entity.rb | 2 +- app/serializers/service_field_entity.rb | 29 +- .../application_settings/base_service.rb | 4 +- .../find_records_due_for_refresh_service.rb | 92 + app/services/base_container_service.rb | 4 +- app/services/base_service.rb | 4 +- app/services/boards/base_item_move_service.rb | 20 +- app/services/boards/base_service.rb | 4 +- app/services/boards/destroy_service.rb | 8 +- app/services/boards/issues/move_service.rb | 23 +- .../boards/lists/base_update_service.rb | 58 + app/services/boards/lists/list_service.rb | 10 +- app/services/boards/lists/update_service.rb | 45 +- app/services/ci/abort_pipelines_service.rb | 32 + .../ci/abort_project_pipelines_service.rb | 25 - app/services/ci/after_requeue_job_service.rb | 28 + .../ci/cancel_user_pipelines_service.rb | 18 - .../ci/create_job_artifacts_service.rb | 172 - app/services/ci/create_pipeline_service.rb | 3 +- .../ci/create_web_ide_terminal_service.rb | 3 +- .../destroy_expired_job_artifacts_service.rb | 56 - ...disable_user_pipeline_schedules_service.rb | 11 + app/services/ci/drop_pipeline_service.rb | 37 + .../ci/generate_coverage_reports_service.rb | 8 +- .../ci/job_artifacts/create_service.rb | 174 + .../destroy_all_expired_service.rb | 58 + .../ci/job_artifacts/destroy_batch_service.rb | 74 + .../ci/job_artifacts_destroy_batch_service.rb | 72 - .../destroy_all_expired_service.rb | 52 + .../destroy_expired_artifacts_service.rb | 52 - .../status_collection.rb | 8 +- app/services/ci/pipeline_trigger_service.rb | 23 +- app/services/ci/play_bridge_service.rb | 4 + app/services/ci/play_build_service.rb | 8 +- app/services/ci/process_build_service.rb | 25 - app/services/ci/process_pipeline_service.rb | 2 +- app/services/ci/register_job_service.rb | 30 +- app/services/ci/retry_build_service.rb | 18 +- app/services/ci/retry_pipeline_service.rb | 2 +- app/services/ci/stop_environments_service.rb | 2 +- .../ci/test_failure_history_service.rb | 48 +- app/services/clusters/create_service.rb | 3 +- app/services/clusters/destroy_service.rb | 3 +- .../clusters/integrations/create_service.rb | 43 + app/services/clusters/update_service.rb | 3 +- .../integrations/project_test_data.rb | 2 +- app/services/concerns/suggestible.rb | 2 +- .../link_merge_requests_service.rb | 28 +- app/services/draft_notes/base_service.rb | 4 +- app/services/git/wiki_push_service.rb | 4 +- app/services/git/wiki_push_service/change.rb | 4 +- app/services/groups/base_service.rb | 16 +- app/services/groups/count_service.rb | 49 + app/services/groups/create_service.rb | 9 +- .../groups/group_links/create_service.rb | 2 +- .../groups/merge_requests_count_service.rb | 22 + app/services/groups/nested_create_service.rb | 3 +- .../groups/open_issues_count_service.rb | 41 +- app/services/groups/update_service.rb | 12 - app/services/issuable/bulk_update_service.rb | 17 +- app/services/issuable/destroy_service.rb | 34 +- app/services/issuable/process_assignees.rb | 9 +- app/services/issuable_base_service.rb | 76 +- app/services/issuable_links/create_service.rb | 8 +- .../issuable_links/destroy_service.rb | 8 +- app/services/issuable_links/list_service.rb | 3 +- app/services/issue_rebalancing_service.rb | 2 +- app/services/issues/after_create_service.rb | 13 + app/services/issues/base_service.rb | 2 +- app/services/issues/create_service.rb | 8 +- app/services/issues/update_service.rb | 18 +- .../base_service.rb | 4 +- app/services/keys/base_service.rb | 3 +- app/services/keys/create_service.rb | 3 +- .../keys/expiry_notification_service.rb | 42 + .../mattermost/create_team_service.rb | 3 +- app/services/members/create_service.rb | 113 +- app/services/members/invite_service.rb | 94 +- .../merge_requests/add_context_service.rb | 4 +- .../merge_requests/after_create_service.rb | 12 + app/services/merge_requests/base_service.rb | 16 +- app/services/merge_requests/build_service.rb | 38 +- app/services/merge_requests/create_service.rb | 12 +- .../handle_assignees_change_service.rb | 43 + .../merge_requests/merge_to_ref_service.rb | 8 +- .../migrate_external_diffs_service.rb | 2 +- .../push_options_handler_service.rb | 7 +- .../merge_requests/refresh_service.rb | 9 +- .../merge_requests/resolve_todos_service.rb | 28 + .../merge_requests/retarget_chain_service.rb | 2 +- .../update_assignees_service.rb | 64 + app/services/merge_requests/update_service.rb | 77 +- .../dashboard/annotations/create_service.rb | 3 +- .../dashboard/annotations/delete_service.rb | 3 +- .../dashboard/grafana_metric_embed_service.rb | 6 +- .../dashboard/panel_preview_service.rb | 4 +- .../create_service.rb | 4 +- .../delete_service.rb | 4 +- app/services/milestones/base_service.rb | 4 +- .../milestones/find_or_create_service.rb | 4 +- .../merge_requests_count_service.rb | 17 + app/services/milestones/transfer_service.rb | 9 +- .../namespace_settings/update_service.rb | 13 + .../in_product_marketing_emails_service.rb | 47 +- app/services/notes/create_service.rb | 25 +- .../notification_recipients/builder/base.rb | 44 + .../builder/request_review.rb | 4 +- app/services/notification_service.rb | 16 +- .../composer/composer_json_service.rb | 3 +- .../composer/version_parser_service.rb | 3 +- .../debian/create_distribution_service.rb | 3 +- .../extract_changes_metadata_service.rb | 112 + .../debian/extract_metadata_service.rb | 21 +- .../debian/parse_debian822_service.rb | 2 +- .../debian/process_changes_service.rb | 102 + .../debian/update_distribution_service.rb | 3 +- .../packages/go/create_package_service.rb | 70 + .../packages/go/sync_packages_service.rb | 24 + .../maven/find_or_create_package_service.rb | 3 +- .../packages/maven/metadata/sync_service.rb | 15 +- .../nuget/create_dependency_service.rb | 4 +- .../rubygems/create_dependencies_service.rb | 44 + .../rubygems/create_gemspec_service.rb | 42 + .../rubygems/metadata_extraction_service.rb | 56 + .../packages/rubygems/process_gem_service.rb | 124 + app/services/pages/delete_service.rb | 2 +- .../migrate_from_legacy_storage_service.rb | 43 +- ...te_legacy_storage_to_deployment_service.rb | 17 +- app/services/pages/zip_directory_service.rb | 4 +- app/services/pod_logs/kubernetes_service.rb | 2 +- app/services/post_receive_service.rb | 2 +- .../projects/alerting/notify_service.rb | 2 +- .../projects/branches_by_mode_service.rb | 3 +- .../projects/create_from_template_service.rb | 3 +- app/services/projects/create_service.rb | 17 +- app/services/projects/destroy_service.rb | 4 +- app/services/projects/download_service.rb | 3 +- .../gitlab_projects_import_service.rb | 4 +- .../update_pages_configuration_service.rb | 2 +- app/services/projects/update_pages_service.rb | 15 +- .../projects/update_remote_mirror_service.rb | 14 +- .../create_default_alerts_service.rb | 2 +- app/services/prometheus/proxy_service.rb | 4 +- .../proxy_variable_substitution_service.rb | 3 +- app/services/releases/base_service.rb | 4 +- .../repositories/changelog_service.rb | 10 +- .../resource_access_tokens/create_service.rb | 2 +- .../resource_access_tokens/revoke_service.rb | 12 +- .../base_synthetic_notes_builder_service.rb | 4 +- .../resource_events/change_labels_service.rb | 3 +- .../resource_events/change_state_service.rb | 3 +- app/services/search/global_service.rb | 3 +- app/services/search/project_service.rb | 4 +- app/services/snippets/create_service.rb | 2 +- app/services/snippets/update_service.rb | 2 +- app/services/spam/spam_action_service.rb | 32 +- app/services/spam/spam_params.rb | 8 +- app/services/submit_usage_ping_service.rb | 8 +- app/services/system_hooks_service.rb | 24 +- app/services/system_note_service.rb | 2 +- .../system_notes/alert_management_service.rb | 2 +- app/services/system_notes/commit_service.rb | 2 +- app/services/task_list_toggle_service.rb | 8 +- app/services/todo_service.rb | 25 +- app/services/todos/destroy/base_service.rb | 2 +- .../destroy/destroyed_issuable_service.rb | 46 + .../todos/destroy/entity_leave_service.rb | 15 +- .../todos/destroy/private_features_service.rb | 2 +- app/services/two_factor/base_service.rb | 3 +- app/services/upload_service.rb | 10 +- app/services/user_agent_detail_service.rb | 3 +- .../user_preferences/update_service.rb | 20 + app/services/users/activity_service.rb | 2 + .../users/batch_status_cleaner_service.rb | 2 +- .../refresh_authorized_projects_service.rb | 71 +- .../users/respond_to_terms_service.rb | 3 +- app/services/users/set_status_service.rb | 3 +- .../users/update_canonical_email_service.rb | 2 +- .../users/update_todo_count_cache_service.rb | 34 + app/uploaders/object_storage.rb | 1 + app/validators/json_schema_validator.rb | 24 +- .../application_setting_kroki_formats.json | 1 + .../json_schemas/build_metadata_secrets.json | 1 + .../build_report_result_data.json | 1 + .../build_report_result_data_tests.json | 1 + app/validators/json_schemas/codeclimate.json | 1 + .../daily_build_group_report_result_data.json | 1 + .../json_schemas/debian_fields.json | 1 + app/validators/json_schemas/git_trailers.json | 1 + ...integration_payload_attribute_mapping.json | 1 + .../sast_ui_schema.json | 41 +- .../json_schemas/security_scan_info.json | 28 - .../vulnerability_finding_details.json | 294 - .../abuse_reports/_abuse_report.html.haml | 8 +- app/views/admin/abuse_reports/index.html.haml | 11 +- .../_account_and_limit.html.haml | 2 +- .../_diff_limits.html.haml | 2 +- .../admin/application_settings/_eks.html.haml | 2 +- ...ernal_authorization_service_form.html.haml | 2 +- .../application_settings/_gitpod.html.haml | 2 +- .../application_settings/_ip_limits.html.haml | 22 +- .../application_settings/_kroki.html.haml | 2 +- .../application_settings/_pages.html.haml | 2 +- .../_performance.html.haml | 4 +- .../_performance_bar.html.haml | 6 +- .../application_settings/_plantuml.html.haml | 2 +- .../application_settings/_realtime.html.haml | 11 +- .../application_settings/_registry.html.haml | 4 +- .../_repository_check.html.haml | 33 +- .../application_settings/_signin.html.haml | 11 +- .../application_settings/_signup.html.haml | 98 +- .../application_settings/_snowplow.html.haml | 2 +- .../_sourcegraph.html.haml | 2 +- .../application_settings/_terminal.html.haml | 2 +- .../application_settings/_terms.html.haml | 2 +- .../_third_party_offers.html.haml | 2 +- .../application_settings/_usage.html.haml | 2 +- .../_visibility_and_access.html.haml | 2 +- .../application_settings/ci/_header.html.haml | 4 +- .../application_settings/ci_cd.html.haml | 19 +- .../application_settings/general.html.haml | 2 +- .../integrations.html.haml | 8 +- .../admin/broadcast_messages/_form.html.haml | 4 +- .../admin/broadcast_messages/index.html.haml | 21 +- app/views/admin/dashboard/index.html.haml | 30 +- app/views/admin/deploy_keys/new.html.haml | 2 +- .../admin/dev_ops_report/_callout.html.haml | 2 +- app/views/admin/groups/_form.html.haml | 2 + app/views/admin/groups/show.html.haml | 5 +- app/views/admin/hook_logs/_index.html.haml | 18 +- app/views/admin/labels/_label.html.haml | 4 +- app/views/admin/labels/index.html.haml | 2 +- app/views/admin/projects/_projects.html.haml | 4 +- app/views/admin/projects/index.html.haml | 10 +- app/views/admin/runners/_runner.html.haml | 43 +- app/views/admin/runners/index.html.haml | 13 +- app/views/admin/runners/show.html.haml | 39 +- .../admin/serverless/domains/index.html.haml | 2 +- app/views/admin/services/_form.html.haml | 4 +- ...rvice_templates_deprecated_alert.html.haml | 8 + app/views/admin/services/index.html.haml | 28 +- app/views/admin/spam_logs/_spam_log.html.haml | 20 +- app/views/admin/users/_admin_notes.html.haml | 2 +- app/views/admin/users/_head.html.haml | 14 +- app/views/admin/users/_user.html.haml | 12 +- .../authentication/_authenticate.html.haml | 4 +- app/views/authentication/_register.html.haml | 4 +- app/views/award_emoji/_awards_block.html.haml | 43 +- app/views/ci/group_variables/_index.html.haml | 2 + .../_variable_header.html.haml | 2 + .../ci/runner/_how_to_setup_runner.html.haml | 2 +- .../ci/status/_dropdown_graph_badge.html.haml | 20 - app/views/ci/variables/_content.html.haml | 2 +- app/views/ci/variables/_index.html.haml | 6 +- .../_url_query_variable_row.html.haml | 2 +- .../ci/variables/_variable_row.html.haml | 8 +- .../_gcp_signup_offer_banner.html.haml | 2 +- .../_gitlab_integration_form.html.haml | 4 +- app/views/clusters/clusters/_health.html.haml | 2 +- .../clusters/clusters/_integrations.html.haml | 19 + .../clusters/_integrations_tab.html.haml | 6 + .../clusters/clusters/aws/_new.html.haml | 4 +- app/views/clusters/clusters/show.html.haml | 1 + app/views/dashboard/_projects_head.html.haml | 4 +- app/views/dashboard/merge_requests.html.haml | 4 +- app/views/dashboard/projects/index.html.haml | 2 +- app/views/dashboard/todos/index.html.haml | 4 +- ...onfirmation_instructions_account.html.haml | 12 +- ...confirmation_instructions_account.text.erb | 10 +- ...nfirmation_instructions_secondary.text.erb | 6 +- .../devise/mailer/password_change.html.haml | 9 +- .../devise/mailer/password_change.text.erb | 8 +- .../mailer/unlock_instructions.html.haml | 8 +- app/views/devise/passwords/edit.html.haml | 16 +- app/views/devise/passwords/new.html.haml | 4 +- app/views/devise/registrations/edit.html.erb | 12 +- .../devise/sessions/_new_crowd.html.haml | 10 +- app/views/devise/sessions/_new_ldap.html.haml | 6 +- app/views/devise/sessions/new.html.haml | 2 +- .../devise/sessions/two_factor.html.haml | 10 +- .../devise/shared/_email_opted_in.html.haml | 7 + .../devise/shared/_omniauth_box.html.haml | 4 +- .../devise/shared/_sign_in_link.html.haml | 6 +- app/views/devise/shared/_tabs_ldap.html.haml | 4 +- app/views/devise/unlocks/new.html.haml | 6 +- .../applications/_delete_form.html.haml | 10 - .../doorkeeper/applications/edit.html.haml | 3 +- .../doorkeeper/applications/index.html.haml | 89 +- .../doorkeeper/applications/show.html.haml | 40 +- .../doorkeeper/authorizations/new.html.haml | 4 +- app/views/errors/_footer.html.haml | 3 +- app/views/events/event/_note.html.haml | 2 +- app/views/events/event/_push.html.haml | 4 +- app/views/groups/_activities.html.haml | 2 +- app/views/groups/_create_chat_team.html.haml | 4 +- .../groups/_group_admin_settings.html.haml | 12 +- app/views/groups/_home_panel.html.haml | 2 +- app/views/groups/_new_group_fields.html.haml | 5 + app/views/groups/activity.html.haml | 2 +- app/views/groups/edit.html.haml | 5 +- .../groups/group_members/index.html.haml | 8 +- app/views/groups/issues.html.haml | 53 +- app/views/groups/labels/edit.html.haml | 2 +- app/views/groups/labels/index.html.haml | 2 +- app/views/groups/labels/new.html.haml | 2 +- app/views/groups/merge_requests.html.haml | 4 +- app/views/groups/milestones/_form.html.haml | 14 +- app/views/groups/milestones/edit.html.haml | 2 +- .../groups/runners/_group_runners.html.haml | 2 +- app/views/groups/runners/_index.html.haml | 19 +- app/views/groups/runners/_runner.html.haml | 45 +- app/views/groups/runners/edit.html.haml | 11 +- app/views/groups/settings/_advanced.html.haml | 8 +- app/views/groups/settings/_general.html.haml | 4 +- .../settings/_permanent_deletion.html.haml | 3 +- .../groups/settings/_permissions.html.haml | 31 +- .../_project_access_token_creation.html.haml | 10 + .../groups/settings/_remove_button.html.haml | 7 + .../settings/applications/edit.html.haml | 5 + .../settings/applications/index.html.haml | 8 + .../settings/applications/show.html.haml | 9 + .../groups/settings/ci_cd/show.html.haml | 2 - .../settings/integrations/index.html.haml | 8 +- .../packages_and_registries/index.html.haml | 2 - .../groups/settings/repository/show.html.haml | 2 - app/views/help/index.html.haml | 27 +- .../help/instance_configuration.html.haml | 6 +- .../_gitlab_ci.html.haml | 14 +- .../_gitlab_pages.html.haml | 20 +- .../import/fogbugz/new_user_map.html.haml | 2 +- .../import/shared/_new_project_form.html.haml | 2 +- app/views/invites/show.html.haml | 2 +- .../subscriptions/index.html.haml | 25 +- app/views/jira_connect/users/show.html.haml | 4 +- app/views/kaminari/gitlab/_page.html.haml | 2 +- app/views/layouts/_flash.html.haml | 2 +- app/views/layouts/_head.html.haml | 2 + app/views/layouts/_page.html.haml | 1 + app/views/layouts/_search.html.haml | 2 +- app/views/layouts/errors.html.haml | 6 + app/views/layouts/group_settings.html.haml | 1 + .../header/_current_user_dropdown.html.haml | 2 +- app/views/layouts/header/_default.html.haml | 16 +- app/views/layouts/header/_new_dropdown.haml | 45 - .../layouts/header/_new_dropdown.html.haml | 44 + .../header/_new_repo_experiment.html.haml | 7 + .../header/_read_only_banner.html.haml | 2 +- ...ce_templates_deprecation_callout.html.haml | 21 + .../header/_whats_new_dropdown_item.html.haml | 11 +- app/views/layouts/nav/_breadcrumbs.html.haml | 4 +- .../layouts/nav/_combined_menu.html.haml | 3 + app/views/layouts/nav/_dashboard.html.haml | 6 +- .../nav/projects_dropdown/_show.html.haml | 23 +- .../layouts/nav/sidebar/_group.html.haml | 21 +- .../layouts/nav/sidebar/_profile.html.haml | 2 +- .../layouts/nav/sidebar/_project.html.haml | 472 +- .../nav/sidebar/_project_menus.html.haml | 380 + .../sidebar/_project_packages_link.html.haml | 8 +- app/views/layouts/project_settings.html.haml | 2 + .../notify/_successful_pipeline.text.erb | 2 +- .../closed_merge_request_email.html.haml | 2 +- .../closed_merge_request_email.text.haml | 4 +- .../in_product_marketing_email.html.haml | 10 +- .../in_product_marketing_email.text.erb | 2 +- .../merge_request_status_email.html.haml | 2 +- .../merge_request_status_email.text.haml | 4 +- .../merge_request_unmergeable_email.html.haml | 2 +- .../merge_request_unmergeable_email.text.haml | 4 +- ...rge_when_pipeline_succeeds_email.text.haml | 4 +- .../merged_merge_request_email.html.haml | 2 +- .../merged_merge_request_email.text.haml | 4 +- ...w_mention_in_merge_request_email.html.haml | 2 +- ...ew_mention_in_merge_request_email.text.erb | 2 +- app/views/notify/new_review_email.html.haml | 2 +- .../notify/pipeline_failed_email.text.erb | 2 +- .../push_to_merge_request_email.text.haml | 2 +- .../reassigned_merge_request_email.text.erb | 2 +- .../resolved_all_discussions_email.html.haml | 2 +- .../resolved_all_discussions_email.text.erb | 2 +- .../notify/ssh_key_expired_email.html.haml | 13 + .../notify/ssh_key_expired_email.text.erb | 9 + .../notify/ssh_key_expiring_soon.text.erb | 9 + .../ssh_key_expiring_soon_email.html.haml | 13 + .../notify/unknown_sign_in_email.html.haml | 8 +- app/views/profiles/accounts/show.html.haml | 4 +- .../profiles/chat_names/_chat_name.html.haml | 2 +- app/views/profiles/chat_names/new.html.haml | 2 +- app/views/profiles/emails/index.html.haml | 2 +- app/views/profiles/gpg_keys/_form.html.haml | 4 +- app/views/profiles/gpg_keys/_key.html.haml | 4 +- app/views/profiles/gpg_keys/index.html.haml | 4 +- app/views/profiles/keys/_form.html.haml | 7 +- app/views/profiles/keys/_key.html.haml | 16 +- app/views/profiles/keys/index.html.haml | 2 +- app/views/profiles/passwords/edit.html.haml | 2 +- app/views/profiles/passwords/new.html.haml | 2 +- app/views/profiles/show.html.haml | 6 +- .../profiles/two_factor_auths/show.html.haml | 2 +- app/views/projects/_commit_button.html.haml | 2 +- .../projects/_customize_workflow.html.haml | 2 +- app/views/projects/_files.html.haml | 1 - app/views/projects/_fork_suggestion.html.haml | 2 +- app/views/projects/_home_panel.html.haml | 9 +- app/views/projects/_invite_members.html.haml | 2 +- .../_merge_request_settings.html.haml | 3 + ..._request_target_project_settings.html.haml | 23 + .../projects/_new_project_fields.html.haml | 4 +- app/views/projects/_readme.html.haml | 2 +- .../projects/_service_desk_settings.html.haml | 2 +- app/views/projects/_wiki.html.haml | 2 +- app/views/projects/blob/_blob.html.haml | 11 +- app/views/projects/blob/_header.html.haml | 2 + app/views/projects/blob/_new_dir.html.haml | 4 +- .../blob/_template_selectors.html.haml | 2 +- app/views/projects/blob/_upload.html.haml | 4 +- .../projects/blob/viewers/_empty.html.haml | 2 +- .../blob/viewers/_loading_auxiliary.html.haml | 2 +- .../projects/blob/viewers/_stl.html.haml | 4 +- app/views/projects/branches/_branch.html.haml | 8 +- .../_delete_protected_modal.html.haml | 2 +- app/views/projects/branches/index.html.haml | 20 +- app/views/projects/branches/new.html.haml | 4 +- .../projects/buttons/_remove_tag.html.haml | 2 +- .../ci/pipeline_editor/show.html.haml | 13 +- app/views/projects/cleanup/_show.html.haml | 4 +- .../projects/commit/_commit_box.html.haml | 42 +- app/views/projects/commits/_commits.html.haml | 4 +- .../projects/default_branch/_show.html.haml | 2 +- app/views/projects/deploy_keys/edit.html.haml | 4 +- app/views/projects/diffs/_diffs.html.haml | 4 +- app/views/projects/diffs/_file.html.haml | 6 +- .../projects/diffs/_file_header.html.haml | 3 +- .../diffs/viewers/_collapsed.html.haml | 2 +- app/views/projects/edit.html.haml | 6 +- app/views/projects/empty.html.haml | 1 + .../projects/environments/_form.html.haml | 2 +- .../environments/empty_metrics.html.haml | 2 +- .../projects/environments/index.html.haml | 3 +- .../projects/environments/show.html.haml | 2 +- .../projects/forks/_fork_button.html.haml | 2 +- app/views/projects/forks/index.html.haml | 4 +- app/views/projects/graphs/show.html.haml | 2 +- app/views/projects/hooks/edit.html.haml | 2 +- app/views/projects/hooks/index.html.haml | 2 +- app/views/projects/imports/new.html.haml | 2 +- app/views/projects/issuable/_show.html.haml | 3 +- .../projects/issues/_new_branch.html.haml | 15 +- app/views/projects/issues/index.html.haml | 31 +- app/views/projects/issues/show.html.haml | 3 +- app/views/projects/jobs/_table.html.haml | 4 +- app/views/projects/jobs/index.html.haml | 19 +- app/views/projects/labels/index.html.haml | 2 +- app/views/projects/logs/empty_logs.html.haml | 2 +- .../merge_requests/_awards_block.html.haml | 2 +- .../merge_requests/_mr_title.html.haml | 4 +- .../merge_requests/conflicts/show.html.haml | 2 +- .../creations/_new_compare.html.haml | 4 +- .../creations/_new_submit.html.haml | 4 +- .../merge_requests/creations/new.html.haml | 4 +- .../projects/merge_requests/edit.html.haml | 4 +- .../projects/merge_requests/index.html.haml | 2 +- .../projects/merge_requests/invalid.html.haml | 4 +- .../projects/merge_requests/show.html.haml | 40 +- app/views/projects/network/show.html.haml | 2 +- .../infrastructure_registry/index.html.haml | 10 + .../projects/pages/_pages_settings.html.haml | 8 +- .../pages/_ssl_limitations_warning.html.haml | 6 +- app/views/projects/pages/_use.html.haml | 5 +- app/views/projects/pages/show.html.haml | 4 +- .../projects/pages_domains/_dns.html.haml | 2 +- .../_lets_encrypt_callout.html.haml | 2 +- .../pipeline_schedules/_form.html.haml | 10 +- .../pipeline_schedules/index.html.haml | 2 +- app/views/projects/pipelines/_stage.html.haml | 5 - .../projects/pipelines/_with_tabs.html.haml | 4 +- app/views/projects/pipelines/charts.html.haml | 2 +- app/views/projects/pipelines/index.html.haml | 6 +- app/views/projects/pipelines/new.html.haml | 8 +- app/views/projects/pipelines/show.html.haml | 3 +- .../projects/project_members/index.html.haml | 8 +- .../shared/_branches_list.html.haml | 2 +- .../shared/_create_protected_branch.html.haml | 4 +- .../shared/_create_protected_tag.html.haml | 2 +- .../shared/_protected_tag.html.haml | 2 +- .../projects/runners/_group_runners.html.haml | 2 +- app/views/projects/runners/_runner.html.haml | 66 +- .../runners/_shared_runners.html.haml | 2 +- app/views/projects/runners/edit.html.haml | 11 +- .../_detailed_help.html.haml | 35 +- .../mattermost_slash_commands/_help.html.haml | 10 +- .../_configuration_banner.html.haml | 2 +- .../prometheus/_custom_metrics.html.haml | 2 +- app/views/projects/services/slack/_help.haml | 16 +- .../slack_slash_commands/_help.html.haml | 4 +- .../projects/settings/_archive.html.haml | 2 +- .../projects/settings/_general.html.haml | 4 +- .../settings/access_tokens/index.html.haml | 29 +- .../settings/ci_cd/_autodevops_form.html.haml | 2 +- .../projects/settings/ci_cd/_form.html.haml | 2 +- .../projects/settings/ci_cd/show.html.haml | 2 - .../settings/integrations/show.html.haml | 2 +- .../operations/_alert_management.html.haml | 10 +- .../_configuration_banner.html.haml | 2 +- .../operations/_error_tracking.html.haml | 4 +- .../settings/operations/_prometheus.html.haml | 4 +- .../settings/operations/_tracing.html.haml | 15 +- .../settings/operations/show.html.haml | 2 - .../settings/repository/show.html.haml | 2 - app/views/projects/show.html.haml | 2 +- app/views/projects/snippets/index.html.haml | 2 +- app/views/projects/stage/_stage.html.haml | 6 +- .../projects/starrers/_starrer.html.haml | 2 +- app/views/projects/tags/index.html.haml | 31 +- app/views/projects/tags/new.html.haml | 4 +- .../projects/tags/releases/edit.html.haml | 2 +- .../tracings/_tracing_button.html.haml | 2 +- app/views/projects/tracings/show.html.haml | 4 +- app/views/projects/tree/show.html.haml | 2 +- app/views/projects/triggers/_form.html.haml | 2 +- app/views/projects/triggers/_index.html.haml | 32 +- .../projects/triggers/_trigger.html.haml | 4 +- .../registrations/welcome/show.html.haml | 11 +- app/views/search/results/_empty.html.haml | 2 +- app/views/search/results/_note.html.haml | 2 +- app/views/shared/_clone_panel.html.haml | 10 +- .../shared/_confirm_fork_modal.html.haml | 4 +- app/views/shared/_confirm_modal.html.haml | 2 +- .../shared/_delete_label_modal.html.haml | 20 - app/views/shared/_file_highlight.html.haml | 4 +- .../shared/_file_picker_button.html.haml | 4 +- .../shared/_flash_user_callout.html.haml | 2 +- .../shared/_issuable_meta_data.html.haml | 3 +- app/views/shared/_issues.html.haml | 3 +- app/views/shared/_label.html.haml | 24 +- app/views/shared/_milestone_expired.html.haml | 2 +- .../shared/_mini_pipeline_graph.html.haml | 17 - .../shared/_mobile_clone_panel.html.haml | 4 +- app/views/shared/_recaptcha_form.html.haml | 2 +- app/views/shared/_search_settings.html.haml | 7 +- .../shared/access_tokens/_form.html.haml | 4 +- .../shared/access_tokens/_table.html.haml | 2 +- app/views/shared/admin/_admin_note.html.haml | 7 + .../shared/admin/_admin_note_form.html.haml | 6 + .../shared/blob/_markdown_buttons.html.haml | 2 +- app/views/shared/boards/_show.html.haml | 22 +- .../boards/components/_sidebar.html.haml | 2 +- .../shared/deploy_tokens/_form.html.haml | 10 +- .../deploy_tokens/_revoke_modal.html.haml | 15 - .../shared/deploy_tokens/_table.html.haml | 5 +- .../applications/_delete_form.html.haml | 10 + .../doorkeeper/applications/_form.html.haml | 6 +- .../doorkeeper/applications/_index.html.haml | 88 + .../doorkeeper/applications/_show.html.haml | 39 + .../shared/empty_states/_issues.html.haml | 4 +- .../empty_states/_profile_tabs.html.haml | 2 +- .../shared/empty_states/_wikis.html.haml | 4 +- .../form_elements/_description.html.haml | 7 +- app/views/shared/hook_logs/_content.html.haml | 4 +- .../shared/integrations/_index.html.haml | 28 +- .../issuable/_approved_by_dropdown.html.haml | 4 +- .../_board_create_list_dropdown.html.haml | 2 +- .../issuable/_bulk_update_sidebar.html.haml | 2 +- app/views/shared/issuable/_form.html.haml | 28 +- .../_invite_members_trigger.html.haml | 8 + app/views/shared/issuable/_nav.html.haml | 2 +- .../shared/issuable/_search_bar.html.haml | 72 +- app/views/shared/issuable/_sidebar.html.haml | 46 +- .../issuable/_sidebar_assignees.html.haml | 12 +- .../shared/issuable/_sort_dropdown.html.haml | 2 +- .../issuable/_user_dropdown_item.html.haml | 2 +- .../issuable/form/_type_selector.html.haml | 44 +- .../issue_type/_details_content.html.haml | 3 +- .../issue_type/_details_header.html.haml | 4 +- .../shared/issue_type/_emoji_block.html.haml | 4 +- app/views/shared/members/_member.html.haml | 4 +- .../shared/milestones/_milestone.html.haml | 10 +- .../shared/milestones/_sidebar.html.haml | 2 +- app/views/shared/milestones/_tabs.html.haml | 2 +- .../_enforcement_checkbox.html.haml | 14 + .../_lock_popovers.html.haml | 1 + .../_setting_label.html.haml | 21 + app/views/shared/nav/_scope_menu.html.haml | 6 + app/views/shared/nav/_sidebar.html.haml | 14 + app/views/shared/nav/_sidebar_menu.html.haml | 27 + .../shared/nav/_sidebar_menu_item.html.haml | 8 + .../shared/notes/_comment_button.html.haml | 8 +- app/views/shared/notes/_note.html.haml | 2 +- app/views/shared/projects/_project.html.haml | 4 +- .../shared/projects/_search_bar.html.haml | 2 +- .../shared/projects/_sort_dropdown.html.haml | 2 +- .../_update_protected_branch.html.haml | 2 +- .../promotions/_promote_servicedesk.html.haml | 2 +- app/views/shared/runners/_form.html.haml | 2 +- .../runners/_runner_type_alert.html.haml | 20 + .../runners/_runner_type_badge.html.haml | 10 + app/views/shared/runners/show.html.haml | 15 +- .../shared/tokens/_scopes_form.html.haml | 2 +- app/views/shared/web_hooks/_hook.html.haml | 6 +- .../shared/web_hooks/_test_button.html.haml | 9 +- app/views/shared/wikis/_form.html.haml | 79 +- app/views/shared/wikis/history.html.haml | 2 +- app/views/shared/wikis/pages.html.haml | 2 - app/views/sherlock/queries/_general.html.haml | 4 +- app/views/users/show.html.haml | 9 +- app/views/users/terms/index.html.haml | 4 +- app/workers/all_queues.yml | 128 +- .../user_refresh_over_user_range_worker.rb | 39 +- app/workers/build_finished_worker.rb | 4 + app/workers/build_hooks_worker.rb | 1 + app/workers/bulk_import_worker.rb | 13 +- app/workers/bulk_imports/entity_worker.rb | 47 +- app/workers/bulk_imports/pipeline_worker.rb | 70 + app/workers/chaos/kill_worker.rb | 4 +- app/workers/ci/drop_pipeline_worker.rb | 16 + .../ci/initial_pipeline_process_worker.rb | 22 + .../add_todo_when_build_fails_worker.rb | 21 + .../expire_artifacts_worker.rb | 2 +- app/workers/concerns/application_worker.rb | 2 +- app/workers/concerns/cronjob_queue.rb | 2 +- app/workers/concerns/each_shard_worker.rb | 8 +- .../concerns/reactive_cacheable_worker.rb | 8 +- app/workers/concerns/worker_attributes.rb | 33 + .../container_expiration_policy_worker.rb | 22 +- .../batched_background_migration_worker.rb | 57 + app/workers/delete_stored_files_worker.rb | 4 +- app/workers/emails_on_push_worker.rb | 8 +- app/workers/expire_build_artifacts_worker.rb | 2 +- app/workers/expire_job_cache_worker.rb | 2 +- app/workers/expire_pipeline_cache_worker.rb | 2 +- app/workers/irker_worker.rb | 3 +- .../merge_requests/assignees_change_worker.rb | 26 + .../merge_requests/create_pipeline_worker.rb | 28 + .../handle_assignees_change_worker.rb | 22 + .../merge_requests/resolve_todos_worker.rb | 18 + .../in_product_marketing_emails_worker.rb | 21 +- app/workers/new_issue_worker.rb | 5 + .../object_storage/migrate_uploads_worker.rb | 3 +- .../packages/go/sync_packages_worker.rb | 33 + .../packages/rubygems/extraction_worker.rb | 27 + .../pages_update_configuration_worker.rb | 2 +- app/workers/projects/post_creation_worker.rb | 34 + app/workers/remove_expired_members_worker.rb | 21 +- .../ssh_keys/expired_notification_worker.rb | 25 + .../expiring_soon_notification_worker.rb | 25 + .../destroyed_issuable_worker.rb | 14 + app/workers/update_highest_role_worker.rb | 2 +- bin/changelog | 2 +- bin/feature-flag | 2 +- bin/sidekiq-cluster | 1 + config/application.rb | 31 +- config/bullet.yml | 44 + .../development/add_issues_button.yml | 8 - ...allow_force_push_to_protected_branches.yml | 2 +- .../development/api_caching_tags.yml | 8 + ..._handle_merge_request_assignees_change.yml | 8 + .../development/attachment_with_filename.yml | 8 - .../development/avatar_cache_for_email.yml | 8 - .../development/batch_suggestions.yml | 8 - .../development/board_new_list.yml | 2 +- .../cached_sidebar_merge_requests_count.yml | 8 + .../cached_sidebar_open_epics_count.yml | 8 + .../cached_sidebar_open_issues_count.yml | 8 - .../cascading_namespace_settings.yml | 8 + .../development/check_maven_path_first.yml | 8 + .../check_mergeability_async_in_widget.yml | 8 + .../ci_commit_pipeline_mini_graph_vue.yml | 8 - .../ci_external_validation_service.yml | 8 + .../development/ci_instance_variables_ui.yml | 8 - .../development/ci_needs_optional.yml | 2 +- .../development/ci_no_empty_groups.yml | 8 + .../development/ci_preload_runner_tags.yml | 2 +- ...duce_queries_when_ticking_runner_queue.yml | 2 +- .../ci_register_job_service_one_by_one.yml | 2 +- .../ci_runner_builds_queue_on_replicas.yml | 8 + .../ci_trigger_payload_into_pipeline.yml | 8 - .../development/ci_wildcard_file_paths.yml | 8 + .../ci_workflow_rules_variables.yml | 8 + .../development/cluster_agent_list.yml | 8 - .../code_review_async_pipeline_creation.yml | 8 + .../codequality_backend_comparison.yml | 8 - .../development/combined_menu.yml | 8 + ..._registry_expiration_policies_loopless.yml | 8 + .../development/customize_homepage.yml | 8 - .../destroy_issuable_todos_async.yml | 8 + .../diff_line_syntax_highlighting.yml | 8 + .../development/dora_daily_metrics.yml | 8 - .../development/dynamic_nonce_creation.yml | 8 - ...enforce_max_attachment_size_upload_api.yml | 8 + ...ady_archived_jobs_when_archiving_again.yml | 8 + .../geo_pipeline_artifact_replication.yml | 8 + .../development/gitaly_find_file.yml | 8 - .../gitaly_replace_wiki_delete_page.yml | 8 + .../gitlab_ci_builds_queue_limit.yml | 2 +- .../development/gitlab_org_sitemap.yml | 8 - .../development/gldropdown_tags.yml | 8 + .../graphql_individual_release_page.yml | 8 - .../development/graphql_pipeline_details.yml | 2 +- .../infrastructure_registry_page.yml | 8 + .../inherited_issuable_templates.yml | 2 +- .../development/issue_assignees_widget.yml | 8 + .../development/jira_issues_list.yml | 8 - .../jira_issues_show_integration.yml | 8 - .../development/jobs_table_vue.yml | 8 + ..._integrity_inspect_quarantined_objects.yml | 8 + .../load_balancing_atomic_replica.yml | 8 + .../load_balancing_for_build_hooks_worker.yml | 8 + .../load_balancing_for_bulk_cron_workers.yml | 8 + .../longer_count_cache_validity.yml | 8 + .../loose_index_scan_for_distinct_values.yml | 8 + ...tadata_by_path_with_optimization_fence.yml | 8 + ...aven_packages_group_level_improvements.yml | 8 + ...quest_cached_merge_pipeline_serializer.yml | 8 + ...rge_request_cached_pipeline_serializer.yml | 8 - .../migrate_delayed_project_removal.yml | 8 - .../development/multiple_cache_per_job.yml | 2 +- .../development/new_pipelines_table.yml | 8 - ...otification_setting_recipient_refactor.yml | 8 + .../development/other_storage_tab.yml | 8 + .../packages_finder_helper_deploy_token.yml | 8 + .../pages_migration_mark_as_not_deployed.yml | 8 - .../pages_serve_from_migrated_zip.yml | 8 - ...oject_authorization_update_via_replica.yml | 8 + .../development/phabricator_import.yml | 2 +- .../development/pick_into_project.yml | 2 +- .../pipeline_editor_branch_switcher.yml | 8 + .../pipeline_editor_empty_state_action.yml | 2 +- .../development/pipeline_filter_jobs.yml | 8 + .../pipeline_graph_layers_view.yml | 8 + .../pipeline_status_for_pipeline_editor.yml | 2 +- ...associations_jobs_request_api_endpoint.yml | 8 + ...intelligence_metrics_names_suggestions.yml | 8 - .../development/project_sidebar_refactor.yml | 8 + .../projects_post_creation_worker.yml | 8 + ...cursive_namespace_lookup_as_inner_join.yml | 8 - .../development/refactor_blob_viewer.yml | 8 + .../reject_unsigned_commits_by_gitlab.yml | 8 + .../development/remove_resolve_note.yml | 8 - .../resolve_merge_request_todos_async.yml | 8 + .../resource_access_token_feature.yml | 8 - .../runner_detailed_view_vue_ui.yml | 8 + .../development/runners_cached_states.yml | 8 + .../development/scoped_group_variables.yml | 8 - .../development/search_settings_in_page.yml | 8 - ...y_dast_site_profiles_additional_fields.yml | 2 +- ...security_dast_site_profiles_api_option.yml | 8 + .../sentry_processors_before_send.yml | 8 + .../simplified_commit_status_group_name.yml | 8 - .../skip_dag_manual_and_delayed_jobs.yml | 8 - .../skip_pages_deploy_to_legacy_storage.yml | 8 + .../ssh_key_expiration_email_notification.yml | 8 + .../swimlanes_buffered_rendering.yml | 8 + .../development/sync_traversal_ids.yml | 7 + .../upgrade_link_in_user_menu_a.yml | 8 + .../usage_data_code_review_aggregation.yml | 2 +- .../usage_data_g_compliance_dashboard.yml | 8 - .../usage_data_i_analytics_cohorts.yml | 8 - ...nt_management_oncall_notification_sent.yml | 8 + ...ge_data_i_testing_summary_widget_total.yml | 8 + ...g_unique_users_pushing_mr_ciconfigfile.yml | 2 +- ...ata_track_ci_templates_unique_projects.yml | 8 - .../use_distinct_for_all_object_hierarchy.yml | 8 + ...tinct_in_register_job_object_hierarchy.yml | 8 + .../development/use_marker_ranges.yml | 8 + .../development/use_traversal_ids.yml | 8 + .../development/user_mode_in_session.yml | 8 - .../users_expanding_widgets_usage_data.yml | 8 + .../value_stream_analytics_extended_form.yml | 8 - .../development/variable_inside_variable.yml | 6 +- .../workhorse_extract_filename_base.yml | 8 + .../experiment/invite_members_in_comment.yml | 8 + config/feature_flags/experiment/new_repo.yml | 8 + .../pipeline_empty_state_templates.yml | 8 + ...execute_batched_migrations_on_schedule.yml | 8 + ...vice_measuring_projects_create_service.yml | 8 + ..._projects_import_export_export_service.yml | 8 + ...vice_measuring_projects_import_service.yml | 8 + .../recaptcha_on_top_level_group_creation.yml | 8 + .../feature_flags/ops/redis_hll_tracking.yml | 8 + .../{development => ops}/usage_data_api.yml | 4 +- .../ops/usage_data_non_sql_metrics.yml | 8 + .../ops/usage_data_queries_api.yml | 8 + .../ops/x509_forced_cert_loading.yml | 8 + config/gitlab.yml.example | 18 +- .../helpers/check_frontend_integration_env.js | 37 + .../0_inject_enterprise_edition_module.rb | 6 + config/initializers/0_license.rb | 14 +- config/initializers/0_marginalia.rb | 2 +- config/initializers/1_settings.rb | 32 +- config/initializers/active_record_ping.rb | 2 +- .../initializers/active_record_preloader.rb | 1 + config/initializers/bullet.rb | 14 +- config/initializers/graphql.rb | 2 - .../hangouts_chat_http_override.rb | 3 +- config/initializers/json_validator_patch.rb | 28 - config/initializers/kramdown_patch.rb | 25 - config/initializers/pages_storage_check.rb | 14 + .../postgres_cte_as_materialized.rb | 14 + config/initializers/postgresql_cte.rb | 2 + .../puma_client_tempfile_patch.rb | 103 + config/initializers/query_limiting.rb | 2 +- config/initializers/smtp_settings.rb.sample | 27 +- config/initializers/trusted_proxies.rb | 2 +- .../000_inflections.rb | 2 + config/known_invalid_graphql_queries.yml | 3 + config/locales/devise.en.yml | 4 +- config/mail_room.yml | 7 + config/metrics/aggregates/code_review.yml | 105 + config/metrics/aggregates/common.yml | 64 + ...05_clusters_applications_cert_managers.yml | 1 + ...10216175407_clusters_applications_helm.yml | 1 + ...16175409_clusters_applications_ingress.yml | 1 + ...16175411_clusters_applications_knative.yml | 1 + ...0216175413_clusters_management_project.yml | 1 + .../20210216175415_clusters_disabled.yml | 1 + .../20210216175417_clusters_enabled.yml | 1 + .../20210216175419_clusters_platforms_gke.yml | 1 + .../20210216175420_clusters_platforms_eks.yml | 1 + ...20210216175422_clusters_platforms_user.yml | 1 + ...10216175424_instance_clusters_disabled.yml | 1 + ...210216175426_instance_clusters_enabled.yml | 1 + ...20210216175428_group_clusters_disabled.yml | 1 + .../20210216175430_group_clusters_enabled.yml | 1 + ...210216175432_project_clusters_disabled.yml | 1 + ...0210216175434_project_clusters_enabled.yml | 1 + .../counts_28d/20210216181139_issues.yml | 14 +- .../counts_28d/20210216181141_notes.yml | 14 +- .../counts_28d/20210216181143_projects.yml | 14 +- .../counts_28d/20210216181145_todos.yml | 14 +- .../counts_28d/20210216181200_label_lists.yml | 14 +- .../20210216181201_milestone_lists.yml | 16 - ...management_issue_title_changed_monthly.yml | 4 +- ...ment_issue_description_changed_monthly.yml | 4 +- ...agement_issue_assignee_changed_monthly.yml | 19 + ...gement_issue_made_confidential_monthly.yml | 4 +- ..._management_issue_made_visible_monthly.yml | 4 +- ...oject_management_issue_created_monthly.yml | 4 +- ...roject_management_issue_closed_monthly.yml | 4 +- ...ject_management_issue_reopened_monthly.yml | 4 +- ...management_issue_label_changed_monthly.yml | 4 +- ...gement_issue_milestone_changed_monthly.yml | 4 +- ...gement_issue_iteration_changed_monthly.yml | 16 - ...anagement_issue_weight_changed_monthly.yml | 16 - ...agement_issue_cross_referenced_monthly.yml | 4 +- ...project_management_issue_moved_monthly.yml | 4 +- ...oject_management_issue_related_monthly.yml | 4 +- ...ect_management_issue_unrelated_monthly.yml | 4 +- ...ment_issue_marked_as_duplicate_monthly.yml | 4 +- ...roject_management_issue_locked_monthly.yml | 4 +- ...ject_management_issue_unlocked_monthly.yml | 6 +- ...management_issue_added_to_epic_monthly.yml | 16 - ...gement_issue_removed_from_epic_monthly.yml | 16 - ..._management_issue_changed_epic_monthly.yml | 16 - ...management_issue_designs_added_monthly.yml | 4 +- ...agement_issue_designs_modified_monthly.yml | 4 +- ...nagement_issue_designs_removed_monthly.yml | 4 +- ...agement_issue_due_date_changed_monthly.yml | 4 +- ...nt_issue_time_estimate_changed_monthly.yml | 6 +- ...ement_issue_time_spent_changed_monthly.yml | 6 +- ...management_issue_comment_added_monthly.yml | 4 +- ...anagement_issue_comment_edited_monthly.yml | 4 +- ...nagement_issue_comment_removed_monthly.yml | 4 +- ...nt_issue_health_status_changed_monthly.yml | 16 - ...roject_management_issue_cloned_monthly.yml | 8 +- ...ssues_edit_total_unique_counts_monthly.yml | 6 +- ...6181508_i_quickactions_approve_monthly.yml | 12 +- ...2_i_quickactions_assign_single_monthly.yml | 8 +- ...i_quickactions_assign_multiple_monthly.yml | 16 - ...519_i_quickactions_assign_self_monthly.yml | 8 +- ...i_quickactions_assign_reviewer_monthly.yml | 12 +- ...216181527_i_quickactions_award_monthly.yml | 8 +- ...1530_i_quickactions_board_move_monthly.yml | 8 +- ...1534_i_quickactions_child_epic_monthly.yml | 16 - ...38_i_quickactions_clear_weight_monthly.yml | 16 - ...216181541_i_quickactions_clone_monthly.yml | 8 +- ...216181545_i_quickactions_close_monthly.yml | 8 +- ...49_i_quickactions_confidential_monthly.yml | 8 +- ...ns_copy_metadata_merge_request_monthly.yml | 12 +- ...ickactions_copy_metadata_issue_monthly.yml | 8 +- ...ckactions_create_merge_request_monthly.yml | 9 +- ...0216181604_i_quickactions_done_monthly.yml | 8 +- ...216181607_i_quickactions_draft_monthly.yml | 12 +- ...10216181611_i_quickactions_due_monthly.yml | 8 +- ...81615_i_quickactions_duplicate_monthly.yml | 8 +- ...0216181618_i_quickactions_epic_monthly.yml | 16 - ...181622_i_quickactions_estimate_monthly.yml | 8 +- ...81626_i_quickactions_iteration_monthly.yml | 16 - ...216181629_i_quickactions_label_monthly.yml | 8 +- ...0216181633_i_quickactions_lock_monthly.yml | 8 +- ...216181637_i_quickactions_merge_monthly.yml | 12 +- ...81641_i_quickactions_milestone_monthly.yml | 10 +- ...0216181644_i_quickactions_move_monthly.yml | 8 +- ...648_i_quickactions_parent_epic_monthly.yml | 16 - ...6181652_i_quickactions_promote_monthly.yml | 16 - ...6181655_i_quickactions_publish_monthly.yml | 16 - ...181659_i_quickactions_reassign_monthly.yml | 8 +- ...quickactions_reassign_reviewer_monthly.yml | 12 +- ...16181707_i_quickactions_rebase_monthly.yml | 12 +- ...6181710_i_quickactions_relabel_monthly.yml | 8 +- ...16181714_i_quickactions_relate_monthly.yml | 8 +- ...quickactions_remove_child_epic_monthly.yml | 16 - ...i_quickactions_remove_due_date_monthly.yml | 8 +- ...725_i_quickactions_remove_epic_monthly.yml | 16 - ...i_quickactions_remove_estimate_monthly.yml | 8 +- ..._quickactions_remove_iteration_monthly.yml | 16 - ..._quickactions_remove_milestone_monthly.yml | 8 +- ...uickactions_remove_parent_epic_monthly.yml | 16 - ...quickactions_remove_time_spent_monthly.yml | 8 +- ...747_i_quickactions_remove_zoom_monthly.yml | 8 +- ...16181751_i_quickactions_reopen_monthly.yml | 8 +- ...216181755_i_quickactions_shrug_monthly.yml | 8 +- ..._i_quickactions_spend_subtract_monthly.yml | 8 +- ...81802_i_quickactions_spend_add_monthly.yml | 8 +- ...6_i_quickactions_submit_review_monthly.yml | 12 +- ...81809_i_quickactions_subscribe_monthly.yml | 8 +- ...81813_i_quickactions_tableflip_monthly.yml | 8 +- ...10216181817_i_quickactions_tag_monthly.yml | 12 +- ...1_i_quickactions_target_branch_monthly.yml | 12 +- ...216181824_i_quickactions_title_monthly.yml | 8 +- ...0216181828_i_quickactions_todo_monthly.yml | 8 +- ...quickactions_unassign_specific_monthly.yml | 12 +- ...35_i_quickactions_unassign_all_monthly.yml | 12 +- ...quickactions_unassign_reviewer_monthly.yml | 12 +- ..._quickactions_unlabel_specific_monthly.yml | 8 +- ...846_i_quickactions_unlabel_all_monthly.yml | 8 +- ...16181850_i_quickactions_unlock_monthly.yml | 8 +- ...854_i_quickactions_unsubscribe_monthly.yml | 8 +- ...16181857_i_quickactions_weight_monthly.yml | 16 - ...10216181901_i_quickactions_wip_monthly.yml | 12 +- ...0216181905_i_quickactions_zoom_monthly.yml | 8 +- ...136_i_testing_test_case_parsed_monthly.yml | 1 - ...rics_report_artifact_uploaders_monthly.yml | 20 - ...nces_group_overview_security_dashboard.yml | 18 - ...3_product_analytics_test_metrics_union.yml | 27 +- ...ct_analytics_test_metrics_intersection.yml | 25 +- ...testing_paid_monthly_active_user_total.yml | 16 - ...40_testing_total_unique_counts_monthly.yml | 3 +- ...ickactions_total_unique_counts_monthly.yml | 14 +- ...ickactions_invite_email_single_monthly.yml | 2 +- ...kactions_invite_email_multiple_monthly.yml | 2 +- ...iew_user_time_estimate_changed_monthly.yml | 2 +- ...review_user_time_spent_changed_monthly.yml | 2 +- ...view_user_mr_discussion_locked_monthly.yml | 2 +- ...ew_user_mr_discussion_unlocked_monthly.yml | 2 +- ..._users_pushing_mr_ciconfigfile_monthly.yml | 2 +- ..._review_user_milestone_changed_monthly.yml | 2 +- ...ode_review_user_labels_changed_monthly.yml | 2 +- ..._review_user_assignees_changed_monthly.yml | 2 +- ..._review_user_reviewers_changed_monthly.yml | 2 +- ...ack_service_issue_notification_monthly.yml | 2 +- ...lack_service_push_notification_monthly.yml | 2 +- ...ervice_deployment_notification_monthly.yml | 2 +- ...service_wiki_page_notification_monthly.yml | 2 +- ...ice_merge_request_notification_monthly.yml | 2 +- ...lack_service_note_notification_monthly.yml | 2 +- ..._service_tag_push_notification_monthly.yml | 2 +- ...confidential_note_notification_monthly.yml | 2 +- ...onfidential_issue_notification_monthly.yml | 2 +- ...panding_secure_security_report_monthly.yml | 20 + ...ng_testing_code_quality_report_monthly.yml | 20 + ...g_testing_accessibility_report_monthly.yml | 20 + ...i_testing_summary_widget_total_monthly.yml | 20 + ..._management_issue_title_changed_weekly.yml | 3 +- ...ement_issue_description_changed_weekly.yml | 18 + ...nagement_issue_assignee_changed_weekly.yml | 18 + ...agement_issue_made_confidential_weekly.yml | 19 + ...t_management_issue_made_visible_weekly.yml | 19 + ...roject_management_issue_created_weekly.yml | 18 + ...project_management_issue_closed_weekly.yml | 19 + ...oject_management_issue_reopened_weekly.yml | 18 + ..._management_issue_label_changed_weekly.yml | 18 + ...agement_issue_milestone_changed_weekly.yml | 18 + ...nagement_issue_cross_referenced_weekly.yml | 18 + ..._project_management_issue_moved_weekly.yml | 18 + ...roject_management_issue_related_weekly.yml | 18 + ...ject_management_issue_unrelated_weekly.yml | 19 + ...ement_issue_marked_as_duplicate_weekly.yml | 18 + ...project_management_issue_locked_weekly.yml | 19 + ...oject_management_issue_unlocked_weekly.yml | 19 + ..._management_issue_designs_added_weekly.yml | 19 + ...nagement_issue_designs_modified_weekly.yml | 19 + ...anagement_issue_designs_removed_weekly.yml | 20 + ...nagement_issue_due_date_changed_weekly.yml | 19 + ...ent_issue_time_estimate_changed_weekly.yml | 18 + ...gement_issue_time_spent_changed_weekly.yml | 18 + ..._management_issue_comment_added_weekly.yml | 19 + ...management_issue_comment_edited_weekly.yml | 19 + ...anagement_issue_comment_removed_weekly.yml | 19 + ...project_management_issue_cloned_weekly.yml | 18 + ...issues_edit_total_unique_counts_weekly.yml | 18 + ...16181506_i_quickactions_approve_weekly.yml | 18 + ...10_i_quickactions_assign_single_weekly.yml | 19 + ...1517_i_quickactions_assign_self_weekly.yml | 18 + ..._i_quickactions_assign_reviewer_weekly.yml | 19 + ...0216181525_i_quickactions_award_weekly.yml | 19 + ...81529_i_quickactions_board_move_weekly.yml | 18 + ...0216181540_i_quickactions_clone_weekly.yml | 18 + ...0216181543_i_quickactions_close_weekly.yml | 18 + ...547_i_quickactions_confidential_weekly.yml | 18 + ...ons_copy_metadata_merge_request_weekly.yml | 19 + ...uickactions_copy_metadata_issue_weekly.yml | 18 + ...ickactions_create_merge_request_weekly.yml | 19 + ...10216181602_i_quickactions_done_weekly.yml | 18 + ...0216181605_i_quickactions_draft_weekly.yml | 18 + ...210216181609_i_quickactions_due_weekly.yml | 19 + ...181613_i_quickactions_duplicate_weekly.yml | 18 + ...6181620_i_quickactions_estimate_weekly.yml | 18 + ...0216181628_i_quickactions_label_weekly.yml | 18 + ...10216181631_i_quickactions_lock_weekly.yml | 18 + ...0216181635_i_quickactions_merge_weekly.yml | 18 + ...181639_i_quickactions_milestone_weekly.yml | 18 + ...10216181642_i_quickactions_move_weekly.yml | 18 + ...6181657_i_quickactions_reassign_weekly.yml | 18 + ..._quickactions_reassign_reviewer_weekly.yml | 19 + ...216181705_i_quickactions_rebase_weekly.yml | 18 + ...16181708_i_quickactions_relabel_weekly.yml | 18 + ...216181712_i_quickactions_relate_weekly.yml | 18 + ..._i_quickactions_remove_due_date_weekly.yml | 18 + ..._i_quickactions_remove_estimate_weekly.yml | 18 + ...i_quickactions_remove_milestone_weekly.yml | 19 + ..._quickactions_remove_time_spent_weekly.yml | 18 + ...1745_i_quickactions_remove_zoom_weekly.yml | 18 + ...216181749_i_quickactions_reopen_weekly.yml | 18 + ...0216181753_i_quickactions_shrug_weekly.yml | 19 + ...6_i_quickactions_spend_subtract_weekly.yml | 18 + ...181800_i_quickactions_spend_add_weekly.yml | 19 + ...04_i_quickactions_submit_review_weekly.yml | 18 + ...181808_i_quickactions_subscribe_weekly.yml | 19 + ...181811_i_quickactions_tableflip_weekly.yml | 18 + ...210216181815_i_quickactions_tag_weekly.yml | 18 + ...19_i_quickactions_target_branch_weekly.yml | 18 + ...0216181822_i_quickactions_title_weekly.yml | 18 + ...10216181826_i_quickactions_todo_weekly.yml | 18 + ..._quickactions_unassign_specific_weekly.yml | 18 + ...833_i_quickactions_unassign_all_weekly.yml | 18 + ..._quickactions_unassign_reviewer_weekly.yml | 18 + ...i_quickactions_unlabel_specific_weekly.yml | 18 + ...1845_i_quickactions_unlabel_all_weekly.yml | 19 + ...216181848_i_quickactions_unlock_weekly.yml | 18 + ...1852_i_quickactions_unsubscribe_weekly.yml | 18 + ...210216181859_i_quickactions_wip_weekly.yml | 18 + ...10216181903_i_quickactions_zoom_weekly.yml | 18 + ...2134_i_testing_test_case_parsed_weekly.yml | 1 - ...trics_report_artifact_uploaders_weekly.yml | 20 - ...3_product_analytics_test_metrics_union.yml | 21 + ...ct_analytics_test_metrics_intersection.yml | 21 + ...e_users_pushing_mr_ciconfigfile_weekly.yml | 2 +- ...lack_service_issue_notification_weekly.yml | 2 +- ...view_user_time_estimate_changed_weekly.yml | 2 +- ..._review_user_time_spent_changed_weekly.yml | 2 +- ...slack_service_push_notification_weekly.yml | 2 +- ...service_deployment_notification_weekly.yml | 2 +- ..._service_wiki_page_notification_weekly.yml | 2 +- ...vice_merge_request_notification_weekly.yml | 2 +- ...slack_service_note_notification_weekly.yml | 2 +- ...k_service_tag_push_notification_weekly.yml | 2 +- ..._confidential_note_notification_weekly.yml | 2 +- ...confidential_issue_notification_weekly.yml | 2 +- ...iew_user_mr_discussion_unlocked_weekly.yml | 2 +- ...eview_user_mr_discussion_locked_weekly.yml | 2 +- ...e_review_user_milestone_changed_weekly.yml | 2 +- ...code_review_user_labels_changed_weekly.yml | 2 +- ...e_review_user_assignees_changed_weekly.yml | 2 +- ...e_review_user_reviewers_changed_weekly.yml | 2 +- ...xpanding_secure_security_report_weekly.yml | 20 + ...ing_testing_code_quality_report_weekly.yml | 20 + ...ng_testing_accessibility_report_weekly.yml | 20 + ..._i_testing_summary_widget_total_weekly.yml | 20 + .../counts_all/20210216174829_smtp_server.yml | 19 - ..._ingress_modsecurity_packets_processed.yml | 3 +- ..._ingress_modsecurity_packets_anomalous.yml | 3 +- ...20210216175446_network_policy_forwards.yml | 3 +- .../20210216175448_network_policy_drops.yml | 3 +- ...0216175450_ingress_modsecurity_logging.yml | 3 +- ...216175452_ingress_modsecurity_blocking.yml | 3 +- ...216175454_ingress_modsecurity_disabled.yml | 3 +- ...5456_ingress_modsecurity_not_installed.yml | 3 +- .../20210216180246_web_ide_merge_requests.yml | 2 +- .../counts_all/20210216180922_duration_s.yml | 19 - .../counts_all/20210216180924_failures.yml | 19 - .../counts_all/20210216181102_issues.yml | 3 +- .../counts_all/20210216181104_label_lists.yml | 12 +- .../20210216181106_milestone_lists.yml | 16 - .../counts_all/20210216181108_milestones.yml | 12 +- .../counts_all/20210216181109_uploads.yml | 5 +- .../counts_all/20210216181111_labels.yml | 5 +- .../counts_all/20210216181113_notes.yml | 5 +- .../counts_all/20210216181115_issues.yml | 14 +- .../counts_all/20210216181117_notes.yml | 14 +- .../counts_all/20210216181119_projects.yml | 14 +- .../counts_all/20210216181121_todos.yml | 14 +- .../counts_all/20210216181135_label_lists.yml | 14 +- .../20210216181137_milestone_lists.yml | 16 - .../20210216181205_confidential_epics.yml | 16 - .../counts_all/20210216181206_epics.yml | 16 - ...210216181210_issues_with_health_status.yml | 16 - .../counts_all/20210216181252_boards.yml | 8 +- .../counts_all/20210216181254_projects.yml | 6 +- .../counts_all/20210216181256_todos.yml | 3 +- ...1258_jira_imports_total_imported_count.yml | 7 +- ...0216181259_jira_imports_projects_count.yml | 7 +- ...ra_imports_total_imported_issues_count.yml | 7 +- ...ser_preferences_group_overview_details.yml | 18 - ...nces_group_overview_security_dashboard.yml | 18 - ...nces_group_overview_security_dashboard.yml | 17 - ...0210204124938_recording_ce_finished_at.yml | 5 +- .../20210216175602_installation_type.yml | 4 +- .../objects_schemas/topology_schema.json | 43 + config/metrics/schema.json | 6 +- .../settings/20210216174829_smtp_server.yml | 18 + ...0216175459_ingress_modsecurity_enabled.yml | 5 +- ...6175606_ldap_encrypted_secrets_enabled.yml | 4 +- .../20210216175609_version.yml | 7 +- .../20210225045628_operating_system.yml | 2 +- .../settings/20210323120839_topology.yml | 21 + config/redis.cache.yml.example | 4 +- config/redis.queues.yml.example | 4 +- config/redis.shared_state.yml.example | 4 +- config/resque.yml.example | 4 +- config/routes.rb | 8 + config/routes/customers_dot.rb | 7 + config/routes/group.rb | 2 + config/routes/pipelines.rb | 1 - config/routes/project.rb | 32 +- config/routes/repository.rb | 10 +- config/sidekiq_queues.yml | 14 + config/unicorn.rb.example | 6 +- config/webpack.config.js | 9 + config/webpack.vendor.config.js | 5 +- danger/changelog/Dangerfile | 32 +- danger/commit_messages/Dangerfile | 2 +- danger/datateam/Dangerfile | 15 + danger/feature_flag/Dangerfile | 20 +- danger/pipeline/Dangerfile | 4 +- danger/product_intelligence/Dangerfile | 21 +- danger/roulette/Dangerfile | 26 +- danger/specs/Dangerfile | 6 +- data/whats_new/202008180003_13_01.yml | 6 +- data/whats_new/202009150001_13_03.yml | 2 +- data/whats_new/202011230001_13_06.yml | 4 +- data/whats_new/202012160001_13_07.yml | 2 +- data/whats_new/202103220001_13_10.yml | 6 +- data/whats_new/202104220001_13_11.yml | 117 + .../templates/YYYYMMDD0001_XX_YY.yml | 2 +- ...ident_settings_to_all_existing_projects.rb | 2 +- ...ve_terraform_state_verification_indexes.rb | 4 +- ...214032220_add_has_external_wiki_trigger.rb | 8 +- .../20201218194311_create_admin_notes.rb | 21 + ...64121_drop_temporary_index_on_ci_builds.rb | 2 +- ...54_add_unique_index_for_golang_packages.rb | 20 + ...version_usage_data_id_to_raw_usage_data.rb | 9 + ...30600_update_rubygems_metadata_metadata.rb | 19 + ...ansition_automatic_to_jira_tracker_data.rb | 9 + ...d_request_headers_to_dast_site_profiles.rb | 17 + ...1822_create_dast_site_profile_variables.rb | 40 + .../20210305180331_create_ci_unit_tests.rb | 31 + ...182740_add_projects_fk_to_ci_unit_tests.rb | 19 + ...0305182855_create_ci_unit_test_failures.rb | 24 + ...d_ci_builds_fk_to_ci_unit_test_failures.rb | 19 + ...e_settings_delayed_project_removal_null.rb | 14 + ...d_project_removal_to_namespace_settings.rb | 9 + ...project_removal_to_application_settings.rb | 9 + ...project_removal_to_application_settings.rb | 9 + ...6_add_admin_mode_to_application_setting.rb | 9 + ...2_add_text_limits_to_dast_site_profiles.rb | 24 + ...cs_to_batched_background_migration_jobs.rb | 9 + ...alize_conversion_of_events_id_to_bigint.rb | 21 + ..._push_event_payloads_event_id_to_bigint.rb | 21 + ...d_index_on_active_ci_pipeline_schedules.rb | 18 + ...add_enforced_git_check_to_saml_provider.rb | 13 + ..._creation_allowed_to_namespace_settings.rb | 19 + ..._and_started_at_to_snippet_repositories.rb | 12 + ...ication_indexes_to_snippet_repositories.rb | 27 + ...n_type_to_gitlab_subscription_histories.rb | 9 + ..._extension_type_to_gitlab_subscriptions.rb | 21 + ...d_index_ci_stages_on_pipeline_id_and_id.rb | 18 + ...17035357_create_dast_profiles_pipelines.rb | 20 + ...317100520_create_elastic_index_settings.rb | 23 + ...4301_create_in_product_marketing_emails.rb | 33 + ...eign_key_to_in_product_marketing_emails.rb | 19 + ...d_expiry_notification_delivered_to_keys.rb | 9 + ...7_delete_security_findings_without_uuid.rb | 25 + ...rofile_id_fk_to_dast_profiles_pipelines.rb | 19 + ...peline_id_fk_to_dast_profiles_pipelines.rb | 19 + ..._at_and_expiry_notification_undelivered.rb | 19 + ...64751_add_namespace_traversal_ids_index.rb | 18 + ...smissal_information_for_vulnerabilities.rb | 37 + ...ect_status_date_index_to_merge_requests.rb | 18 + ...ta_on_retry_next_execution_where_status.rb | 28 + ...24131727_migrate_elastic_index_settings.rb | 31 + ...dd_not_valid_foreign_key_to_group_hooks.rb | 19 + ...9_validate_foreign_key_on_service_hooks.rb | 17 + ...ification_state_to_ci_pipeline_artifact.rb | 18 + ...n_failure_limit_to_ci_pipeline_artifact.rb | 19 + ...cation_indexes_to_ci_pipeline_artifacts.rb | 27 + ...ents_with_environment_id_and_updated_at.rb | 19 + ..._create_vulnerability_finding_evidences.rb | 26 + ...nd_source_branch_index_to_merge_request.rb | 18 + ...10329191850_add_finding_signature_table.rb | 40 + ...2716_add_composite_index_to_award_emoji.rb | 18 + .../20210330015805_add_cloud_to_licenses.rb | 9 + ...210331125111_add_default_target_project.rb | 17 + ...331145548_add_index_for_last_deployment.rb | 18 + ...emove_deprecated_index_from_award_emoji.rb | 19 + ...01134157_add_index_to_pages_deployments.rb | 18 + ..._data_on_next_execution_and_retry_count.rb | 30 + ...e_expiry_notification_delivered_to_keys.rb | 9 + ..._before_expiry_notification_undelivered.rb | 19 + ...e_namespaces_id_parent_id_partial_index.rb | 18 + ...total_tuple_count_to_batched_migrations.rb | 13 + ...407002511_add_type_to_dast_site_profile.rb | 7 + ..._notes_for_cherry_picked_merge_requests.rb | 18 + ...13_add_clusters_integrations_prometheus.rb | 21 + ...tance_url_to_jira_connect_installations.rb | 16 + ...jira_connect_installations_instance_url.rb | 17 + ...10412142223_add_user_index_on_spam_logs.rb | 17 + ...ok_id_index_to_partitioned_web_hook_log.rb | 21 + ...web_hook_id_to_partitioned_web_hook_log.rb | 21 + ..._on_project_and_type_where_inherit_null.rb | 17 + ...eline_validation_to_application_setting.rb | 19 + ...00_add_url_limit_to_pipeline_validation.rb | 17 + ...move_index_epics_on_group_id_from_epics.rb | 17 + ...112022_schedule_sync_issuables_state_id.rb | 4 +- ...625_set_report_type_for_vulnerabilities.rb | 2 +- ...4_set_resolved_state_on_vulnerabilities.rb | 2 +- ...54_remove_duplicate_labels_from_project.rb | 6 +- ...dule_backfill_push_rules_id_in_projects.rb | 2 +- ...ll_deployment_clusters_from_deployments.rb | 2 +- ...111111_migrate_vulnerability_dismissals.rb | 2 +- ...4259_remove_duplicate_labels_from_group.rb | 6 +- ...anagement_artifacts_to_license_scanning.rb | 2 +- ...ate_missing_vulnerabilities_issue_links.rb | 4 +- ...5705_ensure_target_project_id_is_filled.rb | 2 +- .../20200930144340_set_job_waiter_ttl.rb | 2 +- ...521_schedule_sync_blocking_issues_count.rb | 2 +- ...e_backfilling_artifact_expiry_migration.rb | 2 +- ...rojects_with_bad_has_external_wiki_data.rb | 6 +- ...20610_schedule_artifact_expiry_backfill.rb | 6 +- ...ith_bad_has_external_issue_tracker_data.rb | 6 +- ...506_reschedule_artifact_expiry_backfill.rb | 2 +- ...er_registry_enabled_to_project_features.rb | 5 +- .../20210226141517_dedup_issue_metrics.rb | 71 + ...0_schedule_migrate_pages_to_zip_storage.rb | 36 + ...versal_ids_for_gitlab_org_group_staging.rb | 88 + ..._traversal_ids_for_gitlab_org_group_com.rb | 88 + ...ipelines_by_cancelable_status_and_users.rb | 30 + ...ackfill_events_id_for_bigint_conversion.rb | 29 + ..._payload_event_id_for_bigint_conversion.rb | 30 + ...et_iteration_cadence_automatic_to_false.rb | 17 + ...t_null_constraint_on_cluster_token_name.rb | 16 + ...nt_on_gitlab_subscriptions_namespace_id.rb | 17 + ...l_cleanup_for_partitioned_web_hook_logs.rb | 17 + ...porary_index_from_vulnerabilities_table.rb | 18 + .../20210329102724_add_new_trail_plans.rb | 41 + ...cords_without_group_from_webhooks_table.rb | 30 + ...30130420_drop_finding_fingerprint_table.rb | 40 + ...05335_drop_non_partitioned_audit_events.rb | 44 + ...r_registry_enabled_to_project_features2.rb | 27 + ...nd_level_index_on_notification_settings.rb | 24 + ...otal_tuple_count_for_batched_migrations.rb | 27 + ...20210407150240_confirm_support_bot_user.rb | 23 + ...embers_on_user_id_source_id_source_type.rb | 17 + ...9185531_remove_members_index_on_user_id.rb | 17 + ...d_index_to_packages_maven_metadata_path.rb | 17 + ...3130011_add_partitioned_web_hook_log_fk.rb | 22 + ...schedule_artifact_expiry_backfill_again.rb | 44 + ...er_id_access_level_requested_at_is_null.rb | 17 + db/schema_migrations/20201218194311 | 1 + db/schema_migrations/20210106061254 | 1 + db/schema_migrations/20210219211845 | 1 + db/schema_migrations/20210223230600 | 1 + db/schema_migrations/20210224161552 | 1 + db/schema_migrations/20210226141517 | 1 + db/schema_migrations/20210302025305 | 1 + db/schema_migrations/20210302150310 | 1 + db/schema_migrations/20210305031822 | 1 + db/schema_migrations/20210305180331 | 1 + db/schema_migrations/20210305182740 | 1 + db/schema_migrations/20210305182855 | 1 + db/schema_migrations/20210305183904 | 1 + db/schema_migrations/20210308175224 | 1 + db/schema_migrations/20210308175225 | 1 + db/schema_migrations/20210308175226 | 1 + db/schema_migrations/20210308175227 | 1 + db/schema_migrations/20210309160106 | 1 + db/schema_migrations/20210311022012 | 1 + db/schema_migrations/20210311045138 | 1 + db/schema_migrations/20210311045139 | 1 + db/schema_migrations/20210311093723 | 1 + db/schema_migrations/20210311120152 | 1 + db/schema_migrations/20210311120153 | 1 + db/schema_migrations/20210311120154 | 1 + db/schema_migrations/20210311120155 | 1 + db/schema_migrations/20210311120156 | 1 + db/schema_migrations/20210312140029 | 1 + db/schema_migrations/20210312174321 | 1 + db/schema_migrations/20210312193532 | 1 + db/schema_migrations/20210313045617 | 1 + db/schema_migrations/20210313045845 | 1 + db/schema_migrations/20210316094047 | 1 + db/schema_migrations/20210316094323 | 1 + db/schema_migrations/20210316152500 | 1 + db/schema_migrations/20210317035357 | 1 + db/schema_migrations/20210317100520 | 1 + db/schema_migrations/20210317104032 | 1 + db/schema_migrations/20210317104301 | 1 + db/schema_migrations/20210317105904 | 1 + db/schema_migrations/20210317155207 | 1 + db/schema_migrations/20210317192943 | 1 + db/schema_migrations/20210318134427 | 1 + db/schema_migrations/20210322063407 | 1 + db/schema_migrations/20210322063450 | 1 + db/schema_migrations/20210322115438 | 1 + db/schema_migrations/20210322182751 | 1 + db/schema_migrations/20210323064751 | 1 + db/schema_migrations/20210323155010 | 1 + db/schema_migrations/20210323182846 | 1 + db/schema_migrations/20210324112439 | 1 + db/schema_migrations/20210324131727 | 1 + db/schema_migrations/20210325092215 | 1 + db/schema_migrations/20210325113129 | 1 + db/schema_migrations/20210325150837 | 1 + db/schema_migrations/20210325151758 | 1 + db/schema_migrations/20210325152011 | 1 + db/schema_migrations/20210326035553 | 1 + db/schema_migrations/20210326121537 | 1 + db/schema_migrations/20210326190903 | 1 + db/schema_migrations/20210328214434 | 1 + db/schema_migrations/20210329095548 | 1 + db/schema_migrations/20210329102724 | 1 + db/schema_migrations/20210329191850 | 1 + db/schema_migrations/20210329192716 | 1 + db/schema_migrations/20210330015805 | 1 + db/schema_migrations/20210330091751 | 1 + db/schema_migrations/20210330130420 | 1 + db/schema_migrations/20210331105335 | 1 + db/schema_migrations/20210331125111 | 1 + db/schema_migrations/20210331145548 | 1 + db/schema_migrations/20210331180118 | 1 + db/schema_migrations/20210401131948 | 1 + db/schema_migrations/20210401134157 | 1 + db/schema_migrations/20210401134455 | 1 + db/schema_migrations/20210401175134 | 1 + db/schema_migrations/20210401192808 | 1 + db/schema_migrations/20210402005225 | 1 + db/schema_migrations/20210406063442 | 1 + db/schema_migrations/20210406140057 | 1 + db/schema_migrations/20210406144743 | 1 + db/schema_migrations/20210407002511 | 1 + db/schema_migrations/20210407150240 | 1 + db/schema_migrations/20210409084242 | 1 + db/schema_migrations/20210409185501 | 1 + db/schema_migrations/20210409185531 | 1 + db/schema_migrations/20210411212813 | 1 + db/schema_migrations/20210412132736 | 1 + db/schema_migrations/20210412132824 | 1 + db/schema_migrations/20210412142223 | 1 + db/schema_migrations/20210413092922 | 1 + db/schema_migrations/20210413121101 | 1 + db/schema_migrations/20210413123832 | 1 + db/schema_migrations/20210413130011 | 1 + db/schema_migrations/20210413132500 | 1 + db/schema_migrations/20210414095944 | 1 + db/schema_migrations/20210414131600 | 1 + db/schema_migrations/20210415074645 | 1 + db/schema_migrations/20210415142700 | 1 + db/schema_migrations/20210415144538 | 1 + db/structure.sql | 525 +- doc/.vale/gitlab/NonStandardQuotes.yml | 14 + doc/.vale/gitlab/Possessive.yml | 6 +- doc/.vale/gitlab/ReferenceLinks.yml | 2 +- doc/.vale/gitlab/spelling-exceptions.txt | 2 +- doc/administration/auth/README.md | 15 +- .../auth/ldap/ldap-troubleshooting.md | 2 +- doc/administration/auth/okta.md | 176 +- doc/administration/auth/smartcard.md | 4 +- doc/administration/clusters/kas.md | 131 + doc/administration/environment_variables.md | 7 +- .../external_pipeline_validation.md | 50 +- doc/administration/feature_flags.md | 2 +- .../geo/disaster_recovery/index.md | 351 +- doc/administration/geo/glossary.md | 2 +- doc/administration/geo/index.md | 4 +- .../geo/replication/datatypes.md | 89 +- .../geo/replication/disable_geo.md | 20 +- .../geo/replication/docker_registry.md | 44 +- .../geo/replication/geo_validation_tests.md | 4 +- .../geo/replication/remove_geo_node.md | 58 +- .../geo/replication/remove_geo_site.md | 58 + .../geo/replication/security_review.md | 10 +- doc/administration/geo/replication/usage.md | 27 + .../geo/replication/using_a_geo_server.md | 27 +- .../replication/version_specific_updates.md | 2 +- doc/administration/geo/setup/database.md | 2 +- doc/administration/geo/setup/index.md | 2 +- doc/administration/gitaly/configure_gitaly.md | 225 +- .../gitaly/img/architecture_v12_4.png | Bin 42885 -> 0 bytes doc/administration/gitaly/index.md | 394 +- doc/administration/gitaly/praefect.md | 341 +- doc/administration/gitaly/reference.md | 2 +- doc/administration/incoming_email.md | 63 +- doc/administration/index.md | 58 +- doc/administration/instance_limits.md | 13 +- doc/administration/job_artifacts.md | 46 +- doc/administration/logs.md | 2 +- .../img/maintenance_mode_error_message.png | Bin 0 -> 12682 bytes doc/administration/maintenance_mode/index.md | 2 +- .../maintenance_mode_error_message.png | Bin 14666 -> 0 bytes .../monitoring/github_imports.md | 2 +- .../gitlab_self_monitoring_project/index.md | 6 +- doc/administration/monitoring/index.md | 4 +- doc/administration/monitoring/ip_whitelist.md | 2 +- .../performance/gitlab_configuration.md | 2 +- .../performance/grafana_configuration.md | 2 +- .../monitoring/performance/index.md | 2 +- .../monitoring/performance/performance_bar.md | 2 +- .../performance/request_profiling.md | 2 +- .../monitoring/prometheus/gitlab_exporter.md | 2 +- .../monitoring/prometheus/gitlab_metrics.md | 23 +- .../monitoring/prometheus/index.md | 2 +- .../monitoring/prometheus/node_exporter.md | 2 +- .../prometheus/pgbouncer_exporter.md | 2 +- .../prometheus/postgres_exporter.md | 2 +- .../monitoring/prometheus/redis_exporter.md | 2 +- .../prometheus/registry_exporter.md | 2 +- doc/administration/nfs.md | 61 +- .../operations/extra_sidekiq_processes.md | 2 +- .../operations/moving_repositories.md | 2 +- .../packages/container_registry.md | 10 +- .../packages/dependency_proxy.md | 2 +- doc/administration/packages/index.md | 2 +- doc/administration/pages/index.md | 131 +- doc/administration/pages/source.md | 2 +- .../postgresql/replication_and_failover.md | 3 +- doc/administration/redis/index.md | 2 +- .../replication_and_failover_external.md | 2 +- doc/administration/redis/troubleshooting.md | 2 +- .../reference_architectures/10k_users.md | 271 +- .../reference_architectures/25k_users.md | 85 +- .../reference_architectures/2k_users.md | 31 +- .../reference_architectures/3k_users.md | 67 +- .../reference_architectures/50k_users.md | 87 +- .../reference_architectures/5k_users.md | 67 +- .../reference_architectures/index.md | 2 +- .../repository_storage_paths.md | 4 +- doc/administration/restart_gitlab.md | 9 +- doc/administration/terraform_state.md | 33 + .../troubleshooting/elasticsearch.md | 6 +- .../gitlab_rails_cheat_sheet.md | 39 +- .../troubleshooting/group_saml_scim.md | 31 +- .../img/ADFS-configure-NameID.png | Bin 22571 -> 0 bytes .../img/ADFS-configure-assertions.png | Bin 10561 -> 0 bytes ...-token-signing-certificate-fingerprint.png | Bin 36861 -> 0 bytes ...e-token-signing-fingerprint-from-shell.png | Bin 28939 -> 0 bytes .../img/ADFS-saml-setup-sso-url.png | Bin 30321 -> 0 bytes .../img/okta_admin_panel_v13_9.png | Bin .../img/okta_saml_settings.png | Bin doc/administration/troubleshooting/index.md | 16 +- .../troubleshooting/postgresql.md | 6 +- doc/administration/troubleshooting/sidekiq.md | 4 +- doc/administration/whats-new.md | 29 + doc/administration/wikis/index.md | 6 + doc/api/README.md | 174 +- doc/api/api_resources.md | 17 +- doc/api/applications.md | 4 +- doc/api/boards.md | 10 +- doc/api/discussions.md | 4 +- doc/api/dora/metrics.md | 101 + doc/api/dora4_group_analytics.md | 11 +- doc/api/dora4_project_analytics.md | 3 + doc/api/epic_issues.md | 5 + doc/api/error_tracking.md | 2 +- doc/api/events.md | 2 + doc/api/feature_flags.md | 5 +- doc/api/feature_flags_legacy.md | 5 +- doc/api/geo_nodes.md | 248 +- doc/api/graphql/getting_started.md | 2 +- doc/api/graphql/index.md | 55 +- doc/api/graphql/reference/index.md | 1602 +- doc/api/group_level_variables.md | 17 +- doc/api/group_repository_storage_moves.md | 4 +- doc/api/group_wikis.md | 3 +- doc/api/groups.md | 5 +- doc/api/invitations.md | 4 +- doc/api/issue_links.md | 2 +- doc/api/jobs.md | 85 +- doc/api/members.md | 72 +- doc/api/merge_request_approvals.md | 147 +- doc/api/merge_requests.md | 14 +- doc/api/metrics_dashboard_annotations.md | 2 +- doc/api/metrics_user_starred_dashboards.md | 2 +- doc/api/namespaces.md | 30 + doc/api/openapi/openapi_interactive.md | 18 +- doc/api/packages/composer.md | 287 + doc/api/packages/conan.md | 614 + doc/api/packages/go_proxy.md | 133 + doc/api/packages/maven.md | 124 + doc/api/packages/nuget.md | 338 + doc/api/packages/pypi.md | 113 + doc/api/packages/rubygems.md | 149 + doc/api/project_repository_storage_moves.md | 2 +- doc/api/projects.md | 47 +- doc/api/repositories.md | 78 +- doc/api/repository_files.md | 4 +- doc/api/runners.md | 4 + doc/api/services.md | 76 +- doc/api/settings.md | 30 +- doc/api/snippet_repository_storage_moves.md | 4 +- doc/api/templates/dockerfiles.md | 17 +- doc/api/templates/gitlab_ci_ymls.md | 2 +- doc/api/usage_data.md | 160 + doc/api/users.md | 41 +- doc/api/vulnerabilities.md | 6 +- doc/api/vulnerability_findings.md | 12 + doc/api/wikis.md | 3 +- .../index.md | 6 +- doc/ci/README.md | 2 +- doc/ci/caching/index.md | 3 + doc/ci/chatops/index.md | 2 +- .../cloud_deployment/ecs/quick_start_guide.md | 2 +- doc/ci/cloud_deployment/index.md | 6 +- doc/ci/docker/using_docker_build.md | 247 +- doc/ci/docker/using_docker_images.md | 590 +- doc/ci/environments/deployment_safety.md | 2 +- doc/ci/environments/environments_dashboard.md | 2 +- .../img/environment_auto_stop_v13_10.png | Bin 53602 -> 16265 bytes .../environments_dynamic_groups_v13_10.png | Bin 57387 -> 16869 bytes ...nments_terminal_button_on_index_v13_10.png | Bin 42113 -> 12536 bytes ...onments_terminal_button_on_show_v13_10.png | Bin 53590 -> 16161 bytes doc/ci/environments/index.md | 252 +- doc/ci/environments/protected_environments.md | 4 +- doc/ci/examples/README.md | 2 +- .../end_to_end_testing_webdriverio/index.md | 2 +- .../laravel_with_gitlab_and_envoy/index.md | 4 +- doc/ci/jobs/img/collapsible_log_v12_6.png | Bin 96471 -> 0 bytes doc/ci/jobs/img/collapsible_log_v13_10.png | Bin 0 -> 48386 bytes doc/ci/jobs/img/manual_job_variables.png | Bin 39858 -> 0 bytes .../jobs/img/manual_job_variables_v13_10.png | Bin 0 -> 24745 bytes doc/ci/jobs/index.md | 33 +- doc/ci/merge_request_pipelines/index.md | 2 +- .../merge_trains/index.md | 2 +- doc/ci/metrics_reports.md | 2 +- doc/ci/migration/circleci.md | 2 +- doc/ci/migration/jenkins.md | 2 +- doc/ci/multi_project_pipelines.md | 26 +- doc/ci/pipeline_editor/index.md | 8 +- .../pipelines/img/job_artifacts_browser.png | Bin 3944 -> 0 bytes .../img/job_artifacts_browser_button.png | Bin 5534 -> 0 bytes .../job_artifacts_browser_button_v13_11.png | Bin 0 -> 9633 bytes .../img/job_artifacts_browser_v13_11.png | Bin 0 -> 10083 bytes .../img/job_artifacts_builds_page.png | Bin 15191 -> 0 bytes .../img/job_artifacts_jobs_page_v13_11.png | Bin 0 -> 22599 bytes .../img/job_artifacts_merge_request.png | Bin 13206 -> 0 bytes .../job_artifacts_merge_request_v13_11.png | Bin 0 -> 13256 bytes .../img/job_artifacts_pipelines_page.png | Bin 16403 -> 0 bytes .../job_artifacts_pipelines_page_v13_11.png | Bin 0 -> 47332 bytes doc/ci/pipelines/img/pipelines_v13_11.png | Bin 0 -> 28783 bytes doc/ci/pipelines/index.md | 8 +- doc/ci/pipelines/job_artifacts.md | 472 +- doc/ci/pipelines/settings.md | 28 +- doc/ci/quick_start/index.md | 2 +- doc/ci/secrets/index.md | 2 +- doc/ci/services/gitlab.md | 40 + doc/ci/services/index.md | 376 +- doc/ci/services/mysql.md | 2 +- doc/ci/services/postgres.md | 4 +- doc/ci/ssh_keys/index.md | 3 +- doc/ci/triggers/README.md | 31 +- doc/ci/unit_test_reports.md | 6 +- doc/ci/variables/README.md | 864 +- ...rride_value_via_manual_pipeline_output.png | Bin 110898 -> 0 bytes .../img/override_variable_manual_pipeline.png | Bin 17876 -> 0 bytes doc/ci/variables/predefined_variables.md | 5 +- .../variables/where_variables_can_be_used.md | 69 +- doc/ci/yaml/README.md | 998 +- doc/ci/yaml/gitlab_ci_yaml.md | 2 +- doc/ci/yaml/img/job_running.png | Bin 99621 -> 0 bytes doc/ci/yaml/img/job_running_v13_10.png | Bin 0 -> 57525 bytes doc/development/README.md | 3 +- doc/development/agent/identity.md | 12 + doc/development/agent/local.md | 55 + doc/development/api_graphql_styleguide.md | 154 +- doc/development/application_limits.md | 2 - doc/development/application_secrets.md | 2 +- .../avoiding_downtime_in_migrations.md | 415 + doc/development/background_migrations.md | 8 + doc/development/bulk_import.md | 2 +- doc/development/changelog.md | 10 +- doc/development/chaos_endpoints.md | 28 +- doc/development/cicd/index.md | 16 +- doc/development/cicd/templates.md | 247 +- doc/development/code_review.md | 105 +- doc/development/contributing/index.md | 2 +- .../contributing/issue_workflow.md | 2 +- .../contributing/merge_request_workflow.md | 7 +- doc/development/creating_enums.md | 38 + doc/development/dangerbot.md | 23 +- .../add_foreign_key_to_existing_column.md | 9 +- .../database/database_reviewer_guidelines.md | 2 +- doc/development/database/index.md | 4 +- .../database/not_null_constraints.md | 8 +- .../strings_and_the_text_data_type.md | 8 - doc/development/database_debugging.md | 4 +- doc/development/database_query_comments.md | 29 +- doc/development/database_review.md | 17 +- .../deprecation_guidelines/index.md | 6 +- doc/development/distributed_tracing.md | 4 +- .../documentation/feature_flags.md | 52 +- doc/development/documentation/index.md | 102 +- .../site_architecture/global_nav.md | 218 +- .../documentation/site_architecture/index.md | 4 +- .../site_architecture/release_process.md | 168 +- doc/development/documentation/structure.md | 14 +- .../documentation/styleguide/index.md | 2 +- doc/development/documentation/testing.md | 6 +- doc/development/ee_features.md | 2 + doc/development/elasticsearch.md | 18 +- doc/development/emails.md | 9 +- .../experiment_guide/gitlab_experiment.md | 75 +- doc/development/fe_guide/accessibility.md | 362 +- doc/development/fe_guide/dependencies.md | 2 +- .../fe_guide/design_anti_patterns.md | 4 +- doc/development/fe_guide/graphql.md | 135 +- doc/development/fe_guide/icons.md | 6 +- .../fe_guide/img/editor_lite_create_ext.png | Bin 81777 -> 16495 bytes doc/development/fe_guide/index.md | 2 +- doc/development/fe_guide/performance.md | 14 +- doc/development/fe_guide/principles.md | 2 +- doc/development/fe_guide/security.md | 4 +- doc/development/fe_guide/style/javascript.md | 21 +- doc/development/fe_guide/style/vue.md | 6 +- doc/development/fe_guide/troubleshooting.md | 26 + doc/development/fe_guide/vue.md | 82 +- doc/development/fe_guide/vue3_migration.md | 2 + doc/development/feature_flags/controls.md | 4 +- doc/development/feature_flags/index.md | 7 +- doc/development/geo/framework.md | 876 +- doc/development/gitaly.md | 19 +- doc/development/go_guide/index.md | 8 +- .../graphql_guide/authorization.md | 223 + doc/development/graphql_guide/index.md | 1 + doc/development/i18n/externalization.md | 97 +- doc/development/i18n/merging_translations.md | 11 +- doc/development/i18n/translation.md | 3 +- doc/development/instrumentation.md | 2 +- doc/development/integrations/secure.md | 4 +- .../secure_partner_integration.md | 14 +- .../licensed_feature_availability.md | 13 + doc/development/licensing.md | 7 +- doc/development/logging.md | 2 +- .../merge_request_performance_guidelines.md | 25 +- doc/development/migration_style_guide.md | 85 +- doc/development/new_fe_guide/tips.md | 2 +- doc/development/packages.md | 2 +- doc/development/permissions.md | 28 + doc/development/pipelines.md | 45 +- doc/development/polymorphic_associations.md | 2 +- doc/development/product_analytics/snowplow.md | 4 +- doc/development/prometheus_metrics.md | 4 +- doc/development/query_count_limits.md | 20 +- doc/development/rake_tasks.md | 18 + doc/development/scalability.md | 2 +- doc/development/secure_coding_guidelines.md | 4 +- doc/development/shell_commands.md | 2 +- doc/development/sidekiq_style_guide.md | 4 +- doc/development/snowplow.md | 636 +- doc/development/snowplow/index.md | 719 + doc/development/sql.md | 13 +- doc/development/stage_group_dashboards.md | 49 + .../testing_guide/best_practices.md | 134 +- .../end_to_end/beginners_guide.md | 7 +- .../end_to_end/best_practices.md | 9 + .../testing_guide/end_to_end/index.md | 94 +- .../testing_guide/end_to_end/style_guide.md | 2 +- doc/development/testing_guide/flaky_tests.md | 2 +- .../testing_guide/frontend_testing.md | 104 +- .../transient/prevention-patterns.md | 4 +- .../understanding_explain_plans.md | 4 +- doc/development/usage_ping/dictionary.md | 2100 +- doc/development/usage_ping/index.md | 175 +- .../usage_ping/metrics_dictionary.md | 100 +- .../usage_ping/product_intelligence_review.md | 17 +- doc/development/what_requires_downtime.md | 414 +- doc/development/wikis.md | 6 +- doc/gitlab-basics/command-line-commands.md | 6 +- doc/gitlab-basics/start-using-git.md | 6 +- doc/install/aws/index.md | 19 +- .../img/azure-add-inbound-sec-rule-http.png | Bin 16927 -> 0 bytes .../img/azure-add-inbound-sec-rule-ssh.png | Bin 16817 -> 0 bytes ...create-virtual-machine-basics-password.png | Bin 24862 -> 0 bytes .../azure-create-virtual-machine-basics.png | Bin 22925 -> 0 bytes ...zure-create-virtual-machine-deployment.png | Bin 23707 -> 0 bytes .../azure-create-virtual-machine-purchase.png | Bin 43698 -> 0 bytes .../azure-create-virtual-machine-settings.png | Bin 25686 -> 0 bytes .../img/azure-create-virtual-machine-size.png | Bin 33322 -> 0 bytes .../img/azure-dashboard-highlight-nsg.png | Bin 34248 -> 0 bytes .../img/azure-dashboard-running-resources.png | Bin 34306 -> 0 bytes doc/install/azure/img/azure-dashboard.png | Bin 36396 -> 0 bytes .../img/azure-inbound-sec-rules-list.png | Bin 24592 -> 0 bytes doc/install/azure/img/azure-new-gitlab-ce.png | Bin 22701 -> 0 bytes .../azure/img/azure-new-search-gitlab.png | Bin 19034 -> 0 bytes ...re-nsg-inbound-sec-rules-add-highlight.png | Bin 22583 -> 0 bytes .../azure-nsg-inbound-sec-rules-highlight.png | Bin 31485 -> 0 bytes .../azure/img/azure-vm-domain-name.png | Bin 23802 -> 0 bytes .../img/azure-vm-management-public-ip.png | Bin 34991 -> 0 bytes .../azure/img/gitlab-admin-area-9.4.0.png | Bin 35249 -> 0 bytes doc/install/azure/img/gitlab-admin-area.png | Bin 29333 -> 0 bytes .../azure/img/gitlab-change-password.png | Bin 24404 -> 0 bytes doc/install/azure/img/gitlab-home.png | Bin 26302 -> 0 bytes doc/install/azure/img/gitlab-login.png | Bin 24656 -> 0 bytes doc/install/azure/img/gitlab-new-project.png | Bin 34164 -> 0 bytes .../azure/img/gitlab-project-home-empty.png | Bin 28375 -> 0 bytes .../img/gitlab-project-home-instructions.png | Bin 31738 -> 0 bytes .../img/gitlab-ssh-update-in-progress.png | Bin 32799 -> 0 bytes doc/install/azure/index.md | 569 +- doc/install/installation.md | 53 +- doc/install/pivotal/index.md | 2 +- doc/install/postgresql_extensions.md | 1 + doc/install/relative_url.md | 4 +- doc/install/requirements.md | 12 +- doc/integration/README.md | 2 +- doc/integration/elasticsearch.md | 26 +- doc/integration/google_workspace_saml.md | 163 +- .../img/enabled-oauth-sign-in-sources.png | Bin 13303 -> 0 bytes .../enabled-oauth-sign-in-sources_v13_10.png | Bin 0 -> 47979 bytes .../img/jira_dev_panel_gl_setup_1.png | Bin 36145 -> 0 bytes .../img/jira_dev_panel_jira_setup_2.png | Bin 17374 -> 0 bytes doc/integration/jenkins.md | 2 +- doc/integration/jira/connect-app.md | 130 + doc/integration/jira/development_panel.md | 155 + doc/integration/jira/dvcs.md | 221 + .../img/jira-upload-app-success_v13_11.png | Bin 0 -> 11440 bytes .../jira/img/jira-upload-app_v13_11.png | Bin 0 -> 20667 bytes .../jira}/img/jira_added_user_to_group.png | Bin .../jira}/img/jira_create_new_group.png | Bin .../img/jira_dev_panel_jira_setup_3.png | Bin .../img/jira_dev_panel_jira_setup_4.png | Bin .../img/jira_dev_panel_jira_setup_5.png | Bin .../img/jira_dev_panel_manual_refresh.png | Bin .../img/jira_dev_panel_setup_com_1.png | Bin .../img/jira_dev_panel_setup_com_2.png | Bin .../img/jira_dev_panel_setup_com_3_v13_9.png | Bin .../img/jira_dev_panel_setup_com_4_v13_9.png | Bin .../jira/img/jira_group_access.png | Bin 0 -> 20934 bytes .../img/jira_issue_detail_view_v13.10.png | Bin 0 -> 49442 bytes .../jira}/img/jira_issue_reference.png | Bin .../jira}/img/jira_merge_request_close.png | Bin .../jira}/img/jira_project_settings.png | Bin .../jira}/img/jira_service_close_issue.png | Bin .../jira/img}/open_jira_issues_list_v13.2.png | Bin doc/integration/jira/index.md | 91 + doc/integration/jira/issues.md | 173 + .../jira/jira_cloud_configuration.md | 22 + .../jira/jira_server_configuration.md | 83 + doc/integration/jira_development_panel.md | 327 +- doc/integration/oauth_provider.md | 30 +- doc/integration/omniauth.md | 102 +- doc/integration/saml.md | 169 +- doc/integration/vault.md | 26 +- doc/operations/error_tracking.md | 8 +- doc/operations/feature_flags.md | 20 +- doc/operations/incident_management/alerts.md | 2 +- .../img/custom_alert_mapping_v13_10.png | Bin 100141 -> 0 bytes .../img/custom_alert_mapping_v13_11.png | Bin 0 -> 16700 bytes .../img/oncall_schedule_day_grid_v13_10.png | Bin 0 -> 15722 bytes .../img/oncall_schedule_empty_grid_v13_10.png | Bin 0 -> 31139 bytes .../incident_management/incidents.md | 4 +- doc/operations/incident_management/index.md | 5 +- .../incident_management/integrations.md | 32 +- .../incident_management/oncall_schedules.md | 109 + doc/operations/incident_management/paging.md | 8 +- .../incident_management/status_page.md | 2 +- doc/operations/index.md | 6 +- doc/operations/metrics/alerts.md | 6 +- doc/operations/metrics/dashboards/default.md | 2 +- doc/operations/metrics/dashboards/develop.md | 2 +- doc/operations/metrics/dashboards/index.md | 2 +- .../metrics/dashboards/panel_types.md | 2 +- doc/operations/metrics/dashboards/settings.md | 2 +- .../dashboards/templating_variables.md | 2 +- .../metrics/dashboards/variables.md | 2 +- doc/operations/metrics/dashboards/yaml.md | 2 +- .../metrics/dashboards/yaml_number_format.md | 2 +- doc/operations/metrics/embed.md | 2 +- doc/operations/metrics/embed_grafana.md | 4 +- doc/operations/metrics/index.md | 2 +- doc/operations/tracing.md | 39 +- doc/policy/maintenance.md | 2 +- doc/push_rules/push_rules.md | 22 + doc/raketasks/backup_restore.md | 6 +- .../generate_sample_prometheus_data.md | 2 +- doc/raketasks/index.md | 73 +- doc/security/README.md | 1 + doc/security/reset_user_password.md | 31 +- doc/security/token_overview.md | 14 +- doc/ssh/README.md | 2 + doc/subscriptions/gitlab_com/index.md | 73 +- doc/subscriptions/self_managed/index.md | 37 +- doc/tools/email.md | 3 + doc/topics/authentication/index.md | 1 - doc/topics/autodevops/customize.md | 2 +- doc/topics/autodevops/index.md | 4 +- doc/topics/autodevops/requirements.md | 2 +- doc/topics/autodevops/stages.md | 21 +- doc/topics/autodevops/troubleshooting.md | 2 +- doc/topics/git/feature_branch_development.md | 23 +- doc/topics/git/lfs/index.md | 8 +- .../index.md | 2 +- doc/topics/git/partial_clone.md | 83 +- doc/topics/git/tags.md | 2 +- doc/topics/git/troubleshooting_git.md | 68 +- doc/topics/git/useful_git_commands.md | 2 +- doc/university/training/user_training.md | 4 +- doc/update/index.md | 17 +- doc/update/patch_versions.md | 9 +- doc/update/restore_after_failure.md | 5 +- doc/update/upgrading_from_ce_to_ee.md | 9 +- doc/update/upgrading_from_source.md | 8 +- doc/user/admin_area/abuse_reports.md | 2 +- .../activating_deactivating_users.md | 2 +- doc/user/admin_area/credentials_inventory.md | 24 +- .../admin_area/custom_project_templates.md | 2 +- doc/user/admin_area/geo_nodes.md | 6 + .../admin_area/img/abuse_reports_page.png | Bin 86180 -> 0 bytes .../img/abuse_reports_page_v13_11.png | Bin 0 -> 77994 bytes .../img/admin_area_settings_button.png | Bin 7974 -> 0 bytes .../credentials_inventory_gpg_keys_v13_10.png | Bin 62501 -> 20600 bytes .../img/credentials_inventory_v13_10.png | Bin 100241 -> 30223 bytes .../img/export_permissions_v13_11.png | Bin 0 -> 11567 bytes .../admin_area/img/license_details_v13_8.png | Bin 69506 -> 0 bytes doc/user/admin_area/index.md | 2 + doc/user/admin_area/license.md | 18 +- .../admin_area/merge_requests_approvals.md | 2 + .../settings/continuous_integration.md | 5 +- doc/user/admin_area/settings/index.md | 8 +- .../project_integration_management.md | 4 +- .../settings/rate_limit_on_issues_creation.md | 2 +- .../settings/rate_limit_on_notes_creation.md | 2 +- .../settings/sign_in_restrictions.md | 79 +- doc/user/analytics/ci_cd_analytics.md | 37 +- doc/user/analytics/code_review_analytics.md | 4 +- .../img/code_review_analytics_v12_8.png | Bin 40082 -> 0 bytes .../img/code_review_analytics_v13_11.png | Bin 0 -> 107184 bytes .../img/issues_created_per_month_v12_8.png | Bin 26718 -> 0 bytes .../img/issues_created_per_month_v13_11.png | Bin 0 -> 57729 bytes .../analytics/img/lead_time_chart_v13_11.png | Bin 0 -> 52168 bytes doc/user/analytics/index.md | 15 +- doc/user/analytics/issue_analytics.md | 4 +- doc/user/analytics/value_stream_analytics.md | 24 +- .../application_security/api_fuzzing/index.md | 117 +- .../container_scanning/index.md | 85 +- .../coverage_fuzzing/index.md | 12 +- .../dast/dast_troubleshooting.md | 64 + .../dast/img/dast_v13_4.png | Bin 6558 -> 0 bytes doc/user/application_security/dast/index.md | 379 +- .../img/dependency_list_v12_10.png | Bin 76835 -> 0 bytes .../img/dependency_list_v13_11.png | Bin 0 -> 85626 bytes .../dependency_list/index.md | 5 +- .../dependency_scanning/index.md | 51 +- .../img/adding_a_dismissal_reason_v13_4.png | Bin 25574 -> 0 bytes .../create_mr_from_vulnerability_v13_4.png | Bin 49215 -> 16106 bytes .../interacting_with_vulnerability_v13_3.png | Bin 54508 -> 0 bytes .../img/multi_select_v12_9.png | Bin 10825 -> 0 bytes ...ity_related_issues_text_box_tags_v13_2.gif | Bin 69338 -> 0 bytes doc/user/application_security/index.md | 54 +- .../application_security/policies/index.md | 183 + .../application_security/sast/analyzers.md | 13 + doc/user/application_security/sast/index.md | 76 +- .../secret_detection/index.md | 42 +- ...roject_security_dashboard_chart_v13_11.png | Bin 0 -> 15914 bytes ...project_security_dashboard_chart_v13_6.png | Bin 62882 -> 0 bytes .../security_dashboard/index.md | 14 +- ...at_monitoring_policy_alert_list_v13_11.png | Bin 0 -> 11654 bytes ...eat_monitoring_policy_alert_list_v13_9.png | Bin 10558 -> 0 bytes .../threat_monitoring/index.md | 2 +- ...bility_page_merge_request_button_v13_1.png | Bin 15394 -> 0 bytes .../vulnerabilities/index.md | 2 +- ...curity_dashboard_status_change_v13_10.png} | Bin .../vulnerability_report/index.md | 19 +- doc/user/asciidoc.md | 2 +- doc/user/clusters/agent/index.md | 214 +- doc/user/clusters/agent/repository.md | 4 +- doc/user/clusters/applications.md | 12 +- doc/user/clusters/integrations.md | 68 + .../img/compliance_dashboard_v13_11.png | Bin 0 -> 45002 bytes .../img/compliance_dashboard_v13_6.png | Bin 64273 -> 0 bytes .../compliance/compliance_dashboard/index.md | 2 +- .../compliance/license_compliance/index.md | 31 +- .../img/mr_review_new_comment_v13_11.png | Bin 0 -> 32192 bytes doc/user/discussions/img/review_preview.png | Bin 27664 -> 0 bytes .../discussions/img/review_preview_v13_11.png | Bin 0 -> 28261 bytes doc/user/discussions/index.md | 61 +- doc/user/feature_flags.md | 20 +- doc/user/gitlab_com/index.md | 8 +- doc/user/group/bulk_editing/index.md | 2 +- doc/user/group/clusters/index.md | 4 +- doc/user/group/custom_project_templates.md | 2 +- .../img/group_devops_adoption_v13_11.png | Bin 0 -> 58389 bytes doc/user/group/devops_adoption/index.md | 60 + .../group/epics/img/epic_board_v13_10.png | Bin 147584 -> 60672 bytes doc/user/group/epics/img/epics_search.png | Bin 65963 -> 0 bytes .../group/epics/img/epics_search_v13_11.png | Bin 0 -> 23566 bytes doc/user/group/epics/index.md | 2 +- doc/user/group/epics/manage_epics.md | 39 +- doc/user/group/import/index.md | 5 + doc/user/group/index.md | 127 +- .../insights_example_stacked_bar_chart.png | Bin 40798 -> 0 bytes ...ights_example_stacked_bar_chart_v13_11.png | Bin 0 -> 85296 bytes .../img/insights_sidebar_link_v12_8.png | Bin 7773 -> 0 bytes doc/user/group/insights/index.md | 6 +- doc/user/group/iterations/index.md | 10 +- .../group/repositories_analytics/index.md | 2 +- .../roadmap/img/roadmap_filters_v13_11.png | Bin 0 -> 79098 bytes .../roadmap/img/roadmap_filters_v13_8.png | Bin 20766 -> 0 bytes doc/user/group/roadmap/index.md | 5 +- .../group/saml_sso/group_managed_accounts.md | 10 + .../img/scim_name_identifier_mapping.png | Bin 59409 -> 0 bytes .../saml_sso/img/scim_provisioning_status.png | Bin 7756 -> 0 bytes doc/user/group/saml_sso/index.md | 139 +- doc/user/group/saml_sso/scim_setup.md | 55 +- doc/user/group/subgroups/index.md | 2 +- .../img/extended_value_stream_form_v13_10.png | Bin 259265 -> 82406 bytes .../img/vsa_custom_stage_v13_10.png | Bin 47083 -> 14209 bytes .../img/vsa_default_stage_v13_10.png | Bin 43974 -> 14519 bytes .../img/vsa_path_nav_v13_11.png | Bin 0 -> 22421 bytes .../group/value_stream_analytics/index.md | 75 +- ...ew_project_snippet_from_project_v12_10.png | Bin 73848 -> 0 bytes doc/user/img/snippet_intro_v13_11.png | Bin 0 -> 37571 bytes doc/user/img/snippet_tooltip_v13_10.png | Bin 0 -> 21652 bytes doc/user/index.md | 6 +- doc/user/infrastructure/mr_integration.md | 4 +- .../packages/composer_repository/index.md | 33 +- doc/user/packages/conan_repository/index.md | 18 +- doc/user/packages/container_registry/index.md | 19 +- doc/user/packages/dependency_proxy/index.md | 5 + doc/user/packages/generic_packages/index.md | 8 +- doc/user/packages/go_proxy/index.md | 3 + doc/user/packages/index.md | 4 +- doc/user/packages/maven_repository/index.md | 13 +- doc/user/packages/npm_registry/index.md | 44 +- doc/user/packages/nuget_repository/index.md | 17 +- doc/user/packages/package_registry/index.md | 3 +- doc/user/packages/pypi_repository/index.md | 12 +- doc/user/packages/rubygems_registry/index.md | 137 + .../packages/workflows/project_registry.md | 2 +- doc/user/permissions.md | 39 +- .../account/two_factor_authentication.md | 2 +- doc/user/profile/index.md | 7 +- doc/user/profile/notifications.md | 37 +- doc/user/profile/preferences.md | 6 +- doc/user/project/badges.md | 2 +- doc/user/project/bulk_editing.md | 2 +- .../project/clusters/add_remove_clusters.md | 2 +- doc/user/project/clusters/index.md | 6 +- .../project/clusters/kubernetes_pod_logs.md | 2 +- doc/user/project/clusters/runbooks/index.md | 2 +- doc/user/project/clusters/serverless/aws.md | 6 +- doc/user/project/clusters/serverless/index.md | 2 +- doc/user/project/deploy_tokens/index.md | 36 +- doc/user/project/description_templates.md | 89 +- doc/user/project/file_lock.md | 2 +- .../issue_board_iteration_lists_v13_10.png | Bin 0 -> 22196 bytes .../img/issue_boards_blocked_icon_v13_10.png | Bin 0 -> 13821 bytes .../img/issue_boards_blocked_icon_v13_6.png | Bin 16709 -> 0 bytes .../project/img/project_overview_badges.png | Bin 12486 -> 0 bytes .../img/project_overview_badges_v13_10.png | Bin 0 -> 12267 bytes .../img/project_repository_settings.png | Bin 7511 -> 0 bytes doc/user/project/import/perforce.md | 40 +- doc/user/project/import/phabricator.md | 11 +- doc/user/project/insights/index.md | 10 +- doc/user/project/integrations/asana.md | 44 + doc/user/project/integrations/bamboo.md | 32 +- .../integrations/discord_notifications.md | 3 +- .../project/integrations/emails_on_push.md | 4 +- doc/user/project/integrations/github.md | 45 +- doc/user/project/integrations/hipchat.md | 65 +- .../img/emails_on_push_service_v13_11.png | Bin 0 -> 25469 bytes .../integrations/img/github_configuration.png | Bin 12258 -> 0 bytes .../img/jira_add_user_to_group.png | Bin 83799 -> 0 bytes .../integrations/img/jira_api_token.png | Bin 7407 -> 0 bytes .../integrations/img/jira_api_token_menu.png | Bin 14353 -> 0 bytes .../integrations/img/jira_create_new_user.png | Bin 40275 -> 0 bytes .../integrations/img/jira_group_access.png | Bin 32162 -> 0 bytes .../img/jira_user_management_link.png | Bin 57628 -> 0 bytes .../img/mattermost_configuration_v2.png | Bin 75931 -> 0 bytes .../img/microsoft_teams_configuration.png | Bin 29336 -> 0 bytes .../img/redmine_configuration.png | Bin 10254 -> 0 bytes doc/user/project/integrations/index.md | 11 +- doc/user/project/integrations/irker.md | 2 +- doc/user/project/integrations/jira.md | 306 +- .../integrations/jira_cloud_configuration.md | 27 +- .../project/integrations/jira_integrations.md | 56 +- .../integrations/jira_server_configuration.md | 68 +- doc/user/project/integrations/mattermost.md | 55 +- .../project/integrations/microsoft_teams.md | 72 +- doc/user/project/integrations/overview.md | 96 +- doc/user/project/integrations/prometheus.md | 6 +- .../prometheus_library/cloudwatch.md | 2 +- .../prometheus_library/haproxy.md | 2 +- .../integrations/prometheus_library/index.md | 2 +- .../prometheus_library/kubernetes.md | 2 +- .../integrations/prometheus_library/nginx.md | 2 +- .../prometheus_library/nginx_ingress.md | 2 +- .../prometheus_library/nginx_ingress_vts.md | 2 +- doc/user/project/integrations/redmine.md | 61 +- .../integrations/services_templates.md | 7 +- doc/user/project/integrations/webhooks.md | 2 +- doc/user/project/issue_board.md | 108 +- .../project/issues/confidential_issues.md | 2 +- .../project/issues/crosslinking_issues.md | 24 +- doc/user/project/issues/csv_import.md | 5 +- doc/user/project/issues/due_dates.md | 2 +- .../issue_health_status_dropdown_v12_10.png | Bin 13926 -> 0 bytes .../project/issues/img/issues_main_view.png | Bin 72540 -> 0 bytes .../issues/img/project_issues_list_view.png | Bin 77189 -> 0 bytes doc/user/project/issues/index.md | 215 +- .../project/issues/issue_data_and_actions.md | 8 +- doc/user/project/issues/managing_issues.md | 47 +- doc/user/project/issues/related_issues.md | 74 +- .../project/issues/sorting_issue_lists.md | 6 + doc/user/project/labels.md | 2 +- doc/user/project/members/index.md | 46 +- .../members/share_project_with_groups.md | 43 + .../merge_requests/accessibility_testing.md | 2 +- .../browser_performance_testing.md | 4 +- .../merge_requests/cherry_pick_changes.md | 42 +- .../project/merge_requests/code_quality.md | 46 +- .../merge_requests/creating_merge_requests.md | 21 + doc/user/project/merge_requests/csv_export.md | 2 +- .../project/merge_requests/getting_started.md | 10 +- .../img/cherry_pick_into_project_v13_11.png | Bin 0 -> 18282 bytes .../merge_requests/img/code_quality.png | Bin 147457 -> 0 bytes .../code_quality_mr_diff_report_v13_11.png | Bin 0 -> 28144 bytes .../img/code_quality_report_13_11.png | Bin 0 -> 23710 bytes .../img/code_quality_widget_13_11.png | Bin 0 -> 29118 bytes .../merge_requests/img/commit_nav_v13_11.png | Bin 0 -> 24164 bytes .../merge_requests/img/commit_nav_v13_4.png | Bin 21170 -> 0 bytes .../img/merge_request_tab_position_v12_6.png | Bin 74731 -> 0 bytes .../img/merge_request_tab_position_v13_11.png | Bin 0 -> 9269 bytes .../img/scoped_to_protected_branch_v13_10.png | Bin 39889 -> 12376 bytes .../img/update_approval_rule_v13_10.png | Bin 42956 -> 13847 bytes doc/user/project/merge_requests/index.md | 93 +- .../load_performance_testing.md | 4 +- .../merge_requests/merge_request_approvals.md | 56 +- .../merge_request_dependencies.md | 6 +- .../reviewing_and_managing_merge_requests.md | 39 +- .../merge_requests/squash_and_merge.md | 18 +- .../test_coverage_visualization.md | 9 +- .../testing_and_reports_in_merge_requests.md | 2 +- .../project/new_ci_build_permissions_model.md | 256 +- .../ssl_tls_concepts.md | 2 +- .../pages_new_project_template.md | 2 +- .../project/pages/getting_started_part_one.md | 2 +- doc/user/project/pages/index.md | 4 +- doc/user/project/pages/introduction.md | 16 + doc/user/project/protected_branches.md | 17 +- doc/user/project/protected_tags.md | 4 +- doc/user/project/push_options.md | 2 + doc/user/project/quick_actions.md | 5 +- .../releases/img/deploy_freeze_v13_10.png | Bin 0 -> 15902 bytes .../releases/img/deploy_freeze_v13_2.png | Bin 33428 -> 0 bytes doc/user/project/releases/index.md | 12 +- .../project/repository/branches/default.md | 180 + .../img/branch_filter_search_box_v13_10.png | Bin 48672 -> 17166 bytes doc/user/project/repository/branches/index.md | 57 +- doc/user/project/repository/file_finder.md | 12 +- .../project/repository/forking_workflow.md | 72 +- doc/user/project/repository/git_blame.md | 12 +- doc/user/project/repository/git_history.md | 11 +- .../repository/img/contributors_graph.png | Bin 31670 -> 27253 bytes .../repository/img/download_source_code.png | Bin 19577 -> 19681 bytes .../img/file_blame_button_v12_6.png | Bin 9194 -> 0 bytes .../img/file_finder_find_button_v12_10.png | Bin 26036 -> 0 bytes .../img/file_history_button_v12_6.png | Bin 9194 -> 0 bytes .../repository/img/fork_form_v13_10.png | Bin 0 -> 40932 bytes ...rking_workflow_choose_namespace_v13_10.png | Bin 0 -> 18552 bytes ...orking_workflow_choose_namespace_v13_2.png | Bin 37495 -> 29612 bytes .../img/forking_workflow_fork_button.png | Bin 10365 -> 0 bytes .../forking_workflow_fork_button_v13_10.png | Bin 0 -> 8619 bytes .../project/repository/img/repo_graph.png | Bin 52317 -> 64212 bytes .../img/web_editor_line_link_v13_10.png | Bin 0 -> 42942 bytes doc/user/project/repository/index.md | 2 +- .../img/jupyter_notebook.png | Bin 63326 -> 53800 bytes .../repository/jupyter_notebooks/index.md | 4 +- .../reducing_the_repo_size_using_git.md | 4 +- doc/user/project/repository/web_editor.md | 18 + doc/user/project/requirements/index.md | 3 +- doc/user/project/service_desk.md | 36 +- .../project/settings/img/general_settings.png | Bin 46077 -> 0 bytes .../settings/img/general_settings_v13_11.png | Bin 0 -> 31271 bytes .../settings/img/merge_requests_settings.png | Bin 52029 -> 0 bytes doc/user/project/settings/import_export.md | 4 +- doc/user/project/settings/index.md | 92 +- .../project/settings/project_access_tokens.md | 6 + doc/user/project/time_tracking.md | 21 +- .../web_ide/img/commit_changes_v12_9.png | Bin 144214 -> 0 bytes .../web_ide/img/commit_changes_v13_11.png | Bin 0 -> 116443 bytes .../web_ide/img/live_preview_v13_0.png | Bin 60256 -> 29188 bytes doc/user/project/web_ide/index.md | 13 +- .../wiki/img/wiki_create_home_page.png | Bin 12421 -> 0 bytes .../project/wiki/img/wiki_create_new_page.png | Bin 14957 -> 0 bytes doc/user/project/wiki/index.md | 315 +- doc/user/search/advanced_search.md | 2 +- doc/user/search/img/basic_search.png | Bin 88486 -> 8344 bytes doc/user/search/img/dashboard_links.png | Bin 10220 -> 0 bytes .../search/img/dashboard_links_v13_11.png | Bin 0 -> 2798 bytes doc/user/search/img/issues_mrs_shortcut.png | Bin 26706 -> 4523 bytes .../search/img/project_search_dropdown.png | Bin 117963 -> 0 bytes doc/user/search/index.md | 43 +- doc/user/snippets.md | 15 +- doc/user/usage_quotas.md | 2 +- .../migration/create_table_migration.rb | 12 +- .../active_record/migration/migration.rb | 12 +- .../post_deployment_migration/migration.rb | 6 +- .../metric_definition.yml | 2 - jest.config.base.js | 14 +- jest.config.integration.js | 13 +- lefthook.yml | 18 +- lib/api/admin/sidekiq.rb | 4 +- lib/api/api.rb | 4 +- lib/api/api_guard.rb | 4 +- lib/api/applications.rb | 2 + lib/api/ci/pipelines.rb | 2 +- lib/api/ci/runner.rb | 4 +- lib/api/commits.rb | 6 +- lib/api/composer_packages.rb | 2 + lib/api/concerns/packages/nuget_endpoints.rb | 2 +- lib/api/deploy_keys.rb | 2 +- lib/api/deployments.rb | 4 +- lib/api/entities/basic_project_details.rb | 9 +- lib/api/entities/clusters/agent.rb | 12 + lib/api/entities/email.rb | 2 +- lib/api/entities/job_request/job_info.rb | 2 +- lib/api/entities/namespace_existence.rb | 9 + lib/api/entities/project.rb | 5 +- .../project_import_failed_relation.rb | 6 +- lib/api/entities/user.rb | 4 +- lib/api/entities/user_preferences.rb | 9 + lib/api/entities/user_public.rb | 1 + lib/api/environments.rb | 2 +- lib/api/files.rb | 4 +- lib/api/generic_packages.rb | 4 +- lib/api/group_variables.rb | 36 +- lib/api/groups.rb | 10 +- lib/api/helpers.rb | 22 +- lib/api/helpers/authentication.rb | 5 + lib/api/helpers/caching.rb | 137 + lib/api/helpers/common_helpers.rb | 4 + lib/api/helpers/graphql_helpers.rb | 4 +- lib/api/helpers/notes_helpers.rb | 6 +- lib/api/helpers/packages/conan/api_helpers.rb | 23 +- .../packages/dependency_proxy_helpers.rb | 2 +- lib/api/helpers/packages_helpers.rb | 3 +- lib/api/helpers/runner.rb | 9 +- lib/api/helpers/services_helpers.rb | 10 +- lib/api/helpers/variables_helpers.rb | 27 + lib/api/internal/base.rb | 61 +- lib/api/internal/kubernetes.rb | 6 +- lib/api/invitations.rb | 6 +- lib/api/issue_links.rb | 5 +- lib/api/issues.rb | 6 +- lib/api/jobs.rb | 30 +- lib/api/maven_packages.rb | 43 +- lib/api/members.rb | 8 +- lib/api/merge_request_diffs.rb | 2 +- lib/api/merge_requests.rb | 67 +- lib/api/milestone_responses.rb | 2 +- lib/api/namespaces.rb | 17 + lib/api/project_import.rb | 2 +- lib/api/projects.rb | 53 +- lib/api/repositories.rb | 15 +- lib/api/resource_access_tokens.rb | 6 +- lib/api/rubygem_packages.rb | 12 +- lib/api/search.rb | 18 +- lib/api/settings.rb | 1 + lib/api/tags.rb | 8 +- lib/api/triggers.rb | 2 +- lib/api/usage_data.rb | 17 +- lib/api/usage_data_non_sql_metrics.rb | 27 + lib/api/usage_data_queries.rb | 27 + lib/api/users.rb | 27 +- lib/api/v3/github.rb | 12 +- lib/api/variables.rb | 30 +- lib/atlassian/jira_connect/client.rb | 4 +- .../jira_connect/serializers/build_entity.rb | 10 +- lib/backup/repositories.rb | 2 +- .../filter/abstract_reference_filter.rb | 446 - lib/banzai/filter/alert_reference_filter.rb | 29 - lib/banzai/filter/autolink_filter.rb | 2 +- .../filter/commit_range_reference_filter.rb | 46 - lib/banzai/filter/commit_reference_filter.rb | 86 - lib/banzai/filter/commit_trailers_filter.rb | 2 +- lib/banzai/filter/design_reference_filter.rb | 107 - lib/banzai/filter/epic_reference_filter.rb | 22 - .../filter/external_issue_reference_filter.rb | 118 - .../filter/feature_flag_reference_filter.rb | 33 - lib/banzai/filter/gollum_tags_filter.rb | 13 +- .../filter/issuable_reference_filter.rb | 19 - lib/banzai/filter/issue_reference_filter.rb | 57 - .../filter/iteration_reference_filter.rb | 16 - lib/banzai/filter/label_reference_filter.rb | 129 - lib/banzai/filter/math_filter.rb | 2 +- .../filter/merge_request_reference_filter.rb | 97 - .../filter/milestone_reference_filter.rb | 138 - lib/banzai/filter/project_reference_filter.rb | 117 - lib/banzai/filter/reference_filter.rb | 215 - .../references/abstract_reference_filter.rb | 448 + .../references/alert_reference_filter.rb | 31 + .../commit_range_reference_filter.rb | 48 + .../references/commit_reference_filter.rb | 88 + .../references/design_reference_filter.rb | 109 + .../references/epic_reference_filter.rb | 24 + .../external_issue_reference_filter.rb | 120 + .../feature_flag_reference_filter.rb | 35 + .../references/issuable_reference_filter.rb | 21 + .../references/issue_reference_filter.rb | 59 + .../references/iteration_reference_filter.rb | 18 + .../references/label_reference_filter.rb | 132 + .../merge_request_reference_filter.rb | 99 + .../references/milestone_reference_filter.rb | 140 + .../references/project_reference_filter.rb | 119 + .../filter/references/reference_filter.rb | 217 + .../references/snippet_reference_filter.rb | 31 + .../references/user_reference_filter.rb | 182 + .../vulnerability_reference_filter.rb | 24 + lib/banzai/filter/repository_link_filter.rb | 2 +- lib/banzai/filter/snippet_reference_filter.rb | 29 - lib/banzai/filter/spaced_link_filter.rb | 2 +- lib/banzai/filter/suggestion_filter.rb | 2 +- lib/banzai/filter/syntax_highlight_filter.rb | 2 +- lib/banzai/filter/user_reference_filter.rb | 180 - .../filter/vulnerability_reference_filter.rb | 22 - .../filter/wiki_link_filter/rewriter.rb | 5 +- lib/banzai/pipeline/gfm_pipeline.rb | 26 +- lib/banzai/pipeline/label_pipeline.rb | 2 +- lib/banzai/pipeline/single_line_pipeline.rb | 18 +- lib/banzai/pipeline/wiki_pipeline.rb | 2 +- lib/bulk_imports/clients/http.rb | 8 +- .../common/extractors/rest_extractor.rb | 45 + .../user_reference_transformer.rb | 2 +- .../groups/graphql/get_labels_query.rb | 9 +- .../groups/graphql/get_members_query.rb | 9 +- .../groups/graphql/get_milestones_query.rb | 10 +- .../groups/pipelines/badges_pipeline.rb | 32 + .../groups/pipelines/entity_finisher.rb | 35 + .../groups/pipelines/labels_pipeline.rb | 12 - .../groups/pipelines/members_pipeline.rb | 12 - .../groups/pipelines/milestones_pipeline.rb | 12 - .../groups/rest/get_badges_query.rb | 22 + lib/bulk_imports/importers/group_importer.rb | 35 - lib/bulk_imports/pipeline.rb | 4 + lib/bulk_imports/pipeline/context.rb | 22 +- lib/bulk_imports/pipeline/extracted_data.rb | 7 +- lib/bulk_imports/pipeline/runner.rb | 42 +- lib/constraints/admin_constrainer.rb | 2 +- lib/container_registry/config.rb | 3 +- lib/container_registry/tag.rb | 3 +- lib/csv_builder.rb | 2 +- lib/declarative_policy/preferred_scope.rb | 3 +- lib/error_tracking/sentry_client/issue.rb | 4 +- lib/feature.rb | 4 - .../active_support_cache_store_adapter.rb | 27 + lib/file_size_validator.rb | 3 +- .../redis_hll_generator.rb | 26 + .../usage_metric_definition_generator.rb | 11 +- lib/gitlab.rb | 11 + lib/gitlab/alert_management/payload/base.rb | 2 +- .../cycle_analytics/records_fetcher.rb | 54 +- lib/gitlab/analytics/unique_visits.rb | 4 +- lib/gitlab/application_context.rb | 7 + lib/gitlab/auth/auth_finders.rb | 4 +- lib/gitlab/auth/ldap/adapter.rb | 2 +- lib/gitlab/auth/saml/origin_validator.rb | 2 +- .../backfill_design_internal_ids.rb | 4 +- ...pdated_at_after_repository_storage_move.rb | 2 +- ...y_column_using_background_migration_job.rb | 8 +- ...target_project_to_merge_request_metrics.rb | 2 +- .../fix_projects_without_project_feature.rb | 2 +- ...fix_projects_without_prometheus_service.rb | 4 +- .../fix_user_namespace_names.rb | 4 +- .../fix_user_project_route_names.rb | 2 +- .../migrate_pages_to_zip_storage.rb | 19 + ...ner_registry_enabled_to_project_feature.rb | 2 +- .../populate_has_vulnerabilities.rb | 30 +- .../populate_merge_request_assignees_table.rb | 2 +- ...culate_vulnerabilities_occurrences_uuid.rb | 2 +- .../isolated_mentioned_project_parser.rb | 25 + .../isolated_mentioned_user_parser.rb | 25 + .../gitlab/isolated_reference_extractor.rb | 2 +- .../lib/gitlab/isolated_visibility_level.rb | 60 + .../models/commit_user_mention.rb | 1 + .../models/concerns/isolated_feature_gate.rb | 20 + .../models/concerns/isolated_mentionable.rb | 4 +- .../concerns/namespace/recursive_traversal.rb | 2 +- .../models/design_management/design.rb | 3 + .../models/design_user_mention.rb | 1 + .../user_mentions/models/epic.rb | 6 +- .../user_mentions/models/epic_user_mention.rb | 1 + .../user_mentions/models/group.rb | 2 + .../user_mentions/models/merge_request.rb | 7 +- .../models/merge_request_user_mention.rb | 1 + .../user_mentions/models/namespace.rb | 15 +- .../user_mentions/models/note.rb | 4 +- .../user_mentions/models/project.rb | 48 + .../user_mentions/models/user.rb | 37 + .../wrongfully_confirmed_email_unconfirmer.rb | 4 +- lib/gitlab/batch_pop_queueing.rb | 3 +- lib/gitlab/bullet.rb | 16 + lib/gitlab/bullet/exclusions.rb | 37 + .../cache/ci/project_pipeline_status.rb | 4 +- lib/gitlab/changelog/config.rb | 24 +- lib/gitlab/chaos.rb | 6 +- lib/gitlab/ci/build/artifacts/metadata.rb | 4 +- lib/gitlab/ci/config.rb | 10 +- lib/gitlab/ci/config/entry/cache.rb | 6 +- lib/gitlab/ci/config/entry/processable.rb | 12 +- .../ci/config/entry/product/variables.rb | 3 +- lib/gitlab/ci/config/entry/variables.rb | 4 +- lib/gitlab/ci/config/external/mapper.rb | 12 + .../ci/config/normalizer/matrix_strategy.rb | 5 +- lib/gitlab/ci/features.rb | 12 +- lib/gitlab/ci/jwt.rb | 16 +- lib/gitlab/ci/pipeline/chain/command.rb | 9 +- .../ci/pipeline/chain/config/process.rb | 1 + .../pipeline/chain/evaluate_workflow_rules.rb | 22 +- lib/gitlab/ci/pipeline/chain/helpers.rb | 20 +- lib/gitlab/ci/pipeline/chain/metrics.rb | 2 +- .../ci/pipeline/chain/pipeline/process.rb | 4 +- lib/gitlab/ci/pipeline/chain/seed.rb | 20 +- .../ci/pipeline/chain/validate/external.rb | 87 +- lib/gitlab/ci/pipeline/metrics.rb | 74 +- lib/gitlab/ci/pipeline/seed/build.rb | 19 +- lib/gitlab/ci/pipeline/seed/context.rb | 18 + lib/gitlab/ci/pipeline/seed/pipeline.rb | 6 +- lib/gitlab/ci/pipeline/seed/stage.rb | 7 +- lib/gitlab/ci/queue/metrics.rb | 35 +- lib/gitlab/ci/reports/codequality_reports.rb | 12 +- .../reports/codequality_reports_comparer.rb | 5 + lib/gitlab/ci/reports/test_failure_history.rb | 18 +- lib/gitlab/ci/runner_instructions.rb | 31 +- lib/gitlab/ci/status/build/failed.rb | 4 +- .../templates/Android-Fastlane.gitlab-ci.yml | 7 +- lib/gitlab/ci/templates/Docker.gitlab-ci.yml | 42 +- .../ci/templates/Hello-World.gitlab-ci.yml | 9 + .../templates/Indeni.Cloudrail.gitlab-ci-.yml | 91 + .../Browser-Performance-Testing.gitlab-ci.yml | 37 +- .../ci/templates/Jobs/Build.gitlab-ci.yml | 4 +- .../templates/Jobs/Code-Quality.gitlab-ci.yml | 1 + .../Security/API-Fuzzing.gitlab-ci.yml | 12 +- .../Security/API-Fuzzing.latest.gitlab-ci.yml | 270 + .../Security/Container-Scanning.gitlab-ci.yml | 43 +- .../Security/DAST.latest.gitlab-ci.yml | 99 + .../ci/templates/Security/SAST.gitlab-ci.yml | 9 +- .../Verify/Browser-Performance.gitlab-ci.yml | 25 +- lib/gitlab/ci/trace.rb | 33 +- lib/gitlab/ci/variables/helpers.rb | 16 +- lib/gitlab/ci/yaml_processor/result.rb | 17 +- lib/gitlab/composer/version_index.rb | 22 +- lib/gitlab/conan_token.rb | 2 +- lib/gitlab/contributor.rb | 4 +- lib/gitlab/crypto_helper.rb | 28 +- lib/gitlab/data_builder/build.rb | 6 +- lib/gitlab/data_builder/pipeline.rb | 1 - lib/gitlab/database/as_with_materialized.rb | 36 + .../background_migration/batch_metrics.rb | 33 + .../background_migration/batched_migration.rb | 20 +- .../batched_migration_runner.rb | 88 + .../batched_migration_wrapper.rb | 73 + .../background_migration/scheduler.rb | 60 - lib/gitlab/database/batch_count.rb | 39 +- lib/gitlab/database/bulk_update.rb | 2 +- .../count/reltuples_count_strategy.rb | 6 +- .../loose_index_scan_distinct_count.rb | 102 + lib/gitlab/database/migration_helpers.rb | 176 +- .../background_migration_helpers.rb | 21 +- .../foreign_key_helpers.rb | 74 + .../table_management_helpers.rb | 32 +- lib/gitlab/database/pg_class.rb | 23 + .../postgres_hll/batch_distinct_counter.rb | 31 +- lib/gitlab/database/similarity_score.rb | 2 +- .../database/unidirectional_copy_trigger.rb | 97 + lib/gitlab/diff/highlight.rb | 106 +- lib/gitlab/diff/highlight_cache.rb | 7 +- lib/gitlab/diff/inline_diff.rb | 1 + lib/gitlab/diff/line.rb | 25 +- lib/gitlab/diff/suggestions_parser.rb | 7 +- lib/gitlab/downtime_check.rb | 73 - lib/gitlab/downtime_check/message.rb | 41 - lib/gitlab/error_tracking.rb | 10 +- .../processor/context_payload_processor.rb | 12 + .../processor/grpc_error_processor.rb | 136 +- .../processor/sidekiq_processor.rb | 71 +- lib/gitlab/exclusive_lease.rb | 4 +- lib/gitlab/experimentation.rb | 4 - lib/gitlab/external_authorization/access.rb | 3 +- lib/gitlab/external_authorization/cache.rb | 3 +- lib/gitlab/external_authorization/client.rb | 23 +- lib/gitlab/fogbugz_import/importer.rb | 6 +- lib/gitlab/git/blame.rb | 6 +- lib/gitlab/git/commit.rb | 2 +- lib/gitlab/git/diff_collection.rb | 49 +- lib/gitlab/git/merge_base.rb | 3 +- lib/gitlab/git/patches/commit_patches.rb | 5 +- lib/gitlab/git/repository.rb | 8 +- lib/gitlab/git/tag.rb | 4 + lib/gitlab/git/wiki.rb | 13 - lib/gitlab/git/wiki_file.rb | 24 +- lib/gitlab/git_access.rb | 5 + lib/gitlab/gitaly_client.rb | 2 +- lib/gitlab/gitaly_client/attributes_bag.rb | 2 +- lib/gitlab/gitaly_client/blob_service.rb | 55 +- lib/gitlab/gitaly_client/call.rb | 14 +- lib/gitlab/gitaly_client/commit_service.rb | 2 + lib/gitlab/gitaly_client/operation_service.rb | 2 +- .../gitaly_client/repository_service.rb | 5 + lib/gitlab/gitaly_client/storage_settings.rb | 2 +- lib/gitlab/gitaly_client/wiki_file.rb | 11 - lib/gitlab/gitaly_client/wiki_service.rb | 26 - lib/gitlab/golang.rb | 29 +- lib/gitlab/gon_helper.rb | 2 +- .../grape_logging/loggers/context_logger.rb | 2 +- lib/gitlab/graphql/authorize.rb | 15 - .../authorize/authorize_field_service.rb | 147 - .../graphql/authorize/authorize_resource.rb | 44 +- .../authorize/connection_filter_extension.rb | 65 + .../graphql/authorize/instrumentation.rb | 21 - lib/gitlab/graphql/deprecation.rb | 116 + lib/gitlab/graphql/docs/helper.rb | 134 +- lib/gitlab/graphql/docs/renderer.rb | 7 +- .../graphql/docs/templates/default.md.haml | 18 +- .../graphql/loaders/batch_lfs_oid_loader.rb | 3 +- .../graphql/loaders/batch_model_loader.rb | 3 +- .../graphql/loaders/full_path_model_loader.rb | 3 +- lib/gitlab/graphql/negatable_arguments.rb | 53 + .../keyset/conditions/base_condition.rb | 6 +- .../keyset/conditions/not_null_condition.rb | 4 +- .../keyset/conditions/null_condition.rb | 4 +- .../pagination/keyset/query_builder.rb | 5 +- lib/gitlab/graphql/queries.rb | 4 +- .../query_analyzers/logger_analyzer.rb | 7 +- lib/gitlab/health_checks/gitaly_check.rb | 2 +- lib/gitlab/highlight.rb | 14 +- lib/gitlab/hook_data/user_builder.rb | 53 + lib/gitlab/http_connection_adapter.rb | 14 - .../import_export/base/relation_factory.rb | 2 +- .../import_export/project/import_export.yml | 2 + lib/gitlab/import_export/uploads_manager.rb | 2 +- lib/gitlab/import_sources.rb | 2 +- lib/gitlab/instrumentation_helper.rb | 18 - lib/gitlab/issuables_count_for_state.rb | 2 +- lib/gitlab/jira/dvcs.rb | 4 +- lib/gitlab/json.rb | 33 + lib/gitlab/kas.rb | 2 +- lib/gitlab/kubernetes/deployment.rb | 2 +- lib/gitlab/language_detection.rb | 5 +- lib/gitlab/manifest_import/manifest.rb | 8 + lib/gitlab/marker_range.rb | 6 + lib/gitlab/markup_helper.rb | 2 +- lib/gitlab/metrics/background_transaction.rb | 20 +- .../dashboard/stages/grafana_formatter.rb | 8 +- .../metrics/samplers/database_sampler.rb | 4 +- .../metrics/subscribers/active_record.rb | 21 +- .../metrics/subscribers/external_http.rb | 5 +- lib/gitlab/middleware/multipart.rb | 2 +- .../rack_multipart_tempfile_factory.rb | 25 + lib/gitlab/middleware/same_site_cookies.rb | 2 +- lib/gitlab/object_hierarchy.rb | 46 +- lib/gitlab/pages.rb | 2 +- lib/gitlab/pages/migration_helper.rb | 53 + lib/gitlab/pages/settings.rb | 22 +- lib/gitlab/pages/stores/local_store.rb | 15 + lib/gitlab/pages_transfer.rb | 4 +- lib/gitlab/pagination/keyset/order.rb | 8 +- .../pagination/offset_header_builder.rb | 21 +- lib/gitlab/performance_bar/stats.rb | 15 +- lib/gitlab/phabricator_import.rb | 2 +- .../phabricator_import/issues/importer.rb | 3 +- .../issues/task_importer.rb | 3 +- .../phabricator_import/project_creator.rb | 13 +- lib/gitlab/phabricator_import/user_finder.rb | 3 +- lib/gitlab/project_template.rb | 6 +- lib/gitlab/prometheus/adapter.rb | 4 + .../queries/matched_metric_query.rb | 2 +- lib/gitlab/prometheus_client.rb | 2 +- lib/gitlab/push_options.rb | 6 +- lib/gitlab/query_limiting.rb | 22 +- lib/gitlab/query_limiting/transaction.rb | 9 +- .../quick_actions/command_definition.rb | 11 +- .../issue_and_merge_request_actions.rb | 2 +- lib/gitlab/rack_attack/request.rb | 6 +- lib/gitlab/regex.rb | 6 +- .../relative_positioning/closed_range.rb | 3 +- lib/gitlab/relative_positioning/gap.rb | 3 +- lib/gitlab/repository_cache_adapter.rb | 9 +- lib/gitlab/repository_hash_cache.rb | 2 +- lib/gitlab/repository_set_cache.rb | 30 +- lib/gitlab/search_context.rb | 7 +- lib/gitlab/set_cache.rb | 13 + lib/gitlab/setup_helper.rb | 12 +- lib/gitlab/sidekiq_cluster/cli.rb | 14 +- lib/gitlab/sidekiq_config.rb | 17 +- lib/gitlab/sidekiq_config/cli_methods.rb | 90 +- lib/gitlab/sidekiq_config/worker_matcher.rb | 86 + .../sidekiq_logging/structured_logger.rb | 4 +- lib/gitlab/sidekiq_middleware.rb | 2 + .../sidekiq_middleware/admin_mode/client.rb | 3 +- .../sidekiq_middleware/admin_mode/server.rb | 3 +- .../instrumentation_logger.rb | 23 +- .../sidekiq_middleware/metrics_helper.rb | 15 +- .../sidekiq_middleware/server_metrics.rb | 47 +- lib/gitlab/sidekiq_queue.rb | 2 +- lib/gitlab/slash_commands/base_command.rb | 4 +- .../slash_commands/presenters/issue_new.rb | 20 +- lib/gitlab/slash_commands/run.rb | 2 +- lib/gitlab/slug/environment.rb | 17 +- lib/gitlab/sql/cte.rb | 11 +- lib/gitlab/sql/recursive_cte.rb | 6 +- lib/gitlab/sql/set_operator.rb | 12 +- lib/gitlab/sql/union.rb | 4 +- .../static_site_editor/config/file_config.rb | 2 +- lib/gitlab/subscription_portal.rb | 7 +- lib/gitlab/template/base_template.rb | 4 +- lib/gitlab/tracking.rb | 25 +- lib/gitlab/tracking/destinations/snowplow.rb | 7 - lib/gitlab/tracking/standard_context.rb | 13 +- lib/gitlab/untrusted_regexp.rb | 4 + lib/gitlab/updated_notes_paginator.rb | 4 +- lib/gitlab/usage/docs/helper.rb | 4 + .../usage/docs/templates/default.md.haml | 3 + lib/gitlab/usage/metric_definition.rb | 32 +- .../usage/metrics/aggregates/aggregate.rb | 2 +- .../metrics/names_suggestions/generator.rb | 157 +- .../relation_parsers/joins.rb | 74 + lib/gitlab/usage_data.rb | 92 +- .../aggregated_metrics/code_review.yml | 108 - .../aggregated_metrics/common.yml | 72 - .../usage_data_counters/base_counter.rb | 4 +- .../ci_template_unique_counter.rb | 4 +- .../usage_data_counters/hll_redis_counter.rb | 5 +- .../issue_activity_unique_counter.rb | 112 +- .../known_events/ci_templates.yml | 15 - .../known_events/common.yml | 42 +- .../known_events/epic_events.yml | 142 + .../usage_data_counters/note_counter.rb | 6 +- .../quick_action_activity_unique_counter.rb | 2 +- lib/gitlab/usage_data_non_sql_metrics.rb | 35 + lib/gitlab/usage_data_queries.rb | 14 +- lib/gitlab/utils.rb | 2 + lib/gitlab/utils/usage_data.rb | 15 + lib/gitlab/uuid.rb | 4 +- lib/gitlab/web_ide/config/entry/terminal.rb | 18 +- lib/gitlab/word_diff/chunk_collection.rb | 21 + lib/gitlab/word_diff/parser.rb | 2 +- lib/learn_gitlab.rb | 6 +- lib/peek/views/active_record.rb | 34 +- lib/rouge/formatters/html_gitlab.rb | 5 +- .../has_spam_action_response_fields.rb | 9 - lib/support/nginx/gitlab | 4 +- lib/support/nginx/gitlab-ssl | 4 +- lib/system_check/app/git_version_check.rb | 2 +- lib/system_check/app/redis_version_check.rb | 4 +- lib/tasks/brakeman.rake | 13 - lib/tasks/cache.rake | 2 +- lib/tasks/db_obsolete_ignored_columns.rake | 2 +- lib/tasks/downtime_check.rake | 14 - lib/tasks/gitlab/db.rake | 19 +- lib/tasks/gitlab/docs/redirect.rake | 57 + lib/tasks/gitlab/gitaly.rake | 31 +- lib/tasks/gitlab/graphql.rake | 4 +- lib/tasks/gitlab/pages.rake | 40 +- lib/tasks/gitlab/test.rake | 17 - lib/tasks/spec.rake | 20 +- lib/tasks/test.rake | 13 +- locale/am_ET/gitlab.po | 1837 +- locale/ar_SA/gitlab.po | 1921 +- locale/as_IN/gitlab.po | 1837 +- locale/az_AZ/gitlab.po | 1837 +- locale/ba_RU/gitlab.po | 1816 +- locale/bg/gitlab.po | 1837 +- locale/bn_BD/gitlab.po | 1837 +- locale/bn_IN/gitlab.po | 1837 +- locale/br_FR/gitlab.po | 1900 +- locale/bs_BA/gitlab.po | 1860 +- locale/ca_ES/gitlab.po | 1837 +- locale/cs_CZ/gitlab.po | 1879 +- locale/cy_GB/gitlab.po | 1921 +- locale/da_DK/gitlab.po | 1837 +- locale/de/gitlab.po | 1873 +- locale/el_GR/gitlab.po | 1837 +- locale/eo/gitlab.po | 1837 +- locale/es/gitlab.po | 1925 +- locale/et_EE/gitlab.po | 1837 +- locale/fa_IR/gitlab.po | 1837 +- locale/fi_FI/gitlab.po | 1837 +- locale/fil_PH/gitlab.po | 1837 +- locale/fr/gitlab.po | 1853 +- locale/gitlab.pot | 2748 +- locale/gl_ES/gitlab.po | 1837 +- locale/he_IL/gitlab.po | 1879 +- locale/hi_IN/gitlab.po | 1837 +- locale/hr_HR/gitlab.po | 1858 +- locale/hu_HU/gitlab.po | 1837 +- locale/hy_AM/gitlab.po | 1837 +- locale/id_ID/gitlab.po | 1816 +- locale/ig_NG/gitlab.po | 1816 +- locale/is_IS/gitlab.po | 1837 +- locale/it/gitlab.po | 1837 +- locale/ja/gitlab.po | 1932 +- locale/ka_GE/gitlab.po | 1837 +- locale/kab/gitlab.po | 1837 +- locale/ko/gitlab.po | 1834 +- locale/ku_TR/gitlab.po | 1837 +- locale/ky_KG/gitlab.po | 1837 +- locale/lt_LT/gitlab.po | 1879 +- locale/mk_MK/gitlab.po | 1837 +- locale/mn_MN/gitlab.po | 1837 +- locale/nb_NO/gitlab.po | 1901 +- locale/nl_NL/gitlab.po | 1837 +- locale/pa_IN/gitlab.po | 1837 +- locale/pl_PL/gitlab.po | 1879 +- locale/pt_BR/gitlab.po | 1891 +- locale/pt_PT/gitlab.po | 1845 +- locale/ro_RO/gitlab.po | 1858 +- locale/ru/gitlab.po | 2007 +- locale/si_LK/gitlab.po | 1837 +- locale/sk_SK/gitlab.po | 1879 +- locale/sl_SI/gitlab.po | 1879 +- locale/sq_AL/gitlab.po | 1837 +- locale/sr_CS/gitlab.po | 1858 +- locale/sr_SP/gitlab.po | 1858 +- locale/sv_SE/gitlab.po | 1837 +- locale/sw_KE/gitlab.po | 1837 +- locale/ta_IN/gitlab.po | 37241 ++++++++++++++++ locale/tr_TR/gitlab.po | 1985 +- locale/uk/gitlab.po | 1979 +- locale/ur_PK/gitlab.po | 1837 +- locale/uz_UZ/gitlab.po | 1837 +- locale/vi_VN/gitlab.po | 1816 +- locale/zh_CN/gitlab.po | 1990 +- locale/zh_HK/gitlab.po | 1818 +- locale/zh_TW/gitlab.po | 1816 +- package.json | 37 +- public/-/emojis/2/100.png | Bin 959 -> 0 bytes public/-/emojis/2/1234.png | Bin 788 -> 0 bytes public/-/emojis/2/1f3cf.png | Bin 468 -> 0 bytes public/-/emojis/2/1f468-1f469-1f466.png | Bin 1230 -> 0 bytes public/-/emojis/2/1f469-2764-1f468.png | Bin 990 -> 0 bytes public/-/emojis/2/1f5fe.png | Bin 507 -> 0 bytes public/-/emojis/2/1f983.png | Bin 1343 -> 0 bytes public/-/emojis/2/26f9-1f3fb.png | Bin 1116 -> 0 bytes public/-/emojis/2/26f9-1f3fc.png | Bin 1056 -> 0 bytes public/-/emojis/2/26f9-1f3fd.png | Bin 996 -> 0 bytes public/-/emojis/2/26f9-1f3fe.png | Bin 1040 -> 0 bytes public/-/emojis/2/26f9-1f3ff.png | Bin 1013 -> 0 bytes public/-/emojis/2/8ball.png | Bin 819 -> 0 bytes public/-/emojis/2/a.png | Bin 627 -> 0 bytes public/-/emojis/2/ab.png | Bin 622 -> 0 bytes public/-/emojis/2/abacus.png | Bin 1091 -> 0 bytes public/-/emojis/2/abc.png | Bin 593 -> 0 bytes public/-/emojis/2/abcd.png | Bin 737 -> 0 bytes public/-/emojis/2/accept.png | Bin 659 -> 0 bytes public/-/emojis/2/adult.png | Bin 945 -> 0 bytes public/-/emojis/2/adult_tone1.png | Bin 900 -> 0 bytes public/-/emojis/2/adult_tone2.png | Bin 895 -> 0 bytes public/-/emojis/2/adult_tone3.png | Bin 857 -> 0 bytes public/-/emojis/2/adult_tone4.png | Bin 854 -> 0 bytes public/-/emojis/2/adult_tone5.png | Bin 751 -> 0 bytes public/-/emojis/2/aerial_tramway.png | Bin 834 -> 0 bytes public/-/emojis/2/airplane.png | Bin 885 -> 0 bytes public/-/emojis/2/airplane_arriving.png | Bin 558 -> 0 bytes public/-/emojis/2/airplane_departure.png | Bin 610 -> 0 bytes public/-/emojis/2/airplane_small.png | Bin 719 -> 0 bytes public/-/emojis/2/alarm_clock.png | Bin 1122 -> 0 bytes public/-/emojis/2/alembic.png | Bin 740 -> 0 bytes public/-/emojis/2/alien.png | Bin 767 -> 0 bytes public/-/emojis/2/ambulance.png | Bin 748 -> 0 bytes public/-/emojis/2/amphora.png | Bin 875 -> 0 bytes public/-/emojis/2/anchor.png | Bin 742 -> 0 bytes public/-/emojis/2/angel.png | Bin 1031 -> 0 bytes public/-/emojis/2/angel_tone1.png | Bin 992 -> 0 bytes public/-/emojis/2/angel_tone2.png | Bin 1012 -> 0 bytes public/-/emojis/2/angel_tone3.png | Bin 973 -> 0 bytes public/-/emojis/2/angel_tone4.png | Bin 929 -> 0 bytes public/-/emojis/2/angel_tone5.png | Bin 1029 -> 0 bytes public/-/emojis/2/anger.png | Bin 636 -> 0 bytes public/-/emojis/2/anger_right.png | Bin 696 -> 0 bytes public/-/emojis/2/angry.png | Bin 639 -> 0 bytes public/-/emojis/2/anguished.png | Bin 793 -> 0 bytes public/-/emojis/2/ant.png | Bin 777 -> 0 bytes public/-/emojis/2/apple.png | Bin 807 -> 0 bytes public/-/emojis/2/aquarius.png | Bin 598 -> 0 bytes public/-/emojis/2/aries.png | Bin 671 -> 0 bytes public/-/emojis/2/arrow_backward.png | Bin 599 -> 0 bytes public/-/emojis/2/arrow_double_down.png | Bin 654 -> 0 bytes public/-/emojis/2/arrow_double_up.png | Bin 639 -> 0 bytes public/-/emojis/2/arrow_down.png | Bin 550 -> 0 bytes public/-/emojis/2/arrow_down_small.png | Bin 551 -> 0 bytes public/-/emojis/2/arrow_forward.png | Bin 560 -> 0 bytes public/-/emojis/2/arrow_heading_down.png | Bin 726 -> 0 bytes public/-/emojis/2/arrow_heading_up.png | Bin 619 -> 0 bytes public/-/emojis/2/arrow_left.png | Bin 584 -> 0 bytes public/-/emojis/2/arrow_lower_left.png | Bin 538 -> 0 bytes public/-/emojis/2/arrow_lower_right.png | Bin 601 -> 0 bytes public/-/emojis/2/arrow_right.png | Bin 586 -> 0 bytes public/-/emojis/2/arrow_right_hook.png | Bin 676 -> 0 bytes public/-/emojis/2/arrow_up.png | Bin 570 -> 0 bytes public/-/emojis/2/arrow_up_down.png | Bin 589 -> 0 bytes public/-/emojis/2/arrow_up_small.png | Bin 575 -> 0 bytes public/-/emojis/2/arrow_upper_left.png | Bin 541 -> 0 bytes public/-/emojis/2/arrow_upper_right.png | Bin 637 -> 0 bytes public/-/emojis/2/arrows_clockwise.png | Bin 662 -> 0 bytes public/-/emojis/2/arrows_counterclockwise.png | Bin 678 -> 0 bytes public/-/emojis/2/art.png | Bin 1250 -> 0 bytes public/-/emojis/2/articulated_lorry.png | Bin 650 -> 0 bytes public/-/emojis/2/asterisk.png | Bin 692 -> 0 bytes public/-/emojis/2/asterisk_symbol.png | Bin 659 -> 0 bytes public/-/emojis/2/astonished.png | Bin 906 -> 0 bytes public/-/emojis/2/athletic_shoe.png | Bin 765 -> 0 bytes public/-/emojis/2/atm.png | Bin 518 -> 0 bytes public/-/emojis/2/atom.png | Bin 850 -> 0 bytes public/-/emojis/2/avocado.png | Bin 930 -> 0 bytes public/-/emojis/2/b.png | Bin 745 -> 0 bytes public/-/emojis/2/baby.png | Bin 877 -> 0 bytes public/-/emojis/2/baby_bottle.png | Bin 733 -> 0 bytes public/-/emojis/2/baby_chick.png | Bin 813 -> 0 bytes public/-/emojis/2/baby_symbol.png | Bin 670 -> 0 bytes public/-/emojis/2/baby_tone1.png | Bin 894 -> 0 bytes public/-/emojis/2/baby_tone2.png | Bin 850 -> 0 bytes public/-/emojis/2/baby_tone3.png | Bin 837 -> 0 bytes public/-/emojis/2/baby_tone4.png | Bin 810 -> 0 bytes public/-/emojis/2/baby_tone5.png | Bin 818 -> 0 bytes public/-/emojis/2/back.png | Bin 598 -> 0 bytes public/-/emojis/2/bacon.png | Bin 928 -> 0 bytes public/-/emojis/2/badger.png | Bin 662 -> 0 bytes public/-/emojis/2/badminton.png | Bin 911 -> 0 bytes public/-/emojis/2/bagel.png | Bin 978 -> 0 bytes public/-/emojis/2/baggage_claim.png | Bin 590 -> 0 bytes public/-/emojis/2/balance_scale.png | Bin 774 -> 0 bytes public/-/emojis/2/bald.png | Bin 437 -> 0 bytes public/-/emojis/2/balloon.png | Bin 682 -> 0 bytes public/-/emojis/2/ballot_box.png | Bin 837 -> 0 bytes public/-/emojis/2/ballot_box_with_check.png | Bin 682 -> 0 bytes public/-/emojis/2/bamboo.png | Bin 796 -> 0 bytes public/-/emojis/2/banana.png | Bin 694 -> 0 bytes public/-/emojis/2/bangbang.png | Bin 416 -> 0 bytes public/-/emojis/2/bank.png | Bin 666 -> 0 bytes public/-/emojis/2/bar_chart.png | Bin 515 -> 0 bytes public/-/emojis/2/barber.png | Bin 600 -> 0 bytes public/-/emojis/2/baseball.png | Bin 1050 -> 0 bytes public/-/emojis/2/basket.png | Bin 1014 -> 0 bytes public/-/emojis/2/basketball.png | Bin 1169 -> 0 bytes public/-/emojis/2/basketball_man.png | Bin 1047 -> 0 bytes public/-/emojis/2/bat.png | Bin 680 -> 0 bytes public/-/emojis/2/bath.png | Bin 811 -> 0 bytes public/-/emojis/2/bath_tone1.png | Bin 799 -> 0 bytes public/-/emojis/2/bath_tone2.png | Bin 770 -> 0 bytes public/-/emojis/2/bath_tone3.png | Bin 802 -> 0 bytes public/-/emojis/2/bath_tone4.png | Bin 811 -> 0 bytes public/-/emojis/2/bath_tone5.png | Bin 789 -> 0 bytes public/-/emojis/2/bathtub.png | Bin 743 -> 0 bytes public/-/emojis/2/battery.png | Bin 598 -> 0 bytes public/-/emojis/2/beach.png | Bin 901 -> 0 bytes public/-/emojis/2/beach_umbrella.png | Bin 973 -> 0 bytes public/-/emojis/2/bear.png | Bin 849 -> 0 bytes public/-/emojis/2/bearded_person.png | Bin 918 -> 0 bytes public/-/emojis/2/bearded_person_tone1.png | Bin 916 -> 0 bytes public/-/emojis/2/bearded_person_tone2.png | Bin 840 -> 0 bytes public/-/emojis/2/bearded_person_tone3.png | Bin 832 -> 0 bytes public/-/emojis/2/bearded_person_tone4.png | Bin 836 -> 0 bytes public/-/emojis/2/bearded_person_tone5.png | Bin 826 -> 0 bytes public/-/emojis/2/bed.png | Bin 427 -> 0 bytes public/-/emojis/2/bee.png | Bin 1103 -> 0 bytes public/-/emojis/2/beer.png | Bin 796 -> 0 bytes public/-/emojis/2/beers.png | Bin 1108 -> 0 bytes public/-/emojis/2/beetle.png | Bin 968 -> 0 bytes public/-/emojis/2/beginner.png | Bin 480 -> 0 bytes public/-/emojis/2/bell.png | Bin 775 -> 0 bytes public/-/emojis/2/bellhop.png | Bin 694 -> 0 bytes public/-/emojis/2/bento.png | Bin 940 -> 0 bytes public/-/emojis/2/bicyclist.png | Bin 1246 -> 0 bytes public/-/emojis/2/bicyclist_tone1.png | Bin 1265 -> 0 bytes public/-/emojis/2/bicyclist_tone2.png | Bin 1244 -> 0 bytes public/-/emojis/2/bicyclist_tone3.png | Bin 1184 -> 0 bytes public/-/emojis/2/bicyclist_tone4.png | Bin 1198 -> 0 bytes public/-/emojis/2/bicyclist_tone5.png | Bin 1176 -> 0 bytes public/-/emojis/2/bike.png | Bin 952 -> 0 bytes public/-/emojis/2/bikini.png | Bin 844 -> 0 bytes public/-/emojis/2/billed_cap.png | Bin 673 -> 0 bytes public/-/emojis/2/biohazard.png | Bin 1020 -> 0 bytes public/-/emojis/2/bird.png | Bin 832 -> 0 bytes public/-/emojis/2/birthday.png | Bin 898 -> 0 bytes public/-/emojis/2/black_circle.png | Bin 662 -> 0 bytes public/-/emojis/2/black_heart.png | Bin 546 -> 0 bytes public/-/emojis/2/black_joker.png | Bin 927 -> 0 bytes public/-/emojis/2/black_large_square.png | Bin 391 -> 0 bytes .../-/emojis/2/black_medium_small_square.png | Bin 274 -> 0 bytes public/-/emojis/2/black_medium_square.png | Bin 312 -> 0 bytes public/-/emojis/2/black_nib.png | Bin 609 -> 0 bytes public/-/emojis/2/black_small_square.png | Bin 246 -> 0 bytes public/-/emojis/2/black_square_button.png | Bin 452 -> 0 bytes public/-/emojis/2/blond-haired_man.png | Bin 823 -> 0 bytes public/-/emojis/2/blond-haired_man_tone1.png | Bin 820 -> 0 bytes public/-/emojis/2/blond-haired_man_tone2.png | Bin 772 -> 0 bytes public/-/emojis/2/blond-haired_man_tone3.png | Bin 831 -> 0 bytes public/-/emojis/2/blond-haired_man_tone4.png | Bin 788 -> 0 bytes public/-/emojis/2/blond-haired_man_tone5.png | Bin 819 -> 0 bytes public/-/emojis/2/blond-haired_woman.png | Bin 969 -> 0 bytes .../-/emojis/2/blond-haired_woman_tone1.png | Bin 932 -> 0 bytes .../-/emojis/2/blond-haired_woman_tone2.png | Bin 915 -> 0 bytes .../-/emojis/2/blond-haired_woman_tone3.png | Bin 927 -> 0 bytes .../-/emojis/2/blond-haired_woman_tone4.png | Bin 978 -> 0 bytes .../-/emojis/2/blond-haired_woman_tone5.png | Bin 958 -> 0 bytes public/-/emojis/2/blossom.png | Bin 781 -> 0 bytes public/-/emojis/2/blowfish.png | Bin 930 -> 0 bytes public/-/emojis/2/blue_book.png | Bin 315 -> 0 bytes public/-/emojis/2/blue_car.png | Bin 887 -> 0 bytes public/-/emojis/2/blue_circle.png | Bin 531 -> 0 bytes public/-/emojis/2/blue_heart.png | Bin 549 -> 0 bytes public/-/emojis/2/blush.png | Bin 890 -> 0 bytes public/-/emojis/2/boar.png | Bin 1049 -> 0 bytes public/-/emojis/2/boat.png | Bin 861 -> 0 bytes public/-/emojis/2/bomb.png | Bin 826 -> 0 bytes public/-/emojis/2/bone.png | Bin 343 -> 0 bytes public/-/emojis/2/book.png | Bin 573 -> 0 bytes public/-/emojis/2/bookmark.png | Bin 600 -> 0 bytes public/-/emojis/2/bookmark_tabs.png | Bin 632 -> 0 bytes public/-/emojis/2/books.png | Bin 1191 -> 0 bytes public/-/emojis/2/boom.png | Bin 947 -> 0 bytes public/-/emojis/2/boot.png | Bin 655 -> 0 bytes public/-/emojis/2/bouquet.png | Bin 1017 -> 0 bytes public/-/emojis/2/bow.png | Bin 934 -> 0 bytes public/-/emojis/2/bow_and_arrow.png | Bin 845 -> 0 bytes public/-/emojis/2/bow_tone1.png | Bin 944 -> 0 bytes public/-/emojis/2/bow_tone2.png | Bin 894 -> 0 bytes public/-/emojis/2/bow_tone3.png | Bin 918 -> 0 bytes public/-/emojis/2/bow_tone4.png | Bin 778 -> 0 bytes public/-/emojis/2/bow_tone5.png | Bin 853 -> 0 bytes public/-/emojis/2/bowl_with_spoon.png | Bin 704 -> 0 bytes public/-/emojis/2/bowling.png | Bin 906 -> 0 bytes public/-/emojis/2/boxing_glove.png | Bin 840 -> 0 bytes public/-/emojis/2/boy.png | Bin 804 -> 0 bytes public/-/emojis/2/boy_tone1.png | Bin 830 -> 0 bytes public/-/emojis/2/boy_tone2.png | Bin 780 -> 0 bytes public/-/emojis/2/boy_tone3.png | Bin 840 -> 0 bytes public/-/emojis/2/boy_tone4.png | Bin 738 -> 0 bytes public/-/emojis/2/boy_tone5.png | Bin 778 -> 0 bytes public/-/emojis/2/brain.png | Bin 708 -> 0 bytes public/-/emojis/2/bread.png | Bin 514 -> 0 bytes public/-/emojis/2/breast_feeding.png | Bin 840 -> 0 bytes public/-/emojis/2/breast_feeding_tone1.png | Bin 857 -> 0 bytes public/-/emojis/2/breast_feeding_tone2.png | Bin 851 -> 0 bytes public/-/emojis/2/breast_feeding_tone3.png | Bin 877 -> 0 bytes public/-/emojis/2/breast_feeding_tone4.png | Bin 814 -> 0 bytes public/-/emojis/2/breast_feeding_tone5.png | Bin 751 -> 0 bytes public/-/emojis/2/bricks.png | Bin 530 -> 0 bytes public/-/emojis/2/bride_with_veil.png | Bin 1042 -> 0 bytes public/-/emojis/2/bride_with_veil_tone1.png | Bin 1040 -> 0 bytes public/-/emojis/2/bride_with_veil_tone2.png | Bin 976 -> 0 bytes public/-/emojis/2/bride_with_veil_tone3.png | Bin 995 -> 0 bytes public/-/emojis/2/bride_with_veil_tone4.png | Bin 997 -> 0 bytes public/-/emojis/2/bride_with_veil_tone5.png | Bin 1025 -> 0 bytes public/-/emojis/2/bridge_at_night.png | Bin 921 -> 0 bytes public/-/emojis/2/briefcase.png | Bin 420 -> 0 bytes public/-/emojis/2/broccoli.png | Bin 816 -> 0 bytes public/-/emojis/2/broken_heart.png | Bin 789 -> 0 bytes public/-/emojis/2/broom.png | Bin 435 -> 0 bytes public/-/emojis/2/bug.png | Bin 1018 -> 0 bytes public/-/emojis/2/bulb.png | Bin 809 -> 0 bytes public/-/emojis/2/bullettrain_front.png | Bin 685 -> 0 bytes public/-/emojis/2/bullettrain_side.png | Bin 749 -> 0 bytes public/-/emojis/2/burrito.png | Bin 796 -> 0 bytes public/-/emojis/2/bus.png | Bin 636 -> 0 bytes public/-/emojis/2/busstop.png | Bin 343 -> 0 bytes public/-/emojis/2/bust_in_silhouette.png | Bin 525 -> 0 bytes public/-/emojis/2/busts_in_silhouette.png | Bin 518 -> 0 bytes public/-/emojis/2/butterfly.png | Bin 1142 -> 0 bytes public/-/emojis/2/cactus.png | Bin 568 -> 0 bytes public/-/emojis/2/cake.png | Bin 949 -> 0 bytes public/-/emojis/2/calendar.png | Bin 593 -> 0 bytes public/-/emojis/2/calendar_spiral.png | Bin 632 -> 0 bytes public/-/emojis/2/call_me.png | Bin 526 -> 0 bytes public/-/emojis/2/call_me_tone1.png | Bin 567 -> 0 bytes public/-/emojis/2/call_me_tone2.png | Bin 529 -> 0 bytes public/-/emojis/2/call_me_tone3.png | Bin 486 -> 0 bytes public/-/emojis/2/call_me_tone4.png | Bin 527 -> 0 bytes public/-/emojis/2/call_me_tone5.png | Bin 524 -> 0 bytes public/-/emojis/2/calling.png | Bin 1019 -> 0 bytes public/-/emojis/2/camel.png | Bin 691 -> 0 bytes public/-/emojis/2/camera.png | Bin 630 -> 0 bytes public/-/emojis/2/camera_with_flash.png | Bin 931 -> 0 bytes public/-/emojis/2/camping.png | Bin 1135 -> 0 bytes public/-/emojis/2/cancer.png | Bin 699 -> 0 bytes public/-/emojis/2/candle.png | Bin 535 -> 0 bytes public/-/emojis/2/candy.png | Bin 825 -> 0 bytes public/-/emojis/2/canned_food.png | Bin 801 -> 0 bytes public/-/emojis/2/canoe.png | Bin 548 -> 0 bytes public/-/emojis/2/capital_abcd.png | Bin 738 -> 0 bytes public/-/emojis/2/capricorn.png | Bin 682 -> 0 bytes public/-/emojis/2/card_box.png | Bin 630 -> 0 bytes public/-/emojis/2/card_index.png | Bin 754 -> 0 bytes public/-/emojis/2/carousel_horse.png | Bin 1281 -> 0 bytes public/-/emojis/2/carrot.png | Bin 697 -> 0 bytes public/-/emojis/2/cartwheel.png | Bin 790 -> 0 bytes public/-/emojis/2/cartwheel_tone1.png | Bin 743 -> 0 bytes public/-/emojis/2/cartwheel_tone2.png | Bin 708 -> 0 bytes public/-/emojis/2/cartwheel_tone3.png | Bin 720 -> 0 bytes public/-/emojis/2/cartwheel_tone4.png | Bin 653 -> 0 bytes public/-/emojis/2/cartwheel_tone5.png | Bin 686 -> 0 bytes public/-/emojis/2/cat.png | Bin 855 -> 0 bytes public/-/emojis/2/cat2.png | Bin 850 -> 0 bytes public/-/emojis/2/cd.png | Bin 881 -> 0 bytes public/-/emojis/2/chains.png | Bin 847 -> 0 bytes public/-/emojis/2/champagne.png | Bin 1000 -> 0 bytes public/-/emojis/2/champagne_glass.png | Bin 821 -> 0 bytes public/-/emojis/2/chart.png | Bin 615 -> 0 bytes .../-/emojis/2/chart_with_downwards_trend.png | Bin 584 -> 0 bytes .../-/emojis/2/chart_with_upwards_trend.png | Bin 558 -> 0 bytes public/-/emojis/2/checkered_flag.png | Bin 397 -> 0 bytes public/-/emojis/2/cheese.png | Bin 605 -> 0 bytes public/-/emojis/2/cherries.png | Bin 974 -> 0 bytes public/-/emojis/2/cherry_blossom.png | Bin 1168 -> 0 bytes public/-/emojis/2/chess_pawn.png | Bin 448 -> 0 bytes public/-/emojis/2/chestnut.png | Bin 1015 -> 0 bytes public/-/emojis/2/chicken.png | Bin 926 -> 0 bytes public/-/emojis/2/child.png | Bin 833 -> 0 bytes public/-/emojis/2/child_tone1.png | Bin 865 -> 0 bytes public/-/emojis/2/child_tone2.png | Bin 870 -> 0 bytes public/-/emojis/2/child_tone3.png | Bin 871 -> 0 bytes public/-/emojis/2/child_tone4.png | Bin 777 -> 0 bytes public/-/emojis/2/child_tone5.png | Bin 805 -> 0 bytes public/-/emojis/2/children_crossing.png | Bin 690 -> 0 bytes public/-/emojis/2/chipmunk.png | Bin 1112 -> 0 bytes public/-/emojis/2/chocolate_bar.png | Bin 863 -> 0 bytes public/-/emojis/2/chopsticks.png | Bin 596 -> 0 bytes public/-/emojis/2/christmas_tree.png | Bin 1246 -> 0 bytes public/-/emojis/2/church.png | Bin 656 -> 0 bytes public/-/emojis/2/cinema.png | Bin 519 -> 0 bytes public/-/emojis/2/circus_tent.png | Bin 892 -> 0 bytes public/-/emojis/2/city_dusk.png | Bin 831 -> 0 bytes public/-/emojis/2/city_sunset.png | Bin 921 -> 0 bytes public/-/emojis/2/cityscape.png | Bin 785 -> 0 bytes public/-/emojis/2/cl.png | Bin 558 -> 0 bytes public/-/emojis/2/clap.png | Bin 859 -> 0 bytes public/-/emojis/2/clap_tone1.png | Bin 762 -> 0 bytes public/-/emojis/2/clap_tone2.png | Bin 814 -> 0 bytes public/-/emojis/2/clap_tone3.png | Bin 775 -> 0 bytes public/-/emojis/2/clap_tone4.png | Bin 796 -> 0 bytes public/-/emojis/2/clap_tone5.png | Bin 692 -> 0 bytes public/-/emojis/2/clapper.png | Bin 657 -> 0 bytes public/-/emojis/2/classical_building.png | Bin 726 -> 0 bytes public/-/emojis/2/clipboard.png | Bin 469 -> 0 bytes public/-/emojis/2/clock.png | Bin 620 -> 0 bytes public/-/emojis/2/clock1.png | Bin 900 -> 0 bytes public/-/emojis/2/clock10.png | Bin 865 -> 0 bytes public/-/emojis/2/clock1030.png | Bin 928 -> 0 bytes public/-/emojis/2/clock11.png | Bin 936 -> 0 bytes public/-/emojis/2/clock1130.png | Bin 848 -> 0 bytes public/-/emojis/2/clock12.png | Bin 915 -> 0 bytes public/-/emojis/2/clock1230.png | Bin 888 -> 0 bytes public/-/emojis/2/clock130.png | Bin 893 -> 0 bytes public/-/emojis/2/clock2.png | Bin 909 -> 0 bytes public/-/emojis/2/clock230.png | Bin 963 -> 0 bytes public/-/emojis/2/clock3.png | Bin 849 -> 0 bytes public/-/emojis/2/clock330.png | Bin 851 -> 0 bytes public/-/emojis/2/clock4.png | Bin 953 -> 0 bytes public/-/emojis/2/clock430.png | Bin 976 -> 0 bytes public/-/emojis/2/clock5.png | Bin 938 -> 0 bytes public/-/emojis/2/clock530.png | Bin 853 -> 0 bytes public/-/emojis/2/clock6.png | Bin 916 -> 0 bytes public/-/emojis/2/clock630.png | Bin 860 -> 0 bytes public/-/emojis/2/clock7.png | Bin 894 -> 0 bytes public/-/emojis/2/clock730.png | Bin 900 -> 0 bytes public/-/emojis/2/clock8.png | Bin 934 -> 0 bytes public/-/emojis/2/clock830.png | Bin 879 -> 0 bytes public/-/emojis/2/clock9.png | Bin 895 -> 0 bytes public/-/emojis/2/clock930.png | Bin 848 -> 0 bytes public/-/emojis/2/closed_book.png | Bin 548 -> 0 bytes public/-/emojis/2/closed_lock_with_key.png | Bin 704 -> 0 bytes public/-/emojis/2/closed_umbrella.png | Bin 580 -> 0 bytes public/-/emojis/2/cloud.png | Bin 538 -> 0 bytes public/-/emojis/2/cloud_lightning.png | Bin 688 -> 0 bytes public/-/emojis/2/cloud_rain.png | Bin 791 -> 0 bytes public/-/emojis/2/cloud_snow.png | Bin 713 -> 0 bytes public/-/emojis/2/cloud_tornado.png | Bin 957 -> 0 bytes public/-/emojis/2/clown.png | Bin 1191 -> 0 bytes public/-/emojis/2/clubs.png | Bin 566 -> 0 bytes public/-/emojis/2/coat.png | Bin 803 -> 0 bytes public/-/emojis/2/cocktail.png | Bin 706 -> 0 bytes public/-/emojis/2/coconut.png | Bin 1132 -> 0 bytes public/-/emojis/2/coffee.png | Bin 827 -> 0 bytes public/-/emojis/2/coffin.png | Bin 922 -> 0 bytes public/-/emojis/2/cold_face.png | Bin 1053 -> 0 bytes public/-/emojis/2/cold_sweat.png | Bin 932 -> 0 bytes public/-/emojis/2/comet.png | Bin 994 -> 0 bytes public/-/emojis/2/compass.png | Bin 1102 -> 0 bytes public/-/emojis/2/compression.png | Bin 643 -> 0 bytes public/-/emojis/2/computer.png | Bin 594 -> 0 bytes public/-/emojis/2/confetti_ball.png | Bin 1691 -> 0 bytes public/-/emojis/2/confounded.png | Bin 640 -> 0 bytes public/-/emojis/2/confused.png | Bin 699 -> 0 bytes public/-/emojis/2/congratulations.png | Bin 840 -> 0 bytes public/-/emojis/2/construction.png | Bin 605 -> 0 bytes public/-/emojis/2/construction_site.png | Bin 620 -> 0 bytes public/-/emojis/2/construction_worker.png | Bin 811 -> 0 bytes .../-/emojis/2/construction_worker_tone1.png | Bin 855 -> 0 bytes .../-/emojis/2/construction_worker_tone2.png | Bin 815 -> 0 bytes .../-/emojis/2/construction_worker_tone3.png | Bin 831 -> 0 bytes .../-/emojis/2/construction_worker_tone4.png | Bin 802 -> 0 bytes .../-/emojis/2/construction_worker_tone5.png | Bin 791 -> 0 bytes public/-/emojis/2/control_knobs.png | Bin 701 -> 0 bytes public/-/emojis/2/convenience_store.png | Bin 459 -> 0 bytes public/-/emojis/2/cookie.png | Bin 923 -> 0 bytes public/-/emojis/2/cooking.png | Bin 845 -> 0 bytes public/-/emojis/2/cool.png | Bin 538 -> 0 bytes public/-/emojis/2/cop.png | Bin 943 -> 0 bytes public/-/emojis/2/cop_tone1.png | Bin 917 -> 0 bytes public/-/emojis/2/cop_tone2.png | Bin 920 -> 0 bytes public/-/emojis/2/cop_tone3.png | Bin 880 -> 0 bytes public/-/emojis/2/cop_tone4.png | Bin 917 -> 0 bytes public/-/emojis/2/cop_tone5.png | Bin 881 -> 0 bytes public/-/emojis/2/copyright.png | Bin 618 -> 0 bytes public/-/emojis/2/corn.png | Bin 1075 -> 0 bytes public/-/emojis/2/couch.png | Bin 704 -> 0 bytes public/-/emojis/2/couple.png | Bin 1131 -> 0 bytes public/-/emojis/2/couple_mm.png | Bin 819 -> 0 bytes public/-/emojis/2/couple_with_heart.png | Bin 990 -> 0 bytes public/-/emojis/2/couple_ww.png | Bin 905 -> 0 bytes public/-/emojis/2/couplekiss.png | Bin 972 -> 0 bytes public/-/emojis/2/cow.png | Bin 891 -> 0 bytes public/-/emojis/2/cow2.png | Bin 891 -> 0 bytes public/-/emojis/2/cowboy.png | Bin 878 -> 0 bytes public/-/emojis/2/crab.png | Bin 1183 -> 0 bytes public/-/emojis/2/crayon.png | Bin 659 -> 0 bytes public/-/emojis/2/credit_card.png | Bin 404 -> 0 bytes public/-/emojis/2/crescent_moon.png | Bin 598 -> 0 bytes public/-/emojis/2/cricket.png | Bin 861 -> 0 bytes public/-/emojis/2/crocodile.png | Bin 872 -> 0 bytes public/-/emojis/2/croissant.png | Bin 688 -> 0 bytes public/-/emojis/2/cross.png | Bin 528 -> 0 bytes public/-/emojis/2/crossed_flags.png | Bin 784 -> 0 bytes public/-/emojis/2/crossed_swords.png | Bin 817 -> 0 bytes public/-/emojis/2/crown.png | Bin 882 -> 0 bytes public/-/emojis/2/cruise_ship.png | Bin 709 -> 0 bytes public/-/emojis/2/cry.png | Bin 879 -> 0 bytes public/-/emojis/2/crying_cat_face.png | Bin 941 -> 0 bytes public/-/emojis/2/crystal_ball.png | Bin 1060 -> 0 bytes public/-/emojis/2/cucumber.png | Bin 812 -> 0 bytes public/-/emojis/2/cup_with_straw.png | Bin 768 -> 0 bytes public/-/emojis/2/cupcake.png | Bin 984 -> 0 bytes public/-/emojis/2/cupid.png | Bin 863 -> 0 bytes public/-/emojis/2/curling_stone.png | Bin 823 -> 0 bytes public/-/emojis/2/curly_haired.png | Bin 584 -> 0 bytes public/-/emojis/2/curly_loop.png | Bin 548 -> 0 bytes public/-/emojis/2/currency_exchange.png | Bin 698 -> 0 bytes public/-/emojis/2/curry.png | Bin 961 -> 0 bytes public/-/emojis/2/custard.png | Bin 811 -> 0 bytes public/-/emojis/2/customs.png | Bin 625 -> 0 bytes public/-/emojis/2/cut_of_meat.png | Bin 1037 -> 0 bytes public/-/emojis/2/cyclone.png | Bin 923 -> 0 bytes public/-/emojis/2/dagger.png | Bin 594 -> 0 bytes public/-/emojis/2/dancer.png | Bin 917 -> 0 bytes public/-/emojis/2/dancer_tone1.png | Bin 903 -> 0 bytes public/-/emojis/2/dancer_tone2.png | Bin 838 -> 0 bytes public/-/emojis/2/dancer_tone3.png | Bin 876 -> 0 bytes public/-/emojis/2/dancer_tone4.png | Bin 879 -> 0 bytes public/-/emojis/2/dancer_tone5.png | Bin 814 -> 0 bytes public/-/emojis/2/dancers.png | Bin 987 -> 0 bytes public/-/emojis/2/dango.png | Bin 644 -> 0 bytes public/-/emojis/2/dark_sunglasses.png | Bin 445 -> 0 bytes public/-/emojis/2/dart.png | Bin 1006 -> 0 bytes public/-/emojis/2/dash.png | Bin 662 -> 0 bytes public/-/emojis/2/date.png | Bin 614 -> 0 bytes public/-/emojis/2/deciduous_tree.png | Bin 625 -> 0 bytes public/-/emojis/2/deer.png | Bin 925 -> 0 bytes public/-/emojis/2/department_store.png | Bin 558 -> 0 bytes public/-/emojis/2/desert.png | Bin 812 -> 0 bytes public/-/emojis/2/desktop.png | Bin 507 -> 0 bytes .../2/diamond_shape_with_a_dot_inside.png | Bin 803 -> 0 bytes public/-/emojis/2/diamonds.png | Bin 525 -> 0 bytes public/-/emojis/2/digit_eight.png | Bin 749 -> 0 bytes public/-/emojis/2/digit_five.png | Bin 668 -> 0 bytes public/-/emojis/2/digit_four.png | Bin 722 -> 0 bytes public/-/emojis/2/digit_nine.png | Bin 701 -> 0 bytes public/-/emojis/2/digit_one.png | Bin 659 -> 0 bytes public/-/emojis/2/digit_seven.png | Bin 614 -> 0 bytes public/-/emojis/2/digit_six.png | Bin 769 -> 0 bytes public/-/emojis/2/digit_three.png | Bin 717 -> 0 bytes public/-/emojis/2/digit_two.png | Bin 688 -> 0 bytes public/-/emojis/2/digit_zero.png | Bin 705 -> 0 bytes public/-/emojis/2/disappointed.png | Bin 686 -> 0 bytes public/-/emojis/2/disappointed_relieved.png | Bin 892 -> 0 bytes public/-/emojis/2/dividers.png | Bin 367 -> 0 bytes public/-/emojis/2/dizzy.png | Bin 889 -> 0 bytes public/-/emojis/2/dizzy_face.png | Bin 997 -> 0 bytes public/-/emojis/2/dna.png | Bin 649 -> 0 bytes public/-/emojis/2/do_not_litter.png | Bin 1074 -> 0 bytes public/-/emojis/2/dog.png | Bin 994 -> 0 bytes public/-/emojis/2/dog2.png | Bin 731 -> 0 bytes public/-/emojis/2/dollar.png | Bin 648 -> 0 bytes public/-/emojis/2/dolls.png | Bin 1446 -> 0 bytes public/-/emojis/2/dolphin.png | Bin 867 -> 0 bytes public/-/emojis/2/door.png | Bin 424 -> 0 bytes public/-/emojis/2/doughnut.png | Bin 1115 -> 0 bytes public/-/emojis/2/dove.png | Bin 877 -> 0 bytes public/-/emojis/2/dragon.png | Bin 1297 -> 0 bytes public/-/emojis/2/dragon_face.png | Bin 1184 -> 0 bytes public/-/emojis/2/dress.png | Bin 769 -> 0 bytes public/-/emojis/2/dromedary_camel.png | Bin 713 -> 0 bytes public/-/emojis/2/drooling_face.png | Bin 863 -> 0 bytes public/-/emojis/2/droplet.png | Bin 636 -> 0 bytes public/-/emojis/2/drum.png | Bin 1025 -> 0 bytes public/-/emojis/2/duck.png | Bin 914 -> 0 bytes public/-/emojis/2/dumpling.png | Bin 641 -> 0 bytes public/-/emojis/2/dvd.png | Bin 987 -> 0 bytes public/-/emojis/2/e-mail.png | Bin 501 -> 0 bytes public/-/emojis/2/eagle.png | Bin 1018 -> 0 bytes public/-/emojis/2/ear.png | Bin 655 -> 0 bytes public/-/emojis/2/ear_of_rice.png | Bin 1072 -> 0 bytes public/-/emojis/2/ear_tone1.png | Bin 636 -> 0 bytes public/-/emojis/2/ear_tone2.png | Bin 597 -> 0 bytes public/-/emojis/2/ear_tone3.png | Bin 621 -> 0 bytes public/-/emojis/2/ear_tone4.png | Bin 540 -> 0 bytes public/-/emojis/2/ear_tone5.png | Bin 536 -> 0 bytes public/-/emojis/2/earth_africa.png | Bin 1132 -> 0 bytes public/-/emojis/2/earth_americas.png | Bin 1109 -> 0 bytes public/-/emojis/2/earth_asia.png | Bin 1071 -> 0 bytes public/-/emojis/2/egg.png | Bin 716 -> 0 bytes public/-/emojis/2/eggplant.png | Bin 753 -> 0 bytes public/-/emojis/2/eight.png | Bin 703 -> 0 bytes .../-/emojis/2/eight_pointed_black_star.png | Bin 668 -> 0 bytes public/-/emojis/2/eight_spoked_asterisk.png | Bin 629 -> 0 bytes public/-/emojis/2/eject.png | Bin 532 -> 0 bytes public/-/emojis/2/electric_plug.png | Bin 431 -> 0 bytes public/-/emojis/2/elephant.png | Bin 722 -> 0 bytes public/-/emojis/2/elf.png | Bin 1029 -> 0 bytes public/-/emojis/2/elf_tone1.png | Bin 1014 -> 0 bytes public/-/emojis/2/elf_tone2.png | Bin 933 -> 0 bytes public/-/emojis/2/elf_tone3.png | Bin 954 -> 0 bytes public/-/emojis/2/elf_tone4.png | Bin 954 -> 0 bytes public/-/emojis/2/elf_tone5.png | Bin 1002 -> 0 bytes public/-/emojis/2/end.png | Bin 503 -> 0 bytes public/-/emojis/2/england.png | Bin 479 -> 0 bytes public/-/emojis/2/envelope.png | Bin 334 -> 0 bytes public/-/emojis/2/envelope_with_arrow.png | Bin 419 -> 0 bytes public/-/emojis/2/euro.png | Bin 561 -> 0 bytes public/-/emojis/2/european_castle.png | Bin 843 -> 0 bytes public/-/emojis/2/european_post_office.png | Bin 700 -> 0 bytes public/-/emojis/2/evergreen_tree.png | Bin 946 -> 0 bytes public/-/emojis/2/exclamation.png | Bin 277 -> 0 bytes public/-/emojis/2/exploding_head.png | Bin 997 -> 0 bytes public/-/emojis/2/expressionless.png | Bin 548 -> 0 bytes public/-/emojis/2/eye.png | Bin 765 -> 0 bytes public/-/emojis/2/eye_in_speech_bubble.png | Bin 704 -> 0 bytes public/-/emojis/2/eyeglasses.png | Bin 577 -> 0 bytes public/-/emojis/2/eyes.png | Bin 553 -> 0 bytes public/-/emojis/2/face_palm.png | Bin 831 -> 0 bytes public/-/emojis/2/face_palm_tone1.png | Bin 807 -> 0 bytes public/-/emojis/2/face_palm_tone2.png | Bin 809 -> 0 bytes public/-/emojis/2/face_palm_tone3.png | Bin 738 -> 0 bytes public/-/emojis/2/face_palm_tone4.png | Bin 747 -> 0 bytes public/-/emojis/2/face_palm_tone5.png | Bin 718 -> 0 bytes public/-/emojis/2/face_vomiting.png | Bin 938 -> 0 bytes .../-/emojis/2/face_with_hand_over_mouth.png | Bin 894 -> 0 bytes public/-/emojis/2/face_with_monocle.png | Bin 991 -> 0 bytes .../-/emojis/2/face_with_raised_eyebrow.png | Bin 638 -> 0 bytes .../emojis/2/face_with_symbols_over_mouth.png | Bin 989 -> 0 bytes public/-/emojis/2/factory.png | Bin 832 -> 0 bytes public/-/emojis/2/fairy.png | Bin 1087 -> 0 bytes public/-/emojis/2/fairy_tone1.png | Bin 1089 -> 0 bytes public/-/emojis/2/fairy_tone2.png | Bin 1052 -> 0 bytes public/-/emojis/2/fairy_tone3.png | Bin 1053 -> 0 bytes public/-/emojis/2/fairy_tone4.png | Bin 1012 -> 0 bytes public/-/emojis/2/fairy_tone5.png | Bin 1145 -> 0 bytes public/-/emojis/2/fallen_leaf.png | Bin 796 -> 0 bytes public/-/emojis/2/family.png | Bin 1230 -> 0 bytes public/-/emojis/2/family_man_boy.png | Bin 846 -> 0 bytes public/-/emojis/2/family_man_boy_boy.png | Bin 927 -> 0 bytes public/-/emojis/2/family_man_girl.png | Bin 927 -> 0 bytes public/-/emojis/2/family_man_girl_boy.png | Bin 1019 -> 0 bytes public/-/emojis/2/family_man_girl_girl.png | Bin 997 -> 0 bytes public/-/emojis/2/family_mmb.png | Bin 1053 -> 0 bytes public/-/emojis/2/family_mmbb.png | Bin 1230 -> 0 bytes public/-/emojis/2/family_mmg.png | Bin 1108 -> 0 bytes public/-/emojis/2/family_mmgb.png | Bin 1206 -> 0 bytes public/-/emojis/2/family_mmgg.png | Bin 1244 -> 0 bytes public/-/emojis/2/family_mwbb.png | Bin 1473 -> 0 bytes public/-/emojis/2/family_mwg.png | Bin 1358 -> 0 bytes public/-/emojis/2/family_mwgb.png | Bin 1506 -> 0 bytes public/-/emojis/2/family_mwgg.png | Bin 1580 -> 0 bytes public/-/emojis/2/family_woman_boy.png | Bin 853 -> 0 bytes public/-/emojis/2/family_woman_boy_boy.png | Bin 1054 -> 0 bytes public/-/emojis/2/family_woman_girl.png | Bin 942 -> 0 bytes public/-/emojis/2/family_woman_girl_boy.png | Bin 994 -> 0 bytes public/-/emojis/2/family_woman_girl_girl.png | Bin 995 -> 0 bytes public/-/emojis/2/family_wwb.png | Bin 965 -> 0 bytes public/-/emojis/2/family_wwbb.png | Bin 1187 -> 0 bytes public/-/emojis/2/family_wwg.png | Bin 1053 -> 0 bytes public/-/emojis/2/family_wwgb.png | Bin 1322 -> 0 bytes public/-/emojis/2/family_wwgg.png | Bin 1270 -> 0 bytes public/-/emojis/2/fast_forward.png | Bin 561 -> 0 bytes public/-/emojis/2/fax.png | Bin 744 -> 0 bytes public/-/emojis/2/fearful.png | Bin 895 -> 0 bytes public/-/emojis/2/feet.png | Bin 584 -> 0 bytes public/-/emojis/2/female_sign.png | Bin 517 -> 0 bytes public/-/emojis/2/fencer.png | Bin 882 -> 0 bytes public/-/emojis/2/ferris_wheel.png | Bin 1762 -> 0 bytes public/-/emojis/2/ferry.png | Bin 603 -> 0 bytes public/-/emojis/2/field_hockey.png | Bin 683 -> 0 bytes public/-/emojis/2/file_cabinet.png | Bin 233 -> 0 bytes public/-/emojis/2/file_folder.png | Bin 350 -> 0 bytes public/-/emojis/2/film_frames.png | Bin 304 -> 0 bytes public/-/emojis/2/fingers_crossed.png | Bin 607 -> 0 bytes public/-/emojis/2/fingers_crossed_tone1.png | Bin 612 -> 0 bytes public/-/emojis/2/fingers_crossed_tone2.png | Bin 614 -> 0 bytes public/-/emojis/2/fingers_crossed_tone3.png | Bin 573 -> 0 bytes public/-/emojis/2/fingers_crossed_tone4.png | Bin 565 -> 0 bytes public/-/emojis/2/fingers_crossed_tone5.png | Bin 558 -> 0 bytes public/-/emojis/2/fire.png | Bin 1015 -> 0 bytes public/-/emojis/2/fire_engine.png | Bin 853 -> 0 bytes public/-/emojis/2/fire_extinguisher.png | Bin 650 -> 0 bytes public/-/emojis/2/firecracker.png | Bin 832 -> 0 bytes public/-/emojis/2/fireworks.png | Bin 1216 -> 0 bytes public/-/emojis/2/first_place.png | Bin 932 -> 0 bytes public/-/emojis/2/first_quarter_moon.png | Bin 1007 -> 0 bytes .../emojis/2/first_quarter_moon_with_face.png | Bin 770 -> 0 bytes public/-/emojis/2/fish.png | Bin 856 -> 0 bytes public/-/emojis/2/fish_cake.png | Bin 684 -> 0 bytes public/-/emojis/2/fishing_pole_and_fish.png | Bin 1031 -> 0 bytes public/-/emojis/2/fist.png | Bin 662 -> 0 bytes public/-/emojis/2/fist_tone1.png | Bin 676 -> 0 bytes public/-/emojis/2/fist_tone2.png | Bin 654 -> 0 bytes public/-/emojis/2/fist_tone3.png | Bin 579 -> 0 bytes public/-/emojis/2/fist_tone4.png | Bin 603 -> 0 bytes public/-/emojis/2/fist_tone5.png | Bin 588 -> 0 bytes public/-/emojis/2/five.png | Bin 639 -> 0 bytes public/-/emojis/2/flag_ac.png | Bin 815 -> 0 bytes public/-/emojis/2/flag_ad.png | Bin 683 -> 0 bytes public/-/emojis/2/flag_ae.png | Bin 457 -> 0 bytes public/-/emojis/2/flag_af.png | Bin 673 -> 0 bytes public/-/emojis/2/flag_ag.png | Bin 800 -> 0 bytes public/-/emojis/2/flag_ai.png | Bin 698 -> 0 bytes public/-/emojis/2/flag_al.png | Bin 774 -> 0 bytes public/-/emojis/2/flag_am.png | Bin 429 -> 0 bytes public/-/emojis/2/flag_ao.png | Bin 651 -> 0 bytes public/-/emojis/2/flag_aq.png | Bin 487 -> 0 bytes public/-/emojis/2/flag_ar.png | Bin 681 -> 0 bytes public/-/emojis/2/flag_as.png | Bin 870 -> 0 bytes public/-/emojis/2/flag_at.png | Bin 375 -> 0 bytes public/-/emojis/2/flag_au.png | Bin 801 -> 0 bytes public/-/emojis/2/flag_aw.png | Bin 627 -> 0 bytes public/-/emojis/2/flag_ax.png | Bin 524 -> 0 bytes public/-/emojis/2/flag_az.png | Bin 505 -> 0 bytes public/-/emojis/2/flag_ba.png | Bin 752 -> 0 bytes public/-/emojis/2/flag_bb.png | Bin 625 -> 0 bytes public/-/emojis/2/flag_bd.png | Bin 551 -> 0 bytes public/-/emojis/2/flag_be.png | Bin 510 -> 0 bytes public/-/emojis/2/flag_bf.png | Bin 503 -> 0 bytes public/-/emojis/2/flag_bg.png | Bin 419 -> 0 bytes public/-/emojis/2/flag_bh.png | Bin 584 -> 0 bytes public/-/emojis/2/flag_bi.png | Bin 803 -> 0 bytes public/-/emojis/2/flag_bj.png | Bin 478 -> 0 bytes public/-/emojis/2/flag_bl.png | Bin 1022 -> 0 bytes public/-/emojis/2/flag_black.png | Bin 276 -> 0 bytes public/-/emojis/2/flag_bm.png | Bin 981 -> 0 bytes public/-/emojis/2/flag_bn.png | Bin 896 -> 0 bytes public/-/emojis/2/flag_bo.png | Bin 578 -> 0 bytes public/-/emojis/2/flag_bq.png | Bin 856 -> 0 bytes public/-/emojis/2/flag_br.png | Bin 699 -> 0 bytes public/-/emojis/2/flag_bs.png | Bin 529 -> 0 bytes public/-/emojis/2/flag_bt.png | Bin 733 -> 0 bytes public/-/emojis/2/flag_bv.png | Bin 431 -> 0 bytes public/-/emojis/2/flag_bw.png | Bin 351 -> 0 bytes public/-/emojis/2/flag_by.png | Bin 619 -> 0 bytes public/-/emojis/2/flag_bz.png | Bin 866 -> 0 bytes public/-/emojis/2/flag_ca.png | Bin 534 -> 0 bytes public/-/emojis/2/flag_cc.png | Bin 614 -> 0 bytes public/-/emojis/2/flag_cd.png | Bin 585 -> 0 bytes public/-/emojis/2/flag_cf.png | Bin 604 -> 0 bytes public/-/emojis/2/flag_cg.png | Bin 459 -> 0 bytes public/-/emojis/2/flag_ch.png | Bin 595 -> 0 bytes public/-/emojis/2/flag_ci.png | Bin 577 -> 0 bytes public/-/emojis/2/flag_ck.png | Bin 762 -> 0 bytes public/-/emojis/2/flag_cl.png | Bin 560 -> 0 bytes public/-/emojis/2/flag_cm.png | Bin 622 -> 0 bytes public/-/emojis/2/flag_cn.png | Bin 480 -> 0 bytes public/-/emojis/2/flag_co.png | Bin 470 -> 0 bytes public/-/emojis/2/flag_cp.png | Bin 526 -> 0 bytes public/-/emojis/2/flag_cr.png | Bin 436 -> 0 bytes public/-/emojis/2/flag_cu.png | Bin 501 -> 0 bytes public/-/emojis/2/flag_cv.png | Bin 592 -> 0 bytes public/-/emojis/2/flag_cw.png | Bin 487 -> 0 bytes public/-/emojis/2/flag_cx.png | Bin 683 -> 0 bytes public/-/emojis/2/flag_cy.png | Bin 824 -> 0 bytes public/-/emojis/2/flag_cz.png | Bin 594 -> 0 bytes public/-/emojis/2/flag_de.png | Bin 452 -> 0 bytes public/-/emojis/2/flag_dg.png | Bin 1261 -> 0 bytes public/-/emojis/2/flag_dj.png | Bin 730 -> 0 bytes public/-/emojis/2/flag_dk.png | Bin 529 -> 0 bytes public/-/emojis/2/flag_dm.png | Bin 777 -> 0 bytes public/-/emojis/2/flag_do.png | Bin 774 -> 0 bytes public/-/emojis/2/flag_dz.png | Bin 637 -> 0 bytes public/-/emojis/2/flag_ea.png | Bin 812 -> 0 bytes public/-/emojis/2/flag_ec.png | Bin 917 -> 0 bytes public/-/emojis/2/flag_ee.png | Bin 484 -> 0 bytes public/-/emojis/2/flag_eg.png | Bin 558 -> 0 bytes public/-/emojis/2/flag_eh.png | Bin 537 -> 0 bytes public/-/emojis/2/flag_er.png | Bin 708 -> 0 bytes public/-/emojis/2/flag_es.png | Bin 812 -> 0 bytes public/-/emojis/2/flag_et.png | Bin 645 -> 0 bytes public/-/emojis/2/flag_eu.png | Bin 695 -> 0 bytes public/-/emojis/2/flag_fi.png | Bin 502 -> 0 bytes public/-/emojis/2/flag_fj.png | Bin 918 -> 0 bytes public/-/emojis/2/flag_fk.png | Bin 858 -> 0 bytes public/-/emojis/2/flag_fm.png | Bin 618 -> 0 bytes public/-/emojis/2/flag_fo.png | Bin 529 -> 0 bytes public/-/emojis/2/flag_fr.png | Bin 526 -> 0 bytes public/-/emojis/2/flag_ga.png | Bin 417 -> 0 bytes public/-/emojis/2/flag_gb.png | Bin 708 -> 0 bytes public/-/emojis/2/flag_gd.png | Bin 773 -> 0 bytes public/-/emojis/2/flag_ge.png | Bin 572 -> 0 bytes public/-/emojis/2/flag_gf.png | Bin 541 -> 0 bytes public/-/emojis/2/flag_gg.png | Bin 453 -> 0 bytes public/-/emojis/2/flag_gh.png | Bin 568 -> 0 bytes public/-/emojis/2/flag_gi.png | Bin 853 -> 0 bytes public/-/emojis/2/flag_gl.png | Bin 605 -> 0 bytes public/-/emojis/2/flag_gm.png | Bin 475 -> 0 bytes public/-/emojis/2/flag_gn.png | Bin 605 -> 0 bytes public/-/emojis/2/flag_gp.png | Bin 986 -> 0 bytes public/-/emojis/2/flag_gq.png | Bin 646 -> 0 bytes public/-/emojis/2/flag_gr.png | Bin 509 -> 0 bytes public/-/emojis/2/flag_gs.png | Bin 926 -> 0 bytes public/-/emojis/2/flag_gt.png | Bin 701 -> 0 bytes public/-/emojis/2/flag_gu.png | Bin 659 -> 0 bytes public/-/emojis/2/flag_gw.png | Bin 507 -> 0 bytes public/-/emojis/2/flag_gy.png | Bin 715 -> 0 bytes public/-/emojis/2/flag_hk.png | Bin 563 -> 0 bytes public/-/emojis/2/flag_hm.png | Bin 716 -> 0 bytes public/-/emojis/2/flag_hn.png | Bin 631 -> 0 bytes public/-/emojis/2/flag_hr.png | Bin 841 -> 0 bytes public/-/emojis/2/flag_ht.png | Bin 732 -> 0 bytes public/-/emojis/2/flag_hu.png | Bin 419 -> 0 bytes public/-/emojis/2/flag_ic.png | Bin 791 -> 0 bytes public/-/emojis/2/flag_id.png | Bin 480 -> 0 bytes public/-/emojis/2/flag_ie.png | Bin 590 -> 0 bytes public/-/emojis/2/flag_il.png | Bin 601 -> 0 bytes public/-/emojis/2/flag_im.png | Bin 562 -> 0 bytes public/-/emojis/2/flag_in.png | Bin 564 -> 0 bytes public/-/emojis/2/flag_io.png | Bin 1266 -> 0 bytes public/-/emojis/2/flag_iq.png | Bin 616 -> 0 bytes public/-/emojis/2/flag_ir.png | Bin 659 -> 0 bytes public/-/emojis/2/flag_is.png | Bin 579 -> 0 bytes public/-/emojis/2/flag_it.png | Bin 609 -> 0 bytes public/-/emojis/2/flag_je.png | Bin 773 -> 0 bytes public/-/emojis/2/flag_jm.png | Bin 776 -> 0 bytes public/-/emojis/2/flag_jo.png | Bin 540 -> 0 bytes public/-/emojis/2/flag_jp.png | Bin 555 -> 0 bytes public/-/emojis/2/flag_ke.png | Bin 814 -> 0 bytes public/-/emojis/2/flag_kg.png | Bin 698 -> 0 bytes public/-/emojis/2/flag_kh.png | Bin 531 -> 0 bytes public/-/emojis/2/flag_ki.png | Bin 888 -> 0 bytes public/-/emojis/2/flag_km.png | Bin 573 -> 0 bytes public/-/emojis/2/flag_kn.png | Bin 798 -> 0 bytes public/-/emojis/2/flag_kp.png | Bin 626 -> 0 bytes public/-/emojis/2/flag_kr.png | Bin 957 -> 0 bytes public/-/emojis/2/flag_kw.png | Bin 538 -> 0 bytes public/-/emojis/2/flag_ky.png | Bin 949 -> 0 bytes public/-/emojis/2/flag_kz.png | Bin 762 -> 0 bytes public/-/emojis/2/flag_la.png | Bin 464 -> 0 bytes public/-/emojis/2/flag_lb.png | Bin 607 -> 0 bytes public/-/emojis/2/flag_lc.png | Bin 694 -> 0 bytes public/-/emojis/2/flag_li.png | Bin 541 -> 0 bytes public/-/emojis/2/flag_lk.png | Bin 736 -> 0 bytes public/-/emojis/2/flag_lr.png | Bin 567 -> 0 bytes public/-/emojis/2/flag_ls.png | Bin 513 -> 0 bytes public/-/emojis/2/flag_lt.png | Bin 439 -> 0 bytes public/-/emojis/2/flag_lu.png | Bin 419 -> 0 bytes public/-/emojis/2/flag_lv.png | Bin 371 -> 0 bytes public/-/emojis/2/flag_ly.png | Bin 536 -> 0 bytes public/-/emojis/2/flag_ma.png | Bin 456 -> 0 bytes public/-/emojis/2/flag_mc.png | Bin 485 -> 0 bytes public/-/emojis/2/flag_md.png | Bin 651 -> 0 bytes public/-/emojis/2/flag_me.png | Bin 787 -> 0 bytes public/-/emojis/2/flag_mf.png | Bin 526 -> 0 bytes public/-/emojis/2/flag_mg.png | Bin 573 -> 0 bytes public/-/emojis/2/flag_mh.png | Bin 806 -> 0 bytes public/-/emojis/2/flag_mk.png | Bin 789 -> 0 bytes public/-/emojis/2/flag_ml.png | Bin 491 -> 0 bytes public/-/emojis/2/flag_mm.png | Bin 615 -> 0 bytes public/-/emojis/2/flag_mn.png | Bin 493 -> 0 bytes public/-/emojis/2/flag_mo.png | Bin 568 -> 0 bytes public/-/emojis/2/flag_mp.png | Bin 1073 -> 0 bytes public/-/emojis/2/flag_mq.png | Bin 752 -> 0 bytes public/-/emojis/2/flag_mr.png | Bin 668 -> 0 bytes public/-/emojis/2/flag_ms.png | Bin 871 -> 0 bytes public/-/emojis/2/flag_mt.png | Bin 721 -> 0 bytes public/-/emojis/2/flag_mu.png | Bin 442 -> 0 bytes public/-/emojis/2/flag_mv.png | Bin 478 -> 0 bytes public/-/emojis/2/flag_mw.png | Bin 527 -> 0 bytes public/-/emojis/2/flag_mx.png | Bin 780 -> 0 bytes public/-/emojis/2/flag_my.png | Bin 605 -> 0 bytes public/-/emojis/2/flag_mz.png | Bin 628 -> 0 bytes public/-/emojis/2/flag_na.png | Bin 706 -> 0 bytes public/-/emojis/2/flag_nc.png | Bin 731 -> 0 bytes public/-/emojis/2/flag_ne.png | Bin 450 -> 0 bytes public/-/emojis/2/flag_nf.png | Bin 758 -> 0 bytes public/-/emojis/2/flag_ng.png | Bin 503 -> 0 bytes public/-/emojis/2/flag_ni.png | Bin 556 -> 0 bytes public/-/emojis/2/flag_nl.png | Bin 486 -> 0 bytes public/-/emojis/2/flag_no.png | Bin 431 -> 0 bytes public/-/emojis/2/flag_np.png | Bin 771 -> 0 bytes public/-/emojis/2/flag_nr.png | Bin 446 -> 0 bytes public/-/emojis/2/flag_nu.png | Bin 757 -> 0 bytes public/-/emojis/2/flag_nz.png | Bin 710 -> 0 bytes public/-/emojis/2/flag_om.png | Bin 611 -> 0 bytes public/-/emojis/2/flag_pa.png | Bin 646 -> 0 bytes public/-/emojis/2/flag_pe.png | Bin 547 -> 0 bytes public/-/emojis/2/flag_pf.png | Bin 811 -> 0 bytes public/-/emojis/2/flag_pg.png | Bin 673 -> 0 bytes public/-/emojis/2/flag_ph.png | Bin 665 -> 0 bytes public/-/emojis/2/flag_pk.png | Bin 674 -> 0 bytes public/-/emojis/2/flag_pl.png | Bin 507 -> 0 bytes public/-/emojis/2/flag_pm.png | Bin 1385 -> 0 bytes public/-/emojis/2/flag_pn.png | Bin 1056 -> 0 bytes public/-/emojis/2/flag_pr.png | Bin 532 -> 0 bytes public/-/emojis/2/flag_ps.png | Bin 513 -> 0 bytes public/-/emojis/2/flag_pt.png | Bin 757 -> 0 bytes public/-/emojis/2/flag_pw.png | Bin 645 -> 0 bytes public/-/emojis/2/flag_py.png | Bin 694 -> 0 bytes public/-/emojis/2/flag_qa.png | Bin 517 -> 0 bytes public/-/emojis/2/flag_re.png | Bin 754 -> 0 bytes public/-/emojis/2/flag_ro.png | Bin 502 -> 0 bytes public/-/emojis/2/flag_rs.png | Bin 824 -> 0 bytes public/-/emojis/2/flag_ru.png | Bin 409 -> 0 bytes public/-/emojis/2/flag_rw.png | Bin 610 -> 0 bytes public/-/emojis/2/flag_sa.png | Bin 766 -> 0 bytes public/-/emojis/2/flag_sb.png | Bin 631 -> 0 bytes public/-/emojis/2/flag_sc.png | Bin 646 -> 0 bytes public/-/emojis/2/flag_sd.png | Bin 482 -> 0 bytes public/-/emojis/2/flag_se.png | Bin 618 -> 0 bytes public/-/emojis/2/flag_sg.png | Bin 577 -> 0 bytes public/-/emojis/2/flag_sh.png | Bin 832 -> 0 bytes public/-/emojis/2/flag_si.png | Bin 609 -> 0 bytes public/-/emojis/2/flag_sj.png | Bin 481 -> 0 bytes public/-/emojis/2/flag_sk.png | Bin 617 -> 0 bytes public/-/emojis/2/flag_sl.png | Bin 415 -> 0 bytes public/-/emojis/2/flag_sm.png | Bin 1037 -> 0 bytes public/-/emojis/2/flag_sn.png | Bin 565 -> 0 bytes public/-/emojis/2/flag_so.png | Bin 617 -> 0 bytes public/-/emojis/2/flag_sr.png | Bin 450 -> 0 bytes public/-/emojis/2/flag_ss.png | Bin 543 -> 0 bytes public/-/emojis/2/flag_st.png | Bin 523 -> 0 bytes public/-/emojis/2/flag_sv.png | Bin 682 -> 0 bytes public/-/emojis/2/flag_sx.png | Bin 744 -> 0 bytes public/-/emojis/2/flag_sy.png | Bin 621 -> 0 bytes public/-/emojis/2/flag_sz.png | Bin 649 -> 0 bytes public/-/emojis/2/flag_ta.png | Bin 893 -> 0 bytes public/-/emojis/2/flag_tc.png | Bin 935 -> 0 bytes public/-/emojis/2/flag_td.png | Bin 608 -> 0 bytes public/-/emojis/2/flag_tf.png | Bin 631 -> 0 bytes public/-/emojis/2/flag_tg.png | Bin 580 -> 0 bytes public/-/emojis/2/flag_th.png | Bin 472 -> 0 bytes public/-/emojis/2/flag_tj.png | Bin 653 -> 0 bytes public/-/emojis/2/flag_tk.png | Bin 752 -> 0 bytes public/-/emojis/2/flag_tl.png | Bin 763 -> 0 bytes public/-/emojis/2/flag_tm.png | Bin 842 -> 0 bytes public/-/emojis/2/flag_tn.png | Bin 742 -> 0 bytes public/-/emojis/2/flag_to.png | Bin 551 -> 0 bytes public/-/emojis/2/flag_tr.png | Bin 448 -> 0 bytes public/-/emojis/2/flag_tt.png | Bin 655 -> 0 bytes public/-/emojis/2/flag_tv.png | Bin 853 -> 0 bytes public/-/emojis/2/flag_tw.png | Bin 526 -> 0 bytes public/-/emojis/2/flag_tz.png | Bin 650 -> 0 bytes public/-/emojis/2/flag_ua.png | Bin 494 -> 0 bytes public/-/emojis/2/flag_ug.png | Bin 586 -> 0 bytes public/-/emojis/2/flag_um.png | Bin 577 -> 0 bytes public/-/emojis/2/flag_us.png | Bin 636 -> 0 bytes public/-/emojis/2/flag_uy.png | Bin 628 -> 0 bytes public/-/emojis/2/flag_uz.png | Bin 510 -> 0 bytes public/-/emojis/2/flag_va.png | Bin 825 -> 0 bytes public/-/emojis/2/flag_vc.png | Bin 583 -> 0 bytes public/-/emojis/2/flag_ve.png | Bin 528 -> 0 bytes public/-/emojis/2/flag_vg.png | Bin 905 -> 0 bytes public/-/emojis/2/flag_vi.png | Bin 1007 -> 0 bytes public/-/emojis/2/flag_vn.png | Bin 465 -> 0 bytes public/-/emojis/2/flag_vu.png | Bin 520 -> 0 bytes public/-/emojis/2/flag_wf.png | Bin 496 -> 0 bytes public/-/emojis/2/flag_ws.png | Bin 637 -> 0 bytes public/-/emojis/2/flag_xk.png | Bin 688 -> 0 bytes public/-/emojis/2/flag_ye.png | Bin 466 -> 0 bytes public/-/emojis/2/flag_yt.png | Bin 1071 -> 0 bytes public/-/emojis/2/flag_za.png | Bin 540 -> 0 bytes public/-/emojis/2/flag_zm.png | Bin 511 -> 0 bytes public/-/emojis/2/flag_zw.png | Bin 644 -> 0 bytes public/-/emojis/2/flags.png | Bin 1268 -> 0 bytes public/-/emojis/2/flashlight.png | Bin 814 -> 0 bytes public/-/emojis/2/fleur_de_lis.png | Bin 959 -> 0 bytes public/-/emojis/2/floppy_disk.png | Bin 403 -> 0 bytes public/-/emojis/2/flower_playing_cards.png | Bin 583 -> 0 bytes public/-/emojis/2/flushed.png | Bin 899 -> 0 bytes public/-/emojis/2/flying_disc.png | Bin 856 -> 0 bytes public/-/emojis/2/flying_saucer.png | Bin 1040 -> 0 bytes public/-/emojis/2/fog.png | Bin 337 -> 0 bytes public/-/emojis/2/foggy.png | Bin 791 -> 0 bytes public/-/emojis/2/foot.png | Bin 459 -> 0 bytes public/-/emojis/2/foot_tone1.png | Bin 463 -> 0 bytes public/-/emojis/2/foot_tone2.png | Bin 512 -> 0 bytes public/-/emojis/2/foot_tone3.png | Bin 484 -> 0 bytes public/-/emojis/2/foot_tone4.png | Bin 460 -> 0 bytes public/-/emojis/2/foot_tone5.png | Bin 443 -> 0 bytes public/-/emojis/2/football.png | Bin 1068 -> 0 bytes public/-/emojis/2/footprints.png | Bin 608 -> 0 bytes public/-/emojis/2/fork_and_knife.png | Bin 524 -> 0 bytes public/-/emojis/2/fork_knife_plate.png | Bin 644 -> 0 bytes public/-/emojis/2/fortune_cookie.png | Bin 693 -> 0 bytes public/-/emojis/2/fountain.png | Bin 944 -> 0 bytes public/-/emojis/2/four.png | Bin 644 -> 0 bytes public/-/emojis/2/four_leaf_clover.png | Bin 861 -> 0 bytes public/-/emojis/2/fox.png | Bin 1078 -> 0 bytes public/-/emojis/2/frame_photo.png | Bin 561 -> 0 bytes public/-/emojis/2/free.png | Bin 631 -> 0 bytes public/-/emojis/2/french_bread.png | Bin 549 -> 0 bytes public/-/emojis/2/fried_shrimp.png | Bin 898 -> 0 bytes public/-/emojis/2/fries.png | Bin 1198 -> 0 bytes public/-/emojis/2/frog.png | Bin 1018 -> 0 bytes public/-/emojis/2/frowning.png | Bin 592 -> 0 bytes public/-/emojis/2/frowning_face.png | Bin 669 -> 0 bytes public/-/emojis/2/fuelpump.png | Bin 765 -> 0 bytes public/-/emojis/2/full_moon.png | Bin 927 -> 0 bytes public/-/emojis/2/full_moon_with_face.png | Bin 1096 -> 0 bytes public/-/emojis/2/game_die.png | Bin 911 -> 0 bytes public/-/emojis/2/gay_pride_flag.png | Bin 472 -> 0 bytes public/-/emojis/2/gear.png | Bin 835 -> 0 bytes public/-/emojis/2/gem.png | Bin 662 -> 0 bytes public/-/emojis/2/gemini.png | Bin 687 -> 0 bytes public/-/emojis/2/genie.png | Bin 1068 -> 0 bytes public/-/emojis/2/ghost.png | Bin 991 -> 0 bytes public/-/emojis/2/gift.png | Bin 761 -> 0 bytes public/-/emojis/2/gift_heart.png | Bin 856 -> 0 bytes public/-/emojis/2/giraffe.png | Bin 909 -> 0 bytes public/-/emojis/2/girl.png | Bin 1010 -> 0 bytes public/-/emojis/2/girl_tone1.png | Bin 999 -> 0 bytes public/-/emojis/2/girl_tone2.png | Bin 986 -> 0 bytes public/-/emojis/2/girl_tone3.png | Bin 910 -> 0 bytes public/-/emojis/2/girl_tone4.png | Bin 903 -> 0 bytes public/-/emojis/2/girl_tone5.png | Bin 976 -> 0 bytes public/-/emojis/2/globe_with_meridians.png | Bin 925 -> 0 bytes public/-/emojis/2/gloves.png | Bin 755 -> 0 bytes public/-/emojis/2/goal.png | Bin 819 -> 0 bytes public/-/emojis/2/goat.png | Bin 745 -> 0 bytes public/-/emojis/2/goggles.png | Bin 585 -> 0 bytes public/-/emojis/2/golf.png | Bin 604 -> 0 bytes public/-/emojis/2/golfing_man.png | Bin 803 -> 0 bytes public/-/emojis/2/gorilla.png | Bin 934 -> 0 bytes public/-/emojis/2/grapes.png | Bin 914 -> 0 bytes public/-/emojis/2/green_apple.png | Bin 797 -> 0 bytes public/-/emojis/2/green_book.png | Bin 362 -> 0 bytes public/-/emojis/2/green_heart.png | Bin 710 -> 0 bytes public/-/emojis/2/grey_exclamation.png | Bin 248 -> 0 bytes public/-/emojis/2/grey_question.png | Bin 469 -> 0 bytes public/-/emojis/2/grimacing.png | Bin 717 -> 0 bytes public/-/emojis/2/grin.png | Bin 861 -> 0 bytes public/-/emojis/2/grinning.png | Bin 805 -> 0 bytes public/-/emojis/2/guardsman.png | Bin 604 -> 0 bytes public/-/emojis/2/guardsman_tone1.png | Bin 631 -> 0 bytes public/-/emojis/2/guardsman_tone2.png | Bin 624 -> 0 bytes public/-/emojis/2/guardsman_tone3.png | Bin 589 -> 0 bytes public/-/emojis/2/guardsman_tone4.png | Bin 578 -> 0 bytes public/-/emojis/2/guardsman_tone5.png | Bin 575 -> 0 bytes public/-/emojis/2/guitar.png | Bin 805 -> 0 bytes public/-/emojis/2/gun.png | Bin 495 -> 0 bytes public/-/emojis/2/haircut.png | Bin 1049 -> 0 bytes public/-/emojis/2/haircut_tone1.png | Bin 1041 -> 0 bytes public/-/emojis/2/haircut_tone2.png | Bin 1098 -> 0 bytes public/-/emojis/2/haircut_tone3.png | Bin 920 -> 0 bytes public/-/emojis/2/haircut_tone4.png | Bin 955 -> 0 bytes public/-/emojis/2/haircut_tone5.png | Bin 1008 -> 0 bytes public/-/emojis/2/hamburger.png | Bin 1121 -> 0 bytes public/-/emojis/2/hammer.png | Bin 531 -> 0 bytes public/-/emojis/2/hammer_pick.png | Bin 836 -> 0 bytes public/-/emojis/2/hamster.png | Bin 1150 -> 0 bytes public/-/emojis/2/hand_splayed.png | Bin 696 -> 0 bytes public/-/emojis/2/hand_splayed_tone1.png | Bin 642 -> 0 bytes public/-/emojis/2/hand_splayed_tone2.png | Bin 573 -> 0 bytes public/-/emojis/2/hand_splayed_tone3.png | Bin 611 -> 0 bytes public/-/emojis/2/hand_splayed_tone4.png | Bin 611 -> 0 bytes public/-/emojis/2/hand_splayed_tone5.png | Bin 655 -> 0 bytes public/-/emojis/2/handbag.png | Bin 633 -> 0 bytes public/-/emojis/2/handball.png | Bin 990 -> 0 bytes public/-/emojis/2/handball_tone1.png | Bin 1014 -> 0 bytes public/-/emojis/2/handball_tone2.png | Bin 971 -> 0 bytes public/-/emojis/2/handball_tone3.png | Bin 962 -> 0 bytes public/-/emojis/2/handball_tone4.png | Bin 896 -> 0 bytes public/-/emojis/2/handball_tone5.png | Bin 906 -> 0 bytes public/-/emojis/2/handshake.png | Bin 638 -> 0 bytes public/-/emojis/2/hash.png | Bin 605 -> 0 bytes public/-/emojis/2/hatched_chick.png | Bin 948 -> 0 bytes public/-/emojis/2/hatching_chick.png | Bin 990 -> 0 bytes public/-/emojis/2/head_bandage.png | Bin 831 -> 0 bytes public/-/emojis/2/headphones.png | Bin 965 -> 0 bytes public/-/emojis/2/hear_no_evil.png | Bin 1026 -> 0 bytes public/-/emojis/2/heart.png | Bin 546 -> 0 bytes public/-/emojis/2/heart_decoration.png | Bin 696 -> 0 bytes public/-/emojis/2/heart_eyes.png | Bin 929 -> 0 bytes public/-/emojis/2/heart_eyes_cat.png | Bin 1071 -> 0 bytes public/-/emojis/2/heartbeat.png | Bin 679 -> 0 bytes public/-/emojis/2/heartpulse.png | Bin 801 -> 0 bytes public/-/emojis/2/hearts.png | Bin 609 -> 0 bytes public/-/emojis/2/heavy_check_mark.png | Bin 457 -> 0 bytes public/-/emojis/2/heavy_division_sign.png | Bin 360 -> 0 bytes public/-/emojis/2/heavy_dollar_sign.png | Bin 527 -> 0 bytes public/-/emojis/2/heavy_heart_exclamation.png | Bin 611 -> 0 bytes public/-/emojis/2/heavy_minus_sign.png | Bin 195 -> 0 bytes public/-/emojis/2/heavy_multiplication_x.png | Bin 491 -> 0 bytes public/-/emojis/2/heavy_plus_sign.png | Bin 297 -> 0 bytes public/-/emojis/2/hedgehog.png | Bin 1133 -> 0 bytes public/-/emojis/2/helicopter.png | Bin 781 -> 0 bytes public/-/emojis/2/helmet_with_cross.png | Bin 734 -> 0 bytes public/-/emojis/2/herb.png | Bin 813 -> 0 bytes public/-/emojis/2/hibiscus.png | Bin 979 -> 0 bytes public/-/emojis/2/high_brightness.png | Bin 640 -> 0 bytes public/-/emojis/2/high_heel.png | Bin 724 -> 0 bytes public/-/emojis/2/hiking_boot.png | Bin 772 -> 0 bytes public/-/emojis/2/hippopotamus.png | Bin 648 -> 0 bytes public/-/emojis/2/hockey.png | Bin 586 -> 0 bytes public/-/emojis/2/hole.png | Bin 534 -> 0 bytes public/-/emojis/2/homes.png | Bin 810 -> 0 bytes public/-/emojis/2/honey_pot.png | Bin 812 -> 0 bytes public/-/emojis/2/horse.png | Bin 881 -> 0 bytes public/-/emojis/2/horse_racing.png | Bin 1242 -> 0 bytes public/-/emojis/2/horse_racing_tone1.png | Bin 1264 -> 0 bytes public/-/emojis/2/horse_racing_tone2.png | Bin 1198 -> 0 bytes public/-/emojis/2/horse_racing_tone3.png | Bin 1208 -> 0 bytes public/-/emojis/2/horse_racing_tone4.png | Bin 1206 -> 0 bytes public/-/emojis/2/horse_racing_tone5.png | Bin 1274 -> 0 bytes public/-/emojis/2/hospital.png | Bin 476 -> 0 bytes public/-/emojis/2/hot_face.png | Bin 919 -> 0 bytes public/-/emojis/2/hot_pepper.png | Bin 658 -> 0 bytes public/-/emojis/2/hotdog.png | Bin 858 -> 0 bytes public/-/emojis/2/hotel.png | Bin 786 -> 0 bytes public/-/emojis/2/hotsprings.png | Bin 730 -> 0 bytes public/-/emojis/2/hourglass.png | Bin 710 -> 0 bytes public/-/emojis/2/hourglass_flowing_sand.png | Bin 805 -> 0 bytes public/-/emojis/2/house.png | Bin 596 -> 0 bytes public/-/emojis/2/house_abandoned.png | Bin 890 -> 0 bytes public/-/emojis/2/house_with_garden.png | Bin 1032 -> 0 bytes public/-/emojis/2/hugging.png | Bin 986 -> 0 bytes public/-/emojis/2/hushed.png | Bin 635 -> 0 bytes public/-/emojis/2/ice_cream.png | Bin 975 -> 0 bytes public/-/emojis/2/ice_skate.png | Bin 864 -> 0 bytes public/-/emojis/2/icecream.png | Bin 628 -> 0 bytes public/-/emojis/2/id.png | Bin 634 -> 0 bytes public/-/emojis/2/ideograph_advantage.png | Bin 748 -> 0 bytes public/-/emojis/2/imp.png | Bin 894 -> 0 bytes public/-/emojis/2/inbox_tray.png | Bin 676 -> 0 bytes public/-/emojis/2/incoming_envelope.png | Bin 780 -> 0 bytes public/-/emojis/2/infinity.png | Bin 447 -> 0 bytes public/-/emojis/2/information_desk_person.png | Bin 937 -> 0 bytes .../2/information_desk_person_tone1.png | Bin 841 -> 0 bytes .../2/information_desk_person_tone2.png | Bin 870 -> 0 bytes .../2/information_desk_person_tone3.png | Bin 813 -> 0 bytes .../2/information_desk_person_tone4.png | Bin 764 -> 0 bytes .../2/information_desk_person_tone5.png | Bin 781 -> 0 bytes public/-/emojis/2/information_source.png | Bin 598 -> 0 bytes public/-/emojis/2/innocent.png | Bin 938 -> 0 bytes public/-/emojis/2/interrobang.png | Bin 556 -> 0 bytes public/-/emojis/2/iphone.png | Bin 899 -> 0 bytes public/-/emojis/2/island.png | Bin 1030 -> 0 bytes public/-/emojis/2/izakaya_lantern.png | Bin 708 -> 0 bytes public/-/emojis/2/jack_o_lantern.png | Bin 1049 -> 0 bytes public/-/emojis/2/japanese_castle.png | Bin 862 -> 0 bytes public/-/emojis/2/japanese_goblin.png | Bin 1203 -> 0 bytes public/-/emojis/2/japanese_ogre.png | Bin 1181 -> 0 bytes public/-/emojis/2/jeans.png | Bin 541 -> 0 bytes public/-/emojis/2/jigsaw.png | Bin 1048 -> 0 bytes public/-/emojis/2/joy.png | Bin 1005 -> 0 bytes public/-/emojis/2/joy_cat.png | Bin 1166 -> 0 bytes public/-/emojis/2/joystick.png | Bin 744 -> 0 bytes public/-/emojis/2/juggling.png | Bin 1168 -> 0 bytes public/-/emojis/2/juggling_tone1.png | Bin 1133 -> 0 bytes public/-/emojis/2/juggling_tone2.png | Bin 1105 -> 0 bytes public/-/emojis/2/juggling_tone3.png | Bin 1129 -> 0 bytes public/-/emojis/2/juggling_tone4.png | Bin 1032 -> 0 bytes public/-/emojis/2/juggling_tone5.png | Bin 1043 -> 0 bytes public/-/emojis/2/kaaba.png | Bin 606 -> 0 bytes public/-/emojis/2/kangaroo.png | Bin 596 -> 0 bytes public/-/emojis/2/key.png | Bin 516 -> 0 bytes public/-/emojis/2/key2.png | Bin 605 -> 0 bytes public/-/emojis/2/keyboard.png | Bin 391 -> 0 bytes public/-/emojis/2/kimono.png | Bin 734 -> 0 bytes public/-/emojis/2/kiss.png | Bin 1120 -> 0 bytes public/-/emojis/2/kiss_mm.png | Bin 832 -> 0 bytes public/-/emojis/2/kiss_woman_man.png | Bin 972 -> 0 bytes public/-/emojis/2/kiss_ww.png | Bin 915 -> 0 bytes public/-/emojis/2/kissing.png | Bin 638 -> 0 bytes public/-/emojis/2/kissing_cat.png | Bin 928 -> 0 bytes public/-/emojis/2/kissing_closed_eyes.png | Bin 879 -> 0 bytes public/-/emojis/2/kissing_heart.png | Bin 828 -> 0 bytes public/-/emojis/2/kissing_smiling_eyes.png | Bin 669 -> 0 bytes public/-/emojis/2/kiwi.png | Bin 1138 -> 0 bytes public/-/emojis/2/knife.png | Bin 577 -> 0 bytes public/-/emojis/2/koala.png | Bin 832 -> 0 bytes public/-/emojis/2/koko.png | Bin 435 -> 0 bytes public/-/emojis/2/lab_coat.png | Bin 820 -> 0 bytes public/-/emojis/2/label.png | Bin 619 -> 0 bytes public/-/emojis/2/lacrosse.png | Bin 719 -> 0 bytes public/-/emojis/2/large_blue_diamond.png | Bin 464 -> 0 bytes public/-/emojis/2/large_orange_diamond.png | Bin 296 -> 0 bytes public/-/emojis/2/last_quarter_moon.png | Bin 906 -> 0 bytes .../emojis/2/last_quarter_moon_with_face.png | Bin 733 -> 0 bytes public/-/emojis/2/laughing.png | Bin 847 -> 0 bytes public/-/emojis/2/leafy_green.png | Bin 967 -> 0 bytes public/-/emojis/2/leaves.png | Bin 964 -> 0 bytes public/-/emojis/2/ledger.png | Bin 486 -> 0 bytes public/-/emojis/2/left_facing_fist.png | Bin 434 -> 0 bytes public/-/emojis/2/left_facing_fist_tone1.png | Bin 426 -> 0 bytes public/-/emojis/2/left_facing_fist_tone2.png | Bin 433 -> 0 bytes public/-/emojis/2/left_facing_fist_tone3.png | Bin 422 -> 0 bytes public/-/emojis/2/left_facing_fist_tone4.png | Bin 421 -> 0 bytes public/-/emojis/2/left_facing_fist_tone5.png | Bin 456 -> 0 bytes public/-/emojis/2/left_luggage.png | Bin 594 -> 0 bytes public/-/emojis/2/left_right_arrow.png | Bin 578 -> 0 bytes .../-/emojis/2/leftwards_arrow_with_hook.png | Bin 694 -> 0 bytes public/-/emojis/2/leg.png | Bin 422 -> 0 bytes public/-/emojis/2/leg_tone1.png | Bin 466 -> 0 bytes public/-/emojis/2/leg_tone2.png | Bin 429 -> 0 bytes public/-/emojis/2/leg_tone3.png | Bin 467 -> 0 bytes public/-/emojis/2/leg_tone4.png | Bin 411 -> 0 bytes public/-/emojis/2/leg_tone5.png | Bin 411 -> 0 bytes public/-/emojis/2/lemon.png | Bin 963 -> 0 bytes public/-/emojis/2/leo.png | Bin 681 -> 0 bytes public/-/emojis/2/leopard.png | Bin 704 -> 0 bytes public/-/emojis/2/level_slider.png | Bin 486 -> 0 bytes public/-/emojis/2/levitate.png | Bin 601 -> 0 bytes public/-/emojis/2/levitate_tone1.png | Bin 573 -> 0 bytes public/-/emojis/2/levitate_tone2.png | Bin 577 -> 0 bytes public/-/emojis/2/levitate_tone3.png | Bin 569 -> 0 bytes public/-/emojis/2/levitate_tone4.png | Bin 575 -> 0 bytes public/-/emojis/2/levitate_tone5.png | Bin 552 -> 0 bytes public/-/emojis/2/libra.png | Bin 673 -> 0 bytes public/-/emojis/2/lifter_tone1.png | Bin 804 -> 0 bytes public/-/emojis/2/lifter_tone2.png | Bin 764 -> 0 bytes public/-/emojis/2/lifter_tone3.png | Bin 756 -> 0 bytes public/-/emojis/2/lifter_tone4.png | Bin 749 -> 0 bytes public/-/emojis/2/lifter_tone5.png | Bin 766 -> 0 bytes public/-/emojis/2/light_rail.png | Bin 730 -> 0 bytes public/-/emojis/2/link.png | Bin 761 -> 0 bytes public/-/emojis/2/lion_face.png | Bin 1179 -> 0 bytes public/-/emojis/2/lips.png | Bin 594 -> 0 bytes public/-/emojis/2/lipstick.png | Bin 598 -> 0 bytes public/-/emojis/2/lizard.png | Bin 866 -> 0 bytes public/-/emojis/2/llama.png | Bin 760 -> 0 bytes public/-/emojis/2/lobster.png | Bin 886 -> 0 bytes public/-/emojis/2/lock.png | Bin 489 -> 0 bytes public/-/emojis/2/lock_with_ink_pen.png | Bin 791 -> 0 bytes public/-/emojis/2/lollipop.png | Bin 1377 -> 0 bytes public/-/emojis/2/loop.png | Bin 666 -> 0 bytes public/-/emojis/2/loud_sound.png | Bin 767 -> 0 bytes public/-/emojis/2/loudspeaker.png | Bin 1013 -> 0 bytes public/-/emojis/2/love_hotel.png | Bin 544 -> 0 bytes public/-/emojis/2/love_letter.png | Bin 294 -> 0 bytes public/-/emojis/2/love_you_gesture.png | Bin 539 -> 0 bytes public/-/emojis/2/love_you_gesture_tone1.png | Bin 619 -> 0 bytes public/-/emojis/2/love_you_gesture_tone2.png | Bin 604 -> 0 bytes public/-/emojis/2/love_you_gesture_tone3.png | Bin 549 -> 0 bytes public/-/emojis/2/love_you_gesture_tone4.png | Bin 554 -> 0 bytes public/-/emojis/2/love_you_gesture_tone5.png | Bin 605 -> 0 bytes public/-/emojis/2/low_brightness.png | Bin 633 -> 0 bytes public/-/emojis/2/luggage.png | Bin 943 -> 0 bytes public/-/emojis/2/lying_face.png | Bin 793 -> 0 bytes public/-/emojis/2/m.png | Bin 751 -> 0 bytes public/-/emojis/2/mag.png | Bin 826 -> 0 bytes public/-/emojis/2/mag_right.png | Bin 724 -> 0 bytes public/-/emojis/2/mage.png | Bin 1095 -> 0 bytes public/-/emojis/2/mage_tone1.png | Bin 1047 -> 0 bytes public/-/emojis/2/mage_tone2.png | Bin 1062 -> 0 bytes public/-/emojis/2/mage_tone3.png | Bin 1044 -> 0 bytes public/-/emojis/2/mage_tone4.png | Bin 1061 -> 0 bytes public/-/emojis/2/mage_tone5.png | Bin 1047 -> 0 bytes public/-/emojis/2/magnet.png | Bin 657 -> 0 bytes public/-/emojis/2/mahjong.png | Bin 613 -> 0 bytes public/-/emojis/2/mailbox.png | Bin 804 -> 0 bytes public/-/emojis/2/mailbox_closed.png | Bin 693 -> 0 bytes public/-/emojis/2/mailbox_with_mail.png | Bin 844 -> 0 bytes public/-/emojis/2/mailbox_with_no_mail.png | Bin 721 -> 0 bytes public/-/emojis/2/male_detective.png | Bin 1100 -> 0 bytes public/-/emojis/2/male_sign.png | Bin 578 -> 0 bytes public/-/emojis/2/man.png | Bin 807 -> 0 bytes public/-/emojis/2/man_artist.png | Bin 1070 -> 0 bytes public/-/emojis/2/man_artist_tone1.png | Bin 1059 -> 0 bytes public/-/emojis/2/man_artist_tone2.png | Bin 1078 -> 0 bytes public/-/emojis/2/man_artist_tone3.png | Bin 1020 -> 0 bytes public/-/emojis/2/man_artist_tone4.png | Bin 1049 -> 0 bytes public/-/emojis/2/man_artist_tone5.png | Bin 1046 -> 0 bytes public/-/emojis/2/man_astronaut.png | Bin 1195 -> 0 bytes public/-/emojis/2/man_astronaut_tone1.png | Bin 1282 -> 0 bytes public/-/emojis/2/man_astronaut_tone2.png | Bin 1272 -> 0 bytes public/-/emojis/2/man_astronaut_tone3.png | Bin 1307 -> 0 bytes public/-/emojis/2/man_astronaut_tone4.png | Bin 1312 -> 0 bytes public/-/emojis/2/man_astronaut_tone5.png | Bin 1144 -> 0 bytes public/-/emojis/2/man_bald.png | Bin 687 -> 0 bytes public/-/emojis/2/man_bald_tone1.png | Bin 725 -> 0 bytes public/-/emojis/2/man_bald_tone2.png | Bin 647 -> 0 bytes public/-/emojis/2/man_bald_tone3.png | Bin 700 -> 0 bytes public/-/emojis/2/man_bald_tone4.png | Bin 685 -> 0 bytes public/-/emojis/2/man_bald_tone5.png | Bin 668 -> 0 bytes public/-/emojis/2/man_biking.png | Bin 1246 -> 0 bytes public/-/emojis/2/man_biking_tone1.png | Bin 1265 -> 0 bytes public/-/emojis/2/man_biking_tone2.png | Bin 1244 -> 0 bytes public/-/emojis/2/man_biking_tone3.png | Bin 1184 -> 0 bytes public/-/emojis/2/man_biking_tone4.png | Bin 1198 -> 0 bytes public/-/emojis/2/man_biking_tone5.png | Bin 1176 -> 0 bytes public/-/emojis/2/man_bouncing_ball.png | Bin 1047 -> 0 bytes public/-/emojis/2/man_bouncing_ball_tone1.png | Bin 1116 -> 0 bytes public/-/emojis/2/man_bouncing_ball_tone2.png | Bin 1056 -> 0 bytes public/-/emojis/2/man_bouncing_ball_tone3.png | Bin 996 -> 0 bytes public/-/emojis/2/man_bouncing_ball_tone4.png | Bin 1040 -> 0 bytes public/-/emojis/2/man_bouncing_ball_tone5.png | Bin 1013 -> 0 bytes public/-/emojis/2/man_bowing.png | Bin 934 -> 0 bytes public/-/emojis/2/man_bowing_tone1.png | Bin 944 -> 0 bytes public/-/emojis/2/man_bowing_tone2.png | Bin 894 -> 0 bytes public/-/emojis/2/man_bowing_tone3.png | Bin 918 -> 0 bytes public/-/emojis/2/man_bowing_tone4.png | Bin 778 -> 0 bytes public/-/emojis/2/man_bowing_tone5.png | Bin 853 -> 0 bytes public/-/emojis/2/man_cartwheeling.png | Bin 763 -> 0 bytes public/-/emojis/2/man_cartwheeling_tone1.png | Bin 743 -> 0 bytes public/-/emojis/2/man_cartwheeling_tone2.png | Bin 708 -> 0 bytes public/-/emojis/2/man_cartwheeling_tone3.png | Bin 720 -> 0 bytes public/-/emojis/2/man_cartwheeling_tone4.png | Bin 653 -> 0 bytes public/-/emojis/2/man_cartwheeling_tone5.png | Bin 686 -> 0 bytes public/-/emojis/2/man_climbing.png | Bin 1111 -> 0 bytes public/-/emojis/2/man_climbing_tone1.png | Bin 1096 -> 0 bytes public/-/emojis/2/man_climbing_tone2.png | Bin 1033 -> 0 bytes public/-/emojis/2/man_climbing_tone3.png | Bin 969 -> 0 bytes public/-/emojis/2/man_climbing_tone4.png | Bin 1022 -> 0 bytes public/-/emojis/2/man_climbing_tone5.png | Bin 971 -> 0 bytes public/-/emojis/2/man_construction_worker.png | Bin 811 -> 0 bytes .../2/man_construction_worker_tone1.png | Bin 855 -> 0 bytes .../2/man_construction_worker_tone2.png | Bin 815 -> 0 bytes .../2/man_construction_worker_tone3.png | Bin 831 -> 0 bytes .../2/man_construction_worker_tone4.png | Bin 802 -> 0 bytes .../2/man_construction_worker_tone5.png | Bin 791 -> 0 bytes public/-/emojis/2/man_cook.png | Bin 1083 -> 0 bytes public/-/emojis/2/man_cook_tone1.png | Bin 1073 -> 0 bytes public/-/emojis/2/man_cook_tone2.png | Bin 1034 -> 0 bytes public/-/emojis/2/man_cook_tone3.png | Bin 1059 -> 0 bytes public/-/emojis/2/man_cook_tone4.png | Bin 1003 -> 0 bytes public/-/emojis/2/man_cook_tone5.png | Bin 1029 -> 0 bytes public/-/emojis/2/man_curly_haired.png | Bin 864 -> 0 bytes public/-/emojis/2/man_curly_haired_tone1.png | Bin 873 -> 0 bytes public/-/emojis/2/man_curly_haired_tone2.png | Bin 891 -> 0 bytes public/-/emojis/2/man_curly_haired_tone3.png | Bin 824 -> 0 bytes public/-/emojis/2/man_curly_haired_tone4.png | Bin 744 -> 0 bytes public/-/emojis/2/man_curly_haired_tone5.png | Bin 803 -> 0 bytes public/-/emojis/2/man_dancing.png | Bin 809 -> 0 bytes public/-/emojis/2/man_dancing_tone1.png | Bin 789 -> 0 bytes public/-/emojis/2/man_dancing_tone2.png | Bin 816 -> 0 bytes public/-/emojis/2/man_dancing_tone3.png | Bin 819 -> 0 bytes public/-/emojis/2/man_dancing_tone4.png | Bin 737 -> 0 bytes public/-/emojis/2/man_dancing_tone5.png | Bin 732 -> 0 bytes public/-/emojis/2/man_detective.png | Bin 1100 -> 0 bytes public/-/emojis/2/man_detective_tone1.png | Bin 1057 -> 0 bytes public/-/emojis/2/man_detective_tone2.png | Bin 1082 -> 0 bytes public/-/emojis/2/man_detective_tone3.png | Bin 1081 -> 0 bytes public/-/emojis/2/man_detective_tone4.png | Bin 1019 -> 0 bytes public/-/emojis/2/man_detective_tone5.png | Bin 1063 -> 0 bytes public/-/emojis/2/man_elf.png | Bin 866 -> 0 bytes public/-/emojis/2/man_elf_tone1.png | Bin 890 -> 0 bytes public/-/emojis/2/man_elf_tone2.png | Bin 882 -> 0 bytes public/-/emojis/2/man_elf_tone3.png | Bin 788 -> 0 bytes public/-/emojis/2/man_elf_tone4.png | Bin 886 -> 0 bytes public/-/emojis/2/man_elf_tone5.png | Bin 916 -> 0 bytes public/-/emojis/2/man_facepalming.png | Bin 756 -> 0 bytes public/-/emojis/2/man_facepalming_tone1.png | Bin 821 -> 0 bytes public/-/emojis/2/man_facepalming_tone2.png | Bin 764 -> 0 bytes public/-/emojis/2/man_facepalming_tone3.png | Bin 721 -> 0 bytes public/-/emojis/2/man_facepalming_tone4.png | Bin 674 -> 0 bytes public/-/emojis/2/man_facepalming_tone5.png | Bin 641 -> 0 bytes public/-/emojis/2/man_factory_worker.png | Bin 1035 -> 0 bytes .../-/emojis/2/man_factory_worker_tone1.png | Bin 1003 -> 0 bytes .../-/emojis/2/man_factory_worker_tone2.png | Bin 1053 -> 0 bytes .../-/emojis/2/man_factory_worker_tone3.png | Bin 965 -> 0 bytes .../-/emojis/2/man_factory_worker_tone4.png | Bin 955 -> 0 bytes .../-/emojis/2/man_factory_worker_tone5.png | Bin 897 -> 0 bytes public/-/emojis/2/man_fairy.png | Bin 1053 -> 0 bytes public/-/emojis/2/man_fairy_tone1.png | Bin 1105 -> 0 bytes public/-/emojis/2/man_fairy_tone2.png | Bin 1029 -> 0 bytes public/-/emojis/2/man_fairy_tone3.png | Bin 1098 -> 0 bytes public/-/emojis/2/man_fairy_tone4.png | Bin 1085 -> 0 bytes public/-/emojis/2/man_fairy_tone5.png | Bin 1089 -> 0 bytes public/-/emojis/2/man_farmer.png | Bin 913 -> 0 bytes public/-/emojis/2/man_farmer_tone1.png | Bin 957 -> 0 bytes public/-/emojis/2/man_farmer_tone2.png | Bin 886 -> 0 bytes public/-/emojis/2/man_farmer_tone3.png | Bin 915 -> 0 bytes public/-/emojis/2/man_farmer_tone4.png | Bin 825 -> 0 bytes public/-/emojis/2/man_farmer_tone5.png | Bin 901 -> 0 bytes public/-/emojis/2/man_firefighter.png | Bin 995 -> 0 bytes public/-/emojis/2/man_firefighter_tone1.png | Bin 1019 -> 0 bytes public/-/emojis/2/man_firefighter_tone2.png | Bin 975 -> 0 bytes public/-/emojis/2/man_firefighter_tone3.png | Bin 1036 -> 0 bytes public/-/emojis/2/man_firefighter_tone4.png | Bin 931 -> 0 bytes public/-/emojis/2/man_firefighter_tone5.png | Bin 1032 -> 0 bytes public/-/emojis/2/man_frowning.png | Bin 695 -> 0 bytes public/-/emojis/2/man_frowning_tone1.png | Bin 698 -> 0 bytes public/-/emojis/2/man_frowning_tone2.png | Bin 653 -> 0 bytes public/-/emojis/2/man_frowning_tone3.png | Bin 656 -> 0 bytes public/-/emojis/2/man_frowning_tone4.png | Bin 609 -> 0 bytes public/-/emojis/2/man_frowning_tone5.png | Bin 679 -> 0 bytes public/-/emojis/2/man_genie.png | Bin 937 -> 0 bytes public/-/emojis/2/man_gesturing_no.png | Bin 766 -> 0 bytes public/-/emojis/2/man_gesturing_no_tone1.png | Bin 773 -> 0 bytes public/-/emojis/2/man_gesturing_no_tone2.png | Bin 702 -> 0 bytes public/-/emojis/2/man_gesturing_no_tone3.png | Bin 732 -> 0 bytes public/-/emojis/2/man_gesturing_no_tone4.png | Bin 699 -> 0 bytes public/-/emojis/2/man_gesturing_no_tone5.png | Bin 702 -> 0 bytes public/-/emojis/2/man_gesturing_ok.png | Bin 966 -> 0 bytes public/-/emojis/2/man_gesturing_ok_tone1.png | Bin 1015 -> 0 bytes public/-/emojis/2/man_gesturing_ok_tone2.png | Bin 921 -> 0 bytes public/-/emojis/2/man_gesturing_ok_tone3.png | Bin 959 -> 0 bytes public/-/emojis/2/man_gesturing_ok_tone4.png | Bin 967 -> 0 bytes public/-/emojis/2/man_gesturing_ok_tone5.png | Bin 945 -> 0 bytes .../-/emojis/2/man_getting_face_massage.png | Bin 766 -> 0 bytes .../2/man_getting_face_massage_tone1.png | Bin 756 -> 0 bytes .../2/man_getting_face_massage_tone2.png | Bin 736 -> 0 bytes .../2/man_getting_face_massage_tone3.png | Bin 743 -> 0 bytes .../2/man_getting_face_massage_tone4.png | Bin 703 -> 0 bytes .../2/man_getting_face_massage_tone5.png | Bin 685 -> 0 bytes public/-/emojis/2/man_getting_haircut.png | Bin 885 -> 0 bytes .../-/emojis/2/man_getting_haircut_tone1.png | Bin 902 -> 0 bytes .../-/emojis/2/man_getting_haircut_tone2.png | Bin 812 -> 0 bytes .../-/emojis/2/man_getting_haircut_tone3.png | Bin 828 -> 0 bytes .../-/emojis/2/man_getting_haircut_tone4.png | Bin 822 -> 0 bytes .../-/emojis/2/man_getting_haircut_tone5.png | Bin 812 -> 0 bytes public/-/emojis/2/man_golfing.png | Bin 803 -> 0 bytes public/-/emojis/2/man_golfing_tone1.png | Bin 802 -> 0 bytes public/-/emojis/2/man_golfing_tone2.png | Bin 812 -> 0 bytes public/-/emojis/2/man_golfing_tone3.png | Bin 819 -> 0 bytes public/-/emojis/2/man_golfing_tone4.png | Bin 766 -> 0 bytes public/-/emojis/2/man_golfing_tone5.png | Bin 742 -> 0 bytes public/-/emojis/2/man_guard.png | Bin 604 -> 0 bytes public/-/emojis/2/man_guard_tone1.png | Bin 631 -> 0 bytes public/-/emojis/2/man_guard_tone2.png | Bin 624 -> 0 bytes public/-/emojis/2/man_guard_tone3.png | Bin 589 -> 0 bytes public/-/emojis/2/man_guard_tone4.png | Bin 578 -> 0 bytes public/-/emojis/2/man_guard_tone5.png | Bin 575 -> 0 bytes public/-/emojis/2/man_health_worker.png | Bin 1030 -> 0 bytes public/-/emojis/2/man_health_worker_tone1.png | Bin 1031 -> 0 bytes public/-/emojis/2/man_health_worker_tone2.png | Bin 1009 -> 0 bytes public/-/emojis/2/man_health_worker_tone3.png | Bin 951 -> 0 bytes public/-/emojis/2/man_health_worker_tone4.png | Bin 989 -> 0 bytes public/-/emojis/2/man_health_worker_tone5.png | Bin 886 -> 0 bytes public/-/emojis/2/man_in_lotus_position.png | Bin 839 -> 0 bytes .../emojis/2/man_in_lotus_position_tone1.png | Bin 885 -> 0 bytes .../emojis/2/man_in_lotus_position_tone2.png | Bin 805 -> 0 bytes .../emojis/2/man_in_lotus_position_tone3.png | Bin 781 -> 0 bytes .../emojis/2/man_in_lotus_position_tone4.png | Bin 761 -> 0 bytes .../emojis/2/man_in_lotus_position_tone5.png | Bin 768 -> 0 bytes public/-/emojis/2/man_in_steamy_room.png | Bin 834 -> 0 bytes .../-/emojis/2/man_in_steamy_room_tone1.png | Bin 821 -> 0 bytes .../-/emojis/2/man_in_steamy_room_tone2.png | Bin 812 -> 0 bytes .../-/emojis/2/man_in_steamy_room_tone3.png | Bin 781 -> 0 bytes .../-/emojis/2/man_in_steamy_room_tone4.png | Bin 817 -> 0 bytes .../-/emojis/2/man_in_steamy_room_tone5.png | Bin 773 -> 0 bytes public/-/emojis/2/man_in_tuxedo.png | Bin 850 -> 0 bytes public/-/emojis/2/man_in_tuxedo_tone1.png | Bin 903 -> 0 bytes public/-/emojis/2/man_in_tuxedo_tone2.png | Bin 886 -> 0 bytes public/-/emojis/2/man_in_tuxedo_tone3.png | Bin 888 -> 0 bytes public/-/emojis/2/man_in_tuxedo_tone4.png | Bin 856 -> 0 bytes public/-/emojis/2/man_in_tuxedo_tone5.png | Bin 914 -> 0 bytes public/-/emojis/2/man_judge.png | Bin 1019 -> 0 bytes public/-/emojis/2/man_judge_tone1.png | Bin 984 -> 0 bytes public/-/emojis/2/man_judge_tone2.png | Bin 1036 -> 0 bytes public/-/emojis/2/man_judge_tone3.png | Bin 937 -> 0 bytes public/-/emojis/2/man_judge_tone4.png | Bin 890 -> 0 bytes public/-/emojis/2/man_judge_tone5.png | Bin 906 -> 0 bytes public/-/emojis/2/man_juggling.png | Bin 1168 -> 0 bytes public/-/emojis/2/man_juggling_tone1.png | Bin 1133 -> 0 bytes public/-/emojis/2/man_juggling_tone2.png | Bin 1105 -> 0 bytes public/-/emojis/2/man_juggling_tone3.png | Bin 1129 -> 0 bytes public/-/emojis/2/man_juggling_tone4.png | Bin 1032 -> 0 bytes public/-/emojis/2/man_juggling_tone5.png | Bin 1043 -> 0 bytes public/-/emojis/2/man_lifting_weights.png | Bin 846 -> 0 bytes .../-/emojis/2/man_lifting_weights_tone1.png | Bin 804 -> 0 bytes .../-/emojis/2/man_lifting_weights_tone2.png | Bin 764 -> 0 bytes .../-/emojis/2/man_lifting_weights_tone3.png | Bin 756 -> 0 bytes .../-/emojis/2/man_lifting_weights_tone4.png | Bin 749 -> 0 bytes .../-/emojis/2/man_lifting_weights_tone5.png | Bin 766 -> 0 bytes public/-/emojis/2/man_mage.png | Bin 1061 -> 0 bytes public/-/emojis/2/man_mage_tone1.png | Bin 1040 -> 0 bytes public/-/emojis/2/man_mage_tone2.png | Bin 1037 -> 0 bytes public/-/emojis/2/man_mage_tone3.png | Bin 1038 -> 0 bytes public/-/emojis/2/man_mage_tone4.png | Bin 1028 -> 0 bytes public/-/emojis/2/man_mage_tone5.png | Bin 1030 -> 0 bytes public/-/emojis/2/man_mechanic.png | Bin 1016 -> 0 bytes public/-/emojis/2/man_mechanic_tone1.png | Bin 1005 -> 0 bytes public/-/emojis/2/man_mechanic_tone2.png | Bin 892 -> 0 bytes public/-/emojis/2/man_mechanic_tone3.png | Bin 955 -> 0 bytes public/-/emojis/2/man_mechanic_tone4.png | Bin 975 -> 0 bytes public/-/emojis/2/man_mechanic_tone5.png | Bin 948 -> 0 bytes public/-/emojis/2/man_mountain_biking.png | Bin 1357 -> 0 bytes .../-/emojis/2/man_mountain_biking_tone1.png | Bin 1349 -> 0 bytes .../-/emojis/2/man_mountain_biking_tone2.png | Bin 1344 -> 0 bytes .../-/emojis/2/man_mountain_biking_tone3.png | Bin 1279 -> 0 bytes .../-/emojis/2/man_mountain_biking_tone4.png | Bin 1244 -> 0 bytes .../-/emojis/2/man_mountain_biking_tone5.png | Bin 1304 -> 0 bytes public/-/emojis/2/man_office_worker.png | Bin 910 -> 0 bytes public/-/emojis/2/man_office_worker_tone1.png | Bin 888 -> 0 bytes public/-/emojis/2/man_office_worker_tone2.png | Bin 937 -> 0 bytes public/-/emojis/2/man_office_worker_tone3.png | Bin 800 -> 0 bytes public/-/emojis/2/man_office_worker_tone4.png | Bin 796 -> 0 bytes public/-/emojis/2/man_office_worker_tone5.png | Bin 817 -> 0 bytes public/-/emojis/2/man_pilot.png | Bin 1045 -> 0 bytes public/-/emojis/2/man_pilot_tone1.png | Bin 996 -> 0 bytes public/-/emojis/2/man_pilot_tone2.png | Bin 963 -> 0 bytes public/-/emojis/2/man_pilot_tone3.png | Bin 928 -> 0 bytes public/-/emojis/2/man_pilot_tone4.png | Bin 946 -> 0 bytes public/-/emojis/2/man_pilot_tone5.png | Bin 877 -> 0 bytes public/-/emojis/2/man_playing_handball.png | Bin 990 -> 0 bytes .../-/emojis/2/man_playing_handball_tone1.png | Bin 1014 -> 0 bytes .../-/emojis/2/man_playing_handball_tone2.png | Bin 971 -> 0 bytes .../-/emojis/2/man_playing_handball_tone3.png | Bin 962 -> 0 bytes .../-/emojis/2/man_playing_handball_tone4.png | Bin 896 -> 0 bytes .../-/emojis/2/man_playing_handball_tone5.png | Bin 906 -> 0 bytes public/-/emojis/2/man_playing_water_polo.png | Bin 796 -> 0 bytes .../emojis/2/man_playing_water_polo_tone1.png | Bin 753 -> 0 bytes .../emojis/2/man_playing_water_polo_tone2.png | Bin 758 -> 0 bytes .../emojis/2/man_playing_water_polo_tone3.png | Bin 735 -> 0 bytes .../emojis/2/man_playing_water_polo_tone4.png | Bin 741 -> 0 bytes .../emojis/2/man_playing_water_polo_tone5.png | Bin 717 -> 0 bytes public/-/emojis/2/man_police_officer.png | Bin 943 -> 0 bytes .../-/emojis/2/man_police_officer_tone1.png | Bin 917 -> 0 bytes .../-/emojis/2/man_police_officer_tone2.png | Bin 920 -> 0 bytes .../-/emojis/2/man_police_officer_tone3.png | Bin 880 -> 0 bytes .../-/emojis/2/man_police_officer_tone4.png | Bin 917 -> 0 bytes .../-/emojis/2/man_police_officer_tone5.png | Bin 881 -> 0 bytes public/-/emojis/2/man_pouting.png | Bin 661 -> 0 bytes public/-/emojis/2/man_pouting_tone1.png | Bin 714 -> 0 bytes public/-/emojis/2/man_pouting_tone2.png | Bin 679 -> 0 bytes public/-/emojis/2/man_pouting_tone3.png | Bin 627 -> 0 bytes public/-/emojis/2/man_pouting_tone4.png | Bin 664 -> 0 bytes public/-/emojis/2/man_pouting_tone5.png | Bin 586 -> 0 bytes public/-/emojis/2/man_raising_hand.png | Bin 860 -> 0 bytes public/-/emojis/2/man_raising_hand_tone1.png | Bin 890 -> 0 bytes public/-/emojis/2/man_raising_hand_tone2.png | Bin 810 -> 0 bytes public/-/emojis/2/man_raising_hand_tone3.png | Bin 838 -> 0 bytes public/-/emojis/2/man_raising_hand_tone4.png | Bin 800 -> 0 bytes public/-/emojis/2/man_raising_hand_tone5.png | Bin 870 -> 0 bytes public/-/emojis/2/man_red_haired.png | Bin 776 -> 0 bytes public/-/emojis/2/man_red_haired_tone1.png | Bin 758 -> 0 bytes public/-/emojis/2/man_red_haired_tone2.png | Bin 742 -> 0 bytes public/-/emojis/2/man_red_haired_tone3.png | Bin 764 -> 0 bytes public/-/emojis/2/man_red_haired_tone4.png | Bin 780 -> 0 bytes public/-/emojis/2/man_red_haired_tone5.png | Bin 825 -> 0 bytes public/-/emojis/2/man_rowing_boat.png | Bin 822 -> 0 bytes public/-/emojis/2/man_rowing_boat_tone1.png | Bin 872 -> 0 bytes public/-/emojis/2/man_rowing_boat_tone2.png | Bin 806 -> 0 bytes public/-/emojis/2/man_rowing_boat_tone3.png | Bin 727 -> 0 bytes public/-/emojis/2/man_rowing_boat_tone4.png | Bin 808 -> 0 bytes public/-/emojis/2/man_rowing_boat_tone5.png | Bin 790 -> 0 bytes public/-/emojis/2/man_running.png | Bin 785 -> 0 bytes public/-/emojis/2/man_running_tone1.png | Bin 763 -> 0 bytes public/-/emojis/2/man_running_tone2.png | Bin 696 -> 0 bytes public/-/emojis/2/man_running_tone3.png | Bin 729 -> 0 bytes public/-/emojis/2/man_running_tone4.png | Bin 689 -> 0 bytes public/-/emojis/2/man_running_tone5.png | Bin 699 -> 0 bytes public/-/emojis/2/man_scientist.png | Bin 1102 -> 0 bytes public/-/emojis/2/man_scientist_tone1.png | Bin 1051 -> 0 bytes public/-/emojis/2/man_scientist_tone2.png | Bin 1026 -> 0 bytes public/-/emojis/2/man_scientist_tone3.png | Bin 1058 -> 0 bytes public/-/emojis/2/man_scientist_tone4.png | Bin 1006 -> 0 bytes public/-/emojis/2/man_scientist_tone5.png | Bin 980 -> 0 bytes public/-/emojis/2/man_shrugging.png | Bin 731 -> 0 bytes public/-/emojis/2/man_shrugging_tone1.png | Bin 738 -> 0 bytes public/-/emojis/2/man_shrugging_tone2.png | Bin 668 -> 0 bytes public/-/emojis/2/man_shrugging_tone3.png | Bin 676 -> 0 bytes public/-/emojis/2/man_shrugging_tone4.png | Bin 710 -> 0 bytes public/-/emojis/2/man_shrugging_tone5.png | Bin 672 -> 0 bytes public/-/emojis/2/man_singer.png | Bin 1062 -> 0 bytes public/-/emojis/2/man_singer_tone1.png | Bin 1001 -> 0 bytes public/-/emojis/2/man_singer_tone2.png | Bin 1014 -> 0 bytes public/-/emojis/2/man_singer_tone3.png | Bin 929 -> 0 bytes public/-/emojis/2/man_singer_tone4.png | Bin 953 -> 0 bytes public/-/emojis/2/man_singer_tone5.png | Bin 903 -> 0 bytes public/-/emojis/2/man_student.png | Bin 956 -> 0 bytes public/-/emojis/2/man_student_tone1.png | Bin 991 -> 0 bytes public/-/emojis/2/man_student_tone2.png | Bin 959 -> 0 bytes public/-/emojis/2/man_student_tone3.png | Bin 921 -> 0 bytes public/-/emojis/2/man_student_tone4.png | Bin 937 -> 0 bytes public/-/emojis/2/man_student_tone5.png | Bin 868 -> 0 bytes public/-/emojis/2/man_superhero.png | Bin 1132 -> 0 bytes public/-/emojis/2/man_superhero_tone1.png | Bin 1115 -> 0 bytes public/-/emojis/2/man_superhero_tone2.png | Bin 1128 -> 0 bytes public/-/emojis/2/man_superhero_tone3.png | Bin 1100 -> 0 bytes public/-/emojis/2/man_superhero_tone4.png | Bin 1066 -> 0 bytes public/-/emojis/2/man_superhero_tone5.png | Bin 1066 -> 0 bytes public/-/emojis/2/man_supervillain.png | Bin 961 -> 0 bytes public/-/emojis/2/man_supervillain_tone1.png | Bin 982 -> 0 bytes public/-/emojis/2/man_supervillain_tone2.png | Bin 915 -> 0 bytes public/-/emojis/2/man_supervillain_tone3.png | Bin 915 -> 0 bytes public/-/emojis/2/man_supervillain_tone4.png | Bin 920 -> 0 bytes public/-/emojis/2/man_supervillain_tone5.png | Bin 866 -> 0 bytes public/-/emojis/2/man_surfing.png | Bin 965 -> 0 bytes public/-/emojis/2/man_surfing_tone1.png | Bin 980 -> 0 bytes public/-/emojis/2/man_surfing_tone2.png | Bin 920 -> 0 bytes public/-/emojis/2/man_surfing_tone3.png | Bin 905 -> 0 bytes public/-/emojis/2/man_surfing_tone4.png | Bin 928 -> 0 bytes public/-/emojis/2/man_surfing_tone5.png | Bin 995 -> 0 bytes public/-/emojis/2/man_swimming.png | Bin 611 -> 0 bytes public/-/emojis/2/man_swimming_tone1.png | Bin 641 -> 0 bytes public/-/emojis/2/man_swimming_tone2.png | Bin 595 -> 0 bytes public/-/emojis/2/man_swimming_tone3.png | Bin 574 -> 0 bytes public/-/emojis/2/man_swimming_tone4.png | Bin 570 -> 0 bytes public/-/emojis/2/man_swimming_tone5.png | Bin 564 -> 0 bytes public/-/emojis/2/man_teacher.png | Bin 895 -> 0 bytes public/-/emojis/2/man_teacher_tone1.png | Bin 897 -> 0 bytes public/-/emojis/2/man_teacher_tone2.png | Bin 887 -> 0 bytes public/-/emojis/2/man_teacher_tone3.png | Bin 911 -> 0 bytes public/-/emojis/2/man_teacher_tone4.png | Bin 822 -> 0 bytes public/-/emojis/2/man_teacher_tone5.png | Bin 771 -> 0 bytes public/-/emojis/2/man_technologist.png | Bin 686 -> 0 bytes public/-/emojis/2/man_technologist_tone1.png | Bin 662 -> 0 bytes public/-/emojis/2/man_technologist_tone2.png | Bin 694 -> 0 bytes public/-/emojis/2/man_technologist_tone3.png | Bin 683 -> 0 bytes public/-/emojis/2/man_technologist_tone4.png | Bin 679 -> 0 bytes public/-/emojis/2/man_technologist_tone5.png | Bin 622 -> 0 bytes public/-/emojis/2/man_tipping_hand.png | Bin 773 -> 0 bytes public/-/emojis/2/man_tipping_hand_tone1.png | Bin 754 -> 0 bytes public/-/emojis/2/man_tipping_hand_tone2.png | Bin 751 -> 0 bytes public/-/emojis/2/man_tipping_hand_tone3.png | Bin 731 -> 0 bytes public/-/emojis/2/man_tipping_hand_tone4.png | Bin 726 -> 0 bytes public/-/emojis/2/man_tipping_hand_tone5.png | Bin 694 -> 0 bytes public/-/emojis/2/man_tone1.png | Bin 824 -> 0 bytes public/-/emojis/2/man_tone2.png | Bin 816 -> 0 bytes public/-/emojis/2/man_tone3.png | Bin 753 -> 0 bytes public/-/emojis/2/man_tone4.png | Bin 780 -> 0 bytes public/-/emojis/2/man_tone5.png | Bin 735 -> 0 bytes public/-/emojis/2/man_vampire.png | Bin 1087 -> 0 bytes public/-/emojis/2/man_vampire_tone1.png | Bin 1065 -> 0 bytes public/-/emojis/2/man_vampire_tone2.png | Bin 988 -> 0 bytes public/-/emojis/2/man_vampire_tone3.png | Bin 1021 -> 0 bytes public/-/emojis/2/man_vampire_tone4.png | Bin 1001 -> 0 bytes public/-/emojis/2/man_vampire_tone5.png | Bin 962 -> 0 bytes public/-/emojis/2/man_walking.png | Bin 659 -> 0 bytes public/-/emojis/2/man_walking_tone1.png | Bin 664 -> 0 bytes public/-/emojis/2/man_walking_tone2.png | Bin 664 -> 0 bytes public/-/emojis/2/man_walking_tone3.png | Bin 656 -> 0 bytes public/-/emojis/2/man_walking_tone4.png | Bin 646 -> 0 bytes public/-/emojis/2/man_walking_tone5.png | Bin 633 -> 0 bytes public/-/emojis/2/man_wearing_turban.png | Bin 885 -> 0 bytes .../-/emojis/2/man_wearing_turban_tone1.png | Bin 891 -> 0 bytes .../-/emojis/2/man_wearing_turban_tone2.png | Bin 901 -> 0 bytes .../-/emojis/2/man_wearing_turban_tone3.png | Bin 907 -> 0 bytes .../-/emojis/2/man_wearing_turban_tone4.png | Bin 890 -> 0 bytes .../-/emojis/2/man_wearing_turban_tone5.png | Bin 911 -> 0 bytes public/-/emojis/2/man_white_haired.png | Bin 849 -> 0 bytes public/-/emojis/2/man_white_haired_tone1.png | Bin 805 -> 0 bytes public/-/emojis/2/man_white_haired_tone2.png | Bin 773 -> 0 bytes public/-/emojis/2/man_white_haired_tone3.png | Bin 819 -> 0 bytes public/-/emojis/2/man_white_haired_tone4.png | Bin 814 -> 0 bytes public/-/emojis/2/man_white_haired_tone5.png | Bin 858 -> 0 bytes public/-/emojis/2/man_with_gua_pi_mao.png | Bin 858 -> 0 bytes .../-/emojis/2/man_with_gua_pi_mao_tone1.png | Bin 810 -> 0 bytes .../-/emojis/2/man_with_gua_pi_mao_tone2.png | Bin 864 -> 0 bytes .../-/emojis/2/man_with_gua_pi_mao_tone3.png | Bin 788 -> 0 bytes .../-/emojis/2/man_with_gua_pi_mao_tone4.png | Bin 713 -> 0 bytes .../-/emojis/2/man_with_gua_pi_mao_tone5.png | Bin 798 -> 0 bytes public/-/emojis/2/man_with_turban.png | Bin 885 -> 0 bytes public/-/emojis/2/man_with_turban_tone1.png | Bin 891 -> 0 bytes public/-/emojis/2/man_with_turban_tone2.png | Bin 901 -> 0 bytes public/-/emojis/2/man_with_turban_tone3.png | Bin 907 -> 0 bytes public/-/emojis/2/man_with_turban_tone4.png | Bin 890 -> 0 bytes public/-/emojis/2/man_with_turban_tone5.png | Bin 911 -> 0 bytes public/-/emojis/2/man_zombie.png | Bin 901 -> 0 bytes public/-/emojis/2/mango.png | Bin 1000 -> 0 bytes public/-/emojis/2/mans_shoe.png | Bin 585 -> 0 bytes public/-/emojis/2/map.png | Bin 1064 -> 0 bytes public/-/emojis/2/maple_leaf.png | Bin 853 -> 0 bytes public/-/emojis/2/martial_arts_uniform.png | Bin 873 -> 0 bytes public/-/emojis/2/mask.png | Bin 769 -> 0 bytes public/-/emojis/2/massage.png | Bin 899 -> 0 bytes public/-/emojis/2/massage_tone1.png | Bin 881 -> 0 bytes public/-/emojis/2/massage_tone2.png | Bin 844 -> 0 bytes public/-/emojis/2/massage_tone3.png | Bin 792 -> 0 bytes public/-/emojis/2/massage_tone4.png | Bin 801 -> 0 bytes public/-/emojis/2/massage_tone5.png | Bin 699 -> 0 bytes public/-/emojis/2/meat_on_bone.png | Bin 851 -> 0 bytes public/-/emojis/2/medal.png | Bin 1025 -> 0 bytes public/-/emojis/2/medical_symbol.png | Bin 610 -> 0 bytes public/-/emojis/2/mega.png | Bin 873 -> 0 bytes public/-/emojis/2/melon.png | Bin 865 -> 0 bytes .../emojis/2/men_with_bunny_ears_partying.png | Bin 678 -> 0 bytes public/-/emojis/2/men_wrestling.png | Bin 1304 -> 0 bytes public/-/emojis/2/menorah.png | Bin 839 -> 0 bytes public/-/emojis/2/mens.png | Bin 617 -> 0 bytes public/-/emojis/2/mermaid.png | Bin 1318 -> 0 bytes public/-/emojis/2/mermaid_tone1.png | Bin 1309 -> 0 bytes public/-/emojis/2/mermaid_tone2.png | Bin 1239 -> 0 bytes public/-/emojis/2/mermaid_tone3.png | Bin 1301 -> 0 bytes public/-/emojis/2/mermaid_tone4.png | Bin 1258 -> 0 bytes public/-/emojis/2/mermaid_tone5.png | Bin 1277 -> 0 bytes public/-/emojis/2/merman.png | Bin 1248 -> 0 bytes public/-/emojis/2/merman_tone1.png | Bin 1293 -> 0 bytes public/-/emojis/2/merman_tone2.png | Bin 1243 -> 0 bytes public/-/emojis/2/merman_tone3.png | Bin 1231 -> 0 bytes public/-/emojis/2/merman_tone4.png | Bin 1231 -> 0 bytes public/-/emojis/2/merman_tone5.png | Bin 1184 -> 0 bytes public/-/emojis/2/merperson.png | Bin 1290 -> 0 bytes public/-/emojis/2/merperson_tone1.png | Bin 1309 -> 0 bytes public/-/emojis/2/merperson_tone2.png | Bin 1239 -> 0 bytes public/-/emojis/2/merperson_tone3.png | Bin 1301 -> 0 bytes public/-/emojis/2/merperson_tone4.png | Bin 1258 -> 0 bytes public/-/emojis/2/merperson_tone5.png | Bin 1277 -> 0 bytes public/-/emojis/2/metal.png | Bin 523 -> 0 bytes public/-/emojis/2/metal_tone1.png | Bin 511 -> 0 bytes public/-/emojis/2/metal_tone2.png | Bin 512 -> 0 bytes public/-/emojis/2/metal_tone3.png | Bin 539 -> 0 bytes public/-/emojis/2/metal_tone4.png | Bin 522 -> 0 bytes public/-/emojis/2/metal_tone5.png | Bin 557 -> 0 bytes public/-/emojis/2/metro.png | Bin 812 -> 0 bytes public/-/emojis/2/microbe.png | Bin 717 -> 0 bytes public/-/emojis/2/microphone.png | Bin 774 -> 0 bytes public/-/emojis/2/microphone2.png | Bin 949 -> 0 bytes public/-/emojis/2/microscope.png | Bin 822 -> 0 bytes public/-/emojis/2/middle_finger.png | Bin 447 -> 0 bytes public/-/emojis/2/middle_finger_tone1.png | Bin 432 -> 0 bytes public/-/emojis/2/middle_finger_tone2.png | Bin 452 -> 0 bytes public/-/emojis/2/middle_finger_tone3.png | Bin 457 -> 0 bytes public/-/emojis/2/middle_finger_tone4.png | Bin 457 -> 0 bytes public/-/emojis/2/middle_finger_tone5.png | Bin 472 -> 0 bytes public/-/emojis/2/military_medal.png | Bin 693 -> 0 bytes public/-/emojis/2/milk.png | Bin 511 -> 0 bytes public/-/emojis/2/milky_way.png | Bin 1263 -> 0 bytes public/-/emojis/2/minibus.png | Bin 687 -> 0 bytes public/-/emojis/2/minidisc.png | Bin 833 -> 0 bytes public/-/emojis/2/mobile_phone_off.png | Bin 748 -> 0 bytes public/-/emojis/2/money_mouth.png | Bin 915 -> 0 bytes public/-/emojis/2/money_with_wings.png | Bin 1009 -> 0 bytes public/-/emojis/2/moneybag.png | Bin 747 -> 0 bytes public/-/emojis/2/monkey.png | Bin 1111 -> 0 bytes public/-/emojis/2/monkey_face.png | Bin 742 -> 0 bytes public/-/emojis/2/monorail.png | Bin 585 -> 0 bytes public/-/emojis/2/moon_cake.png | Bin 762 -> 0 bytes public/-/emojis/2/mortar_board.png | Bin 633 -> 0 bytes public/-/emojis/2/mosque.png | Bin 699 -> 0 bytes public/-/emojis/2/mosquito.png | Bin 896 -> 0 bytes public/-/emojis/2/motor_scooter.png | Bin 816 -> 0 bytes public/-/emojis/2/motorboat.png | Bin 639 -> 0 bytes public/-/emojis/2/motorcycle.png | Bin 1195 -> 0 bytes public/-/emojis/2/motorway.png | Bin 802 -> 0 bytes public/-/emojis/2/mount_fuji.png | Bin 898 -> 0 bytes public/-/emojis/2/mountain.png | Bin 783 -> 0 bytes public/-/emojis/2/mountain_bicyclist.png | Bin 1357 -> 0 bytes .../-/emojis/2/mountain_bicyclist_tone1.png | Bin 1349 -> 0 bytes .../-/emojis/2/mountain_bicyclist_tone2.png | Bin 1344 -> 0 bytes .../-/emojis/2/mountain_bicyclist_tone3.png | Bin 1279 -> 0 bytes .../-/emojis/2/mountain_bicyclist_tone4.png | Bin 1244 -> 0 bytes .../-/emojis/2/mountain_bicyclist_tone5.png | Bin 1304 -> 0 bytes public/-/emojis/2/mountain_cableway.png | Bin 690 -> 0 bytes public/-/emojis/2/mountain_railway.png | Bin 751 -> 0 bytes public/-/emojis/2/mountain_snow.png | Bin 904 -> 0 bytes public/-/emojis/2/mouse.png | Bin 859 -> 0 bytes public/-/emojis/2/mouse2.png | Bin 718 -> 0 bytes public/-/emojis/2/mouse_three_button.png | Bin 678 -> 0 bytes public/-/emojis/2/movie_camera.png | Bin 912 -> 0 bytes public/-/emojis/2/moyai.png | Bin 815 -> 0 bytes public/-/emojis/2/mrs_claus.png | Bin 1138 -> 0 bytes public/-/emojis/2/mrs_claus_tone1.png | Bin 1011 -> 0 bytes public/-/emojis/2/mrs_claus_tone2.png | Bin 986 -> 0 bytes public/-/emojis/2/mrs_claus_tone3.png | Bin 1035 -> 0 bytes public/-/emojis/2/mrs_claus_tone4.png | Bin 1020 -> 0 bytes public/-/emojis/2/mrs_claus_tone5.png | Bin 1050 -> 0 bytes public/-/emojis/2/muscle.png | Bin 623 -> 0 bytes public/-/emojis/2/muscle_tone1.png | Bin 581 -> 0 bytes public/-/emojis/2/muscle_tone2.png | Bin 562 -> 0 bytes public/-/emojis/2/muscle_tone3.png | Bin 594 -> 0 bytes public/-/emojis/2/muscle_tone4.png | Bin 619 -> 0 bytes public/-/emojis/2/muscle_tone5.png | Bin 634 -> 0 bytes public/-/emojis/2/mushroom.png | Bin 914 -> 0 bytes public/-/emojis/2/musical_keyboard.png | Bin 554 -> 0 bytes public/-/emojis/2/musical_note.png | Bin 435 -> 0 bytes public/-/emojis/2/musical_score.png | Bin 604 -> 0 bytes public/-/emojis/2/mute.png | Bin 1117 -> 0 bytes public/-/emojis/2/nail_care.png | Bin 802 -> 0 bytes public/-/emojis/2/nail_care_tone1.png | Bin 751 -> 0 bytes public/-/emojis/2/nail_care_tone2.png | Bin 830 -> 0 bytes public/-/emojis/2/nail_care_tone3.png | Bin 758 -> 0 bytes public/-/emojis/2/nail_care_tone4.png | Bin 799 -> 0 bytes public/-/emojis/2/nail_care_tone5.png | Bin 809 -> 0 bytes public/-/emojis/2/name_badge.png | Bin 625 -> 0 bytes public/-/emojis/2/nauseated_face.png | Bin 782 -> 0 bytes public/-/emojis/2/nazar_amulet.png | Bin 1017 -> 0 bytes public/-/emojis/2/necktie.png | Bin 852 -> 0 bytes .../emojis/2/negative_squared_cross_mark.png | Bin 586 -> 0 bytes public/-/emojis/2/nerd.png | Bin 979 -> 0 bytes public/-/emojis/2/neutral_face.png | Bin 615 -> 0 bytes public/-/emojis/2/new.png | Bin 578 -> 0 bytes public/-/emojis/2/new_moon.png | Bin 750 -> 0 bytes public/-/emojis/2/new_moon_with_face.png | Bin 1017 -> 0 bytes public/-/emojis/2/newspaper.png | Bin 812 -> 0 bytes public/-/emojis/2/newspaper2.png | Bin 938 -> 0 bytes public/-/emojis/2/ng.png | Bin 598 -> 0 bytes public/-/emojis/2/night_with_stars.png | Bin 1010 -> 0 bytes public/-/emojis/2/nine.png | Bin 663 -> 0 bytes public/-/emojis/2/no_bell.png | Bin 1084 -> 0 bytes public/-/emojis/2/no_bicycles.png | Bin 1180 -> 0 bytes public/-/emojis/2/no_entry.png | Bin 589 -> 0 bytes public/-/emojis/2/no_entry_sign.png | Bin 858 -> 0 bytes public/-/emojis/2/no_good.png | Bin 838 -> 0 bytes public/-/emojis/2/no_good_tone1.png | Bin 812 -> 0 bytes public/-/emojis/2/no_good_tone2.png | Bin 851 -> 0 bytes public/-/emojis/2/no_good_tone3.png | Bin 814 -> 0 bytes public/-/emojis/2/no_good_tone4.png | Bin 778 -> 0 bytes public/-/emojis/2/no_good_tone5.png | Bin 835 -> 0 bytes public/-/emojis/2/no_mobile_phones.png | Bin 945 -> 0 bytes public/-/emojis/2/no_mouth.png | Bin 624 -> 0 bytes public/-/emojis/2/no_pedestrians.png | Bin 1066 -> 0 bytes public/-/emojis/2/no_smoking.png | Bin 1025 -> 0 bytes public/-/emojis/2/non-potable_water.png | Bin 1078 -> 0 bytes public/-/emojis/2/nose.png | Bin 416 -> 0 bytes public/-/emojis/2/nose_tone1.png | Bin 569 -> 0 bytes public/-/emojis/2/nose_tone2.png | Bin 361 -> 0 bytes public/-/emojis/2/nose_tone3.png | Bin 519 -> 0 bytes public/-/emojis/2/nose_tone4.png | Bin 363 -> 0 bytes public/-/emojis/2/nose_tone5.png | Bin 542 -> 0 bytes public/-/emojis/2/notebook.png | Bin 270 -> 0 bytes .../2/notebook_with_decorative_cover.png | Bin 311 -> 0 bytes public/-/emojis/2/notepad_spiral.png | Bin 417 -> 0 bytes public/-/emojis/2/notes.png | Bin 593 -> 0 bytes public/-/emojis/2/nut_and_bolt.png | Bin 889 -> 0 bytes public/-/emojis/2/o.png | Bin 530 -> 0 bytes public/-/emojis/2/o2.png | Bin 669 -> 0 bytes public/-/emojis/2/ocean.png | Bin 1195 -> 0 bytes public/-/emojis/2/octagonal_sign.png | Bin 616 -> 0 bytes public/-/emojis/2/octopus.png | Bin 1372 -> 0 bytes public/-/emojis/2/oden.png | Bin 831 -> 0 bytes public/-/emojis/2/office.png | Bin 520 -> 0 bytes public/-/emojis/2/oil.png | Bin 627 -> 0 bytes public/-/emojis/2/ok.png | Bin 661 -> 0 bytes public/-/emojis/2/ok_hand.png | Bin 610 -> 0 bytes public/-/emojis/2/ok_hand_tone1.png | Bin 632 -> 0 bytes public/-/emojis/2/ok_hand_tone2.png | Bin 587 -> 0 bytes public/-/emojis/2/ok_hand_tone3.png | Bin 602 -> 0 bytes public/-/emojis/2/ok_hand_tone4.png | Bin 601 -> 0 bytes public/-/emojis/2/ok_hand_tone5.png | Bin 614 -> 0 bytes public/-/emojis/2/ok_woman.png | Bin 998 -> 0 bytes public/-/emojis/2/ok_woman_tone1.png | Bin 1008 -> 0 bytes public/-/emojis/2/ok_woman_tone2.png | Bin 981 -> 0 bytes public/-/emojis/2/ok_woman_tone3.png | Bin 963 -> 0 bytes public/-/emojis/2/ok_woman_tone4.png | Bin 928 -> 0 bytes public/-/emojis/2/ok_woman_tone5.png | Bin 904 -> 0 bytes public/-/emojis/2/older_adult.png | Bin 846 -> 0 bytes public/-/emojis/2/older_adult_tone1.png | Bin 801 -> 0 bytes public/-/emojis/2/older_adult_tone2.png | Bin 823 -> 0 bytes public/-/emojis/2/older_adult_tone3.png | Bin 846 -> 0 bytes public/-/emojis/2/older_adult_tone4.png | Bin 868 -> 0 bytes public/-/emojis/2/older_adult_tone5.png | Bin 860 -> 0 bytes public/-/emojis/2/older_man.png | Bin 760 -> 0 bytes public/-/emojis/2/older_man_tone1.png | Bin 795 -> 0 bytes public/-/emojis/2/older_man_tone2.png | Bin 799 -> 0 bytes public/-/emojis/2/older_man_tone3.png | Bin 820 -> 0 bytes public/-/emojis/2/older_man_tone4.png | Bin 798 -> 0 bytes public/-/emojis/2/older_man_tone5.png | Bin 818 -> 0 bytes public/-/emojis/2/older_woman.png | Bin 887 -> 0 bytes public/-/emojis/2/older_woman_tone1.png | Bin 827 -> 0 bytes public/-/emojis/2/older_woman_tone2.png | Bin 817 -> 0 bytes public/-/emojis/2/older_woman_tone3.png | Bin 814 -> 0 bytes public/-/emojis/2/older_woman_tone4.png | Bin 811 -> 0 bytes public/-/emojis/2/older_woman_tone5.png | Bin 844 -> 0 bytes public/-/emojis/2/om_symbol.png | Bin 795 -> 0 bytes public/-/emojis/2/on.png | Bin 538 -> 0 bytes public/-/emojis/2/oncoming_automobile.png | Bin 817 -> 0 bytes public/-/emojis/2/oncoming_bus.png | Bin 647 -> 0 bytes public/-/emojis/2/oncoming_police_car.png | Bin 935 -> 0 bytes public/-/emojis/2/oncoming_taxi.png | Bin 784 -> 0 bytes public/-/emojis/2/one.png | Bin 539 -> 0 bytes public/-/emojis/2/open_file_folder.png | Bin 415 -> 0 bytes public/-/emojis/2/open_hands.png | Bin 597 -> 0 bytes public/-/emojis/2/open_hands_tone1.png | Bin 580 -> 0 bytes public/-/emojis/2/open_hands_tone2.png | Bin 535 -> 0 bytes public/-/emojis/2/open_hands_tone3.png | Bin 562 -> 0 bytes public/-/emojis/2/open_hands_tone4.png | Bin 513 -> 0 bytes public/-/emojis/2/open_hands_tone5.png | Bin 588 -> 0 bytes public/-/emojis/2/open_mouth.png | Bin 662 -> 0 bytes public/-/emojis/2/open_umbrella.png | Bin 564 -> 0 bytes public/-/emojis/2/ophiuchus.png | Bin 683 -> 0 bytes public/-/emojis/2/orange_book.png | Bin 331 -> 0 bytes public/-/emojis/2/orange_heart.png | Bin 577 -> 0 bytes public/-/emojis/2/orthodox_cross.png | Bin 628 -> 0 bytes public/-/emojis/2/outbox_tray.png | Bin 723 -> 0 bytes public/-/emojis/2/owl.png | Bin 1204 -> 0 bytes public/-/emojis/2/ox.png | Bin 630 -> 0 bytes public/-/emojis/2/package.png | Bin 838 -> 0 bytes public/-/emojis/2/page_facing_up.png | Bin 384 -> 0 bytes public/-/emojis/2/page_with_curl.png | Bin 447 -> 0 bytes public/-/emojis/2/pager.png | Bin 660 -> 0 bytes public/-/emojis/2/paintbrush.png | Bin 492 -> 0 bytes public/-/emojis/2/palm_tree.png | Bin 846 -> 0 bytes public/-/emojis/2/palms_up_together.png | Bin 690 -> 0 bytes public/-/emojis/2/palms_up_together_tone1.png | Bin 662 -> 0 bytes public/-/emojis/2/palms_up_together_tone2.png | Bin 666 -> 0 bytes public/-/emojis/2/palms_up_together_tone3.png | Bin 603 -> 0 bytes public/-/emojis/2/palms_up_together_tone4.png | Bin 581 -> 0 bytes public/-/emojis/2/palms_up_together_tone5.png | Bin 612 -> 0 bytes public/-/emojis/2/pancakes.png | Bin 1039 -> 0 bytes public/-/emojis/2/panda_face.png | Bin 1016 -> 0 bytes public/-/emojis/2/paperclip.png | Bin 648 -> 0 bytes public/-/emojis/2/paperclips.png | Bin 1051 -> 0 bytes public/-/emojis/2/park.png | Bin 1236 -> 0 bytes public/-/emojis/2/parking.png | Bin 639 -> 0 bytes public/-/emojis/2/parrot.png | Bin 960 -> 0 bytes public/-/emojis/2/part_alternation_mark.png | Bin 583 -> 0 bytes public/-/emojis/2/partly_sunny.png | Bin 778 -> 0 bytes public/-/emojis/2/partying_face.png | Bin 1336 -> 0 bytes public/-/emojis/2/passport_control.png | Bin 630 -> 0 bytes public/-/emojis/2/pause_button.png | Bin 527 -> 0 bytes public/-/emojis/2/peace.png | Bin 1002 -> 0 bytes public/-/emojis/2/peach.png | Bin 1030 -> 0 bytes public/-/emojis/2/peacock.png | Bin 1222 -> 0 bytes public/-/emojis/2/peanuts.png | Bin 780 -> 0 bytes public/-/emojis/2/pear.png | Bin 575 -> 0 bytes public/-/emojis/2/pen_ballpoint.png | Bin 540 -> 0 bytes public/-/emojis/2/pen_fountain.png | Bin 585 -> 0 bytes public/-/emojis/2/pencil.png | Bin 587 -> 0 bytes public/-/emojis/2/pencil2.png | Bin 408 -> 0 bytes public/-/emojis/2/penguin.png | Bin 911 -> 0 bytes public/-/emojis/2/pensive.png | Bin 711 -> 0 bytes public/-/emojis/2/performing_arts.png | Bin 1290 -> 0 bytes public/-/emojis/2/persevere.png | Bin 706 -> 0 bytes public/-/emojis/2/person_climbing.png | Bin 1156 -> 0 bytes public/-/emojis/2/person_climbing_tone1.png | Bin 1209 -> 0 bytes public/-/emojis/2/person_climbing_tone2.png | Bin 1158 -> 0 bytes public/-/emojis/2/person_climbing_tone3.png | Bin 1047 -> 0 bytes public/-/emojis/2/person_climbing_tone4.png | Bin 1025 -> 0 bytes public/-/emojis/2/person_climbing_tone5.png | Bin 1032 -> 0 bytes public/-/emojis/2/person_frowning.png | Bin 785 -> 0 bytes public/-/emojis/2/person_frowning_tone1.png | Bin 726 -> 0 bytes public/-/emojis/2/person_frowning_tone2.png | Bin 798 -> 0 bytes public/-/emojis/2/person_frowning_tone3.png | Bin 756 -> 0 bytes public/-/emojis/2/person_frowning_tone4.png | Bin 696 -> 0 bytes public/-/emojis/2/person_frowning_tone5.png | Bin 713 -> 0 bytes public/-/emojis/2/person_golfing_tone1.png | Bin 802 -> 0 bytes public/-/emojis/2/person_golfing_tone2.png | Bin 812 -> 0 bytes public/-/emojis/2/person_golfing_tone3.png | Bin 819 -> 0 bytes public/-/emojis/2/person_golfing_tone4.png | Bin 766 -> 0 bytes public/-/emojis/2/person_golfing_tone5.png | Bin 742 -> 0 bytes public/-/emojis/2/person_in_bed_tone1.png | Bin 565 -> 0 bytes public/-/emojis/2/person_in_bed_tone2.png | Bin 557 -> 0 bytes public/-/emojis/2/person_in_bed_tone3.png | Bin 558 -> 0 bytes public/-/emojis/2/person_in_bed_tone4.png | Bin 561 -> 0 bytes public/-/emojis/2/person_in_bed_tone5.png | Bin 532 -> 0 bytes .../-/emojis/2/person_in_lotus_position.png | Bin 943 -> 0 bytes .../2/person_in_lotus_position_tone1.png | Bin 968 -> 0 bytes .../2/person_in_lotus_position_tone2.png | Bin 945 -> 0 bytes .../2/person_in_lotus_position_tone3.png | Bin 861 -> 0 bytes .../2/person_in_lotus_position_tone4.png | Bin 853 -> 0 bytes .../2/person_in_lotus_position_tone5.png | Bin 879 -> 0 bytes public/-/emojis/2/person_in_steamy_room.png | Bin 869 -> 0 bytes .../emojis/2/person_in_steamy_room_tone1.png | Bin 907 -> 0 bytes .../emojis/2/person_in_steamy_room_tone2.png | Bin 892 -> 0 bytes .../emojis/2/person_in_steamy_room_tone3.png | Bin 856 -> 0 bytes .../emojis/2/person_in_steamy_room_tone4.png | Bin 822 -> 0 bytes .../emojis/2/person_in_steamy_room_tone5.png | Bin 793 -> 0 bytes public/-/emojis/2/person_with_blond_hair.png | Bin 823 -> 0 bytes .../emojis/2/person_with_blond_hair_tone1.png | Bin 805 -> 0 bytes .../emojis/2/person_with_blond_hair_tone2.png | Bin 772 -> 0 bytes .../emojis/2/person_with_blond_hair_tone3.png | Bin 765 -> 0 bytes .../emojis/2/person_with_blond_hair_tone4.png | Bin 828 -> 0 bytes .../emojis/2/person_with_blond_hair_tone5.png | Bin 830 -> 0 bytes .../-/emojis/2/person_with_pouting_face.png | Bin 760 -> 0 bytes .../2/person_with_pouting_face_tone1.png | Bin 794 -> 0 bytes .../2/person_with_pouting_face_tone2.png | Bin 782 -> 0 bytes .../2/person_with_pouting_face_tone3.png | Bin 700 -> 0 bytes .../2/person_with_pouting_face_tone4.png | Bin 734 -> 0 bytes .../2/person_with_pouting_face_tone5.png | Bin 727 -> 0 bytes public/-/emojis/2/petri_dish.png | Bin 860 -> 0 bytes public/-/emojis/2/phone.png | Bin 868 -> 0 bytes public/-/emojis/2/pick.png | Bin 575 -> 0 bytes public/-/emojis/2/pie.png | Bin 1060 -> 0 bytes public/-/emojis/2/pig.png | Bin 882 -> 0 bytes public/-/emojis/2/pig2.png | Bin 658 -> 0 bytes public/-/emojis/2/pig_nose.png | Bin 718 -> 0 bytes public/-/emojis/2/pill.png | Bin 563 -> 0 bytes public/-/emojis/2/pineapple.png | Bin 942 -> 0 bytes public/-/emojis/2/ping_pong.png | Bin 687 -> 0 bytes public/-/emojis/2/pirate_flag.png | Bin 710 -> 0 bytes public/-/emojis/2/pisces.png | Bin 767 -> 0 bytes public/-/emojis/2/pizza.png | Bin 889 -> 0 bytes public/-/emojis/2/place_of_worship.png | Bin 670 -> 0 bytes public/-/emojis/2/play_pause.png | Bin 566 -> 0 bytes public/-/emojis/2/pleading_face.png | Bin 907 -> 0 bytes public/-/emojis/2/point_down.png | Bin 465 -> 0 bytes public/-/emojis/2/point_down_tone1.png | Bin 437 -> 0 bytes public/-/emojis/2/point_down_tone2.png | Bin 440 -> 0 bytes public/-/emojis/2/point_down_tone3.png | Bin 451 -> 0 bytes public/-/emojis/2/point_down_tone4.png | Bin 448 -> 0 bytes public/-/emojis/2/point_down_tone5.png | Bin 496 -> 0 bytes public/-/emojis/2/point_left.png | Bin 449 -> 0 bytes public/-/emojis/2/point_left_tone1.png | Bin 430 -> 0 bytes public/-/emojis/2/point_left_tone2.png | Bin 430 -> 0 bytes public/-/emojis/2/point_left_tone3.png | Bin 442 -> 0 bytes public/-/emojis/2/point_left_tone4.png | Bin 417 -> 0 bytes public/-/emojis/2/point_left_tone5.png | Bin 446 -> 0 bytes public/-/emojis/2/point_right.png | Bin 461 -> 0 bytes public/-/emojis/2/point_right_tone1.png | Bin 433 -> 0 bytes public/-/emojis/2/point_right_tone2.png | Bin 442 -> 0 bytes public/-/emojis/2/point_right_tone3.png | Bin 439 -> 0 bytes public/-/emojis/2/point_right_tone4.png | Bin 422 -> 0 bytes public/-/emojis/2/point_right_tone5.png | Bin 447 -> 0 bytes public/-/emojis/2/point_up.png | Bin 467 -> 0 bytes public/-/emojis/2/point_up_2.png | Bin 462 -> 0 bytes public/-/emojis/2/point_up_2_tone1.png | Bin 474 -> 0 bytes public/-/emojis/2/point_up_2_tone2.png | Bin 447 -> 0 bytes public/-/emojis/2/point_up_2_tone3.png | Bin 444 -> 0 bytes public/-/emojis/2/point_up_2_tone4.png | Bin 429 -> 0 bytes public/-/emojis/2/point_up_2_tone5.png | Bin 445 -> 0 bytes public/-/emojis/2/point_up_tone1.png | Bin 459 -> 0 bytes public/-/emojis/2/point_up_tone2.png | Bin 546 -> 0 bytes public/-/emojis/2/point_up_tone3.png | Bin 457 -> 0 bytes public/-/emojis/2/point_up_tone4.png | Bin 472 -> 0 bytes public/-/emojis/2/point_up_tone5.png | Bin 493 -> 0 bytes public/-/emojis/2/police_car.png | Bin 758 -> 0 bytes public/-/emojis/2/poodle.png | Bin 816 -> 0 bytes public/-/emojis/2/poop.png | Bin 834 -> 0 bytes public/-/emojis/2/popcorn.png | Bin 904 -> 0 bytes public/-/emojis/2/post_office.png | Bin 498 -> 0 bytes public/-/emojis/2/postal_horn.png | Bin 682 -> 0 bytes public/-/emojis/2/postbox.png | Bin 687 -> 0 bytes public/-/emojis/2/potable_water.png | Bin 688 -> 0 bytes public/-/emojis/2/potato.png | Bin 789 -> 0 bytes public/-/emojis/2/pouch.png | Bin 642 -> 0 bytes public/-/emojis/2/poultry_leg.png | Bin 733 -> 0 bytes public/-/emojis/2/pound.png | Bin 716 -> 0 bytes public/-/emojis/2/pound_symbol.png | Bin 743 -> 0 bytes public/-/emojis/2/pouting_cat.png | Bin 827 -> 0 bytes public/-/emojis/2/pray.png | Bin 615 -> 0 bytes public/-/emojis/2/pray_tone1.png | Bin 611 -> 0 bytes public/-/emojis/2/pray_tone2.png | Bin 564 -> 0 bytes public/-/emojis/2/pray_tone3.png | Bin 589 -> 0 bytes public/-/emojis/2/pray_tone4.png | Bin 589 -> 0 bytes public/-/emojis/2/pray_tone5.png | Bin 532 -> 0 bytes public/-/emojis/2/prayer_beads.png | Bin 1129 -> 0 bytes public/-/emojis/2/pregnant_woman.png | Bin 675 -> 0 bytes public/-/emojis/2/pregnant_woman_tone1.png | Bin 730 -> 0 bytes public/-/emojis/2/pregnant_woman_tone2.png | Bin 792 -> 0 bytes public/-/emojis/2/pregnant_woman_tone3.png | Bin 709 -> 0 bytes public/-/emojis/2/pregnant_woman_tone4.png | Bin 666 -> 0 bytes public/-/emojis/2/pregnant_woman_tone5.png | Bin 672 -> 0 bytes public/-/emojis/2/pretzel.png | Bin 851 -> 0 bytes public/-/emojis/2/prince.png | Bin 1136 -> 0 bytes public/-/emojis/2/prince_tone1.png | Bin 1134 -> 0 bytes public/-/emojis/2/prince_tone2.png | Bin 1101 -> 0 bytes public/-/emojis/2/prince_tone3.png | Bin 1160 -> 0 bytes public/-/emojis/2/prince_tone4.png | Bin 1086 -> 0 bytes public/-/emojis/2/prince_tone5.png | Bin 1069 -> 0 bytes public/-/emojis/2/princess.png | Bin 1158 -> 0 bytes public/-/emojis/2/princess_tone1.png | Bin 1113 -> 0 bytes public/-/emojis/2/princess_tone2.png | Bin 1038 -> 0 bytes public/-/emojis/2/princess_tone3.png | Bin 1114 -> 0 bytes public/-/emojis/2/princess_tone4.png | Bin 1101 -> 0 bytes public/-/emojis/2/princess_tone5.png | Bin 984 -> 0 bytes public/-/emojis/2/printer.png | Bin 524 -> 0 bytes public/-/emojis/2/projector.png | Bin 833 -> 0 bytes public/-/emojis/2/punch.png | Bin 594 -> 0 bytes public/-/emojis/2/punch_tone1.png | Bin 589 -> 0 bytes public/-/emojis/2/punch_tone2.png | Bin 553 -> 0 bytes public/-/emojis/2/punch_tone3.png | Bin 542 -> 0 bytes public/-/emojis/2/punch_tone4.png | Bin 536 -> 0 bytes public/-/emojis/2/punch_tone5.png | Bin 563 -> 0 bytes public/-/emojis/2/purple_heart.png | Bin 688 -> 0 bytes public/-/emojis/2/purse.png | Bin 755 -> 0 bytes public/-/emojis/2/pushpin.png | Bin 511 -> 0 bytes public/-/emojis/2/put_litter_in_its_place.png | Bin 705 -> 0 bytes public/-/emojis/2/question.png | Bin 481 -> 0 bytes public/-/emojis/2/rabbit.png | Bin 919 -> 0 bytes public/-/emojis/2/rabbit2.png | Bin 642 -> 0 bytes public/-/emojis/2/raccoon.png | Bin 985 -> 0 bytes public/-/emojis/2/race_car.png | Bin 584 -> 0 bytes public/-/emojis/2/racehorse.png | Bin 807 -> 0 bytes public/-/emojis/2/radio.png | Bin 515 -> 0 bytes public/-/emojis/2/radio_button.png | Bin 844 -> 0 bytes public/-/emojis/2/radioactive.png | Bin 847 -> 0 bytes public/-/emojis/2/rage.png | Bin 671 -> 0 bytes public/-/emojis/2/railway_car.png | Bin 434 -> 0 bytes public/-/emojis/2/railway_track.png | Bin 863 -> 0 bytes public/-/emojis/2/rainbow.png | Bin 910 -> 0 bytes public/-/emojis/2/raised_back_of_hand.png | Bin 509 -> 0 bytes .../-/emojis/2/raised_back_of_hand_tone1.png | Bin 502 -> 0 bytes .../-/emojis/2/raised_back_of_hand_tone2.png | Bin 497 -> 0 bytes .../-/emojis/2/raised_back_of_hand_tone3.png | Bin 509 -> 0 bytes .../-/emojis/2/raised_back_of_hand_tone4.png | Bin 475 -> 0 bytes .../-/emojis/2/raised_back_of_hand_tone5.png | Bin 510 -> 0 bytes public/-/emojis/2/raised_hand.png | Bin 542 -> 0 bytes public/-/emojis/2/raised_hand_tone1.png | Bin 564 -> 0 bytes public/-/emojis/2/raised_hand_tone2.png | Bin 498 -> 0 bytes public/-/emojis/2/raised_hand_tone3.png | Bin 499 -> 0 bytes public/-/emojis/2/raised_hand_tone4.png | Bin 467 -> 0 bytes public/-/emojis/2/raised_hand_tone5.png | Bin 526 -> 0 bytes public/-/emojis/2/raised_hands.png | Bin 705 -> 0 bytes public/-/emojis/2/raised_hands_tone1.png | Bin 652 -> 0 bytes public/-/emojis/2/raised_hands_tone2.png | Bin 603 -> 0 bytes public/-/emojis/2/raised_hands_tone3.png | Bin 597 -> 0 bytes public/-/emojis/2/raised_hands_tone4.png | Bin 661 -> 0 bytes public/-/emojis/2/raised_hands_tone5.png | Bin 645 -> 0 bytes public/-/emojis/2/raising_hand.png | Bin 1006 -> 0 bytes public/-/emojis/2/raising_hand_tone1.png | Bin 989 -> 0 bytes public/-/emojis/2/raising_hand_tone2.png | Bin 916 -> 0 bytes public/-/emojis/2/raising_hand_tone3.png | Bin 953 -> 0 bytes public/-/emojis/2/raising_hand_tone4.png | Bin 850 -> 0 bytes public/-/emojis/2/raising_hand_tone5.png | Bin 913 -> 0 bytes public/-/emojis/2/ram.png | Bin 808 -> 0 bytes public/-/emojis/2/ramen.png | Bin 1157 -> 0 bytes public/-/emojis/2/rat.png | Bin 683 -> 0 bytes public/-/emojis/2/receipt.png | Bin 538 -> 0 bytes public/-/emojis/2/record_button.png | Bin 546 -> 0 bytes public/-/emojis/2/recycle.png | Bin 703 -> 0 bytes public/-/emojis/2/red_car.png | Bin 795 -> 0 bytes public/-/emojis/2/red_circle.png | Bin 583 -> 0 bytes public/-/emojis/2/red_envelope.png | Bin 403 -> 0 bytes public/-/emojis/2/red_haired.png | Bin 508 -> 0 bytes public/-/emojis/2/regional_indicator_a.png | Bin 679 -> 0 bytes public/-/emojis/2/regional_indicator_b.png | Bin 641 -> 0 bytes public/-/emojis/2/regional_indicator_c.png | Bin 690 -> 0 bytes public/-/emojis/2/regional_indicator_d.png | Bin 644 -> 0 bytes public/-/emojis/2/regional_indicator_e.png | Bin 551 -> 0 bytes public/-/emojis/2/regional_indicator_f.png | Bin 570 -> 0 bytes public/-/emojis/2/regional_indicator_g.png | Bin 769 -> 0 bytes public/-/emojis/2/regional_indicator_h.png | Bin 646 -> 0 bytes public/-/emojis/2/regional_indicator_i.png | Bin 629 -> 0 bytes public/-/emojis/2/regional_indicator_j.png | Bin 627 -> 0 bytes public/-/emojis/2/regional_indicator_k.png | Bin 719 -> 0 bytes public/-/emojis/2/regional_indicator_l.png | Bin 567 -> 0 bytes public/-/emojis/2/regional_indicator_m.png | Bin 667 -> 0 bytes public/-/emojis/2/regional_indicator_n.png | Bin 749 -> 0 bytes public/-/emojis/2/regional_indicator_o.png | Bin 782 -> 0 bytes public/-/emojis/2/regional_indicator_p.png | Bin 438 -> 0 bytes public/-/emojis/2/regional_indicator_q.png | Bin 724 -> 0 bytes public/-/emojis/2/regional_indicator_r.png | Bin 677 -> 0 bytes public/-/emojis/2/regional_indicator_s.png | Bin 752 -> 0 bytes public/-/emojis/2/regional_indicator_t.png | Bin 369 -> 0 bytes public/-/emojis/2/regional_indicator_u.png | Bin 638 -> 0 bytes public/-/emojis/2/regional_indicator_v.png | Bin 781 -> 0 bytes public/-/emojis/2/regional_indicator_w.png | Bin 794 -> 0 bytes public/-/emojis/2/regional_indicator_x.png | Bin 483 -> 0 bytes public/-/emojis/2/regional_indicator_y.png | Bin 633 -> 0 bytes public/-/emojis/2/regional_indicator_z.png | Bin 600 -> 0 bytes public/-/emojis/2/registered.png | Bin 596 -> 0 bytes public/-/emojis/2/relaxed.png | Bin 809 -> 0 bytes public/-/emojis/2/relieved.png | Bin 683 -> 0 bytes public/-/emojis/2/reminder_ribbon.png | Bin 574 -> 0 bytes public/-/emojis/2/repeat.png | Bin 733 -> 0 bytes public/-/emojis/2/repeat_one.png | Bin 660 -> 0 bytes public/-/emojis/2/restroom.png | Bin 593 -> 0 bytes public/-/emojis/2/revolving_hearts.png | Bin 907 -> 0 bytes public/-/emojis/2/rewind.png | Bin 580 -> 0 bytes public/-/emojis/2/rhino.png | Bin 804 -> 0 bytes public/-/emojis/2/ribbon.png | Bin 886 -> 0 bytes public/-/emojis/2/rice.png | Bin 834 -> 0 bytes public/-/emojis/2/rice_ball.png | Bin 924 -> 0 bytes public/-/emojis/2/rice_cracker.png | Bin 989 -> 0 bytes public/-/emojis/2/rice_scene.png | Bin 1000 -> 0 bytes public/-/emojis/2/right_facing_fist.png | Bin 437 -> 0 bytes public/-/emojis/2/right_facing_fist_tone1.png | Bin 432 -> 0 bytes public/-/emojis/2/right_facing_fist_tone2.png | Bin 424 -> 0 bytes public/-/emojis/2/right_facing_fist_tone3.png | Bin 420 -> 0 bytes public/-/emojis/2/right_facing_fist_tone4.png | Bin 437 -> 0 bytes public/-/emojis/2/right_facing_fist_tone5.png | Bin 448 -> 0 bytes public/-/emojis/2/ring.png | Bin 994 -> 0 bytes public/-/emojis/2/robot.png | Bin 876 -> 0 bytes public/-/emojis/2/rocket.png | Bin 1082 -> 0 bytes public/-/emojis/2/rofl.png | Bin 846 -> 0 bytes public/-/emojis/2/roll_of_paper.png | Bin 643 -> 0 bytes public/-/emojis/2/roller_coaster.png | Bin 945 -> 0 bytes public/-/emojis/2/rolling_eyes.png | Bin 841 -> 0 bytes public/-/emojis/2/rooster.png | Bin 898 -> 0 bytes public/-/emojis/2/rose.png | Bin 872 -> 0 bytes public/-/emojis/2/rosette.png | Bin 978 -> 0 bytes public/-/emojis/2/rotating_light.png | Bin 819 -> 0 bytes public/-/emojis/2/round_pushpin.png | Bin 480 -> 0 bytes public/-/emojis/2/rowboat.png | Bin 822 -> 0 bytes public/-/emojis/2/rowboat_tone1.png | Bin 872 -> 0 bytes public/-/emojis/2/rowboat_tone2.png | Bin 806 -> 0 bytes public/-/emojis/2/rowboat_tone3.png | Bin 727 -> 0 bytes public/-/emojis/2/rowboat_tone4.png | Bin 808 -> 0 bytes public/-/emojis/2/rowboat_tone5.png | Bin 790 -> 0 bytes public/-/emojis/2/rugby_football.png | Bin 955 -> 0 bytes public/-/emojis/2/runner.png | Bin 785 -> 0 bytes public/-/emojis/2/runner_tone1.png | Bin 763 -> 0 bytes public/-/emojis/2/runner_tone2.png | Bin 696 -> 0 bytes public/-/emojis/2/runner_tone3.png | Bin 729 -> 0 bytes public/-/emojis/2/runner_tone4.png | Bin 689 -> 0 bytes public/-/emojis/2/runner_tone5.png | Bin 699 -> 0 bytes public/-/emojis/2/running_shirt_with_sash.png | Bin 795 -> 0 bytes public/-/emojis/2/sa.png | Bin 649 -> 0 bytes public/-/emojis/2/safety_pin.png | Bin 618 -> 0 bytes public/-/emojis/2/sagittarius.png | Bin 621 -> 0 bytes public/-/emojis/2/sake.png | Bin 659 -> 0 bytes public/-/emojis/2/salad.png | Bin 1115 -> 0 bytes public/-/emojis/2/salt.png | Bin 733 -> 0 bytes public/-/emojis/2/sandal.png | Bin 529 -> 0 bytes public/-/emojis/2/sandwich.png | Bin 774 -> 0 bytes public/-/emojis/2/santa.png | Bin 969 -> 0 bytes public/-/emojis/2/santa_tone1.png | Bin 927 -> 0 bytes public/-/emojis/2/santa_tone2.png | Bin 908 -> 0 bytes public/-/emojis/2/santa_tone3.png | Bin 893 -> 0 bytes public/-/emojis/2/santa_tone4.png | Bin 908 -> 0 bytes public/-/emojis/2/santa_tone5.png | Bin 888 -> 0 bytes public/-/emojis/2/satellite.png | Bin 943 -> 0 bytes public/-/emojis/2/satellite_orbital.png | Bin 832 -> 0 bytes public/-/emojis/2/sauropod.png | Bin 699 -> 0 bytes public/-/emojis/2/saxophone.png | Bin 815 -> 0 bytes public/-/emojis/2/scarf.png | Bin 867 -> 0 bytes public/-/emojis/2/school.png | Bin 643 -> 0 bytes public/-/emojis/2/school_satchel.png | Bin 1007 -> 0 bytes public/-/emojis/2/scissors.png | Bin 856 -> 0 bytes public/-/emojis/2/scooter.png | Bin 732 -> 0 bytes public/-/emojis/2/scorpion.png | Bin 1038 -> 0 bytes public/-/emojis/2/scorpius.png | Bin 692 -> 0 bytes public/-/emojis/2/scotland.png | Bin 529 -> 0 bytes public/-/emojis/2/scream.png | Bin 1030 -> 0 bytes public/-/emojis/2/scream_cat.png | Bin 994 -> 0 bytes public/-/emojis/2/scroll.png | Bin 896 -> 0 bytes public/-/emojis/2/seat.png | Bin 532 -> 0 bytes public/-/emojis/2/second_place.png | Bin 1004 -> 0 bytes public/-/emojis/2/secret.png | Bin 875 -> 0 bytes public/-/emojis/2/see_no_evil.png | Bin 856 -> 0 bytes public/-/emojis/2/seedling.png | Bin 643 -> 0 bytes public/-/emojis/2/selfie.png | Bin 739 -> 0 bytes public/-/emojis/2/selfie_tone1.png | Bin 699 -> 0 bytes public/-/emojis/2/selfie_tone2.png | Bin 694 -> 0 bytes public/-/emojis/2/selfie_tone3.png | Bin 729 -> 0 bytes public/-/emojis/2/selfie_tone4.png | Bin 713 -> 0 bytes public/-/emojis/2/selfie_tone5.png | Bin 655 -> 0 bytes public/-/emojis/2/seven.png | Bin 565 -> 0 bytes public/-/emojis/2/shallow_pan_of_food.png | Bin 1321 -> 0 bytes public/-/emojis/2/shamrock.png | Bin 788 -> 0 bytes public/-/emojis/2/shark.png | Bin 812 -> 0 bytes public/-/emojis/2/shaved_ice.png | Bin 1002 -> 0 bytes public/-/emojis/2/sheep.png | Bin 703 -> 0 bytes public/-/emojis/2/shell.png | Bin 830 -> 0 bytes public/-/emojis/2/shield.png | Bin 835 -> 0 bytes public/-/emojis/2/shinto_shrine.png | Bin 429 -> 0 bytes public/-/emojis/2/ship.png | Bin 642 -> 0 bytes public/-/emojis/2/shirt.png | Bin 581 -> 0 bytes public/-/emojis/2/shopping_bags.png | Bin 886 -> 0 bytes public/-/emojis/2/shopping_cart.png | Bin 1056 -> 0 bytes public/-/emojis/2/shower.png | Bin 796 -> 0 bytes public/-/emojis/2/shrimp.png | Bin 1097 -> 0 bytes public/-/emojis/2/shrug.png | Bin 780 -> 0 bytes public/-/emojis/2/shrug_tone1.png | Bin 738 -> 0 bytes public/-/emojis/2/shrug_tone2.png | Bin 768 -> 0 bytes public/-/emojis/2/shrug_tone3.png | Bin 742 -> 0 bytes public/-/emojis/2/shrug_tone4.png | Bin 748 -> 0 bytes public/-/emojis/2/shrug_tone5.png | Bin 712 -> 0 bytes public/-/emojis/2/shushing_face.png | Bin 769 -> 0 bytes public/-/emojis/2/signal_strength.png | Bin 494 -> 0 bytes public/-/emojis/2/six.png | Bin 630 -> 0 bytes public/-/emojis/2/six_pointed_star.png | Bin 642 -> 0 bytes public/-/emojis/2/skateboard.png | Bin 513 -> 0 bytes public/-/emojis/2/ski.png | Bin 1233 -> 0 bytes public/-/emojis/2/skier.png | Bin 935 -> 0 bytes public/-/emojis/2/skull.png | Bin 919 -> 0 bytes public/-/emojis/2/skull_crossbones.png | Bin 943 -> 0 bytes public/-/emojis/2/sled.png | Bin 731 -> 0 bytes public/-/emojis/2/sleeping.png | Bin 932 -> 0 bytes public/-/emojis/2/sleeping_accommodation.png | Bin 532 -> 0 bytes public/-/emojis/2/sleepy.png | Bin 746 -> 0 bytes public/-/emojis/2/slight_frown.png | Bin 646 -> 0 bytes public/-/emojis/2/slight_smile.png | Bin 620 -> 0 bytes public/-/emojis/2/slot_machine.png | Bin 803 -> 0 bytes public/-/emojis/2/small_blue_diamond.png | Bin 297 -> 0 bytes public/-/emojis/2/small_orange_diamond.png | Bin 234 -> 0 bytes public/-/emojis/2/small_red_triangle.png | Bin 484 -> 0 bytes public/-/emojis/2/small_red_triangle_down.png | Bin 492 -> 0 bytes public/-/emojis/2/smile.png | Bin 852 -> 0 bytes public/-/emojis/2/smile_cat.png | Bin 1036 -> 0 bytes public/-/emojis/2/smiley.png | Bin 759 -> 0 bytes public/-/emojis/2/smiley_cat.png | Bin 918 -> 0 bytes .../-/emojis/2/smiling_face_with_3_hearts.png | Bin 964 -> 0 bytes public/-/emojis/2/smiling_imp.png | Bin 875 -> 0 bytes public/-/emojis/2/smirk.png | Bin 723 -> 0 bytes public/-/emojis/2/smirk_cat.png | Bin 879 -> 0 bytes public/-/emojis/2/smoking.png | Bin 754 -> 0 bytes public/-/emojis/2/snail.png | Bin 818 -> 0 bytes public/-/emojis/2/snake.png | Bin 941 -> 0 bytes public/-/emojis/2/sneezing_face.png | Bin 902 -> 0 bytes public/-/emojis/2/snowboarder.png | Bin 1033 -> 0 bytes public/-/emojis/2/snowboarder_tone1.png | Bin 1054 -> 0 bytes public/-/emojis/2/snowboarder_tone2.png | Bin 1028 -> 0 bytes public/-/emojis/2/snowboarder_tone3.png | Bin 1012 -> 0 bytes public/-/emojis/2/snowboarder_tone4.png | Bin 1007 -> 0 bytes public/-/emojis/2/snowboarder_tone5.png | Bin 1029 -> 0 bytes public/-/emojis/2/snowflake.png | Bin 720 -> 0 bytes public/-/emojis/2/snowman.png | Bin 912 -> 0 bytes public/-/emojis/2/snowman_with_snow.png | Bin 1134 -> 0 bytes public/-/emojis/2/soap.png | Bin 748 -> 0 bytes public/-/emojis/2/sob.png | Bin 957 -> 0 bytes public/-/emojis/2/soccer.png | Bin 1036 -> 0 bytes public/-/emojis/2/socks.png | Bin 1353 -> 0 bytes public/-/emojis/2/softball.png | Bin 1075 -> 0 bytes public/-/emojis/2/soon.png | Bin 527 -> 0 bytes public/-/emojis/2/sos.png | Bin 642 -> 0 bytes public/-/emojis/2/sound.png | Bin 701 -> 0 bytes public/-/emojis/2/space_invader.png | Bin 220 -> 0 bytes public/-/emojis/2/spades.png | Bin 515 -> 0 bytes public/-/emojis/2/spaghetti.png | Bin 1035 -> 0 bytes public/-/emojis/2/sparkle.png | Bin 742 -> 0 bytes public/-/emojis/2/sparkler.png | Bin 1194 -> 0 bytes public/-/emojis/2/sparkles.png | Bin 673 -> 0 bytes public/-/emojis/2/sparkling_heart.png | Bin 957 -> 0 bytes public/-/emojis/2/speak_no_evil.png | Bin 862 -> 0 bytes public/-/emojis/2/speaker.png | Bin 627 -> 0 bytes public/-/emojis/2/speaking_head.png | Bin 553 -> 0 bytes public/-/emojis/2/speech_balloon.png | Bin 724 -> 0 bytes public/-/emojis/2/speech_left.png | Bin 584 -> 0 bytes public/-/emojis/2/speedboat.png | Bin 620 -> 0 bytes public/-/emojis/2/spider.png | Bin 956 -> 0 bytes public/-/emojis/2/spider_web.png | Bin 721 -> 0 bytes public/-/emojis/2/sponge.png | Bin 534 -> 0 bytes public/-/emojis/2/spoon.png | Bin 547 -> 0 bytes public/-/emojis/2/spy_tone1.png | Bin 1057 -> 0 bytes public/-/emojis/2/spy_tone2.png | Bin 1082 -> 0 bytes public/-/emojis/2/spy_tone3.png | Bin 1081 -> 0 bytes public/-/emojis/2/spy_tone4.png | Bin 1019 -> 0 bytes public/-/emojis/2/spy_tone5.png | Bin 1063 -> 0 bytes public/-/emojis/2/squeeze_bottle.png | Bin 544 -> 0 bytes public/-/emojis/2/squid.png | Bin 950 -> 0 bytes public/-/emojis/2/stadium.png | Bin 1388 -> 0 bytes public/-/emojis/2/star.png | Bin 571 -> 0 bytes public/-/emojis/2/star2.png | Bin 713 -> 0 bytes public/-/emojis/2/star_and_crescent.png | Bin 706 -> 0 bytes public/-/emojis/2/star_of_david.png | Bin 660 -> 0 bytes public/-/emojis/2/star_struck.png | Bin 950 -> 0 bytes public/-/emojis/2/stars.png | Bin 976 -> 0 bytes public/-/emojis/2/station.png | Bin 868 -> 0 bytes public/-/emojis/2/statue_of_liberty.png | Bin 811 -> 0 bytes public/-/emojis/2/steam_locomotive.png | Bin 906 -> 0 bytes public/-/emojis/2/stew.png | Bin 1030 -> 0 bytes public/-/emojis/2/stop_button.png | Bin 506 -> 0 bytes public/-/emojis/2/stopwatch.png | Bin 866 -> 0 bytes public/-/emojis/2/straight_ruler.png | Bin 426 -> 0 bytes public/-/emojis/2/strawberry.png | Bin 1011 -> 0 bytes public/-/emojis/2/stuck_out_tongue.png | Bin 736 -> 0 bytes .../emojis/2/stuck_out_tongue_closed_eyes.png | Bin 761 -> 0 bytes .../emojis/2/stuck_out_tongue_winking_eye.png | Bin 849 -> 0 bytes public/-/emojis/2/stuffed_flatbread.png | Bin 1022 -> 0 bytes public/-/emojis/2/sun_with_face.png | Bin 857 -> 0 bytes public/-/emojis/2/sunflower.png | Bin 1029 -> 0 bytes public/-/emojis/2/sunglasses.png | Bin 791 -> 0 bytes public/-/emojis/2/sunny.png | Bin 492 -> 0 bytes public/-/emojis/2/sunrise.png | Bin 707 -> 0 bytes public/-/emojis/2/sunrise_over_mountains.png | Bin 759 -> 0 bytes public/-/emojis/2/superhero.png | Bin 1042 -> 0 bytes public/-/emojis/2/superhero_tone1.png | Bin 1121 -> 0 bytes public/-/emojis/2/superhero_tone2.png | Bin 1073 -> 0 bytes public/-/emojis/2/superhero_tone3.png | Bin 1040 -> 0 bytes public/-/emojis/2/superhero_tone4.png | Bin 1049 -> 0 bytes public/-/emojis/2/superhero_tone5.png | Bin 994 -> 0 bytes public/-/emojis/2/supervillain.png | Bin 959 -> 0 bytes public/-/emojis/2/supervillain_tone1.png | Bin 938 -> 0 bytes public/-/emojis/2/supervillain_tone2.png | Bin 908 -> 0 bytes public/-/emojis/2/supervillain_tone3.png | Bin 918 -> 0 bytes public/-/emojis/2/supervillain_tone4.png | Bin 862 -> 0 bytes public/-/emojis/2/supervillain_tone5.png | Bin 890 -> 0 bytes public/-/emojis/2/surfer.png | Bin 965 -> 0 bytes public/-/emojis/2/surfer_tone1.png | Bin 980 -> 0 bytes public/-/emojis/2/surfer_tone2.png | Bin 920 -> 0 bytes public/-/emojis/2/surfer_tone3.png | Bin 905 -> 0 bytes public/-/emojis/2/surfer_tone4.png | Bin 928 -> 0 bytes public/-/emojis/2/surfer_tone5.png | Bin 995 -> 0 bytes public/-/emojis/2/sushi.png | Bin 987 -> 0 bytes public/-/emojis/2/suspension_railway.png | Bin 610 -> 0 bytes public/-/emojis/2/swan.png | Bin 872 -> 0 bytes public/-/emojis/2/sweat.png | Bin 840 -> 0 bytes public/-/emojis/2/sweat_drops.png | Bin 951 -> 0 bytes public/-/emojis/2/sweat_smile.png | Bin 902 -> 0 bytes public/-/emojis/2/sweet_potato.png | Bin 730 -> 0 bytes public/-/emojis/2/swimmer.png | Bin 611 -> 0 bytes public/-/emojis/2/swimmer_tone1.png | Bin 641 -> 0 bytes public/-/emojis/2/swimmer_tone2.png | Bin 595 -> 0 bytes public/-/emojis/2/swimmer_tone3.png | Bin 574 -> 0 bytes public/-/emojis/2/swimmer_tone4.png | Bin 570 -> 0 bytes public/-/emojis/2/swimmer_tone5.png | Bin 564 -> 0 bytes public/-/emojis/2/symbols.png | Bin 741 -> 0 bytes public/-/emojis/2/synagogue.png | Bin 840 -> 0 bytes public/-/emojis/2/syringe.png | Bin 730 -> 0 bytes public/-/emojis/2/t_rex.png | Bin 878 -> 0 bytes public/-/emojis/2/taco.png | Bin 1151 -> 0 bytes public/-/emojis/2/tada.png | Bin 1430 -> 0 bytes public/-/emojis/2/takeout_box.png | Bin 939 -> 0 bytes public/-/emojis/2/tanabata_tree.png | Bin 1009 -> 0 bytes public/-/emojis/2/tangerine.png | Bin 890 -> 0 bytes public/-/emojis/2/taurus.png | Bin 645 -> 0 bytes public/-/emojis/2/taxi.png | Bin 818 -> 0 bytes public/-/emojis/2/tea.png | Bin 856 -> 0 bytes public/-/emojis/2/teddy_bear.png | Bin 848 -> 0 bytes public/-/emojis/2/telephone_receiver.png | Bin 538 -> 0 bytes public/-/emojis/2/telescope.png | Bin 817 -> 0 bytes public/-/emojis/2/ten.png | Bin 667 -> 0 bytes public/-/emojis/2/tennis.png | Bin 897 -> 0 bytes public/-/emojis/2/tent.png | Bin 879 -> 0 bytes public/-/emojis/2/test_tube.png | Bin 552 -> 0 bytes public/-/emojis/2/thermometer.png | Bin 401 -> 0 bytes public/-/emojis/2/thermometer_face.png | Bin 1030 -> 0 bytes public/-/emojis/2/thinking.png | Bin 834 -> 0 bytes public/-/emojis/2/third_place.png | Bin 953 -> 0 bytes public/-/emojis/2/thought_balloon.png | Bin 614 -> 0 bytes public/-/emojis/2/thread.png | Bin 837 -> 0 bytes public/-/emojis/2/three.png | Bin 709 -> 0 bytes public/-/emojis/2/thumbsdown.png | Bin 533 -> 0 bytes public/-/emojis/2/thumbsdown_tone1.png | Bin 513 -> 0 bytes public/-/emojis/2/thumbsdown_tone2.png | Bin 510 -> 0 bytes public/-/emojis/2/thumbsdown_tone3.png | Bin 545 -> 0 bytes public/-/emojis/2/thumbsdown_tone4.png | Bin 524 -> 0 bytes public/-/emojis/2/thumbsdown_tone5.png | Bin 510 -> 0 bytes public/-/emojis/2/thumbsup.png | Bin 517 -> 0 bytes public/-/emojis/2/thumbsup_tone1.png | Bin 582 -> 0 bytes public/-/emojis/2/thumbsup_tone2.png | Bin 503 -> 0 bytes public/-/emojis/2/thumbsup_tone3.png | Bin 536 -> 0 bytes public/-/emojis/2/thumbsup_tone4.png | Bin 500 -> 0 bytes public/-/emojis/2/thumbsup_tone5.png | Bin 555 -> 0 bytes public/-/emojis/2/thunder_cloud_rain.png | Bin 974 -> 0 bytes public/-/emojis/2/ticket.png | Bin 494 -> 0 bytes public/-/emojis/2/tickets.png | Bin 400 -> 0 bytes public/-/emojis/2/tiger.png | Bin 1545 -> 0 bytes public/-/emojis/2/tiger2.png | Bin 850 -> 0 bytes public/-/emojis/2/timer.png | Bin 634 -> 0 bytes public/-/emojis/2/tired_face.png | Bin 790 -> 0 bytes public/-/emojis/2/tm.png | Bin 468 -> 0 bytes public/-/emojis/2/toilet.png | Bin 602 -> 0 bytes public/-/emojis/2/tokyo_tower.png | Bin 642 -> 0 bytes public/-/emojis/2/tomato.png | Bin 866 -> 0 bytes public/-/emojis/2/tone1.png | Bin 375 -> 0 bytes public/-/emojis/2/tone2.png | Bin 343 -> 0 bytes public/-/emojis/2/tone3.png | Bin 343 -> 0 bytes public/-/emojis/2/tone4.png | Bin 343 -> 0 bytes public/-/emojis/2/tone5.png | Bin 364 -> 0 bytes public/-/emojis/2/tongue.png | Bin 675 -> 0 bytes public/-/emojis/2/toolbox.png | Bin 417 -> 0 bytes public/-/emojis/2/tools.png | Bin 864 -> 0 bytes public/-/emojis/2/tooth.png | Bin 546 -> 0 bytes public/-/emojis/2/top.png | Bin 440 -> 0 bytes public/-/emojis/2/tophat.png | Bin 718 -> 0 bytes public/-/emojis/2/track_next.png | Bin 537 -> 0 bytes public/-/emojis/2/track_previous.png | Bin 601 -> 0 bytes public/-/emojis/2/trackball.png | Bin 554 -> 0 bytes public/-/emojis/2/tractor.png | Bin 953 -> 0 bytes public/-/emojis/2/traffic_light.png | Bin 489 -> 0 bytes public/-/emojis/2/train.png | Bin 710 -> 0 bytes public/-/emojis/2/train2.png | Bin 875 -> 0 bytes public/-/emojis/2/tram.png | Bin 802 -> 0 bytes public/-/emojis/2/triangular_flag_on_post.png | Bin 325 -> 0 bytes public/-/emojis/2/triangular_ruler.png | Bin 640 -> 0 bytes public/-/emojis/2/trident.png | Bin 727 -> 0 bytes public/-/emojis/2/triumph.png | Bin 962 -> 0 bytes public/-/emojis/2/trolleybus.png | Bin 739 -> 0 bytes public/-/emojis/2/trophy.png | Bin 966 -> 0 bytes public/-/emojis/2/tropical_drink.png | Bin 888 -> 0 bytes public/-/emojis/2/tropical_fish.png | Bin 889 -> 0 bytes public/-/emojis/2/truck.png | Bin 695 -> 0 bytes public/-/emojis/2/trumpet.png | Bin 835 -> 0 bytes public/-/emojis/2/tulip.png | Bin 868 -> 0 bytes public/-/emojis/2/tumbler_glass.png | Bin 956 -> 0 bytes public/-/emojis/2/turtle.png | Bin 969 -> 0 bytes public/-/emojis/2/tv.png | Bin 803 -> 0 bytes .../-/emojis/2/twisted_rightwards_arrows.png | Bin 650 -> 0 bytes public/-/emojis/2/two.png | Bin 674 -> 0 bytes public/-/emojis/2/two_hearts.png | Bin 596 -> 0 bytes public/-/emojis/2/two_men_holding_hands.png | Bin 859 -> 0 bytes public/-/emojis/2/two_women_holding_hands.png | Bin 1071 -> 0 bytes public/-/emojis/2/u5272.png | Bin 623 -> 0 bytes public/-/emojis/2/u5408.png | Bin 652 -> 0 bytes public/-/emojis/2/u55b6.png | Bin 569 -> 0 bytes public/-/emojis/2/u6307.png | Bin 609 -> 0 bytes public/-/emojis/2/u6708.png | Bin 491 -> 0 bytes public/-/emojis/2/u6709.png | Bin 562 -> 0 bytes public/-/emojis/2/u6e80.png | Bin 665 -> 0 bytes public/-/emojis/2/u7121.png | Bin 642 -> 0 bytes public/-/emojis/2/u7533.png | Bin 542 -> 0 bytes public/-/emojis/2/u7981.png | Bin 704 -> 0 bytes public/-/emojis/2/u7a7a.png | Bin 708 -> 0 bytes public/-/emojis/2/umbrella.png | Bin 904 -> 0 bytes public/-/emojis/2/unamused.png | Bin 712 -> 0 bytes public/-/emojis/2/underage.png | Bin 1004 -> 0 bytes public/-/emojis/2/unicorn.png | Bin 1146 -> 0 bytes public/-/emojis/2/united_nations.png | Bin 807 -> 0 bytes public/-/emojis/2/unlock.png | Bin 465 -> 0 bytes public/-/emojis/2/up.png | Bin 576 -> 0 bytes public/-/emojis/2/upside_down.png | Bin 651 -> 0 bytes public/-/emojis/2/urn.png | Bin 587 -> 0 bytes public/-/emojis/2/v.png | Bin 584 -> 0 bytes public/-/emojis/2/v_tone1.png | Bin 580 -> 0 bytes public/-/emojis/2/v_tone2.png | Bin 553 -> 0 bytes public/-/emojis/2/v_tone3.png | Bin 573 -> 0 bytes public/-/emojis/2/v_tone4.png | Bin 567 -> 0 bytes public/-/emojis/2/v_tone5.png | Bin 590 -> 0 bytes public/-/emojis/2/vampire.png | Bin 955 -> 0 bytes public/-/emojis/2/vampire_tone1.png | Bin 943 -> 0 bytes public/-/emojis/2/vampire_tone2.png | Bin 941 -> 0 bytes public/-/emojis/2/vampire_tone3.png | Bin 910 -> 0 bytes public/-/emojis/2/vampire_tone4.png | Bin 960 -> 0 bytes public/-/emojis/2/vampire_tone5.png | Bin 890 -> 0 bytes public/-/emojis/2/vertical_traffic_light.png | Bin 538 -> 0 bytes public/-/emojis/2/vhs.png | Bin 501 -> 0 bytes public/-/emojis/2/vibration_mode.png | Bin 679 -> 0 bytes public/-/emojis/2/video_camera.png | Bin 634 -> 0 bytes public/-/emojis/2/video_game.png | Bin 828 -> 0 bytes public/-/emojis/2/violin.png | Bin 1017 -> 0 bytes public/-/emojis/2/virgo.png | Bin 714 -> 0 bytes public/-/emojis/2/volcano.png | Bin 1379 -> 0 bytes public/-/emojis/2/volleyball.png | Bin 967 -> 0 bytes public/-/emojis/2/vs.png | Bin 665 -> 0 bytes public/-/emojis/2/vulcan.png | Bin 598 -> 0 bytes public/-/emojis/2/vulcan_tone1.png | Bin 683 -> 0 bytes public/-/emojis/2/vulcan_tone2.png | Bin 671 -> 0 bytes public/-/emojis/2/vulcan_tone3.png | Bin 579 -> 0 bytes public/-/emojis/2/vulcan_tone4.png | Bin 589 -> 0 bytes public/-/emojis/2/vulcan_tone5.png | Bin 613 -> 0 bytes public/-/emojis/2/wales.png | Bin 844 -> 0 bytes public/-/emojis/2/walking.png | Bin 659 -> 0 bytes public/-/emojis/2/walking_tone1.png | Bin 664 -> 0 bytes public/-/emojis/2/walking_tone2.png | Bin 664 -> 0 bytes public/-/emojis/2/walking_tone3.png | Bin 656 -> 0 bytes public/-/emojis/2/walking_tone4.png | Bin 646 -> 0 bytes public/-/emojis/2/walking_tone5.png | Bin 633 -> 0 bytes public/-/emojis/2/waning_crescent_moon.png | Bin 873 -> 0 bytes public/-/emojis/2/waning_gibbous_moon.png | Bin 1090 -> 0 bytes public/-/emojis/2/warning.png | Bin 627 -> 0 bytes public/-/emojis/2/wastebasket.png | Bin 1406 -> 0 bytes public/-/emojis/2/watch.png | Bin 707 -> 0 bytes public/-/emojis/2/water_buffalo.png | Bin 767 -> 0 bytes public/-/emojis/2/water_polo.png | Bin 796 -> 0 bytes public/-/emojis/2/water_polo_tone1.png | Bin 753 -> 0 bytes public/-/emojis/2/water_polo_tone2.png | Bin 758 -> 0 bytes public/-/emojis/2/water_polo_tone3.png | Bin 735 -> 0 bytes public/-/emojis/2/water_polo_tone4.png | Bin 741 -> 0 bytes public/-/emojis/2/water_polo_tone5.png | Bin 717 -> 0 bytes public/-/emojis/2/watermelon.png | Bin 1028 -> 0 bytes public/-/emojis/2/wave.png | Bin 774 -> 0 bytes public/-/emojis/2/wave_tone1.png | Bin 805 -> 0 bytes public/-/emojis/2/wave_tone2.png | Bin 772 -> 0 bytes public/-/emojis/2/wave_tone3.png | Bin 807 -> 0 bytes public/-/emojis/2/wave_tone4.png | Bin 775 -> 0 bytes public/-/emojis/2/wave_tone5.png | Bin 683 -> 0 bytes public/-/emojis/2/wavy_dash.png | Bin 385 -> 0 bytes public/-/emojis/2/waxing_crescent_moon.png | Bin 931 -> 0 bytes public/-/emojis/2/waxing_gibbous_moon.png | Bin 1105 -> 0 bytes public/-/emojis/2/wc.png | Bin 679 -> 0 bytes public/-/emojis/2/weary.png | Bin 809 -> 0 bytes public/-/emojis/2/wedding.png | Bin 833 -> 0 bytes public/-/emojis/2/weight_lifting_man.png | Bin 846 -> 0 bytes public/-/emojis/2/whale.png | Bin 1032 -> 0 bytes public/-/emojis/2/whale2.png | Bin 885 -> 0 bytes public/-/emojis/2/wheel_of_dharma.png | Bin 720 -> 0 bytes public/-/emojis/2/wheelchair.png | Bin 659 -> 0 bytes public/-/emojis/2/white_check_mark.png | Bin 648 -> 0 bytes public/-/emojis/2/white_circle.png | Bin 662 -> 0 bytes public/-/emojis/2/white_flag.png | Bin 280 -> 0 bytes public/-/emojis/2/white_flower.png | Bin 1029 -> 0 bytes public/-/emojis/2/white_haired.png | Bin 502 -> 0 bytes public/-/emojis/2/white_large_square.png | Bin 593 -> 0 bytes .../-/emojis/2/white_medium_small_square.png | Bin 377 -> 0 bytes public/-/emojis/2/white_medium_square.png | Bin 463 -> 0 bytes public/-/emojis/2/white_small_square.png | Bin 316 -> 0 bytes public/-/emojis/2/white_square_button.png | Bin 535 -> 0 bytes public/-/emojis/2/white_sun_cloud.png | Bin 763 -> 0 bytes public/-/emojis/2/white_sun_rain_cloud.png | Bin 926 -> 0 bytes public/-/emojis/2/white_sun_small_cloud.png | Bin 754 -> 0 bytes public/-/emojis/2/wilted_rose.png | Bin 918 -> 0 bytes public/-/emojis/2/wind_blowing_face.png | Bin 905 -> 0 bytes public/-/emojis/2/wind_chime.png | Bin 745 -> 0 bytes public/-/emojis/2/wine_glass.png | Bin 724 -> 0 bytes public/-/emojis/2/wink.png | Bin 652 -> 0 bytes public/-/emojis/2/wolf.png | Bin 969 -> 0 bytes public/-/emojis/2/woman.png | Bin 1002 -> 0 bytes public/-/emojis/2/woman_artist.png | Bin 1132 -> 0 bytes public/-/emojis/2/woman_artist_tone1.png | Bin 1093 -> 0 bytes public/-/emojis/2/woman_artist_tone2.png | Bin 1230 -> 0 bytes public/-/emojis/2/woman_artist_tone3.png | Bin 1100 -> 0 bytes public/-/emojis/2/woman_artist_tone4.png | Bin 1115 -> 0 bytes public/-/emojis/2/woman_artist_tone5.png | Bin 1130 -> 0 bytes public/-/emojis/2/woman_astronaut.png | Bin 1294 -> 0 bytes public/-/emojis/2/woman_astronaut_tone1.png | Bin 1296 -> 0 bytes public/-/emojis/2/woman_astronaut_tone2.png | Bin 1269 -> 0 bytes public/-/emojis/2/woman_astronaut_tone3.png | Bin 1225 -> 0 bytes public/-/emojis/2/woman_astronaut_tone4.png | Bin 1194 -> 0 bytes public/-/emojis/2/woman_astronaut_tone5.png | Bin 1212 -> 0 bytes public/-/emojis/2/woman_bald.png | Bin 732 -> 0 bytes public/-/emojis/2/woman_bald_tone1.png | Bin 696 -> 0 bytes public/-/emojis/2/woman_bald_tone2.png | Bin 721 -> 0 bytes public/-/emojis/2/woman_bald_tone3.png | Bin 753 -> 0 bytes public/-/emojis/2/woman_bald_tone4.png | Bin 693 -> 0 bytes public/-/emojis/2/woman_bald_tone5.png | Bin 650 -> 0 bytes public/-/emojis/2/woman_biking.png | Bin 1336 -> 0 bytes public/-/emojis/2/woman_biking_tone1.png | Bin 1357 -> 0 bytes public/-/emojis/2/woman_biking_tone2.png | Bin 1347 -> 0 bytes public/-/emojis/2/woman_biking_tone3.png | Bin 1298 -> 0 bytes public/-/emojis/2/woman_biking_tone4.png | Bin 1266 -> 0 bytes public/-/emojis/2/woman_biking_tone5.png | Bin 1243 -> 0 bytes public/-/emojis/2/woman_bouncing_ball.png | Bin 1163 -> 0 bytes .../-/emojis/2/woman_bouncing_ball_tone1.png | Bin 1148 -> 0 bytes .../-/emojis/2/woman_bouncing_ball_tone2.png | Bin 1200 -> 0 bytes .../-/emojis/2/woman_bouncing_ball_tone3.png | Bin 1106 -> 0 bytes .../-/emojis/2/woman_bouncing_ball_tone4.png | Bin 1076 -> 0 bytes .../-/emojis/2/woman_bouncing_ball_tone5.png | Bin 1047 -> 0 bytes public/-/emojis/2/woman_bowing.png | Bin 963 -> 0 bytes public/-/emojis/2/woman_bowing_tone1.png | Bin 992 -> 0 bytes public/-/emojis/2/woman_bowing_tone2.png | Bin 1013 -> 0 bytes public/-/emojis/2/woman_bowing_tone3.png | Bin 951 -> 0 bytes public/-/emojis/2/woman_bowing_tone4.png | Bin 859 -> 0 bytes public/-/emojis/2/woman_bowing_tone5.png | Bin 855 -> 0 bytes public/-/emojis/2/woman_cartwheeling.png | Bin 790 -> 0 bytes .../-/emojis/2/woman_cartwheeling_tone1.png | Bin 772 -> 0 bytes .../-/emojis/2/woman_cartwheeling_tone2.png | Bin 784 -> 0 bytes .../-/emojis/2/woman_cartwheeling_tone3.png | Bin 752 -> 0 bytes .../-/emojis/2/woman_cartwheeling_tone4.png | Bin 719 -> 0 bytes .../-/emojis/2/woman_cartwheeling_tone5.png | Bin 710 -> 0 bytes public/-/emojis/2/woman_climbing.png | Bin 1156 -> 0 bytes public/-/emojis/2/woman_climbing_tone1.png | Bin 1209 -> 0 bytes public/-/emojis/2/woman_climbing_tone2.png | Bin 1158 -> 0 bytes public/-/emojis/2/woman_climbing_tone3.png | Bin 1047 -> 0 bytes public/-/emojis/2/woman_climbing_tone4.png | Bin 1025 -> 0 bytes public/-/emojis/2/woman_climbing_tone5.png | Bin 1032 -> 0 bytes .../-/emojis/2/woman_construction_worker.png | Bin 907 -> 0 bytes .../2/woman_construction_worker_tone1.png | Bin 895 -> 0 bytes .../2/woman_construction_worker_tone2.png | Bin 864 -> 0 bytes .../2/woman_construction_worker_tone3.png | Bin 880 -> 0 bytes .../2/woman_construction_worker_tone4.png | Bin 815 -> 0 bytes .../2/woman_construction_worker_tone5.png | Bin 903 -> 0 bytes public/-/emojis/2/woman_cook.png | Bin 1161 -> 0 bytes public/-/emojis/2/woman_cook_tone1.png | Bin 1137 -> 0 bytes public/-/emojis/2/woman_cook_tone2.png | Bin 1149 -> 0 bytes public/-/emojis/2/woman_cook_tone3.png | Bin 1051 -> 0 bytes public/-/emojis/2/woman_cook_tone4.png | Bin 1039 -> 0 bytes public/-/emojis/2/woman_cook_tone5.png | Bin 1069 -> 0 bytes public/-/emojis/2/woman_curly_haired.png | Bin 907 -> 0 bytes .../-/emojis/2/woman_curly_haired_tone1.png | Bin 916 -> 0 bytes .../-/emojis/2/woman_curly_haired_tone2.png | Bin 938 -> 0 bytes .../-/emojis/2/woman_curly_haired_tone3.png | Bin 817 -> 0 bytes .../-/emojis/2/woman_curly_haired_tone4.png | Bin 789 -> 0 bytes .../-/emojis/2/woman_curly_haired_tone5.png | Bin 806 -> 0 bytes public/-/emojis/2/woman_detective.png | Bin 1211 -> 0 bytes public/-/emojis/2/woman_detective_tone1.png | Bin 1110 -> 0 bytes public/-/emojis/2/woman_detective_tone2.png | Bin 1079 -> 0 bytes public/-/emojis/2/woman_detective_tone3.png | Bin 1056 -> 0 bytes public/-/emojis/2/woman_detective_tone4.png | Bin 1074 -> 0 bytes public/-/emojis/2/woman_detective_tone5.png | Bin 1055 -> 0 bytes public/-/emojis/2/woman_elf.png | Bin 1029 -> 0 bytes public/-/emojis/2/woman_elf_tone1.png | Bin 1014 -> 0 bytes public/-/emojis/2/woman_elf_tone2.png | Bin 933 -> 0 bytes public/-/emojis/2/woman_elf_tone3.png | Bin 954 -> 0 bytes public/-/emojis/2/woman_elf_tone4.png | Bin 954 -> 0 bytes public/-/emojis/2/woman_elf_tone5.png | Bin 1002 -> 0 bytes public/-/emojis/2/woman_facepalming.png | Bin 831 -> 0 bytes public/-/emojis/2/woman_facepalming_tone1.png | Bin 795 -> 0 bytes public/-/emojis/2/woman_facepalming_tone2.png | Bin 809 -> 0 bytes public/-/emojis/2/woman_facepalming_tone3.png | Bin 750 -> 0 bytes public/-/emojis/2/woman_facepalming_tone4.png | Bin 722 -> 0 bytes public/-/emojis/2/woman_facepalming_tone5.png | Bin 743 -> 0 bytes public/-/emojis/2/woman_factory_worker.png | Bin 1090 -> 0 bytes .../-/emojis/2/woman_factory_worker_tone1.png | Bin 1087 -> 0 bytes .../-/emojis/2/woman_factory_worker_tone2.png | Bin 1091 -> 0 bytes .../-/emojis/2/woman_factory_worker_tone3.png | Bin 1039 -> 0 bytes .../-/emojis/2/woman_factory_worker_tone4.png | Bin 1004 -> 0 bytes .../-/emojis/2/woman_factory_worker_tone5.png | Bin 990 -> 0 bytes public/-/emojis/2/woman_fairy.png | Bin 1087 -> 0 bytes public/-/emojis/2/woman_fairy_tone1.png | Bin 1089 -> 0 bytes public/-/emojis/2/woman_fairy_tone2.png | Bin 1052 -> 0 bytes public/-/emojis/2/woman_fairy_tone3.png | Bin 1053 -> 0 bytes public/-/emojis/2/woman_fairy_tone4.png | Bin 1012 -> 0 bytes public/-/emojis/2/woman_fairy_tone5.png | Bin 1145 -> 0 bytes public/-/emojis/2/woman_farmer.png | Bin 971 -> 0 bytes public/-/emojis/2/woman_farmer_tone1.png | Bin 1039 -> 0 bytes public/-/emojis/2/woman_farmer_tone2.png | Bin 1003 -> 0 bytes public/-/emojis/2/woman_farmer_tone3.png | Bin 988 -> 0 bytes public/-/emojis/2/woman_farmer_tone4.png | Bin 941 -> 0 bytes public/-/emojis/2/woman_farmer_tone5.png | Bin 964 -> 0 bytes public/-/emojis/2/woman_firefighter.png | Bin 1114 -> 0 bytes public/-/emojis/2/woman_firefighter_tone1.png | Bin 1111 -> 0 bytes public/-/emojis/2/woman_firefighter_tone2.png | Bin 1132 -> 0 bytes public/-/emojis/2/woman_firefighter_tone3.png | Bin 1058 -> 0 bytes public/-/emojis/2/woman_firefighter_tone4.png | Bin 1067 -> 0 bytes public/-/emojis/2/woman_firefighter_tone5.png | Bin 1117 -> 0 bytes public/-/emojis/2/woman_frowning.png | Bin 785 -> 0 bytes public/-/emojis/2/woman_frowning_tone1.png | Bin 775 -> 0 bytes public/-/emojis/2/woman_frowning_tone2.png | Bin 806 -> 0 bytes public/-/emojis/2/woman_frowning_tone3.png | Bin 714 -> 0 bytes public/-/emojis/2/woman_frowning_tone4.png | Bin 703 -> 0 bytes public/-/emojis/2/woman_frowning_tone5.png | Bin 718 -> 0 bytes public/-/emojis/2/woman_genie.png | Bin 1068 -> 0 bytes public/-/emojis/2/woman_gesturing_no.png | Bin 838 -> 0 bytes .../-/emojis/2/woman_gesturing_no_tone1.png | Bin 862 -> 0 bytes .../-/emojis/2/woman_gesturing_no_tone2.png | Bin 851 -> 0 bytes .../-/emojis/2/woman_gesturing_no_tone3.png | Bin 775 -> 0 bytes .../-/emojis/2/woman_gesturing_no_tone4.png | Bin 774 -> 0 bytes .../-/emojis/2/woman_gesturing_no_tone5.png | Bin 762 -> 0 bytes public/-/emojis/2/woman_gesturing_ok.png | Bin 996 -> 0 bytes .../-/emojis/2/woman_gesturing_ok_tone1.png | Bin 1025 -> 0 bytes .../-/emojis/2/woman_gesturing_ok_tone2.png | Bin 951 -> 0 bytes .../-/emojis/2/woman_gesturing_ok_tone3.png | Bin 970 -> 0 bytes .../-/emojis/2/woman_gesturing_ok_tone4.png | Bin 858 -> 0 bytes .../-/emojis/2/woman_gesturing_ok_tone5.png | Bin 907 -> 0 bytes .../-/emojis/2/woman_getting_face_massage.png | Bin 899 -> 0 bytes .../2/woman_getting_face_massage_tone1.png | Bin 906 -> 0 bytes .../2/woman_getting_face_massage_tone2.png | Bin 876 -> 0 bytes .../2/woman_getting_face_massage_tone3.png | Bin 862 -> 0 bytes .../2/woman_getting_face_massage_tone4.png | Bin 898 -> 0 bytes .../2/woman_getting_face_massage_tone5.png | Bin 730 -> 0 bytes public/-/emojis/2/woman_getting_haircut.png | Bin 1049 -> 0 bytes .../emojis/2/woman_getting_haircut_tone1.png | Bin 1022 -> 0 bytes .../emojis/2/woman_getting_haircut_tone2.png | Bin 1115 -> 0 bytes .../emojis/2/woman_getting_haircut_tone3.png | Bin 976 -> 0 bytes .../emojis/2/woman_getting_haircut_tone4.png | Bin 882 -> 0 bytes .../emojis/2/woman_getting_haircut_tone5.png | Bin 973 -> 0 bytes public/-/emojis/2/woman_golfing.png | Bin 842 -> 0 bytes public/-/emojis/2/woman_golfing_tone1.png | Bin 834 -> 0 bytes public/-/emojis/2/woman_golfing_tone2.png | Bin 850 -> 0 bytes public/-/emojis/2/woman_golfing_tone3.png | Bin 835 -> 0 bytes public/-/emojis/2/woman_golfing_tone4.png | Bin 829 -> 0 bytes public/-/emojis/2/woman_golfing_tone5.png | Bin 806 -> 0 bytes public/-/emojis/2/woman_guard.png | Bin 621 -> 0 bytes public/-/emojis/2/woman_guard_tone1.png | Bin 626 -> 0 bytes public/-/emojis/2/woman_guard_tone2.png | Bin 649 -> 0 bytes public/-/emojis/2/woman_guard_tone3.png | Bin 622 -> 0 bytes public/-/emojis/2/woman_guard_tone4.png | Bin 626 -> 0 bytes public/-/emojis/2/woman_guard_tone5.png | Bin 589 -> 0 bytes public/-/emojis/2/woman_health_worker.png | Bin 1001 -> 0 bytes .../-/emojis/2/woman_health_worker_tone1.png | Bin 955 -> 0 bytes .../-/emojis/2/woman_health_worker_tone2.png | Bin 1045 -> 0 bytes .../-/emojis/2/woman_health_worker_tone3.png | Bin 987 -> 0 bytes .../-/emojis/2/woman_health_worker_tone4.png | Bin 1002 -> 0 bytes .../-/emojis/2/woman_health_worker_tone5.png | Bin 928 -> 0 bytes public/-/emojis/2/woman_in_lotus_position.png | Bin 943 -> 0 bytes .../2/woman_in_lotus_position_tone1.png | Bin 968 -> 0 bytes .../2/woman_in_lotus_position_tone2.png | Bin 945 -> 0 bytes .../2/woman_in_lotus_position_tone3.png | Bin 861 -> 0 bytes .../2/woman_in_lotus_position_tone4.png | Bin 853 -> 0 bytes .../2/woman_in_lotus_position_tone5.png | Bin 879 -> 0 bytes public/-/emojis/2/woman_in_steamy_room.png | Bin 869 -> 0 bytes .../-/emojis/2/woman_in_steamy_room_tone1.png | Bin 907 -> 0 bytes .../-/emojis/2/woman_in_steamy_room_tone2.png | Bin 892 -> 0 bytes .../-/emojis/2/woman_in_steamy_room_tone3.png | Bin 856 -> 0 bytes .../-/emojis/2/woman_in_steamy_room_tone4.png | Bin 822 -> 0 bytes .../-/emojis/2/woman_in_steamy_room_tone5.png | Bin 793 -> 0 bytes public/-/emojis/2/woman_judge.png | Bin 972 -> 0 bytes public/-/emojis/2/woman_judge_tone1.png | Bin 947 -> 0 bytes public/-/emojis/2/woman_judge_tone2.png | Bin 1077 -> 0 bytes public/-/emojis/2/woman_judge_tone3.png | Bin 1037 -> 0 bytes public/-/emojis/2/woman_judge_tone4.png | Bin 938 -> 0 bytes public/-/emojis/2/woman_judge_tone5.png | Bin 946 -> 0 bytes public/-/emojis/2/woman_juggling.png | Bin 1220 -> 0 bytes public/-/emojis/2/woman_juggling_tone1.png | Bin 1212 -> 0 bytes public/-/emojis/2/woman_juggling_tone2.png | Bin 1209 -> 0 bytes public/-/emojis/2/woman_juggling_tone3.png | Bin 1173 -> 0 bytes public/-/emojis/2/woman_juggling_tone4.png | Bin 1156 -> 0 bytes public/-/emojis/2/woman_juggling_tone5.png | Bin 1115 -> 0 bytes public/-/emojis/2/woman_lifting_weights.png | Bin 834 -> 0 bytes .../emojis/2/woman_lifting_weights_tone1.png | Bin 859 -> 0 bytes .../emojis/2/woman_lifting_weights_tone2.png | Bin 825 -> 0 bytes .../emojis/2/woman_lifting_weights_tone3.png | Bin 821 -> 0 bytes .../emojis/2/woman_lifting_weights_tone4.png | Bin 780 -> 0 bytes .../emojis/2/woman_lifting_weights_tone5.png | Bin 801 -> 0 bytes public/-/emojis/2/woman_mage.png | Bin 1095 -> 0 bytes public/-/emojis/2/woman_mage_tone1.png | Bin 1047 -> 0 bytes public/-/emojis/2/woman_mage_tone2.png | Bin 1062 -> 0 bytes public/-/emojis/2/woman_mage_tone3.png | Bin 1044 -> 0 bytes public/-/emojis/2/woman_mage_tone4.png | Bin 1061 -> 0 bytes public/-/emojis/2/woman_mage_tone5.png | Bin 1047 -> 0 bytes public/-/emojis/2/woman_mechanic.png | Bin 1110 -> 0 bytes public/-/emojis/2/woman_mechanic_tone1.png | Bin 1069 -> 0 bytes public/-/emojis/2/woman_mechanic_tone2.png | Bin 1088 -> 0 bytes public/-/emojis/2/woman_mechanic_tone3.png | Bin 1014 -> 0 bytes public/-/emojis/2/woman_mechanic_tone4.png | Bin 1040 -> 0 bytes public/-/emojis/2/woman_mechanic_tone5.png | Bin 952 -> 0 bytes public/-/emojis/2/woman_mountain_biking.png | Bin 1346 -> 0 bytes .../emojis/2/woman_mountain_biking_tone1.png | Bin 1441 -> 0 bytes .../emojis/2/woman_mountain_biking_tone2.png | Bin 1441 -> 0 bytes .../emojis/2/woman_mountain_biking_tone3.png | Bin 1318 -> 0 bytes .../emojis/2/woman_mountain_biking_tone4.png | Bin 1453 -> 0 bytes .../emojis/2/woman_mountain_biking_tone5.png | Bin 1452 -> 0 bytes public/-/emojis/2/woman_office_worker.png | Bin 898 -> 0 bytes .../-/emojis/2/woman_office_worker_tone1.png | Bin 859 -> 0 bytes .../-/emojis/2/woman_office_worker_tone2.png | Bin 925 -> 0 bytes .../-/emojis/2/woman_office_worker_tone3.png | Bin 874 -> 0 bytes .../-/emojis/2/woman_office_worker_tone4.png | Bin 868 -> 0 bytes .../-/emojis/2/woman_office_worker_tone5.png | Bin 895 -> 0 bytes public/-/emojis/2/woman_pilot.png | Bin 1023 -> 0 bytes public/-/emojis/2/woman_pilot_tone1.png | Bin 971 -> 0 bytes public/-/emojis/2/woman_pilot_tone2.png | Bin 1081 -> 0 bytes public/-/emojis/2/woman_pilot_tone3.png | Bin 977 -> 0 bytes public/-/emojis/2/woman_pilot_tone4.png | Bin 924 -> 0 bytes public/-/emojis/2/woman_pilot_tone5.png | Bin 998 -> 0 bytes public/-/emojis/2/woman_playing_handball.png | Bin 1066 -> 0 bytes .../emojis/2/woman_playing_handball_tone1.png | Bin 1076 -> 0 bytes .../emojis/2/woman_playing_handball_tone2.png | Bin 1023 -> 0 bytes .../emojis/2/woman_playing_handball_tone3.png | Bin 1000 -> 0 bytes .../emojis/2/woman_playing_handball_tone4.png | Bin 1006 -> 0 bytes .../emojis/2/woman_playing_handball_tone5.png | Bin 988 -> 0 bytes .../-/emojis/2/woman_playing_water_polo.png | Bin 811 -> 0 bytes .../2/woman_playing_water_polo_tone1.png | Bin 776 -> 0 bytes .../2/woman_playing_water_polo_tone2.png | Bin 762 -> 0 bytes .../2/woman_playing_water_polo_tone3.png | Bin 766 -> 0 bytes .../2/woman_playing_water_polo_tone4.png | Bin 750 -> 0 bytes .../2/woman_playing_water_polo_tone5.png | Bin 767 -> 0 bytes public/-/emojis/2/woman_police_officer.png | Bin 954 -> 0 bytes .../-/emojis/2/woman_police_officer_tone1.png | Bin 1032 -> 0 bytes .../-/emojis/2/woman_police_officer_tone2.png | Bin 1034 -> 0 bytes .../-/emojis/2/woman_police_officer_tone3.png | Bin 950 -> 0 bytes .../-/emojis/2/woman_police_officer_tone4.png | Bin 902 -> 0 bytes .../-/emojis/2/woman_police_officer_tone5.png | Bin 949 -> 0 bytes public/-/emojis/2/woman_pouting.png | Bin 760 -> 0 bytes public/-/emojis/2/woman_pouting_tone1.png | Bin 794 -> 0 bytes public/-/emojis/2/woman_pouting_tone2.png | Bin 782 -> 0 bytes public/-/emojis/2/woman_pouting_tone3.png | Bin 700 -> 0 bytes public/-/emojis/2/woman_pouting_tone4.png | Bin 734 -> 0 bytes public/-/emojis/2/woman_pouting_tone5.png | Bin 727 -> 0 bytes public/-/emojis/2/woman_raising_hand.png | Bin 1006 -> 0 bytes .../-/emojis/2/woman_raising_hand_tone1.png | Bin 1003 -> 0 bytes .../-/emojis/2/woman_raising_hand_tone2.png | Bin 958 -> 0 bytes .../-/emojis/2/woman_raising_hand_tone3.png | Bin 947 -> 0 bytes .../-/emojis/2/woman_raising_hand_tone4.png | Bin 850 -> 0 bytes .../-/emojis/2/woman_raising_hand_tone5.png | Bin 915 -> 0 bytes public/-/emojis/2/woman_red_haired.png | Bin 902 -> 0 bytes public/-/emojis/2/woman_red_haired_tone1.png | Bin 937 -> 0 bytes public/-/emojis/2/woman_red_haired_tone2.png | Bin 878 -> 0 bytes public/-/emojis/2/woman_red_haired_tone3.png | Bin 902 -> 0 bytes public/-/emojis/2/woman_red_haired_tone4.png | Bin 929 -> 0 bytes public/-/emojis/2/woman_red_haired_tone5.png | Bin 961 -> 0 bytes public/-/emojis/2/woman_rowing_boat.png | Bin 957 -> 0 bytes public/-/emojis/2/woman_rowing_boat_tone1.png | Bin 946 -> 0 bytes public/-/emojis/2/woman_rowing_boat_tone2.png | Bin 986 -> 0 bytes public/-/emojis/2/woman_rowing_boat_tone3.png | Bin 860 -> 0 bytes public/-/emojis/2/woman_rowing_boat_tone4.png | Bin 857 -> 0 bytes public/-/emojis/2/woman_rowing_boat_tone5.png | Bin 832 -> 0 bytes public/-/emojis/2/woman_running.png | Bin 785 -> 0 bytes public/-/emojis/2/woman_running_tone1.png | Bin 822 -> 0 bytes public/-/emojis/2/woman_running_tone2.png | Bin 804 -> 0 bytes public/-/emojis/2/woman_running_tone3.png | Bin 807 -> 0 bytes public/-/emojis/2/woman_running_tone4.png | Bin 767 -> 0 bytes public/-/emojis/2/woman_running_tone5.png | Bin 754 -> 0 bytes public/-/emojis/2/woman_scientist.png | Bin 1120 -> 0 bytes public/-/emojis/2/woman_scientist_tone1.png | Bin 1141 -> 0 bytes public/-/emojis/2/woman_scientist_tone2.png | Bin 1127 -> 0 bytes public/-/emojis/2/woman_scientist_tone3.png | Bin 1190 -> 0 bytes public/-/emojis/2/woman_scientist_tone4.png | Bin 1127 -> 0 bytes public/-/emojis/2/woman_scientist_tone5.png | Bin 1060 -> 0 bytes public/-/emojis/2/woman_shrugging.png | Bin 780 -> 0 bytes public/-/emojis/2/woman_shrugging_tone1.png | Bin 780 -> 0 bytes public/-/emojis/2/woman_shrugging_tone2.png | Bin 742 -> 0 bytes public/-/emojis/2/woman_shrugging_tone3.png | Bin 705 -> 0 bytes public/-/emojis/2/woman_shrugging_tone4.png | Bin 747 -> 0 bytes public/-/emojis/2/woman_shrugging_tone5.png | Bin 710 -> 0 bytes public/-/emojis/2/woman_singer.png | Bin 1154 -> 0 bytes public/-/emojis/2/woman_singer_tone1.png | Bin 1135 -> 0 bytes public/-/emojis/2/woman_singer_tone2.png | Bin 1121 -> 0 bytes public/-/emojis/2/woman_singer_tone3.png | Bin 1232 -> 0 bytes public/-/emojis/2/woman_singer_tone4.png | Bin 1103 -> 0 bytes public/-/emojis/2/woman_singer_tone5.png | Bin 1086 -> 0 bytes public/-/emojis/2/woman_student.png | Bin 1032 -> 0 bytes public/-/emojis/2/woman_student_tone1.png | Bin 959 -> 0 bytes public/-/emojis/2/woman_student_tone2.png | Bin 1059 -> 0 bytes public/-/emojis/2/woman_student_tone3.png | Bin 990 -> 0 bytes public/-/emojis/2/woman_student_tone4.png | Bin 941 -> 0 bytes public/-/emojis/2/woman_student_tone5.png | Bin 960 -> 0 bytes public/-/emojis/2/woman_superhero.png | Bin 1042 -> 0 bytes public/-/emojis/2/woman_superhero_tone1.png | Bin 1121 -> 0 bytes public/-/emojis/2/woman_superhero_tone2.png | Bin 1073 -> 0 bytes public/-/emojis/2/woman_superhero_tone3.png | Bin 1040 -> 0 bytes public/-/emojis/2/woman_superhero_tone4.png | Bin 1049 -> 0 bytes public/-/emojis/2/woman_superhero_tone5.png | Bin 994 -> 0 bytes public/-/emojis/2/woman_supervillain.png | Bin 959 -> 0 bytes .../-/emojis/2/woman_supervillain_tone1.png | Bin 938 -> 0 bytes .../-/emojis/2/woman_supervillain_tone2.png | Bin 908 -> 0 bytes .../-/emojis/2/woman_supervillain_tone3.png | Bin 918 -> 0 bytes .../-/emojis/2/woman_supervillain_tone4.png | Bin 862 -> 0 bytes .../-/emojis/2/woman_supervillain_tone5.png | Bin 890 -> 0 bytes public/-/emojis/2/woman_surfing.png | Bin 1062 -> 0 bytes public/-/emojis/2/woman_surfing_tone1.png | Bin 1088 -> 0 bytes public/-/emojis/2/woman_surfing_tone2.png | Bin 1084 -> 0 bytes public/-/emojis/2/woman_surfing_tone3.png | Bin 1068 -> 0 bytes public/-/emojis/2/woman_surfing_tone4.png | Bin 1027 -> 0 bytes public/-/emojis/2/woman_surfing_tone5.png | Bin 1031 -> 0 bytes public/-/emojis/2/woman_swimming.png | Bin 635 -> 0 bytes public/-/emojis/2/woman_swimming_tone1.png | Bin 667 -> 0 bytes public/-/emojis/2/woman_swimming_tone2.png | Bin 639 -> 0 bytes public/-/emojis/2/woman_swimming_tone3.png | Bin 571 -> 0 bytes public/-/emojis/2/woman_swimming_tone4.png | Bin 575 -> 0 bytes public/-/emojis/2/woman_swimming_tone5.png | Bin 580 -> 0 bytes public/-/emojis/2/woman_teacher.png | Bin 904 -> 0 bytes public/-/emojis/2/woman_teacher_tone1.png | Bin 865 -> 0 bytes public/-/emojis/2/woman_teacher_tone2.png | Bin 915 -> 0 bytes public/-/emojis/2/woman_teacher_tone3.png | Bin 832 -> 0 bytes public/-/emojis/2/woman_teacher_tone4.png | Bin 894 -> 0 bytes public/-/emojis/2/woman_teacher_tone5.png | Bin 818 -> 0 bytes public/-/emojis/2/woman_technologist.png | Bin 696 -> 0 bytes .../-/emojis/2/woman_technologist_tone1.png | Bin 694 -> 0 bytes .../-/emojis/2/woman_technologist_tone2.png | Bin 733 -> 0 bytes .../-/emojis/2/woman_technologist_tone3.png | Bin 739 -> 0 bytes .../-/emojis/2/woman_technologist_tone4.png | Bin 703 -> 0 bytes .../-/emojis/2/woman_technologist_tone5.png | Bin 689 -> 0 bytes public/-/emojis/2/woman_tipping_hand.png | Bin 937 -> 0 bytes .../-/emojis/2/woman_tipping_hand_tone1.png | Bin 849 -> 0 bytes .../-/emojis/2/woman_tipping_hand_tone2.png | Bin 888 -> 0 bytes .../-/emojis/2/woman_tipping_hand_tone3.png | Bin 835 -> 0 bytes .../-/emojis/2/woman_tipping_hand_tone4.png | Bin 790 -> 0 bytes .../-/emojis/2/woman_tipping_hand_tone5.png | Bin 776 -> 0 bytes public/-/emojis/2/woman_tone1.png | Bin 1001 -> 0 bytes public/-/emojis/2/woman_tone2.png | Bin 973 -> 0 bytes public/-/emojis/2/woman_tone3.png | Bin 898 -> 0 bytes public/-/emojis/2/woman_tone4.png | Bin 846 -> 0 bytes public/-/emojis/2/woman_tone5.png | Bin 785 -> 0 bytes public/-/emojis/2/woman_vampire.png | Bin 955 -> 0 bytes public/-/emojis/2/woman_vampire_tone1.png | Bin 943 -> 0 bytes public/-/emojis/2/woman_vampire_tone2.png | Bin 941 -> 0 bytes public/-/emojis/2/woman_vampire_tone3.png | Bin 910 -> 0 bytes public/-/emojis/2/woman_vampire_tone4.png | Bin 960 -> 0 bytes public/-/emojis/2/woman_vampire_tone5.png | Bin 890 -> 0 bytes public/-/emojis/2/woman_walking.png | Bin 748 -> 0 bytes public/-/emojis/2/woman_walking_tone1.png | Bin 766 -> 0 bytes public/-/emojis/2/woman_walking_tone2.png | Bin 762 -> 0 bytes public/-/emojis/2/woman_walking_tone3.png | Bin 747 -> 0 bytes public/-/emojis/2/woman_walking_tone4.png | Bin 708 -> 0 bytes public/-/emojis/2/woman_walking_tone5.png | Bin 706 -> 0 bytes public/-/emojis/2/woman_wearing_turban.png | Bin 909 -> 0 bytes .../-/emojis/2/woman_wearing_turban_tone1.png | Bin 815 -> 0 bytes .../-/emojis/2/woman_wearing_turban_tone2.png | Bin 839 -> 0 bytes .../-/emojis/2/woman_wearing_turban_tone3.png | Bin 856 -> 0 bytes .../-/emojis/2/woman_wearing_turban_tone4.png | Bin 910 -> 0 bytes .../-/emojis/2/woman_wearing_turban_tone5.png | Bin 819 -> 0 bytes public/-/emojis/2/woman_white_haired.png | Bin 955 -> 0 bytes .../-/emojis/2/woman_white_haired_tone1.png | Bin 952 -> 0 bytes .../-/emojis/2/woman_white_haired_tone2.png | Bin 903 -> 0 bytes .../-/emojis/2/woman_white_haired_tone3.png | Bin 933 -> 0 bytes .../-/emojis/2/woman_white_haired_tone4.png | Bin 883 -> 0 bytes .../-/emojis/2/woman_white_haired_tone5.png | Bin 982 -> 0 bytes public/-/emojis/2/woman_with_headscarf.png | Bin 926 -> 0 bytes .../-/emojis/2/woman_with_headscarf_tone1.png | Bin 863 -> 0 bytes .../-/emojis/2/woman_with_headscarf_tone2.png | Bin 849 -> 0 bytes .../-/emojis/2/woman_with_headscarf_tone3.png | Bin 869 -> 0 bytes .../-/emojis/2/woman_with_headscarf_tone4.png | Bin 852 -> 0 bytes .../-/emojis/2/woman_with_headscarf_tone5.png | Bin 883 -> 0 bytes public/-/emojis/2/woman_zombie.png | Bin 935 -> 0 bytes public/-/emojis/2/womans_clothes.png | Bin 742 -> 0 bytes public/-/emojis/2/womans_flat_shoe.png | Bin 798 -> 0 bytes public/-/emojis/2/womans_hat.png | Bin 741 -> 0 bytes .../2/women_with_bunny_ears_partying.png | Bin 1003 -> 0 bytes public/-/emojis/2/women_wrestling.png | Bin 1430 -> 0 bytes public/-/emojis/2/womens.png | Bin 664 -> 0 bytes public/-/emojis/2/woozy_face.png | Bin 923 -> 0 bytes public/-/emojis/2/worried.png | Bin 652 -> 0 bytes public/-/emojis/2/wrench.png | Bin 602 -> 0 bytes public/-/emojis/2/wrestlers.png | Bin 1304 -> 0 bytes public/-/emojis/2/writing_hand.png | Bin 716 -> 0 bytes public/-/emojis/2/writing_hand_tone1.png | Bin 710 -> 0 bytes public/-/emojis/2/writing_hand_tone2.png | Bin 642 -> 0 bytes public/-/emojis/2/writing_hand_tone3.png | Bin 685 -> 0 bytes public/-/emojis/2/writing_hand_tone4.png | Bin 641 -> 0 bytes public/-/emojis/2/writing_hand_tone5.png | Bin 686 -> 0 bytes public/-/emojis/2/x.png | Bin 495 -> 0 bytes public/-/emojis/2/yarn.png | Bin 859 -> 0 bytes public/-/emojis/2/yellow_heart.png | Bin 571 -> 0 bytes public/-/emojis/2/yen.png | Bin 744 -> 0 bytes public/-/emojis/2/yin_yang.png | Bin 710 -> 0 bytes public/-/emojis/2/yum.png | Bin 823 -> 0 bytes public/-/emojis/2/zany_face.png | Bin 996 -> 0 bytes public/-/emojis/2/zap.png | Bin 532 -> 0 bytes public/-/emojis/2/zebra.png | Bin 1086 -> 0 bytes public/-/emojis/2/zero.png | Bin 651 -> 0 bytes public/-/emojis/2/zipper_mouth.png | Bin 848 -> 0 bytes public/-/emojis/2/zombie.png | Bin 935 -> 0 bytes public/-/emojis/2/zzz.png | Bin 574 -> 0 bytes qa/qa.rb | 8 + qa/qa/flow/saml.rb | 4 +- .../component/sign_up_restrictions.rb | 6 +- qa/qa/page/base.rb | 38 +- qa/qa/page/component/access_tokens.rb | 75 + qa/qa/page/component/commit_modal.rb | 13 + qa/qa/page/component/invite_members_modal.rb | 2 +- qa/qa/page/component/issue_board/show.rb | 7 +- qa/qa/page/component/snippet.rb | 4 - qa/qa/page/component/wiki_page_form.rb | 13 +- qa/qa/page/dashboard/snippet/index.rb | 2 +- qa/qa/page/group/settings/general.rb | 24 + qa/qa/page/merge_request/new.rb | 27 +- qa/qa/page/merge_request/show.rb | 47 +- qa/qa/page/profile/personal_access_tokens.rb | 59 +- qa/qa/page/project/commit/show.rb | 12 +- qa/qa/page/project/fork/new.rb | 14 +- qa/qa/page/project/menu.rb | 9 +- qa/qa/page/project/pipeline/index.rb | 7 +- qa/qa/page/project/pipeline/show.rb | 20 +- qa/qa/page/project/settings/access_tokens.rb | 15 + qa/qa/page/project/settings/ci_cd.rb | 2 + qa/qa/page/project/settings/integrations.rb | 6 +- qa/qa/page/project/settings/merge_request.rb | 4 +- qa/qa/page/project/settings/runners.rb | 7 +- qa/qa/page/project/settings/services/jira.rb | 31 +- qa/qa/page/project/show.rb | 2 +- qa/qa/page/project/sub_menus/ci_cd.rb | 2 +- qa/qa/page/project/sub_menus/issues.rb | 2 +- qa/qa/page/project/sub_menus/operations.rb | 2 +- qa/qa/page/project/sub_menus/project.rb | 6 +- qa/qa/page/project/sub_menus/repository.rb | 18 +- qa/qa/page/project/sub_menus/settings.rb | 11 +- qa/qa/resource/events/base.rb | 12 + qa/qa/resource/events/project.rb | 7 + qa/qa/resource/fork.rb | 10 +- qa/qa/resource/group.rb | 13 + qa/qa/resource/merge_request.rb | 3 +- qa/qa/resource/package.rb | 52 + qa/qa/resource/pipeline_schedules.rb | 50 + qa/qa/resource/project.rb | 16 + qa/qa/resource/project_access_token.rb | 74 + qa/qa/resource/registry_repository.rb | 56 +- qa/qa/resource/user.rb | 12 + qa/qa/resource/wiki/group_page.rb | 22 + qa/qa/runtime/api/repository_storage_moves.rb | 2 + qa/qa/runtime/api/request.rb | 2 +- qa/qa/runtime/env.rb | 51 +- qa/qa/runtime/user.rb | 2 +- .../test/integration/object_storage.rb | 13 - qa/qa/service/praefect_manager.rb | 29 +- .../api/1_manage/project_access_token_spec.rb | 85 + .../1_manage/user_access_termination_spec.rb | 10 +- .../changing_repository_storage_spec.rb | 4 +- .../push_postreceive_idempotent_spec.rb | 52 + .../snippet_repository_storage_move_spec.rb | 2 +- .../cancel_pipeline_when_block_user_spec.rb | 50 + qa/qa/specs/features/api/5_package/.gitkeep | 0 .../api/5_package/container_registry_spec.rb | 119 + .../1_manage/group/transfer_group_spec.rb | 48 + .../1_manage/login/register_spec.rb | 2 +- .../project/import_github_repo_spec.rb | 2 +- .../project/project_access_token_spec.rb | 20 + .../user/user_access_termination_spec.rb | 10 +- .../2_plan/issue/create_issue_spec.rb | 2 +- .../transient/comment_on_discussion_spec.rb | 48 + .../archive_design_content_spec.rb | 2 +- .../modify_design_content_spec.rb | 2 +- .../cherry_pick/cherry_pick_a_merge_spec.rb | 42 + .../cherry_pick/cherry_pick_commit_spec.rb | 43 + .../merge_merge_request_from_fork_spec.rb | 6 +- .../merge_when_pipeline_succeeds_spec.rb | 151 +- .../3_create/merge_request/revert_spec.rb | 39 + .../suggestions/batch_suggestion_spec.rb | 60 + .../custom_commit_suggestion_spec.rb | 60 + .../repository/protocol_v2_push_ssh_spec.rb | 2 +- .../clone_push_pull_personal_snippet_spec.rb | 4 +- .../snippet/create_personal_snippet_spec.rb | 2 +- .../transient/apply_suggestion_spec.rb | 61 - .../project_based_content_creation_spec.rb | 4 +- ...project_based_content_manipulation_spec.rb | 2 +- ...project_based_directory_management_spec.rb | 2 +- .../add_remove_ci_variable_spec.rb | 4 +- ...al_config_file_paths_with_wildcard_spec.rb | 90 + .../merge_mr_when_pipline_is_blocked_spec.rb | 6 +- .../4_verify/pipeline/trigger_matrix_spec.rb | 112 + .../4_verify/runner/register_runner_spec.rb | 2 +- .../testing/view_code_coverage_spec.rb | 4 +- .../5_package/composer_registry_spec.rb | 20 +- .../5_package/conan_repository_spec.rb | 22 +- .../5_package/generic_repository_spec.rb | 16 +- .../5_package/maven_gradle_repository_spec.rb | 8 + .../5_package/maven_repository_spec.rb | 7 + .../browser_ui/5_package/npm_registry_spec.rb | 26 +- .../5_package/nuget_repository_spec.rb | 20 +- .../5_package/pypi_repository_spec.rb | 23 +- .../deploy_key/add_deploy_key_spec.rb | 2 +- qa/qa/specs/helpers/context_selector.rb | 86 + qa/qa/specs/helpers/quarantine.rb | 12 +- qa/qa/specs/helpers/rspec.rb | 30 + qa/qa/specs/runner.rb | 2 +- qa/qa/support/page/logging.rb | 8 +- qa/spec/runtime/env_spec.rb | 52 - .../test/integration/object_storage_spec.rb | 9 - qa/spec/spec_helper.rb | 1 + .../specs/helpers/context_selector_spec.rb | 294 + qa/spec/specs/helpers/quarantine_spec.rb | 175 +- qa/spec/support/helpers/stub_env.rb | 2 +- ...id_keyword_arguments_in_sidekiq_workers.rb | 2 +- rubocop/cop/gitlab/change_timzone.rb | 2 +- .../cop/gitlab/delegate_predicate_methods.rb | 45 + rubocop/cop/gitlab/feature_available_usage.rb | 99 + rubocop/cop/gitlab/rails_logger.rb | 2 +- rubocop/cop/graphql/descriptions.rb | 5 + rubocop/cop/graphql/json_type.rb | 2 +- rubocop/cop/include_sidekiq_worker.rb | 2 +- rubocop/cop/lint/last_keyword_argument.rb | 2 +- .../cop/migration/add_column_with_default.rb | 2 +- .../migration/add_concurrent_foreign_key.rb | 2 +- rubocop/cop/migration/add_concurrent_index.rb | 2 +- rubocop/cop/migration/add_index.rb | 2 +- .../migration/add_limit_to_text_columns.rb | 2 +- rubocop/cop/migration/add_timestamps.rb | 2 +- rubocop/cop/migration/datetime.rb | 2 +- rubocop/cop/migration/hash_index.rb | 2 +- rubocop/cop/migration/prevent_strings.rb | 2 +- rubocop/cop/migration/remove_column.rb | 2 +- .../cop/migration/remove_concurrent_index.rb | 2 +- rubocop/cop/migration/remove_index.rb | 2 +- rubocop/cop/migration/safer_boolean_column.rb | 6 +- rubocop/cop/migration/timestamps.rb | 2 +- .../cop/migration/update_column_in_batches.rb | 2 +- .../with_lock_retries_disallowed_method.rb | 1 + .../with_lock_retries_with_change.rb | 2 +- rubocop/cop/project_path_helper.rb | 2 +- rubocop/cop/qa/ambiguous_page_object_name.rb | 2 +- rubocop/cop/qa/element_with_pattern.rb | 2 +- rubocop/cop/rspec/env_assignment.rb | 2 +- .../cop/rspec/factories_in_migration_specs.rb | 2 +- rubocop/cop/rspec/httparty_basic_auth.rb | 2 +- rubocop/cop/safe_params.rb | 2 +- rubocop/cop/sidekiq_options_queue.rb | 2 +- rubocop/cop/static_translation_definition.rb | 2 +- .../style/regexp_literal_mixed_preserve.rb | 33 + .../distinct_count_by_large_foreign_key.rb | 2 +- rubocop/cop/user_admin.rb | 33 + rubocop/rubocop-migrations.yml | 1 + scripts/gitaly-test-build | 2 + scripts/gitaly-test-spawn | 1 + scripts/gitaly_test.rb | 30 +- scripts/lint-rugged | 1 + scripts/perf/query_limiting_report.rb | 167 + scripts/review_apps/base-config.yaml | 12 +- scripts/rspec_helpers.sh | 6 +- scripts/static-analysis | 2 +- scripts/trigger-build | 86 +- scripts/utils.sh | 6 +- scripts/verify-tff-mapping | 2 +- spec/benchmarks/banzai_benchmark.rb | 7 +- spec/config/mail_room_spec.rb | 37 +- .../aggregates}/aggregated_metrics_spec.rb | 0 .../application_settings_controller_spec.rb | 9 +- .../admin/clusters_controller_spec.rb | 14 +- .../admin/dev_ops_report_controller_spec.rb | 8 +- .../admin/groups_controller_spec.rb | 6 + .../admin/impersonations_controller_spec.rb | 2 +- .../admin/runners_controller_spec.rb | 4 +- .../admin/services_controller_spec.rb | 2 +- .../application_controller_spec.rb | 4 +- .../boards/issues_controller_spec.rb | 2 +- spec/controllers/chaos_controller_spec.rb | 22 +- .../enforces_admin_authentication_spec.rb | 6 +- .../concerns/redis_tracking_spec.rb | 32 +- .../concerns/renders_commits_spec.rb | 12 + .../dashboard/snippets_controller_spec.rb | 19 +- .../explore/snippets_controller_spec.rb | 4 + spec/controllers/graphql_controller_spec.rb | 32 +- .../groups/boards_controller_spec.rb | 18 + .../groups/clusters_controller_spec.rb | 14 +- .../dependency_proxy_auth_controller_spec.rb | 2 + ...cy_proxy_for_containers_controller_spec.rb | 3 + .../groups/group_links_controller_spec.rb | 9 +- .../groups/group_members_controller_spec.rb | 24 +- .../groups/labels_controller_spec.rb | 18 + .../groups/milestones_controller_spec.rb | 10 +- .../registry/repositories_controller_spec.rb | 1 + .../groups/runners_controller_spec.rb | 16 +- .../settings/applications_controller_spec.rb | 219 + .../groups/uploads_controller_spec.rb | 2 +- .../groups/variables_controller_spec.rb | 1 + spec/controllers/groups_controller_spec.rb | 113 +- spec/controllers/invites_controller_spec.rb | 81 +- .../oauth/authorizations_controller_spec.rb | 4 +- .../omniauth_callbacks_controller_spec.rb | 8 +- .../profiles/notifications_controller_spec.rb | 52 +- .../alerting/notifications_controller_spec.rb | 2 + .../projects/artifacts_controller_spec.rb | 6 +- .../projects/boards_controller_spec.rb | 18 + .../projects/clusters_controller_spec.rb | 14 +- .../projects/commit_controller_spec.rb | 98 + .../cycle_analytics/events_controller_spec.rb | 2 +- .../designs/raw_images_controller_spec.rb | 12 +- .../designs/resized_image_controller_spec.rb | 1 + .../projects/discussions_controller_spec.rb | 4 +- .../projects/environments_controller_spec.rb | 1 + .../projects/feature_flags_controller_spec.rb | 1 + .../projects/forks_controller_spec.rb | 47 +- .../projects/group_links_controller_spec.rb | 11 +- .../projects/imports_controller_spec.rb | 8 +- .../projects/incidents_controller_spec.rb | 1 + .../projects/issues_controller_spec.rb | 68 +- .../projects/jobs_controller_spec.rb | 1 + .../projects/labels_controller_spec.rb | 26 +- .../merge_requests/content_controller_spec.rb | 19 +- .../creations_controller_spec.rb | 32 + .../merge_requests/drafts_controller_spec.rb | 2 +- .../merge_requests_controller_spec.rb | 49 +- .../projects/milestones_controller_spec.rb | 12 +- .../projects/notes_controller_spec.rb | 6 +- .../dashboards_controller_spec.rb | 1 + .../projects/pipelines_controller_spec.rb | 64 +- .../pipelines_settings_controller_spec.rb | 1 + .../project_members_controller_spec.rb | 8 +- .../projects/raw_controller_spec.rb | 1 + .../registry/repositories_controller_spec.rb | 58 +- .../projects/registry/tags_controller_spec.rb | 7 +- .../releases/evidences_controller_spec.rb | 3 +- .../projects/releases_controller_spec.rb | 1 + .../projects/repositories_controller_spec.rb | 22 - .../projects/runners_controller_spec.rb | 4 +- .../projects/services_controller_spec.rb | 34 +- .../settings/access_tokens_controller_spec.rb | 23 +- .../settings/ci_cd_controller_spec.rb | 1 + .../settings/operations_controller_spec.rb | 1 + .../projects/snippets_controller_spec.rb | 4 + .../projects/starrers_controller_spec.rb | 2 +- .../static_site_editor_controller_spec.rb | 1 + .../projects/todos_controller_spec.rb | 1 + .../projects/uploads_controller_spec.rb | 2 +- spec/controllers/projects_controller_spec.rb | 30 +- .../registrations/welcome_controller_spec.rb | 22 +- spec/controllers/root_controller_spec.rb | 20 - spec/controllers/sessions_controller_spec.rb | 14 +- spec/db/schema_spec.rb | 7 +- spec/deprecation_toolkit_env.rb | 8 +- .../application_experiment_spec.rb | 2 +- .../members/invite_email_experiment_spec.rb | 69 +- .../new_project_readme_experiment_spec.rb | 4 - spec/experiments/strategy/round_robin_spec.rb | 68 - spec/factories/atlassian_identities.rb | 2 +- spec/factories/bulk_import/trackers.rb | 14 +- spec/factories/ci/builds.rb | 15 + spec/factories/ci/pipeline_artifacts.rb | 16 + .../ci/reports/codequality_degradations.rb | 43 + spec/factories/ci/test_case.rb | 8 - spec/factories/ci/test_case_failure.rb | 9 - spec/factories/ci/unit_test.rb | 10 + spec/factories/ci/unit_test_failure.rb | 9 + spec/factories/clusters/applications/helm.rb | 81 +- .../clusters/integrations/prometheus.rb | 12 + spec/factories/draft_note.rb | 17 +- spec/factories/events.rb | 11 +- spec/factories/git_wiki_commit_details.rb | 2 +- spec/factories/gitaly/commit.rb | 4 +- .../batched_migrations.rb | 1 + spec/factories/group_group_links.rb | 4 +- spec/factories/import_export_uploads.rb | 2 +- spec/factories/packages.rb | 8 +- spec/factories/packages/package_file.rb | 26 + spec/factories/sequences.rb | 1 + spec/factories/services.rb | 8 +- spec/factories/subscriptions.rb | 6 + spec/factories/timelogs.rb | 19 +- .../users/in_product_marketing_email.rb | 10 + spec/factories_spec.rb | 14 +- .../admin/admin_abuse_reports_spec.rb | 2 +- spec/features/admin/admin_appearance_spec.rb | 2 +- spec/features/admin/admin_groups_spec.rb | 45 + spec/features/admin/admin_labels_spec.rb | 6 +- spec/features/admin/admin_mode/login_spec.rb | 2 +- spec/features/admin/admin_mode/logout_spec.rb | 2 + spec/features/admin/admin_mode_spec.rb | 8 +- spec/features/admin/admin_runners_spec.rb | 30 +- .../admin/admin_search_settings_spec.rb | 6 +- .../admin_sees_project_statistics_spec.rb | 2 +- .../admin_sees_projects_statistics_spec.rb | 2 +- spec/features/admin/admin_settings_spec.rb | 18 +- .../admin_users_impersonation_tokens_spec.rb | 2 +- .../admin_activates_prometheus_spec.rb | 24 - .../admin_visits_service_templates_spec.rb | 44 +- .../user_views_alerts_settings_spec.rb | 2 +- spec/features/boards/add_issues_modal_spec.rb | 270 - spec/features/boards/boards_spec.rb | 92 +- spec/features/boards/focus_mode_spec.rb | 4 +- spec/features/boards/modal_filter_spec.rb | 228 - spec/features/boards/multi_select_spec.rb | 4 + spec/features/boards/multiple_boards_spec.rb | 1 + spec/features/boards/new_issue_spec.rb | 34 +- .../reload_boards_on_browser_back_spec.rb | 4 +- spec/features/boards/sidebar_assignee_spec.rb | 122 + spec/features/boards/sidebar_due_date_spec.rb | 46 + spec/features/boards/sidebar_labels_spec.rb | 166 + .../boards/sidebar_milestones_spec.rb | 65 + spec/features/boards/sidebar_spec.rb | 403 +- .../features/boards/sub_group_project_spec.rb | 3 +- .../boards/user_adds_lists_to_board_spec.rb | 11 +- spec/features/calendar_spec.rb | 4 +- .../service_templates_deprecation_spec.rb | 59 + .../clusters/cluster_detail_page_spec.rb | 6 +- .../clusters/cluster_health_dashboard_spec.rb | 2 +- spec/features/commits_spec.rb | 2 +- spec/features/dashboard/active_tab_spec.rb | 2 + .../dashboard/datetime_on_tooltips_spec.rb | 2 +- ...ith_external_authorization_service_spec.rb | 2 + .../dashboard/issuables_counter_spec.rb | 4 +- spec/features/dashboard/milestones_spec.rb | 2 +- .../project_member_activity_index_spec.rb | 2 +- spec/features/dashboard/projects_spec.rb | 23 +- spec/features/dashboard/shortcuts_spec.rb | 6 +- .../discussion_comments/merge_request_spec.rb | 2 - spec/features/error_pages_spec.rb | 9 +- .../user_filters_errors_by_status_spec.rb | 1 + .../user_searches_sentry_errors_spec.rb | 1 + .../user_sees_error_index_spec.rb | 3 +- spec/features/file_uploads/attachment_spec.rb | 44 + .../file_uploads/maven_package_spec.rb | 21 +- .../file_uploads/nuget_package_spec.rb | 4 +- .../file_uploads/rubygem_package_spec.rb | 45 + ...uently_visited_projects_and_groups_spec.rb | 2 + spec/features/gitlab_experiments_spec.rb | 44 + spec/features/groups/board_spec.rb | 2 +- spec/features/groups/clusters/user_spec.rb | 2 +- ...ith_external_authorization_service_spec.rb | 4 +- spec/features/groups/group_settings_spec.rb | 2 +- spec/features/groups/issues_spec.rb | 2 +- spec/features/groups/labels/index_spec.rb | 2 +- ...r_adds_member_with_expiration_date_spec.rb | 1 + .../groups/members/request_access_spec.rb | 2 +- spec/features/groups/merge_requests_spec.rb | 2 +- spec/features/groups/milestone_spec.rb | 6 +- spec/features/groups/navbar_spec.rb | 6 +- .../user_searches_in_settings_spec.rb | 23 +- spec/features/groups_spec.rb | 66 + .../ide/clientside_preview_csp_spec.rb | 10 +- spec/features/import/manifest_import_spec.rb | 11 +- spec/features/invites_spec.rb | 17 +- .../issues/bulk_assignment_labels_spec.rb | 4 +- ...e_for_discussions_in_merge_request_spec.rb | 6 +- ...single_discussion_in_merge_request_spec.rb | 6 +- spec/features/issues/form_spec.rb | 2 +- spec/features/issues/gfm_autocomplete_spec.rb | 1286 +- spec/features/issues/issue_sidebar_spec.rb | 235 +- spec/features/issues/markdown_toolbar_spec.rb | 28 +- spec/features/issues/note_polling_spec.rb | 2 +- spec/features/issues/spam_issues_spec.rb | 22 +- .../issues/user_comments_on_issue_spec.rb | 18 +- ...r_creates_branch_and_merge_request_spec.rb | 2 +- ...creates_confidential_merge_request_spec.rb | 2 +- .../issues/user_creates_issue_spec.rb | 10 +- spec/features/issues/user_edits_issue_spec.rb | 222 +- .../issues/user_filters_issues_spec.rb | 2 +- .../issues/user_interacts_with_awards_spec.rb | 4 + .../user_invites_from_a_comment_spec.rb | 25 + .../issues/user_sees_live_update_spec.rb | 2 +- ...r_sees_sidebar_updates_in_realtime_spec.rb | 5 +- .../features/issues/user_sorts_issues_spec.rb | 46 +- spec/features/markdown/markdown_spec.rb | 11 +- .../merge_request/batch_comments_spec.rb | 134 +- ...ommits_from_memebers_who_can_merge_spec.rb | 2 +- .../merge_request/user_awards_emoji_spec.rb | 29 +- .../user_creates_merge_request_spec.rb | 6 +- .../user_invites_from_a_comment_spec.rb | 25 + .../merge_request/user_posts_notes_spec.rb | 8 +- ...diff_notes_and_discussions_resolve_spec.rb | 32 +- .../user_sees_breadcrumb_links_spec.rb | 2 +- .../user_sees_merge_request_pipelines_spec.rb | 38 +- .../user_sees_merge_widget_spec.rb | 2 +- .../user_sees_mini_pipeline_graph_spec.rb | 6 +- ...ser_sees_notes_from_forked_project_spec.rb | 4 +- .../merge_request/user_sees_pipelines_spec.rb | 12 +- .../user_selects_branches_for_new_mr_spec.rb | 4 +- .../user_squashes_merge_request_spec.rb | 4 +- .../user_views_open_merge_request_spec.rb | 2 +- .../milestones/user_creates_milestone_spec.rb | 2 +- .../milestones/user_views_milestone_spec.rb | 4 +- .../milestones/user_views_milestones_spec.rb | 3 +- .../participants_autocomplete_spec.rb | 44 +- spec/features/profiles/emails_spec.rb | 8 +- spec/features/profiles/password_spec.rb | 2 +- .../profiles/personal_access_tokens_spec.rb | 2 +- .../profiles/user_edit_profile_spec.rb | 8 +- .../profiles/user_search_settings_spec.rb | 6 +- spec/features/projects/active_tabs_spec.rb | 2 +- .../blobs/blob_line_permalink_updater_spec.rb | 22 - .../user_views_pipeline_editor_button_spec.rb | 42 + .../branches/user_creates_branch_spec.rb | 4 +- .../branches/user_deletes_branch_spec.rb | 9 +- spec/features/projects/branches_spec.rb | 29 +- spec/features/projects/clusters/gcp_spec.rb | 2 +- spec/features/projects/clusters/user_spec.rb | 2 +- spec/features/projects/clusters_spec.rb | 4 +- .../projects/commit/cherry_pick_spec.rb | 13 +- .../comments/user_edits_comments_spec.rb | 2 +- .../commit/mini_pipeline_graph_spec.rb | 56 +- .../commit/user_reverts_commit_spec.rb | 17 +- .../commits/user_browses_commits_spec.rb | 9 +- .../projects/features_visibility_spec.rb | 2 +- .../files/gitlab_ci_yml_dropdown_spec.rb | 42 +- .../files/user_creates_directory_spec.rb | 2 +- .../projects/files/user_uploads_files_spec.rb | 35 +- spec/features/projects/fork_spec.rb | 48 +- .../projects/jobs/permissions_spec.rb | 2 + .../projects/jobs/user_browses_jobs_spec.rb | 9 +- spec/features/projects/jobs_spec.rb | 5 +- .../labels/user_removes_labels_spec.rb | 12 +- .../members/groups_with_access_list_spec.rb | 2 +- spec/features/projects/members/list_spec.rb | 2 +- .../members/user_requests_access_spec.rb | 2 +- .../projects/merge_request_button_spec.rb | 4 +- spec/features/projects/navbar_spec.rb | 4 +- spec/features/projects/new_project_spec.rb | 66 + .../pages/user_edits_settings_spec.rb | 1 - .../projects/pipelines/pipeline_spec.rb | 10 +- .../projects/pipelines/pipelines_spec.rb | 91 +- .../releases/user_views_edit_release_spec.rb | 2 +- .../releases/user_views_release_spec.rb | 43 +- spec/features/projects/remote_mirror_spec.rb | 4 +- .../services/disable_triggers_spec.rb | 4 +- .../services/user_activates_asana_spec.rb | 2 +- ...user_activates_atlassian_bamboo_ci_spec.rb | 11 +- .../services/user_activates_hipchat_spec.rb | 40 - ...er_activates_jetbrains_teamcity_ci_spec.rb | 6 +- .../services/user_activates_jira_spec.rb | 71 +- ...activates_mattermost_slash_command_spec.rb | 2 +- .../services/user_activates_pushover_spec.rb | 2 +- ...user_activates_slack_notifications_spec.rb | 2 +- .../services/user_views_services_spec.rb | 4 +- .../projects/settings/access_tokens_spec.rb | 106 +- .../settings/forked_project_settings_spec.rb | 5 +- .../settings/operations_settings_spec.rb | 2 +- .../settings/registry_settings_spec.rb | 4 +- ...er_manages_merge_requests_settings_spec.rb | 34 + .../user_searches_in_settings_spec.rb | 44 +- ...ser_sees_revoke_deploy_token_modal_spec.rb | 8 +- ...user_sees_deletion_failure_message_spec.rb | 2 +- .../user_sees_setup_shortcut_buttons_spec.rb | 5 +- .../projects/show/user_uploads_files_spec.rb | 12 +- .../snippets/user_comments_on_snippet_spec.rb | 1 - .../projects/sub_group_issuables_spec.rb | 10 +- .../projects/user_sees_sidebar_spec.rb | 2 +- .../projects/user_sees_user_popover_spec.rb | 2 +- .../projects/user_uses_shortcuts_spec.rb | 2 +- spec/features/projects_spec.rb | 20 - spec/features/protected_branches_spec.rb | 12 +- spec/features/registrations/welcome_spec.rb | 21 + spec/features/runners_spec.rb | 16 +- .../user_uses_header_search_field_spec.rb | 2 +- .../security/project/internal_access_spec.rb | 12 +- .../security/project/private_access_spec.rb | 14 +- .../security/project/public_access_spec.rb | 12 +- .../notes_on_personal_snippets_spec.rb | 3 - .../features/users/anonymous_sessions_spec.rb | 2 +- spec/features/users/login_spec.rb | 6 +- spec/features/users/show_spec.rb | 6 +- spec/features/users/terms_spec.rb | 2 +- spec/features/whats_new_spec.rb | 66 +- spec/finders/applications_finder_spec.rb | 40 +- spec/finders/ci/variables_finder_spec.rb | 65 +- .../finder_with_group_hierarchy_spec.rb | 112 + .../concerns/packages/finder_helper_spec.rb | 221 +- .../design_management/designs_finder_spec.rb | 1 + .../design_management/versions_finder_spec.rb | 1 + ...environments_by_deployments_finder_spec.rb | 127 + spec/finders/environments_finder_spec.rb | 126 +- spec/finders/group_members_finder_spec.rb | 288 +- spec/finders/issues_finder_spec.rb | 18 + .../oldest_per_commit_finder_spec.rb | 39 + spec/finders/merge_requests_finder_spec.rb | 12 + .../dashboards/annotations_finder_spec.rb | 1 + .../users_starred_dashboards_finder_spec.rb | 1 + spec/finders/notes_finder_spec.rb | 18 + .../packages/go/package_finder_spec.rb | 71 + .../packages/maven/package_finder_spec.rb | 153 +- spec/finders/pending_todos_finder_spec.rb | 12 +- spec/finders/projects_finder_spec.rb | 6 + .../repositories/branch_names_finder_spec.rb | 25 + .../repositories/changelog_tag_finder_spec.rb | 54 + .../repositories/previous_tag_finder_spec.rb | 45 - ...group_notification_settings_finder_spec.rb | 33 + .../fixtures/api/schemas/entities/member.json | 2 + .../api/schemas/entities/member_user.json | 3 +- .../api/schemas/external_validation.json | 15 +- .../packages/package_conan_metadata.json | 37 + .../graphql/packages/package_details.json | 36 +- .../schemas/public_api/v4/user/public.json | 3 +- .../fixtures/ce_sample_schema.json | 0 .../config/mail_room_enabled_ms_graph.yml | 26 + spec/fixtures/emails/update_commands_only.eml | 22 + .../sample_metric.yml | 21 + .../sample_metric_with_name_suggestions.yml | 22 + .../lib/gitlab/performance_bar/peek_data.json | 2 + .../packages/rubygems/package-0.0.1.gem | Bin 4096 -> 4608 bytes spec/fixtures/packages/rubygems/package.gem | Bin 0 -> 4608 bytes .../packages/rubygems/package.gemspec | 47 +- .../master/gl-sast-report.json | 953 +- spec/fixtures/unsafe_javascript.xml | 10 + .../__helpers__/experimentation_helper.js | 13 + .../__helpers__/mock_apollo_helper.js | 12 +- .../__helpers__/vue_test_utils_helper.js | 73 +- .../__helpers__/vue_test_utils_helper_spec.js | 208 +- spec/frontend/__helpers__/web_worker_fake.js | 71 + spec/frontend/__helpers__/web_worker_mock.js | 10 - .../__helpers__/web_worker_transformer.js | 18 + spec/frontend/__mocks__/vue/index.js | 7 + spec/frontend/access_tokens/index_spec.js | 20 +- .../components/signup_checkbox_spec.js | 66 + .../components/signup_form_spec.js | 331 + .../admin/signup_restrictions/mock_data.js | 41 + .../admin/signup_restrictions/utils.js | 19 + .../admin/signup_restrictions/utils_spec.js | 22 + .../admin/users/components/user_date_spec.js | 2 +- .../users/components/users_table_spec.js | 2 +- spec/frontend/admin/users/new_spec.js | 76 + .../alerts_settings_form_spec.js.snap | 524 - .../components/alerts_settings_form_spec.js | 258 +- .../alerts_settings_wrapper_spec.js | 122 +- .../usage_trends/components/app_spec.js | 2 +- spec/frontend/api_spec.js | 68 +- .../components/preview_item_spec.js | 12 + .../behaviors/markdown/render_mermaid_spec.js | 25 + .../shortcuts/shortcuts_issuable_spec.js | 2 +- .../blob/file_template_selector_spec.js | 61 + spec/frontend/boards/board_card_inner_spec.js | 87 +- .../boards/board_new_issue_deprecated_spec.js | 16 +- .../board_blocked_icon_spec.js.snap | 30 + .../board_add_new_column_form_spec.js | 32 +- .../components/board_add_new_column_spec.js | 10 + .../components/board_blocked_icon_spec.js | 226 + .../components/board_content_sidebar_spec.js | 140 + .../boards/components/board_content_spec.js | 13 +- .../boards/components/board_form_spec.js | 2 +- .../boards/components/board_new_issue_spec.js | 6 +- .../components/board_settings_sidebar_spec.js | 43 +- .../boards/components/filtered_search_spec.js | 65 - .../components/issue_time_estimate_spec.js | 6 +- .../sidebar/board_sidebar_issue_title_spec.js | 182 - .../board_sidebar_labels_select_spec.js | 14 +- .../board_sidebar_subscription_spec.js | 28 +- .../board_sidebar_time_tracker_spec.js | 58 + .../sidebar/board_sidebar_title_spec.js | 182 + spec/frontend/boards/mock_data.js | 130 +- spec/frontend/boards/modal_store_spec.js | 134 - spec/frontend/boards/stores/actions_spec.js | 706 +- spec/frontend/boards/stores/getters_spec.js | 41 +- spec/frontend/boards/stores/mutations_spec.js | 237 +- .../branches/components/sort_dropdown_spec.js | 91 + .../captcha/apollo_captcha_link_spec.js | 165 + .../components/lock_popovers_spec.js | 152 + .../components/ci_variable_modal_spec.js | 43 +- .../components/ci_variable_table_spec.js | 14 - .../components/application_row_spec.js | 6 + .../application_state_machine_spec.js | 30 +- .../components/content_editor_spec.js | 26 + .../markdown_processing_examples.js | 19 + .../markdown_processing_spec.js | 12 + .../services/create_editor_spec.js | 39 + .../__snapshots__/contributors_spec.js.snap | 17 +- .../create_merge_request_dropdown_spec.js | 18 +- spec/frontend/cycle_analytics/banner_spec.js | 46 +- .../total_time_component_spec.js | 34 +- spec/frontend/delete_label_modal_spec.js | 83 + .../components/deploy_freeze_modal_spec.js | 71 +- .../components/deploy_freeze_table_spec.js | 24 +- .../deploy_freeze/store/actions_spec.js | 82 +- .../deploy_freeze/store/mutations_spec.js | 15 +- .../components/revoke_button_spec.js | 108 + .../design_navigation_spec.js.snap | 2 + .../toolbar/__snapshots__/index_spec.js.snap | 1 + .../upload/__snapshots__/button_spec.js.snap | 8 +- spec/frontend/diffs/components/app_spec.js | 34 +- .../diffs/components/commit_item_spec.js | 130 - .../diffs/components/compare_versions_spec.js | 135 +- .../diffs/components/diff_row_spec.js | 17 + .../components/inline_diff_table_row_spec.js | 13 + .../parallel_diff_table_row_spec.js | 23 + spec/frontend/diffs/create_diffs_store.js | 2 + .../frontend/diffs/find_interop_attributes.js | 20 + spec/frontend/diffs/store/actions_spec.js | 47 +- spec/frontend/diffs/store/getters_spec.js | 44 +- spec/frontend/diffs/store/mutations_spec.js | 14 +- .../diffs/utils/interoperability_spec.js | 67 + .../editor/editor_lite_extension_base_spec.js | 275 +- .../emoji/awards_app/store/actions_spec.js | 155 + .../emoji/awards_app/store/mutations_spec.js | 65 + .../enable_review_app_modal_spec.js | 23 +- .../components/error_tracking_list_spec.js | 1 - .../components/error_tracking_form_spec.js | 12 +- .../store/getters_spec.js | 4 +- .../components/experiment_spec.js | 72 + spec/frontend/experimentation/utils_spec.js | 101 +- .../feature_flags/components/form_spec.js | 4 + .../feature_highlight_popover_spec.js | 1 - spec/frontend/fixtures/api_markdown.rb | 34 + spec/frontend/fixtures/api_markdown.yml | 50 + spec/frontend/fixtures/autocomplete.rb | 41 + spec/frontend/fixtures/issues.rb | 2 - .../frontend/fixtures/merge_requests_diffs.rb | 20 +- .../fixtures/static/mini_dropdown_graph.html | 13 - .../static/whats_new_notification.html | 2 +- spec/frontend/flash_spec.js | 62 +- spec/frontend/gfm_auto_complete_spec.js | 35 + .../grafana_integration_spec.js.snap | 2 +- .../components/cannot_push_code_alert_spec.js | 72 + .../components/commit_sidebar/form_spec.js | 6 +- spec/frontend/ide/components/ide_spec.js | 28 +- spec/frontend/ide/stores/getters_spec.js | 126 +- .../incidents_settings_tabs_spec.js.snap | 4 +- .../edit/components/dynamic_field_spec.js | 11 - .../components/jira_issues_fields_spec.js | 49 +- .../components/jira_trigger_fields_spec.js | 106 +- .../edit/components/jira_upgrade_cta_spec.js | 30 + .../edit/components/trigger_fields_spec.js | 4 +- .../components/integrations_list_spec.js | 26 + .../components/integrations_table_spec.js | 53 + spec/frontend/integrations/index/mock_data.js | 50 + .../components/invite_member_modal_spec.js | 2 +- .../components/invite_member_trigger_spec.js | 2 +- .../components/invite_members_modal_spec.js | 48 +- .../components/invite_members_trigger_spec.js | 86 +- .../components/csv_export_modal_spec.js | 6 +- .../csv_import_export_buttons_spec.js | 9 +- .../components/issuable_list_root_spec.js | 124 +- .../components/issuable_tabs_spec.js | 15 +- spec/frontend/issuable_list/mock_data.js | 2 +- spec/frontend/issuable_show/mock_data.js | 1 + .../__snapshots__/info_popover_spec.js.snap | 52 + .../components/info_popover_spec.js | 20 + .../components/edit_actions_spec.js | 8 +- .../components/issues_list_app_spec.js | 552 +- spec/frontend/jira_connect/api_spec.js | 17 +- .../group_item_name_spec.js.snap | 44 + .../jira_connect/components/app_spec.js | 30 +- .../components/group_item_name_spec.js | 28 + .../components/groups_list_item_spec.js | 57 +- .../components/groups_list_spec.js | 103 +- .../components/subscriptions_list_spec.js | 122 + spec/frontend/jira_connect/index_spec.js | 34 +- spec/frontend/jira_connect/mock_data.js | 6 + spec/frontend/jira_connect/utils_spec.js | 114 +- .../jobs/components/commit_block_spec.js | 111 +- .../job_sidebar_details_container_spec.js | 15 +- .../components/manual_variables_form_spec.js | 157 +- spec/frontend/jobs/components/sidebar_spec.js | 30 + .../jobs/components/stages_dropdown_spec.js | 153 +- .../jobs/components/table/jobs_table_spec.js | 31 + .../components/table/jobs_table_tabs_spec.js | 42 + spec/frontend/jobs/mock_data.js | 215 + spec/frontend/lib/utils/color_utils_spec.js | 27 +- spec/frontend/lib/utils/common_utils_spec.js | 10 + .../lib/utils/datetime_utility_spec.js | 80 +- spec/frontend/lib/utils/forms_spec.js | 163 +- .../access_request_action_buttons_spec.js | 1 + .../approve_access_request_button_spec.js | 15 +- .../invite_action_buttons_spec.js | 2 + .../remove_group_link_button_spec.js | 11 +- .../remove_member_button_spec.js | 21 +- .../resend_invite_button_spec.js | 15 +- .../user_action_buttons_spec.js | 46 +- spec/frontend/members/components/app_spec.js | 25 +- .../components/avatars/user_avatar_spec.js | 16 +- .../filter_sort/filter_sort_container_spec.js | 27 +- .../members_filtered_search_bar_spec.js | 50 +- .../filter_sort/sort_dropdown_spec.js | 29 +- .../components/modals/leave_modal_spec.js | 42 +- .../modals/remove_group_link_modal_spec.js | 22 +- .../table/expiration_datepicker_spec.js | 10 +- .../table/members_table_cell_spec.js | 12 +- .../components/table/members_table_spec.js | 32 +- .../components/table/role_dropdown_spec.js | 10 +- spec/frontend/members/index_spec.js | 47 +- spec/frontend/members/mock_data.js | 2 + .../merge_conflict_resolver_app_spec.js | 131 + spec/frontend/merge_conflicts/mock_data.js | 340 + .../merge_conflicts/store/actions_spec.js | 125 +- .../merge_conflicts/store/getters_spec.js | 187 + .../merge_conflicts/store/mutations_spec.js | 99 + spec/frontend/merge_conflicts/utils_spec.js | 106 + .../components/status_box_spec.js | 2 +- .../mini_pipeline_graph_dropdown_spec.js | 104 - .../mocks/ce/diffs/workers/tree_worker.js | 1 - .../mocks/ce/ide/lib/diff/diff_worker.js | 1 - spec/frontend/mr_notes/stores/actions_spec.js | 92 + .../mr_notes/stores/mutations_spec.js | 27 + spec/frontend/notebook/cells/markdown_spec.js | 106 +- .../notes/components/comment_form_spec.js | 67 +- .../components/discussion_navigator_spec.js | 13 +- .../notes/components/note_actions_spec.js | 16 + .../notes/components/note_body_spec.js | 17 +- .../components/noteable_discussion_spec.js | 9 +- .../notes/components/noteable_note_spec.js | 133 +- .../notes/components/notes_app_spec.js | 30 + spec/frontend/notes/mock_data.js | 16 + spec/frontend/notes/stores/getters_spec.js | 69 +- .../packages/details/store/getters_spec.js | 2 + .../packages_list_app_spec.js.snap | 10 +- .../list/components/packages_list_app_spec.js | 133 +- .../list/components/packages_search_spec.js | 29 +- .../list/components/packages_title_spec.js | 18 +- spec/frontend/packages/list/utils_spec.js | 11 +- spec/frontend/packages/mock_data.js | 17 + .../package_list_row_spec.js.snap | 15 +- .../components/package_icon_and_name_spec.js | 32 + .../components/package_list_row_spec.js | 41 +- spec/frontend/packages/shared/utils_spec.js | 1 + .../infrastructure_icon_and_name_spec.js | 28 + .../components/infrastructure_search_spec.js | 135 + .../components/infrastructure_title_spec.js | 75 + .../group/components/maven_settings_spec.js | 5 +- .../shared/utils_spec.js | 59 + spec/frontend/pager_spec.js | 71 +- .../delete_user_modal_spec.js.snap | 4 +- .../components/delete_user_modal_spec.js | 8 +- .../pages/admin/users/new/index_spec.js | 41 - .../forks/new/components/fork_form_spec.js | 35 +- .../__snapshots__/learn_gitlab_a_spec.js.snap | 374 +- .../__snapshots__/learn_gitlab_b_spec.js.snap | 70 +- .../learn_gitlab_section_card_spec.js.snap | 67 + .../components/learn_gitlab_a_spec.js | 32 +- .../components/learn_gitlab_b_spec.js | 6 +- .../learn_gitlab_section_card_spec.js | 26 + .../learn_gitlab_section_link_spec.js | 49 + .../learn_gitlab/components/mock_data.js | 5 + .../components/settings_panel_spec.js | 45 +- .../wikis/{ => components}/wiki_alert_spec.js | 0 .../shared/wikis/components/wiki_form_spec.js | 222 + .../components/detailed_metric_spec.js | 304 +- .../stores/performance_bar_store_spec.js | 40 + .../code_snippet_alert_spec.js | 61 + .../editor/ci_config_merged_preview_spec.js | 21 +- .../file-nav/branch_switcher_spec.js | 123 + .../file-nav/pipeline_editor_file_nav_spec.js | 49 + .../header/pipeline_editor_header_spec.js | 16 +- .../components/header/pipeline_status_spec.js | 55 +- .../header/validation_segment_spec.js | 107 +- .../components/lint/ci_lint_results_spec.js | 5 +- .../components/lint/ci_lint_spec.js | 17 +- .../components/pipeline_editor_tabs_spec.js | 54 +- .../components/ui/editor_tab_spec.js | 57 +- .../pipeline_editor/graphql/resolvers_spec.js | 18 +- spec/frontend/pipeline_editor/mock_data.js | 14 + .../pipeline_editor_app_spec.js | 91 +- .../pipeline_editor_home_spec.js | 7 + spec/frontend/pipelines/blank_state_spec.js | 20 - .../pipelines_list/pipeline_stage_spec.js | 9 + .../pipelines/graph/action_component_spec.js | 2 +- .../pipelines/graph/graph_component_spec.js | 31 +- .../graph/graph_component_wrapper_spec.js | 172 +- .../graph/job_group_dropdown_spec.js | 8 +- .../frontend/pipelines/graph/job_item_spec.js | 4 +- .../graph/job_name_component_spec.js | 2 +- .../graph/linked_pipelines_column_spec.js | 33 +- spec/frontend/pipelines/graph/mock_data.js | 18 +- .../graph/stage_column_component_spec.js | 30 +- .../graph_shared/links_inner_spec.js | 2 +- .../graph_shared/links_layer_spec.js | 13 +- spec/frontend/pipelines/nav_controls_spec.js | 60 +- .../pipeline_notification_spec.js | 79 + .../pipelines/pipeline_graph/mock_data.js | 36 + .../pipeline_graph/pipeline_graph_spec.js | 62 +- .../pipelines/pipelines_ci_templates_spec.js | 111 + spec/frontend/pipelines/pipelines_spec.js | 45 +- .../pipelines/pipelines_table_row_spec.js | 239 - .../pipelines/pipelines_table_spec.js | 56 +- spec/frontend/pipelines/time_ago_spec.js | 69 +- .../pipelines/unwrapping_utils_spec.js | 4 +- .../components/branches_dropdown_spec.js | 6 +- .../components/commit_comments_button_spec.js | 42 + .../commit_options_dropdown_spec.js | 123 + .../commit/components/form_modal_spec.js | 11 +- .../commit/components/form_trigger_spec.js | 44 - spec/frontend/projects/commit/mock_data.js | 2 +- .../projects/commit/store/mutations_spec.js | 6 +- .../commit_box/info/load_branches_spec.js | 41 +- .../compare/components/app_legacy_spec.js | 55 +- .../compare/components/repo_dropdown_spec.js | 22 +- .../revision_dropdown_legacy_spec.js | 25 +- .../components/revision_dropdown_spec.js | 41 +- .../components/app_spec.js | 52 + .../components/welcome_spec.js | 31 +- .../ci_cd_analytics_area_chart_spec.js.snap | 6 +- .../pipelines/charts/components/app_spec.js | 57 +- .../registry/explorer/pages/list_spec.js | 91 +- .../settings/components/settings_form_spec.js | 82 +- .../releases/components/app_edit_new_spec.js | 10 +- .../releases/components/app_index_spec.js | 8 +- .../releases/components/app_show_spec.js | 189 +- .../components/asset_links_form_spec.js | 2 +- .../release_block_milestone_info_spec.js | 2 +- .../releases_pagination_graphql_spec.js | 16 +- .../releases_pagination_rest_spec.js | 14 +- .../releases/components/releases_sort_spec.js | 12 +- .../components/tag_field_exsting_spec.js | 6 +- .../releases/components/tag_field_new_spec.js | 14 +- .../releases/components/tag_field_spec.js | 6 +- .../stores/modules/detail/actions_spec.js | 10 +- .../stores/modules/detail/getters_spec.js | 4 +- .../stores/modules/detail/mutations_spec.js | 8 +- .../stores/modules/list/actions_spec.js | 6 +- .../releases/stores/modules/list/helpers.js | 2 +- .../stores/modules/list/mutations_spec.js | 6 +- .../reports/components/report_section_spec.js | 22 +- .../components/modal_spec.js | 9 +- .../components/test_issue_body_spec.js | 2 +- .../grouped_test_reports_app_spec.js | 41 +- .../grouped_test_report/store/actions_spec.js | 17 +- .../store/mutations_spec.js | 8 +- .../grouped_test_report/store/utils_spec.js | 14 + .../directory_download_links_spec.js.snap | 40 +- .../components/blob_content_viewer_spec.js | 86 + .../repository/components/breadcrumbs_spec.js | 84 +- .../repository/components/table/row_spec.js | 5 +- spec/frontend/repository/pages/blob_spec.js | 25 + spec/frontend/repository/router_spec.js | 2 + .../runner_detail/runner_detail_app_spec.js | 29 + .../configuration_table_spec.js | 2 +- .../manage_sast_spec.js | 2 +- .../__snapshots__/empty_state_spec.js.snap | 4 +- .../set_status_modal_wrapper_spec.js | 58 +- .../sidebar/assignees_realtime_spec.js | 15 +- .../sidebar_assignees_widget_spec.js | 558 + .../assignees/sidebar_editable_item_spec.js | 33 +- .../assignees/sidebar_invite_members_spec.js | 59 + .../assignees/sidebar_participant_spec.js | 43 + .../sidebar_confidentiality_form_spec.js | 4 +- .../sidebar_confidentiality_widget_spec.js | 4 +- .../copy_email_to_clipboard_spec.js | 19 +- .../due_date/sidebar_due_date_widget_spec.js | 106 + .../sidebar_reference_widget_spec.js | 76 +- .../sidebar/issuable_assignees_spec.js | 19 +- spec/frontend/sidebar/mock_data.js | 156 + .../snippet_description_edit_spec.js.snap | 2 + .../frontend/snippets/components/edit_spec.js | 71 +- .../tags/components/sort_dropdown_spec.js | 81 + spec/frontend/tracking_spec.js | 76 +- spec/frontend/users_select/index_spec.js | 223 + spec/frontend/vue_alerts_spec.js | 8 +- .../components/mr_widget_author_time_spec.js | 43 +- .../components/mr_widget_header_spec.js | 154 +- .../components/mr_widget_pipeline_spec.js | 91 +- .../mr_widget_auto_merge_enabled_spec.js | 29 +- .../states/mr_widget_conflicts_spec.js | 19 +- .../states/mr_widget_failed_to_merge_spec.js | 168 +- .../alert_details/alert_details_spec.js | 10 +- .../alert_details/alert_status_spec.js | 19 + .../sidebar/alert_sidebar_spec.js | 16 - .../sidebar/alert_sidebar_status_spec.js | 31 +- .../__snapshots__/clone_dropdown_spec.js.snap | 2 + .../components/alert_details_table_spec.js | 81 +- .../__snapshots__/simple_viewer_spec.js.snap | 149 +- .../blob_viewers/simple_viewer_spec.js | 41 +- .../components/delete_label_modal_spec.js | 64 + .../components/deprecated_modal_spec.js | 73 - .../vue_shared/components/ensure_data_spec.js | 145 + .../filtered_search_bar/mock_data.js | 47 + .../tokens/emoji_token_spec.js | 217 + .../tokens/epic_token_spec.js | 180 + .../tokens/label_token_spec.js | 16 + .../components/gl_toggle_vuex_spec.js | 114 - .../components/help_popover_spec.js | 14 +- .../components/lib/utils/props_utils_spec.js | 91 + .../markdown/suggestion_diff_header_spec.js | 34 +- .../components/markdown/toolbar_spec.js | 64 +- .../components/recaptcha_eventhub_spec.js | 21 - .../components/recaptcha_modal_spec.js | 35 - .../registry/registry_search_spec.js | 57 +- .../components/remove_member_modal_spec.js | 61 +- .../runner_instructions/mock_data.js | 16 +- .../runner_instructions_modal_spec.js | 184 + .../runner_instructions_spec.js | 110 +- .../components/sidebar/copyable_field_spec.js | 74 + .../vue_shared/components/url_sync_spec.js | 97 + .../user_popover/user_popover_spec.js | 6 +- .../vue_shared/oncall_schedules_list_spec.js | 87 + .../frontend/whats_new/components/app_spec.js | 59 +- spec/frontend/whats_new/store/actions_spec.js | 11 +- .../whats_new/utils/notification_spec.js | 10 +- spec/frontend/wikis_spec.js | 153 - .../diffs/diffs_interopability_api.js | 25 + .../diffs/diffs_interopability_spec.js | 161 + .../test_helpers/fixtures.js | 6 + .../test_helpers/mock_server/graphql.js | 11 +- .../test_helpers/mock_server/index.js | 2 +- .../test_helpers/mock_server/routes/diffs.js | 22 + .../test_helpers/mock_server/routes/index.js | 1 + spec/graphql/features/authorization_spec.rb | 134 +- spec/graphql/gitlab_schema_spec.rb | 39 +- .../boards/issues/issue_move_list_spec.rb | 76 +- .../mutations/can_mutate_spammable_spec.rb | 46 - .../design_management/upload_spec.rb | 14 +- .../mutations/issues/set_assignees_spec.rb | 7 +- .../merge_requests/set_assignees_spec.rb | 7 +- .../release_asset_links/delete_spec.rb | 58 + .../release_asset_links/update_spec.rb | 2 +- .../http_integrations_resolver_spec.rb | 20 +- .../integrations_resolver_spec.rb | 39 +- spec/graphql/resolvers/blobs_resolver_spec.rb | 74 + .../board_list_issues_resolver_spec.rb | 18 + .../resolvers/ci/jobs_resolver_spec.rb | 17 +- .../ci/runner_platforms_resolver_spec.rb | 2 +- .../ci/runner_setup_resolver_spec.rb | 77 +- .../ci/test_report_summary_resolver_spec.rb | 46 + .../resolvers/ci/test_suite_resolver_spec.rb | 54 + .../resolvers/concerns/looks_ahead_spec.rb | 9 +- .../group_milestones_resolver_spec.rb | 51 + .../issue_status_counts_resolver_spec.rb | 8 + .../graphql/resolvers/issues_resolver_spec.rb | 45 +- .../resolvers/merge_requests_resolver_spec.rb | 64 +- .../namespace_projects_resolver_spec.rb | 2 +- .../resolvers/project_jobs_resolver_spec.rb | 51 + .../project_pipeline_resolver_spec.rb | 15 +- .../repository_branch_names_resolver_spec.rb | 36 + .../resolvers/timelog_resolver_spec.rb | 168 + .../resolvers/users/snippets_resolver_spec.rb | 14 +- .../usage_trends/measurement_type_spec.rb | 3 +- .../prometheus_integration_type_spec.rb | 20 +- spec/graphql/types/base_enum_spec.rb | 48 +- spec/graphql/types/base_object_spec.rb | 432 + spec/graphql/types/board_type_spec.rb | 14 +- .../boards/board_issue_input_type_spec.rb | 4 +- spec/graphql/types/ci/job_status_enum_spec.rb | 13 + spec/graphql/types/ci/job_type_spec.rb | 28 +- spec/graphql/types/ci/pipeline_type_spec.rb | 5 +- .../types/ci/recent_failures_type_spec.rb | 15 + spec/graphql/types/ci/stage_type_spec.rb | 1 + .../types/ci/test_case_status_enum_spec.rb | 13 + spec/graphql/types/ci/test_case_type_spec.rb | 15 + .../types/ci/test_report_summary_type_spec.rb | 15 + .../types/ci/test_report_total_type_spec.rb | 15 + .../types/ci/test_suite_summary_type_spec.rb | 15 + spec/graphql/types/ci/test_suite_type_spec.rb | 15 + spec/graphql/types/global_id_type_spec.rb | 1 + spec/graphql/types/issue_type_spec.rb | 2 +- .../merge_request_review_state_enum_spec.rb | 18 + .../merge_requests/reviewer_type_spec.rb | 50 + spec/graphql/types/milestone_type_spec.rb | 2 +- .../conan/file_metadatum_type_spec.rb | 13 + .../conan/metadatum_file_type_enum_spec.rb | 13 + .../packages/conan/metadatum_type_spec.rb | 13 + .../packages/package_details_type_spec.rb | 13 + .../types/packages/package_file_type_spec.rb | 13 + .../types/packages/package_type_spec.rb | 2 +- .../package_without_versions_type_spec.rb | 13 - spec/graphql/types/project_type_spec.rb | 32 +- spec/graphql/types/query_type_spec.rb | 2 +- .../types/repository/blob_type_spec.rb | 9 + spec/graphql/types/repository_type_spec.rb | 4 + spec/graphql/types/snippet_type_spec.rb | 2 + spec/graphql/types/timelog_type_spec.rb | 35 + ...ser_merge_request_interaction_type_spec.rb | 116 + spec/helpers/application_helper_spec.rb | 18 +- spec/helpers/avatars_helper_spec.rb | 24 +- spec/helpers/blob_helper_spec.rb | 10 + spec/helpers/boards_helper_spec.rb | 24 + .../helpers/broadcast_messages_helper_spec.rb | 1 + spec/helpers/button_helper_spec.rb | 7 + .../helpers/ci/pipeline_editor_helper_spec.rb | 32 + spec/helpers/ci/runners_helper_spec.rb | 30 +- spec/helpers/commits_helper_spec.rb | 127 +- spec/helpers/diff_helper_spec.rb | 38 +- spec/helpers/graph_helper_spec.rb | 4 +- spec/helpers/groups_helper_spec.rb | 163 +- spec/helpers/ide_helper_spec.rb | 8 +- spec/helpers/invite_members_helper_spec.rb | 3 + spec/helpers/issuables_helper_spec.rb | 54 + spec/helpers/issues_helper_spec.rb | 51 + spec/helpers/jira_connect_helper_spec.rb | 1 + spec/helpers/labels_helper_spec.rb | 1 + spec/helpers/learn_gitlab_helper_spec.rb | 1 + spec/helpers/markup_helper_spec.rb | 25 +- spec/helpers/namespaces_helper_spec.rb | 71 + spec/helpers/nav_helper_spec.rb | 6 +- spec/helpers/notes_helper_spec.rb | 2 + spec/helpers/page_layout_helper_spec.rb | 52 +- spec/helpers/preferences_helper_spec.rb | 2 +- spec/helpers/profiles_helper_spec.rb | 40 + .../projects/alert_management_helper_spec.rb | 1 + .../issues/service_desk_helper_spec.rb | 1 + .../projects/project_members_helper_spec.rb | 2 + .../helpers/projects/terraform_helper_spec.rb | 1 + spec/helpers/projects_helper_spec.rb | 1 + spec/helpers/search_helper_spec.rb | 1 + spec/helpers/services_helper_spec.rb | 14 + spec/helpers/sidebars_helper_spec.rb | 45 + spec/helpers/snippets_helper_spec.rb | 28 +- spec/helpers/tab_helper_spec.rb | 125 +- spec/helpers/timeboxes_helper_spec.rb | 36 - spec/helpers/todos_helper_spec.rb | 20 - spec/helpers/tracking_helper_spec.rb | 2 +- spec/helpers/user_callouts_helper_spec.rb | 42 +- spec/helpers/whats_new_helper_spec.rb | 48 +- spec/helpers/wiki_helper_spec.rb | 2 +- .../active_record_locking_spec.rb | 4 +- .../fog_google_https_private_urls_spec.rb | 2 + .../initializers/json_validator_patch_spec.rb | 39 - spec/initializers/kramdown_patch_spec.rb | 38 - spec/initializers/pages_storage_check_spec.rb | 94 + spec/knapsack_env.rb | 11 + spec/lib/api/entities/clusters/agent_spec.rb | 16 + .../entities/design_management/design_spec.rb | 1 + .../entities/merge_request_changes_spec.rb | 1 + .../project_import_failed_relation_spec.rb | 2 +- spec/lib/api/entities/release_spec.rb | 1 + spec/lib/api/helpers/authentication_spec.rb | 15 + spec/lib/api/helpers/caching_spec.rb | 139 + .../packages/dependency_proxy_helpers_spec.rb | 10 +- .../packages_manager_clients_helpers_spec.rb | 3 + .../lib/api/helpers/variables_helpers_spec.rb | 43 + spec/lib/api/helpers_spec.rb | 109 +- .../serializers/pull_request_entity_spec.rb | 2 +- .../filter/commit_trailers_filter_spec.rb | 6 + .../banzai/filter/gollum_tags_filter_spec.rb | 12 +- .../inline_metrics_redactor_filter_spec.rb | 3 + spec/lib/banzai/filter/math_filter_spec.rb | 10 +- .../abstract_reference_filter_spec.rb | 2 +- .../alert_reference_filter_spec.rb | 2 +- .../commit_range_reference_filter_spec.rb | 2 +- .../commit_reference_filter_spec.rb | 2 +- .../design_reference_filter_spec.rb | 2 +- .../external_issue_reference_filter_spec.rb | 3 +- .../feature_flag_reference_filter_spec.rb | 2 +- .../issue_reference_filter_spec.rb | 2 +- .../label_reference_filter_spec.rb | 2 +- .../merge_request_reference_filter_spec.rb | 2 +- .../milestone_reference_filter_spec.rb | 2 +- .../project_reference_filter_spec.rb | 2 +- .../{ => references}/reference_filter_spec.rb | 2 +- .../snippet_reference_filter_spec.rb | 2 +- .../user_reference_filter_spec.rb | 2 +- .../banzai/filter/suggestion_filter_spec.rb | 4 +- .../filter/syntax_highlight_filter_spec.rb | 12 +- .../banzai/filter/upload_link_filter_spec.rb | 2 + .../banzai/filter/wiki_link_filter_spec.rb | 9 + spec/lib/banzai/pipeline/gfm_pipeline_spec.rb | 3 +- .../lib/banzai/pipeline/wiki_pipeline_spec.rb | 25 + .../external_issue_parser_spec.rb | 2 +- spec/lib/banzai/reference_redactor_spec.rb | 2 +- .../common/extractors/rest_extractor_spec.rb | 31 + .../user_reference_transformer_spec.rb | 28 +- .../extractors/subgroups_extractor_spec.rb | 3 +- .../groups/graphql/get_group_query_spec.rb | 6 +- .../groups/graphql/get_labels_query_spec.rb | 4 +- .../groups/graphql/get_members_query_spec.rb | 4 +- .../graphql/get_milestones_query_spec.rb | 4 +- .../groups/loaders/group_loader_spec.rb | 11 +- .../groups/pipelines/badges_pipeline_spec.rb | 116 + .../groups/pipelines/entity_finisher_spec.rb | 37 + .../groups/pipelines/group_pipeline_spec.rb | 14 +- .../groups/pipelines/labels_pipeline_spec.rb | 87 +- .../groups/pipelines/members_pipeline_spec.rb | 14 +- .../pipelines/milestones_pipeline_spec.rb | 90 +- .../subgroup_entities_pipeline_spec.rb | 30 +- .../groups/rest/get_badges_query_spec.rb | 22 + .../group_attributes_transformer_spec.rb | 23 +- .../member_attributes_transformer_spec.rb | 3 +- .../importers/group_importer_spec.rb | 57 - .../lib/bulk_imports/pipeline/context_spec.rb | 43 +- .../pipeline/extracted_data_spec.rb | 2 +- spec/lib/bulk_imports/pipeline/runner_spec.rb | 65 +- spec/lib/bulk_imports/pipeline_spec.rb | 10 +- .../lib/constraints/admin_constrainer_spec.rb | 6 +- spec/lib/feature_spec.rb | 92 + .../redis_hll_generator_spec.rb | 30 + .../usage_metric_definition_generator_spec.rb | 70 +- .../alert_status_counts_spec.rb | 1 + .../alert_management/payload/base_spec.rb | 1 + .../alert_management/payload/generic_spec.rb | 1 + .../payload/managed_prometheus_spec.rb | 2 + .../payload/prometheus_spec.rb | 1 + .../gitlab/alert_management/payload_spec.rb | 1 + .../base_query_builder_spec.rb | 1 + .../analytics/cycle_analytics/median_spec.rb | 1 + .../cycle_analytics/records_fetcher_spec.rb | 44 +- .../stage_events/code_stage_start_spec.rb | 2 +- .../gitlab/analytics/unique_visits_spec.rb | 22 +- spec/lib/gitlab/application_context_spec.rb | 16 +- spec/lib/gitlab/asciidoc_spec.rb | 6 +- spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb | 2 +- .../gitlab/auth/otp/strategies/devise_spec.rb | 1 + .../strategies/forti_authenticator_spec.rb | 1 + .../otp/strategies/forti_token_cloud_spec.rb | 1 + spec/lib/gitlab/auth_spec.rb | 2 + .../backfill_snippet_repositories_spec.rb | 2 +- ...umn_using_background_migration_job_spec.rb | 8 + .../migrate_pages_to_zip_storage_spec.rb | 43 + spec/lib/gitlab/bullet/exclusions_spec.rb | 155 + spec/lib/gitlab/bullet_spec.rb | 51 + spec/lib/gitlab/changelog/config_spec.rb | 4 +- .../lib/gitlab/checks/project_created_spec.rb | 1 + spec/lib/gitlab/checks/project_moved_spec.rb | 3 + spec/lib/gitlab/ci/ansi2json/style_spec.rb | 4 +- .../lib/gitlab/ci/config/entry/bridge_spec.rb | 6 + spec/lib/gitlab/ci/config/entry/cache_spec.rb | 8 + spec/lib/gitlab/ci/config/entry/job_spec.rb | 2 + spec/lib/gitlab/ci/config/entry/jobs_spec.rb | 4 + .../ci/config/entry/processable_spec.rb | 26 +- spec/lib/gitlab/ci/config/entry/root_spec.rb | 20 + .../gitlab/ci/config/external/mapper_spec.rb | 34 + .../ci/config/external/processor_spec.rb | 35 + .../config/normalizer/matrix_strategy_spec.rb | 20 + spec/lib/gitlab/ci/lint_spec.rb | 2 +- .../parsers/codequality/code_climate_spec.rb | 1 - .../gitlab/ci/pipeline/chain/command_spec.rb | 21 + .../chain/evaluate_workflow_rules_spec.rb | 20 +- .../gitlab/ci/pipeline/chain/helpers_spec.rb | 61 + .../pipeline/chain/limit/deployments_spec.rb | 13 +- .../pipeline/chain/pipeline/process_spec.rb | 31 + .../gitlab/ci/pipeline/chain/populate_spec.rb | 6 + .../lib/gitlab/ci/pipeline/chain/seed_spec.rb | 159 +- .../pipeline/chain/validate/external_spec.rb | 201 +- .../lib/gitlab/ci/pipeline/seed/build_spec.rb | 139 +- .../gitlab/ci/pipeline/seed/pipeline_spec.rb | 4 +- .../lib/gitlab/ci/pipeline/seed/stage_spec.rb | 3 +- .../codequality_reports_comparer_spec.rb | 105 +- .../ci/reports/codequality_reports_spec.rb | 34 +- .../ci/reports/test_failure_history_spec.rb | 4 +- .../lib/gitlab/ci/runner_instructions_spec.rb | 116 +- .../lib/gitlab/ci/status/build/common_spec.rb | 2 +- spec/lib/gitlab/ci/status/composite_spec.rb | 8 +- spec/lib/gitlab/ci/trace_spec.rb | 6 +- spec/lib/gitlab/ci/variables/helpers_spec.rb | 46 + .../gitlab/ci/yaml_processor/result_spec.rb | 2 +- spec/lib/gitlab/ci/yaml_processor_spec.rb | 139 +- .../lib/gitlab/composer/version_index_spec.rb | 5 + spec/lib/gitlab/conflict/file_spec.rb | 6 +- spec/lib/gitlab/crypto_helper_spec.rb | 58 +- spec/lib/gitlab/data_builder/build_spec.rb | 3 + spec/lib/gitlab/data_builder/pipeline_spec.rb | 1 - .../batch_metrics_spec.rb | 31 + .../batched_migration_runner_spec.rb | 198 + .../batched_migration_spec.rb | 51 + .../batched_migration_wrapper_spec.rb | 98 +- .../background_migration/scheduler_spec.rb | 182 - spec/lib/gitlab/database/batch_count_spec.rb | 76 +- .../loose_index_scan_distinct_count_spec.rb | 71 + .../gitlab/database/migration_helpers_spec.rb | 249 +- .../background_migration_helpers_spec.rb | 28 +- .../table_management_helpers_spec.rb | 66 + spec/lib/gitlab/database/pg_class_spec.rb | 37 + .../v1/rename_base_spec.rb | 3 +- .../unidirectional_copy_trigger_spec.rb | 191 + .../create_group_spec.rb | 2 +- spec/lib/gitlab/database_spec.rb | 4 +- spec/lib/gitlab/diff/char_diff_spec.rb | 6 +- spec/lib/gitlab/diff/highlight_cache_spec.rb | 26 +- spec/lib/gitlab/diff/highlight_spec.rb | 20 + spec/lib/gitlab/diff/inline_diff_spec.rb | 74 +- spec/lib/gitlab/diff/line_spec.rb | 35 + spec/lib/gitlab/diff/lines_unfolder_spec.rb | 18 +- .../gitlab/diff/suggestions_parser_spec.rb | 3 +- .../lib/gitlab/downtime_check/message_spec.rb | 41 - spec/lib/gitlab/downtime_check_spec.rb | 116 - .../email/handler/create_note_handler_spec.rb | 8 +- .../create_note_on_issuable_handler_spec.rb | 2 +- .../email/handler/unsubscribe_handler_spec.rb | 2 +- .../context_payload_processor_spec.rb | 87 +- .../processor/grpc_error_processor_spec.rb | 90 +- .../processor/sidekiq_processor_spec.rb | 96 +- spec/lib/gitlab/error_tracking_spec.rb | 110 +- spec/lib/gitlab/experimentation_spec.rb | 1 - spec/lib/gitlab/git/diff_collection_spec.rb | 86 +- spec/lib/gitlab/git/repository_spec.rb | 40 +- spec/lib/gitlab/git/tag_spec.rb | 13 + .../gitlab/gitaly_client/blob_service_spec.rb | 43 +- spec/lib/gitlab/gitaly_client/call_spec.rb | 13 +- .../gitaly_client/object_pool_service_spec.rb | 4 +- .../gitaly_client/operation_service_spec.rb | 24 +- .../gitaly_client/repository_service_spec.rb | 17 +- .../pull_request_merged_by_importer_spec.rb | 1 + .../pull_request_review_importer_spec.rb | 1 + .../github_import/milestone_finder_spec.rb | 1 + .../authorize/authorize_field_service_spec.rb | 253 - .../authorize/authorize_resource_spec.rb | 80 +- .../authorize/object_authorization_spec.rb | 64 + spec/lib/gitlab/graphql/batch_key_spec.rb | 1 + spec/lib/gitlab/graphql/deprecation_spec.rb | 213 + spec/lib/gitlab/graphql/docs/renderer_spec.rb | 82 +- .../loaders/batch_lfs_oid_loader_spec.rb | 1 + .../lib/gitlab/graphql/markdown_field_spec.rb | 1 + .../graphql/negatable_arguments_spec.rb | 45 + .../pagination/keyset/connection_spec.rb | 1 + .../pagination/keyset/last_items_spec.rb | 1 + .../query_analyzers/logger_analyzer_spec.rb | 47 +- spec/lib/gitlab/highlight_spec.rb | 15 + .../gitlab/hook_data/issue_builder_spec.rb | 1 + .../hook_data/merge_request_builder_spec.rb | 1 + .../gitlab/hook_data/release_builder_spec.rb | 1 + .../lib/gitlab/hook_data/user_builder_spec.rb | 90 + .../gitlab/http_connection_adapter_spec.rb | 125 - spec/lib/gitlab/import_export/all_models.yml | 5 + .../import_export/design_repo_saver_spec.rb | 1 + .../fast_hash_serializer_spec.rb | 1 + .../import_export/project/export_task_spec.rb | 1 + .../project/tree_restorer_spec.rb | 2 +- .../import_export/project/tree_saver_spec.rb | 1 + .../gitlab/import_export/repo_saver_spec.rb | 1 + .../import_export/snippet_repo_saver_spec.rb | 1 + .../import_export/snippets_repo_saver_spec.rb | 1 + .../import_export/wiki_repo_saver_spec.rb | 1 + .../lib/gitlab/instrumentation_helper_spec.rb | 47 - .../gitlab/jira_import/base_importer_spec.rb | 1 + .../jira_import/handle_labels_service_spec.rb | 1 + spec/lib/gitlab/jira_import_spec.rb | 1 + spec/lib/gitlab/json_spec.rb | 60 + .../legacy_github_import/importer_spec.rb | 2 +- .../issue_formatter_spec.rb | 2 +- .../milestone_formatter_spec.rb | 2 +- .../pull_request_formatter_spec.rb | 2 +- .../active_record/extension_spec.rb | 26 +- .../markdown_cache/redis/extension_spec.rb | 3 +- .../gitlab/markdown_cache/redis/store_spec.rb | 4 +- spec/lib/gitlab/marker_range_spec.rb | 33 +- .../metrics/background_transaction_spec.rb | 53 +- .../metrics/subscribers/active_record_spec.rb | 175 +- .../metrics/subscribers/external_http_spec.rb | 57 +- .../rack_multipart_tempfile_factory_spec.rb | 94 + spec/lib/gitlab/object_hierarchy_spec.rb | 97 +- spec/lib/gitlab/pages/settings_spec.rb | 42 +- .../gitlab/pages/stores/local_store_spec.rb | 25 + spec/lib/gitlab/pages_transfer_spec.rb | 4 +- .../gitlab/pagination/keyset/order_spec.rb | 55 + ...set_header_builder_with_controller_spec.rb | 54 + .../phabricator_import/cache/map_spec.rb | 1 + .../issues/task_importer_spec.rb | 1 + spec/lib/gitlab/profiler_spec.rb | 9 +- spec/lib/gitlab/prometheus/adapter_spec.rb | 16 + .../gitlab/query_limiting/transaction_spec.rb | 10 +- spec/lib/gitlab/query_limiting_spec.rb | 98 +- .../quick_actions/command_definition_spec.rb | 8 +- spec/lib/gitlab/regex_spec.rb | 9 +- .../gitlab/repository_cache_adapter_spec.rb | 31 +- spec/lib/gitlab/repository_set_cache_spec.rb | 23 + spec/lib/gitlab/sanitizers/exif_spec.rb | 2 +- .../lib/gitlab/search_context/builder_spec.rb | 29 + spec/lib/gitlab/sidekiq_cluster/cli_spec.rb | 2 +- .../gitlab/sidekiq_config/cli_methods_spec.rb | 84 +- .../sidekiq_config/worker_matcher_spec.rb | 129 + .../sidekiq_logging/structured_logger_spec.rb | 97 +- .../admin_mode/client_spec.rb | 4 +- .../admin_mode/server_spec.rb | 4 +- .../sidekiq_middleware/client_metrics_spec.rb | 153 +- .../instrumentation_logger_spec.rb | 101 + .../sidekiq_middleware/server_metrics_spec.rb | 330 +- .../worker_context/server_spec.rb | 2 +- spec/lib/gitlab/sidekiq_middleware_spec.rb | 6 +- .../presenters/issue_comment_spec.rb | 1 + .../presenters/issue_move_spec.rb | 1 + .../presenters/issue_new_spec.rb | 13 +- spec/lib/gitlab/slash_commands/run_spec.rb | 20 + .../lib/gitlab/snippet_search_results_spec.rb | 1 + spec/lib/gitlab/sourcegraph_spec.rb | 1 + spec/lib/gitlab/sql/cte_spec.rb | 20 +- spec/lib/gitlab/sql/recursive_cte_spec.rb | 13 + spec/lib/gitlab/subscription_portal_spec.rb | 54 +- .../finders/repo_template_finders_spec.rb | 1 + .../tracking/destinations/snowplow_spec.rb | 23 - .../gitlab/tracking/standard_context_spec.rb | 12 +- spec/lib/gitlab/tracking_spec.rb | 32 +- spec/lib/gitlab/tree_summary_spec.rb | 1 + spec/lib/gitlab/untrusted_regexp_spec.rb | 18 + spec/lib/gitlab/url_builder_spec.rb | 1 + .../gitlab/usage/metric_definition_spec.rb | 85 +- .../aggregates/sources/postgres_hll_spec.rb | 1 + .../names_suggestions/generator_spec.rb | 51 +- .../relation_parsers/joins_spec.rb | 40 + .../code_review_events_spec.rb | 2 +- .../hll_redis_counter_spec.rb | 36 +- .../issue_activity_unique_counter_spec.rb | 18 +- ...ick_action_activity_unique_counter_spec.rb | 20 + .../gitlab/usage_data_non_sql_metrics_spec.rb | 55 + spec/lib/gitlab/usage_data_queries_spec.rb | 32 + spec/lib/gitlab/usage_data_spec.rb | 42 +- spec/lib/gitlab/utils/lazy_attributes_spec.rb | 6 +- spec/lib/gitlab/utils/usage_data_spec.rb | 19 + spec/lib/gitlab/utils_spec.rb | 8 +- .../web_ide/config/entry/global_spec.rb | 1 + .../web_ide/config/entry/terminal_spec.rb | 5 +- .../gitlab/word_diff/chunk_collection_spec.rb | 23 + spec/lib/gitlab/word_diff/parser_spec.rb | 40 +- spec/lib/gitlab/workhorse_spec.rb | 1 + spec/lib/gitlab_spec.rb | 128 +- spec/lib/kramdown/kramdown_spec.rb | 38 + spec/lib/marginalia_spec.rb | 52 +- spec/lib/mattermost/command_spec.rb | 2 +- spec/lib/mattermost/session_spec.rb | 2 +- spec/lib/mattermost/team_spec.rb | 2 +- spec/lib/peek/views/active_record_spec.rb | 27 +- spec/lib/peek/views/external_http_spec.rb | 33 +- spec/lib/rouge/formatters/html_gitlab_spec.rb | 40 + spec/mailers/devise_mailer_spec.rb | 32 + .../emails/in_product_marketing_spec.rb | 34 +- spec/mailers/emails/merge_requests_spec.rb | 24 +- spec/mailers/emails/profile_spec.rb | 100 + spec/mailers/emails/projects_spec.rb | 1 + spec/mailers/emails/releases_spec.rb | 1 + spec/mailers/emails/service_desk_spec.rb | 1 + spec/mailers/notify_spec.rb | 96 +- ...20210226141517_dedup_issue_metrics_spec.rb | 66 + ...tuple_count_for_batched_migrations_spec.rb | 43 + ...ule_artifact_expiry_backfill_again_spec.rb | 38 + spec/migrations/add_new_trail_plans_spec.rb | 95 + ...ll_operations_feature_flags_active_spec.rb | 4 +- ...kfill_operations_feature_flags_iid_spec.rb | 4 +- ...p_noteable_id_for_notes_on_commits_spec.rb | 2 +- .../confirm_support_bot_user_spec.rb | 86 + ...rnal_ids_where_feature_flags_usage_spec.rb | 4 +- ...ete_security_findings_without_uuid_spec.rb | 35 + .../migrate_bot_type_to_user_type_spec.rb | 2 +- .../migrate_elastic_index_settings_spec.rb | 44 + ...ature_flags_scopes_target_user_ids_spec.rb | 4 +- ...istry_enabled_to_project_features2_spec.rb | 47 + ...gistry_enabled_to_project_features_spec.rb | 43 - ...al_information_for_vulnerabilities_spec.rb | 61 + ..._without_group_from_webhooks_table_spec.rb | 27 + ...edule_migrate_pages_to_zip_storage_spec.rb | 46 + spec/models/application_record_spec.rb | 36 +- spec/models/audit_event_archived_spec.rb | 52 - spec/models/blob_viewer/gitlab_ci_yml_spec.rb | 1 + .../blob_viewer/metrics_dashboard_yml_spec.rb | 1 + spec/models/bulk_imports/entity_spec.rb | 64 - spec/models/bulk_imports/stage_spec.rb | 50 + spec/models/bulk_imports/tracker_spec.rb | 56 + spec/models/ci/artifact_blob_spec.rb | 1 + spec/models/ci/bridge_spec.rb | 2 +- spec/models/ci/build_spec.rb | 162 +- spec/models/ci/build_trace_chunk_spec.rb | 1 + .../daily_build_group_report_result_spec.rb | 1 + spec/models/ci/job_artifact_spec.rb | 16 + spec/models/ci/pipeline_schedule_spec.rb | 12 + spec/models/ci/pipeline_spec.rb | 102 + spec/models/ci/runner_spec.rb | 1 + spec/models/ci/stage_spec.rb | 13 + spec/models/ci/test_case_failure_spec.rb | 73 - spec/models/ci/test_case_spec.rb | 31 - spec/models/ci/unit_test_failure_spec.rb | 73 + spec/models/ci/unit_test_spec.rb | 87 + spec/models/clusters/agent_token_spec.rb | 49 + .../clusters/applications/prometheus_spec.rb | 94 +- spec/models/clusters/cluster_spec.rb | 76 +- .../clusters/integrations/prometheus_spec.rb | 57 + spec/models/commit_spec.rb | 2 +- spec/models/commit_status_spec.rb | 118 +- ...tch_destroy_dependent_associations_spec.rb | 1 + .../concerns/cache_markdown_field_spec.rb | 10 +- .../concerns/cacheable_attributes_spec.rb | 2 +- ...cading_namespace_setting_attribute_spec.rb | 320 + spec/models/concerns/ci/artifactable_spec.rb | 28 + spec/models/concerns/featurable_spec.rb | 3 +- .../concerns/has_timelogs_report_spec.rb | 51 + spec/models/concerns/issuable_spec.rb | 21 +- spec/models/concerns/milestoneable_spec.rb | 14 +- spec/models/concerns/milestoneish_spec.rb | 71 +- spec/models/concerns/participable_spec.rb | 71 +- spec/models/concerns/safe_url_spec.rb | 12 +- .../container_with_html_options_spec.rb | 21 + .../sidebars/positionable_list_spec.rb | 59 + spec/models/concerns/sortable_spec.rb | 25 + spec/models/concerns/subscribable_spec.rb | 51 +- .../concerns/token_authenticatable_spec.rb | 4 +- .../encrypted_spec.rb | 77 +- .../encryption_helper_spec.rb | 27 + spec/models/deploy_keys_project_spec.rb | 6 +- spec/models/deploy_token_spec.rb | 2 +- spec/models/deployment_spec.rb | 115 +- spec/models/environment_spec.rb | 33 +- spec/models/event_spec.rb | 8 +- spec/models/experiment_spec.rb | 31 +- spec/models/group_spec.rb | 371 +- spec/models/hooks/system_hook_spec.rb | 4 +- spec/models/hooks/web_hook_spec.rb | 8 +- spec/models/integration_spec.rb | 11 +- spec/models/internal_id_spec.rb | 61 + spec/models/issue/metrics_spec.rb | 14 +- spec/models/issue_spec.rb | 38 +- spec/models/key_spec.rb | 22 + spec/models/label_spec.rb | 22 +- spec/models/list_spec.rb | 13 - spec/models/member_spec.rb | 28 + spec/models/members/group_member_spec.rb | 6 + .../members/last_group_owner_assigner_spec.rb | 98 + spec/models/members/project_member_spec.rb | 4 + spec/models/merge_request_spec.rb | 136 +- spec/models/namespace/admin_note_spec.rb | 16 + .../namespace/traversal_hierarchy_spec.rb | 56 +- spec/models/namespace_setting_spec.rb | 31 + spec/models/namespace_spec.rb | 169 +- spec/models/note_spec.rb | 115 +- spec/models/notification_setting_spec.rb | 14 + .../models/packages/debian/file_entry_spec.rb | 98 + spec/models/packages/dependency_spec.rb | 2 +- .../models/packages/go/module_version_spec.rb | 14 +- spec/models/packages/maven/metadatum_spec.rb | 14 +- spec/models/packages/package_spec.rb | 41 +- spec/models/pages/lookup_path_spec.rb | 10 +- spec/models/pages_deployment_spec.rb | 26 +- .../preloaders/labels_preloader_spec.rb | 52 + ...access_level_in_projects_preloader_spec.rb | 37 + spec/models/project_feature_usage_spec.rb | 90 +- .../chat_message/alert_message_spec.rb | 1 + .../chat_message/merge_message_spec.rb | 26 +- .../emails_on_push_service_spec.rb | 46 + .../project_services/jira_service_spec.rb | 89 +- .../jira_tracker_data_spec.rb | 13 +- .../prometheus_service_spec.rb | 2 + .../project_services/slack_service_spec.rb | 8 + spec/models/project_spec.rb | 348 +- spec/models/protected_tag_spec.rb | 2 +- spec/models/raw_usage_data_spec.rb | 10 +- spec/models/release_highlight_spec.rb | 45 +- spec/models/release_spec.rb | 2 +- spec/models/remote_mirror_spec.rb | 24 + spec/models/repository_spec.rb | 83 +- spec/models/sent_notification_spec.rb | 12 +- spec/models/service_spec.rb | 10 + spec/models/sidebars/menu_spec.rb | 67 + spec/models/sidebars/panel_spec.rb | 34 + spec/models/sidebars/projects/context_spec.rb | 13 + .../projects/menus/learn_gitlab/menu_spec.rb | 31 + .../menu_items/releases_spec.rb | 38 + .../menus/project_overview/menu_spec.rb | 18 + .../projects/menus/repository/menu_spec.rb | 38 + spec/models/sidebars/projects/panel_spec.rb | 14 + spec/models/timelog_spec.rb | 12 +- spec/models/todo_spec.rb | 24 + spec/models/user_callout_spec.rb | 36 +- spec/models/user_spec.rb | 80 +- .../users/in_product_marketing_email_spec.rb | 131 + .../users/merge_request_interaction_spec.rb | 97 + .../application_setting/term_policy_spec.rb | 1 + spec/policies/ci/build_policy_spec.rb | 1 + .../design_management/design_policy_spec.rb | 3 + .../group_deploy_keys_group_policy_spec.rb | 1 + spec/policies/group_policy_spec.rb | 51 + spec/policies/project_policy_spec.rb | 52 +- spec/policies/project_snippet_policy_spec.rb | 1 + spec/policies/service_policy_spec.rb | 1 + .../ci/build_runner_presenter_spec.rb | 93 +- spec/presenters/ci/trigger_presenter_spec.rb | 2 +- .../clusters/cluster_presenter_spec.rb | 4 +- .../composer/packages_presenter_spec.rb | 9 +- .../packages/conan/package_presenter_spec.rb | 2 +- .../packages/detail/package_presenter_spec.rb | 1 - .../presenters/project_hook_presenter_spec.rb | 4 +- .../settings/deploy_keys_presenter_spec.rb | 45 +- .../clusters/integrations_controller_spec.rb | 25 + spec/requests/api/api_spec.rb | 10 +- spec/requests/api/applications_spec.rb | 8 +- .../api/ci/runner/jobs_artifacts_spec.rb | 42 +- spec/requests/api/ci/runner/jobs_put_spec.rb | 16 +- .../api/ci/runner/jobs_request_post_spec.rb | 33 +- .../requests/api/ci/runner/jobs_trace_spec.rb | 18 +- spec/requests/api/commit_statuses_spec.rb | 8 +- spec/requests/api/commits_spec.rb | 36 +- spec/requests/api/composer_packages_spec.rb | 1 + .../api/conan_project_packages_spec.rb | 2 +- spec/requests/api/deploy_keys_spec.rb | 31 +- spec/requests/api/deployments_spec.rb | 39 +- spec/requests/api/environments_spec.rb | 2 +- spec/requests/api/files_spec.rb | 15 + spec/requests/api/generic_packages_spec.rb | 33 +- spec/requests/api/go_proxy_spec.rb | 4 +- spec/requests/api/graphql/ci/groups_spec.rb | 24 +- spec/requests/api/graphql/ci/job_spec.rb | 100 + .../api/graphql/custom_emoji_query_spec.rb | 10 +- .../api/graphql/gitlab_schema_spec.rb | 22 +- .../api/graphql/group/milestones_spec.rb | 36 +- .../api/graphql/group/timelogs_spec.rb | 121 + spec/requests/api/graphql/group_query_spec.rb | 10 +- .../boards/issues/issue_move_list_spec.rb | 37 +- .../merge_requests/set_assignees_spec.rb | 55 +- .../merge_requests/set_labels_spec.rb | 2 +- .../release_asset_links/delete_spec.rb | 49 + .../graphql/mutations/snippets/create_spec.rb | 4 + .../graphql/mutations/snippets/update_spec.rb | 7 + .../api/graphql/packages/package_spec.rb | 121 +- .../alert_management/alert/assignees_spec.rb | 2 +- .../alert_management/alert/notes_spec.rb | 2 +- .../alert_management/alert/todos_spec.rb | 2 +- .../alert_management/integrations_spec.rb | 94 +- .../project/container_repositories_spec.rb | 2 +- .../api/graphql/project/issues_spec.rb | 84 +- .../api/graphql/project/merge_request_spec.rb | 292 +- .../graphql/project/merge_requests_spec.rb | 13 +- .../api/graphql/project/pipeline_spec.rb | 238 +- .../graphql/project/repository/blobs_spec.rb | 36 + spec/requests/api/graphql/user_spec.rb | 8 +- spec/requests/api/graphql_spec.rb | 95 +- spec/requests/api/group_import_spec.rb | 2 + spec/requests/api/group_milestones_spec.rb | 24 +- spec/requests/api/group_variables_spec.rb | 3 + spec/requests/api/internal/base_spec.rb | 37 +- spec/requests/api/internal/kubernetes_spec.rb | 18 +- spec/requests/api/invitations_spec.rb | 9 +- spec/requests/api/issue_links_spec.rb | 28 +- .../api/issues/get_group_issues_spec.rb | 2 +- .../api/issues/post_projects_issues_spec.rb | 2 +- spec/requests/api/jobs_spec.rb | 24 +- spec/requests/api/labels_spec.rb | 6 +- spec/requests/api/lint_spec.rb | 12 +- spec/requests/api/maven_packages_spec.rb | 912 +- spec/requests/api/members_spec.rb | 30 +- spec/requests/api/merge_request_diffs_spec.rb | 8 + spec/requests/api/merge_requests_spec.rb | 19 +- spec/requests/api/namespaces_spec.rb | 73 + spec/requests/api/notes_spec.rb | 2 +- .../requests/api/npm_project_packages_spec.rb | 40 +- .../requests/api/nuget_group_packages_spec.rb | 41 +- .../api/nuget_project_packages_spec.rb | 8 + spec/requests/api/project_attributes.yml | 1 + spec/requests/api/project_import_spec.rb | 4 +- spec/requests/api/projects_spec.rb | 172 +- spec/requests/api/pypi_packages_spec.rb | 2 +- spec/requests/api/repositories_spec.rb | 23 + .../api/resource_access_tokens_spec.rb | 17 + spec/requests/api/settings_spec.rb | 7 +- spec/requests/api/tags_spec.rb | 256 +- spec/requests/api/triggers_spec.rb | 35 +- .../api/usage_data_non_sql_metrics_spec.rb | 67 + spec/requests/api/usage_data_queries_spec.rb | 67 + spec/requests/api/usage_data_spec.rb | 19 + spec/requests/api/users_preferences_spec.rb | 65 + spec/requests/api/users_spec.rb | 12 +- spec/requests/api/v3/github_spec.rb | 53 +- .../customers_dot/proxy_controller_spec.rb | 37 + .../clusters/integrations_controller_spec.rb | 40 + .../groups/email_campaigns_controller_spec.rb | 59 +- .../groups/milestones_controller_spec.rb | 24 +- spec/requests/ide_controller_spec.rb | 53 +- spec/requests/jwt_controller_spec.rb | 7 +- .../clusters/integrations_controller_spec.rb | 38 + .../projects/cycle_analytics_events_spec.rb | 4 +- .../projects/issue_links_controller_spec.rb | 2 +- .../merge_requests_discussions_spec.rb | 4 + spec/requests/rack_attack_global_spec.rb | 25 + spec/requests/users_controller_spec.rb | 16 +- spec/requests/whats_new_controller_spec.rb | 11 - spec/routing/project_routing_spec.rb | 68 +- .../gitlab/delegate_predicate_methods_spec.rb | 40 + .../gitlab/feature_available_usage_spec.rb | 96 + spec/rubocop/cop/graphql/descriptions_spec.rb | 16 +- .../add_limit_to_text_columns_spec.rb | 9 - .../cop/migration/add_timestamps_spec.rb | 8 - .../complex_indexes_require_name_spec.rb | 10 - spec/rubocop/cop/migration/datetime_spec.rb | 20 - .../cop/migration/prevent_strings_spec.rb | 12 - .../migration/refer_to_index_by_name_spec.rb | 4 - spec/rubocop/cop/migration/timestamps_spec.rb | 8 - spec/rubocop/cop/rspec/env_assignment_spec.rb | 4 +- .../regexp_literal_mixed_preserve_spec.rb | 131 + spec/rubocop/cop/user_admin_spec.rb | 24 + spec/serializers/admin/user_entity_spec.rb | 3 +- .../serializers/admin/user_serializer_spec.rb | 2 +- .../serializers/build_artifact_entity_spec.rb | 25 +- .../ci/dag_pipeline_entity_spec.rb | 4 +- .../ci/group_variable_entity_spec.rb | 2 +- .../ci/lint/result_serializer_spec.rb | 1 + spec/serializers/ci/pipeline_entity_spec.rb | 3 + .../container_repository_entity_spec.rb | 1 + spec/serializers/container_tag_entity_spec.rb | 1 + .../serializers/deployment_serializer_spec.rb | 1 + spec/serializers/diff_file_entity_spec.rb | 10 + .../environment_serializer_spec.rb | 52 +- .../evidences/evidence_entity_spec.rb | 1 + .../serializers/fork_namespace_entity_spec.rb | 1 + .../group_group_link_entity_spec.rb | 1 + .../project_group_link_entity_spec.rb | 1 + spec/serializers/issue_board_entity_spec.rb | 1 + spec/serializers/member_entity_spec.rb | 1 + spec/serializers/member_serializer_spec.rb | 65 +- spec/serializers/member_user_entity_spec.rb | 1 + .../merge_request_diff_entity_spec.rb | 1 + ..._request_poll_cached_widget_entity_spec.rb | 88 +- .../merge_request_poll_widget_entity_spec.rb | 146 +- .../merge_request_user_entity_spec.rb | 1 + .../merge_requests/pipeline_entity_spec.rb | 2 +- .../namespace_basic_entity_spec.rb | 1 + .../pipeline_details_entity_spec.rb | 1 + spec/serializers/pipeline_serializer_spec.rb | 21 +- .../serializers/project_import_entity_spec.rb | 1 + spec/serializers/project_serializer_spec.rb | 1 + .../review_app_setup_entity_spec.rb | 1 + spec/serializers/runner_entity_spec.rb | 1 + spec/serializers/service_event_entity_spec.rb | 4 +- spec/serializers/service_field_entity_spec.rb | 12 +- ...nd_records_due_for_refresh_service_spec.rb | 295 + ...recalculate_for_user_range_service_spec.rb | 6 +- .../services/award_emojis/add_service_spec.rb | 1 + .../award_emojis/destroy_service_spec.rb | 1 + .../award_emojis/toggle_service_spec.rb | 1 + spec/services/boards/destroy_service_spec.rb | 23 + .../boards/issues/move_service_spec.rb | 1 + .../boards/lists/list_service_spec.rb | 46 +- .../boards/lists/update_service_spec.rb | 41 - .../bulk_create_integration_service_spec.rb | 2 +- .../bulk_update_integration_service_spec.rb | 4 +- .../ci/abort_pipelines_service_spec.rb | 94 + .../abort_project_pipelines_service_spec.rb | 42 - .../ci/after_requeue_job_service_spec.rb | 38 + .../services/ci/archive_trace_service_spec.rb | 46 + .../ci/cancel_user_pipelines_service_spec.rb | 35 - ...create_downstream_pipeline_service_spec.rb | 4 +- .../ci/create_job_artifacts_service_spec.rb | 279 - .../cross_project_pipeline_spec.rb | 1 + .../ci/create_pipeline_service/needs_spec.rb | 2 +- .../parent_child_pipeline_spec.rb | 1 + .../ci/create_pipeline_service/rules_spec.rb | 152 +- .../ci/create_pipeline_service_spec.rb | 37 +- .../create_web_ide_terminal_service_spec.rb | 19 + ...troy_expired_job_artifacts_service_spec.rb | 252 - ...le_user_pipeline_schedules_service_spec.rb | 19 + .../services/ci/drop_pipeline_service_spec.rb | 60 + .../create_pipeline_service_spec.rb | 2 +- .../ci/job_artifacts/create_service_spec.rb | 279 + .../destroy_all_expired_service_spec.rb | 252 + .../destroy_batch_service_spec.rb | 81 + ...ob_artifacts_destroy_batch_service_spec.rb | 81 - .../destroy_all_expired_service_spec.rb | 81 + .../destroy_expired_artifacts_service_spec.rb | 81 - ...ared_processing_service_tests_with_yaml.rb | 8 +- ..._manual_review_test_staging_production.yml | 171 + .../dag_test_manual_allow_failure_false.yml | 2 +- ...nual_allow_failure_false_deploy_always.yml | 2 +- ..._allow_failure_false_deploy_on_failure.yml | 2 +- .../dag_test_manual_allow_failure_true.yml | 55 - ...l_allow_failure_true_deploy_on_failure.yml | 4 +- ...g_test_manual_allow_failure_true_fails.yml | 66 + ...est_manual_allow_failure_true_succeeds.yml | 66 + .../stage_test_manual_allow_failure_false.yml | 2 +- .../stage_test_manual_allow_failure_true.yml | 2 +- ...l_allow_failure_true_deploy_on_failure.yml | 4 +- .../ci/pipeline_trigger_service_spec.rb | 11 - spec/services/ci/play_bridge_service_spec.rb | 22 + spec/services/ci/play_build_service_spec.rb | 22 + .../services/ci/process_build_service_spec.rb | 23 - .../ci/process_pipeline_service_spec.rb | 52 +- spec/services/ci/register_job_service_spec.rb | 39 +- spec/services/ci/retry_build_service_spec.rb | 2 +- .../ci/retry_pipeline_service_spec.rb | 2 +- .../ci/test_failure_history_service_spec.rb | 42 +- .../integrations/create_service_spec.rb | 90 + .../link_merge_requests_service_spec.rb | 11 + .../copy_service_spec.rb | 1 + .../delete_designs_service_spec.rb | 1 + .../save_designs_service_spec.rb | 3 +- .../draft_notes/publish_service_spec.rb | 2 +- .../environments/auto_stop_service_spec.rb | 2 + .../canary_ingress/update_service_spec.rb | 1 + .../reset_auto_stop_service_spec.rb | 1 + .../groups/auto_devops_service_spec.rb | 1 + .../groups/group_links/update_service_spec.rb | 1 + .../merge_requests_count_service_spec.rb | 29 + .../groups/open_issues_count_service_spec.rb | 48 +- spec/services/groups/transfer_service_spec.rb | 3 + .../update_shared_runners_service_spec.rb | 1 + spec/services/ide/base_config_service_spec.rb | 1 + .../ide/schemas_config_service_spec.rb | 1 + .../ide/terminal_config_service_spec.rb | 3 + .../services/issuable/destroy_service_spec.rb | 21 +- .../issuable/process_assignees_spec.rb | 40 +- .../issue_links/create_service_spec.rb | 6 +- .../issues/after_create_service_spec.rb | 52 + spec/services/issues/build_service_spec.rb | 1 + spec/services/issues/clone_service_spec.rb | 1 + spec/services/issues/create_service_spec.rb | 28 +- .../issues/export_csv_service_spec.rb | 1 + spec/services/issues/move_service_spec.rb | 1 + .../issues/related_branches_service_spec.rb | 1 + .../keys/expiry_notification_service_spec.rb | 97 + spec/services/members/create_service_spec.rb | 4 +- spec/services/members/destroy_service_spec.rb | 157 +- spec/services/members/invite_service_spec.rb | 79 +- .../add_todo_when_build_fails_service_spec.rb | 6 +- .../after_create_service_spec.rb | 104 + .../merge_requests/base_service_spec.rb | 1 + .../create_pipeline_service_spec.rb | 2 + .../merge_requests/create_service_spec.rb | 85 +- .../merge_requests/export_csv_service_spec.rb | 2 + .../handle_assignees_change_service_spec.rb | 114 + .../merge_orchestration_service_spec.rb | 1 + .../merge_requests/merge_service_spec.rb | 15 +- .../merge_to_ref_service_spec.rb | 7 +- .../push_options_handler_service_spec.rb | 208 +- .../merge_requests/refresh_service_spec.rb | 16 +- .../resolve_todos_service_spec.rb | 49 + .../update_assignees_service_spec.rb | 79 + .../merge_requests/update_service_spec.rb | 244 +- .../milestones/destroy_service_spec.rb | 14 +- .../merge_requests_count_service_spec.rb | 21 + .../milestones/transfer_service_spec.rb | 8 +- .../namespace_settings/update_service_spec.rb | 31 + ...n_product_marketing_emails_service_spec.rb | 143 +- spec/services/notes/create_service_spec.rb | 18 + .../builder/default_spec.rb | 146 +- spec/services/notification_service_spec.rb | 47 +- .../create_dependency_service_spec.rb | 2 +- .../extract_changes_metadata_service_spec.rb | 160 + .../extract_deb_metadata_service_spec.rb | 22 +- .../debian/extract_metadata_service_spec.rb | 10 +- .../debian/parse_debian822_service_spec.rb | 74 +- .../debian/process_changes_service_spec.rb | 58 + .../go/create_package_service_spec.rb | 73 + .../packages/go/sync_packages_service_spec.rb | 40 + .../maven/metadata/sync_service_spec.rb | 15 +- .../create_dependencies_service_spec.rb | 33 + .../rubygems/create_gemspec_service_spec.rb | 28 + .../metadata_extraction_service_spec.rb | 50 + .../rubygems/process_gem_service_spec.rb | 134 + spec/services/pages/delete_service_spec.rb | 80 + spec/services/pages/delete_services_spec.rb | 76 - ...igrate_from_legacy_storage_service_spec.rb | 187 +- ...gacy_storage_to_deployment_service_spec.rb | 54 +- .../pages/zip_directory_service_spec.rb | 44 +- spec/services/projects/create_service_spec.rb | 14 +- .../services/projects/destroy_service_spec.rb | 22 +- ...update_pages_configuration_service_spec.rb | 2 +- .../projects/update_pages_service_spec.rb | 19 +- .../update_remote_mirror_service_spec.rb | 16 +- .../quick_actions/interpret_service_spec.rb | 200 +- .../repositories/changelog_service_spec.rb | 19 +- .../sast_parser_service_spec.rb | 4 +- .../services/spam/spam_action_service_spec.rb | 57 +- .../submit_usage_ping_service_spec.rb | 35 +- .../submodules/update_service_spec.rb | 2 +- spec/services/system_hooks_service_spec.rb | 28 - .../alert_management_service_spec.rb | 2 +- spec/services/todo_service_spec.rb | 51 +- .../destroyed_issuable_service_spec.rb | 34 + .../destroy/entity_leave_service_spec.rb | 27 +- spec/services/upload_service_spec.rb | 23 + .../user_preferences/update_service_spec.rb | 33 + ...efresh_authorized_projects_service_spec.rb | 164 - .../update_todo_count_cache_service_spec.rb | 61 + .../has_spam_action_response_fields_spec.rb | 8 +- spec/spec_helper.rb | 55 +- spec/support/helpers/board_helpers.rb | 9 - .../helpers/ci_artifact_metadata_generator.rb | 2 +- .../helpers/cycle_analytics_helpers.rb | 8 +- spec/support/helpers/graphql_helpers.rb | 16 +- .../helpers/javascript_fixtures_helpers.rb | 2 +- spec/support/helpers/jira_service_helper.rb | 2 +- spec/support/helpers/key_generator_helper.rb | 3 +- .../helpers/navbar_structure_helper.rb | 12 +- spec/support/helpers/next_instance_of.rb | 15 +- spec/support/helpers/query_recorder.rb | 40 +- spec/support/helpers/reload_helpers.rb | 12 + spec/support/helpers/rubygems_helpers.rb | 11 + spec/support/helpers/seed_repo.rb | 60 +- spec/support/helpers/stub_env.rb | 2 +- spec/support/helpers/stub_requests.rb | 2 +- spec/support/helpers/test_env.rb | 11 +- spec/support/helpers/usage_data_helpers.rb | 24 + .../project_tree_expectations.rb | 4 +- spec/support/matchers/exceed_query_limit.rb | 5 + spec/support/matchers/graphql_matchers.rb | 14 +- .../track_self_describing_event_matcher.rb | 12 - .../shared_contexts/email_shared_context.rb | 11 +- .../structured_logger_shared_context.rb | 87 + .../server_metrics_shared_context.rb | 92 + .../navbar_structure_context.rb | 5 +- .../project_service_jira_context.rb | 5 +- .../project_service_shared_context.rb | 5 +- .../api/conan_packages_shared_context.rb | 7 - .../requests/api/go_modules_shared_context.rb | 14 + .../delete_tags_service_shared_context.rb | 2 +- .../services_shared_context.rb | 2 + .../boards/destroy_service_shared_examples.rb | 30 + .../lists/update_service_shared_examples.rb | 43 + .../snippet_blob_shared_examples.rb | 10 - .../controllers/snippet_shared_examples.rb | 28 + .../controllers/trackable_shared_examples.rb | 39 - .../unique_visits_shared_examples.rb | 11 +- .../cascading_settings_shared_examples.rb | 41 + ...creatable_merge_request_shared_examples.rb | 2 +- .../discussion_comments_shared_example.rb | 4 +- .../features/error_tracking_shared_example.rb | 2 +- ...issuable_invite_members_shared_examples.rb | 6 +- .../project_upload_files_shared_examples.rb | 73 +- ...g_discussions_in_issues_shared_examples.rb | 6 +- .../search_settings_shared_examples.rb | 27 +- .../features/sidebar_shared_examples.rb | 165 + .../user_creates_wiki_page_shared_examples.rb | 2 +- ...er_git_access_wiki_page_shared_examples.rb | 2 +- ...r_previews_wiki_changes_shared_examples.rb | 6 +- .../user_updates_wiki_page_shared_examples.rb | 6 +- .../user_views_wiki_empty_shared_examples.rb | 6 +- .../can_mutate_spammable_examples.rb | 6 +- .../set_assignees_shared_examples.rb | 28 +- .../sorted_paginated_query_shared_examples.rb | 12 +- .../spam_protection_shared_examples.rb | 85 + ...tlab_style_deprecations_shared_examples.rb | 24 +- .../helpers/groups_shared_examples.rb | 53 + .../lib/api/ci/runner_shared_examples.rb | 2 +- .../lib/api/internal_base_shared_examples.rb | 11 - .../lib/gitlab/ci/ci_trace_shared_examples.rb | 11 + .../cte_materialized_shared_examples.rb | 44 + ...with_worker_attribution_shared_examples.rb | 132 + .../sql/set_operator_shared_examples.rb | 29 + .../issuable_activity_shared_examples.rb | 4 - .../mailers/notify_shared_examples.rb | 2 +- ...ctive_record_subscriber_shared_examples.rb | 14 +- .../models/boards/listable_shared_examples.rb | 23 +- ...ster_application_status_shared_examples.rb | 7 +- ...ter_application_version_shared_examples.rb | 11 + .../clusters/prometheus_client_shared.rb | 86 + .../debian/architecture_shared_examples.rb | 4 +- .../debian/component_shared_examples.rb | 4 +- .../debian/distribution_shared_examples.rb | 4 +- .../models/wiki_shared_examples.rb | 103 +- .../namespace_traversal_examples.rb | 124 + .../recursive_traversal_examples.rb | 78 - .../nav_sidebar_shared_examples.rb | 10 + .../resource_access_token_shared_examples.rb | 76 +- .../querying_shared_examples.rb | 23 + .../close_quick_action_shared_examples.rb | 2 +- .../api/conan_packages_shared_examples.rb | 31 +- .../integrations_shared_examples.rb | 49 + ...ing_application_context_shared_examples.rb | 10 +- .../api/nuget_endpoints_shared_examples.rb | 4 +- .../requests/api/packages_shared_examples.rb | 13 +- .../api/rubygems_packages_shared_examples.rb | 13 + ...integrations_controller_shared_examples.rb | 46 + .../environment_serializer_shared_examples.rb | 29 + .../lists_destroy_service_shared_examples.rb | 4 +- .../lists_list_service_shared_examples.rb | 38 +- ...r_applications_artifact_shared_examples.rb | 4 +- .../groups_count_service_shared_examples.rb | 55 + .../destroy_service_shared_examples.rb | 31 + .../services/merge_request_shared_examples.rb | 90 + .../notification_service_shared_examples.rb | 2 +- .../services/snippets_shared_examples.rb | 41 +- ..._product_marketing_email_shared_example.rb | 15 + ...er_with_data_consistency_shared_example.rb | 27 + spec/support/sidekiq_middleware.rb | 18 +- .../active_record/query_recorder_spec.rb | 70 +- .../exceed_query_limit_helpers_spec.rb | 10 + spec/tasks/gitlab/gitaly_rake_spec.rb | 11 +- spec/tasks/gitlab/pages_rake_spec.rb | 116 +- spec/tasks/gitlab/usage_data_rake_spec.rb | 16 +- spec/tooling/danger/changelog_spec.rb | 157 +- spec/tooling/danger/project_helper_spec.rb | 38 +- .../lib/tooling/kubernetes_client_spec.rb | 10 + spec/tooling/merge_request_spec.rb | 31 + .../quality/test_level_spec.rb | 4 +- spec/uploaders/object_storage_spec.rb | 19 + spec/validators/json_schema_validator_spec.rb | 30 - ..._certificate_credentials_validator_spec.rb | 4 +- .../admin/dashboard/index.html.haml_spec.rb | 16 +- .../admin/services/index.html.haml_spec.rb | 30 - .../projects/index.html.haml_spec.rb | 28 + .../groups/settings/_remove.html.haml_spec.rb | 17 + spec/views/layouts/_search.html.haml_spec.rb | 68 + .../layouts/header/_new_dropdown.haml_spec.rb | 1 + .../nav/sidebar/_group.html.haml_spec.rb | 1 + .../nav/sidebar/_profile.html.haml_spec.rb | 1 + .../nav/sidebar/_project.html.haml_spec.rb | 132 +- spec/views/layouts/profile.html.haml_spec.rb | 19 +- .../profiles/keys/_form.html.haml_spec.rb | 50 + .../profiles/keys/_key.html.haml_spec.rb | 123 + .../commit/_commit_box.html.haml_spec.rb | 34 - spec/views/projects/empty.html.haml_spec.rb | 10 + .../pipelines/_stage.html.haml_spec.rb | 73 - .../operations/show.html.haml_spec.rb | 4 +- .../projects/tags/index.html.haml_spec.rb | 1 + .../welcome/show.html.haml_spec.rb | 26 +- spec/views/search/_results.html.haml_spec.rb | 15 + .../shared/nav/_sidebar.html.haml_spec.rb | 44 + .../shared/runners/show.html.haml_spec.rb | 6 +- ...ser_refresh_over_user_range_worker_spec.rb | 63 +- .../background_migration_worker_spec.rb | 2 +- spec/workers/build_finished_worker_spec.rb | 38 +- spec/workers/build_hooks_worker_spec.rb | 5 + spec/workers/bulk_import_worker_spec.rb | 22 +- .../bulk_imports/entity_worker_spec.rb | 134 +- .../bulk_imports/pipeline_worker_spec.rb | 125 + spec/workers/ci/drop_pipeline_worker_spec.rb | 36 + .../initial_pipeline_process_worker_spec.rb | 21 + .../add_todo_when_build_fails_worker_spec.rb | 53 + .../expire_artifacts_worker_spec.rb | 2 +- .../ci/test_failure_history_worker_spec.rb | 4 +- .../concerns/worker_attributes_spec.rb | 74 + spec/workers/concerns/worker_context_spec.rb | 2 +- ...container_expiration_policy_worker_spec.rb | 135 +- ...atched_background_migration_worker_spec.rb | 121 + spec/workers/every_sidekiq_worker_spec.rb | 2 +- .../expire_build_artifacts_worker_spec.rb | 2 +- spec/workers/expire_job_cache_worker_spec.rb | 21 +- .../expire_pipeline_cache_worker_spec.rb | 17 + .../assignees_change_worker_spec.rb | 59 + .../create_pipeline_worker_spec.rb | 61 + .../handle_assignees_change_worker_spec.rb | 62 + .../resolve_todos_worker_spec.rb | 41 + ...in_product_marketing_emails_worker_spec.rb | 56 +- spec/workers/new_issue_worker_spec.rb | 11 +- spec/workers/new_merge_request_worker_spec.rb | 2 +- .../packages/go/sync_packages_worker_spec.rb | 101 + .../maven/metadata/sync_worker_spec.rb | 6 +- .../rubygems/extraction_worker_spec.rb | 54 + .../pages_update_configuration_worker_spec.rb | 2 +- spec/workers/post_receive_spec.rb | 5 +- .../projects/post_creation_worker_spec.rb | 86 + .../remove_expired_members_worker_spec.rb | 18 + .../repository_check/dispatch_worker_spec.rb | 7 + .../expired_notification_worker_spec.rb | 58 + .../expiring_soon_notification_worker_spec.rb | 66 + .../destroyed_issuable_worker_spec.rb | 15 + tooling/danger/changelog.rb | 36 +- tooling/danger/project_helper.rb | 26 +- tooling/lib/tooling/kubernetes_client.rb | 2 + tooling/lib/tooling/test_map_packer.rb | 2 +- tooling/merge_request.rb | 38 + .../merge_request_rspec_failure_rake_task.rb | 37 + {lib => tooling}/quality/test_level.rb | 0 vendor/Dockerfile/Ruby-alpine.Dockerfile | 6 +- vendor/Dockerfile/Ruby.Dockerfile | 2 +- vendor/assets/javascripts/jasmine-jquery.js | 5 +- .../javascripts/jquery.endless-scroll.js | 17 +- vendor/gems/mail-smtp_pool/.gitignore | 3 + vendor/gems/mail-smtp_pool/.gitlab-ci.yml | 29 + vendor/gems/mail-smtp_pool/Gemfile | 5 + vendor/gems/mail-smtp_pool/LICENSE | 21 + vendor/gems/mail-smtp_pool/README.md | 57 + .../gems/mail-smtp_pool/lib/mail/smtp_pool.rb | 34 + .../lib/mail/smtp_pool/connection.rb | 60 + .../mail-smtp_pool/mail-smtp_pool.gemspec | 26 + .../lib/mail/smtp_pool/connection_spec.rb | 93 + .../spec/lib/mail/smtp_pool_spec.rb | 68 + .../gems/mail-smtp_pool/spec/spec_helper.rb | 84 + vendor/project_templates/gatsby.tar.gz | Bin 79051 -> 377283 bytes vendor/project_templates/learn_gitlab.tar.gz | Bin 114312 -> 112648 bytes .../learn_gitlab_ultimate_trial.tar.gz | Bin 115096 -> 115097 bytes vendor/shims/mimemagic/Gemfile | 6 - vendor/shims/mimemagic/LICENSE.txt | 21 - vendor/shims/mimemagic/README.md | 1 - vendor/shims/mimemagic/Rakefile | 2 - vendor/shims/mimemagic/lib/mimemagic.rb | 6 - .../shims/mimemagic/lib/mimemagic/version.rb | 3 - vendor/shims/mimemagic/mimemagic.gemspec | 18 - workhorse/.gitlab-ci.yml | 14 +- workhorse/_support/changelog | 2 +- workhorse/doc/operations/install.md | 2 +- workhorse/go.mod | 7 +- workhorse/go.sum | 38 +- workhorse/internal/api/api.go | 32 +- .../internal/filestore/save_file_opts.go | 23 +- .../internal/filestore/save_file_opts_test.go | 15 +- workhorse/internal/upload/exif/exif.go | 5 + workhorse/internal/upload/rewrite.go | 15 +- workhorse/internal/upload/uploads_test.go | 22 +- workhorse/internal/upstream/routes.go | 29 +- workhorse/upload_test.go | 87 +- yarn.lock | 296 +- 8774 files changed, 246487 insertions(+), 86706 deletions(-) create mode 100644 .gitlab/changelog_config.yml create mode 100644 .gitlab/ci/untamper-my-lockfile.yml create mode 100644 .gitlab/ci/vendored-gems.gitlab-ci.yml create mode 100644 .gitlab/issue_templates/Geo: Replicate a new Git repository type.md create mode 100644 .gitlab/issue_templates/Geo: Replicate a new blob type.md delete mode 100644 .gitlab/issue_templates/Migrations.md create mode 100644 .gitlab/issue_templates/OSS_Partner.md create mode 100644 .gitlab/merge_request_templates/Quarantine End to End Test.md create mode 100644 app/assets/images/learn_gitlab/issue_created.svg create mode 100644 app/assets/images/learn_gitlab/section_deploy.svg create mode 100644 app/assets/images/learn_gitlab/section_plan.svg create mode 100644 app/assets/images/learn_gitlab/section_workspace.svg create mode 100644 app/assets/javascripts/admin/users/new.js create mode 100644 app/assets/javascripts/behaviors/deprecated_remove_row_behavior.js create mode 100644 app/assets/javascripts/boards/components/board_blocked_icon.vue create mode 100644 app/assets/javascripts/boards/components/board_card_loading_skeleton.vue create mode 100644 app/assets/javascripts/boards/components/board_content_sidebar.vue delete mode 100644 app/assets/javascripts/boards/components/board_extra_actions.vue delete mode 100644 app/assets/javascripts/boards/components/filtered_search.vue delete mode 100644 app/assets/javascripts/boards/components/modal/empty_state.vue delete mode 100644 app/assets/javascripts/boards/components/modal/filters.js delete mode 100644 app/assets/javascripts/boards/components/modal/footer.vue delete mode 100644 app/assets/javascripts/boards/components/modal/header.vue delete mode 100644 app/assets/javascripts/boards/components/modal/index.vue delete mode 100644 app/assets/javascripts/boards/components/modal/list.vue delete mode 100644 app/assets/javascripts/boards/components/modal/lists_dropdown.vue delete mode 100644 app/assets/javascripts/boards/components/modal/tabs.vue delete mode 100644 app/assets/javascripts/boards/components/sidebar/board_sidebar_issue_title.vue create mode 100644 app/assets/javascripts/boards/components/sidebar/board_sidebar_time_tracker.vue create mode 100644 app/assets/javascripts/boards/components/sidebar/board_sidebar_title.vue delete mode 100644 app/assets/javascripts/boards/filtered_search.js create mode 100644 app/assets/javascripts/boards/graphql/board_blocking_issues.query.graphql create mode 100644 app/assets/javascripts/boards/mixins/board_new_issue.js delete mode 100644 app/assets/javascripts/boards/mixins/modal_footer.js delete mode 100644 app/assets/javascripts/boards/mixins/modal_mixins.js delete mode 100644 app/assets/javascripts/boards/stores/modal_store.js create mode 100644 app/assets/javascripts/branches/branch_sort_dropdown.js create mode 100644 app/assets/javascripts/branches/components/sort_dropdown.vue create mode 100644 app/assets/javascripts/captcha/apollo_captcha_link.js create mode 100644 app/assets/javascripts/content_editor/components/content_editor.vue create mode 100644 app/assets/javascripts/content_editor/constants.js create mode 100644 app/assets/javascripts/content_editor/extensions/code_block_highlight.js create mode 100644 app/assets/javascripts/content_editor/index.js create mode 100644 app/assets/javascripts/content_editor/services/create_editor.js create mode 100644 app/assets/javascripts/content_editor/services/markdown_serializer.js create mode 100644 app/assets/javascripts/delete_label_modal.js create mode 100644 app/assets/javascripts/deploy_tokens/components/revoke_button.vue create mode 100644 app/assets/javascripts/deploy_tokens/init_revoke_button.js create mode 100644 app/assets/javascripts/diffs/utils/interoperability.js create mode 100644 app/assets/javascripts/emoji/awards_app/index.js create mode 100644 app/assets/javascripts/emoji/awards_app/store/actions.js create mode 100644 app/assets/javascripts/emoji/awards_app/store/index.js create mode 100644 app/assets/javascripts/emoji/awards_app/store/mutation_types.js create mode 100644 app/assets/javascripts/emoji/awards_app/store/mutations.js create mode 100644 app/assets/javascripts/ensure_data.js create mode 100644 app/assets/javascripts/experimentation/components/experiment.vue create mode 100644 app/assets/javascripts/graphql_shared/constants.js delete mode 100644 app/assets/javascripts/graphql_shared/fragments/epic.fragment.graphql create mode 100644 app/assets/javascripts/graphql_shared/fragments/user_availability.fragment.graphql create mode 100644 app/assets/javascripts/ide/components/cannot_push_code_alert.vue create mode 100644 app/assets/javascripts/integrations/edit/components/jira_upgrade_cta.vue create mode 100644 app/assets/javascripts/integrations/index/components/integrations_list.vue create mode 100644 app/assets/javascripts/integrations/index/components/integrations_table.vue create mode 100644 app/assets/javascripts/integrations/index/index.js delete mode 100644 app/assets/javascripts/issuable_sidebar/queries/issue_sidebar.query.graphql create mode 100644 app/assets/javascripts/issuable_type_selector/components/info_popover.vue create mode 100644 app/assets/javascripts/issuable_type_selector/index.js create mode 100644 app/assets/javascripts/jira_connect/components/group_item_name.vue create mode 100644 app/assets/javascripts/jira_connect/components/subscriptions_list.vue create mode 100644 app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs.query.graphql create mode 100644 app/assets/javascripts/jobs/components/table/index.js create mode 100644 app/assets/javascripts/jobs/components/table/jobs_table.vue create mode 100644 app/assets/javascripts/jobs/components/table/jobs_table_app.vue create mode 100644 app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue delete mode 100644 app/assets/javascripts/merge_conflicts/merge_conflict_service.js delete mode 100644 app/assets/javascripts/merge_conflicts/merge_conflict_store.js delete mode 100644 app/assets/javascripts/merge_conflicts/mixins/line_conflict_actions.js delete mode 100644 app/assets/javascripts/mini_pipeline_graph_dropdown.js create mode 100644 app/assets/javascripts/namespaces/cascading_settings/components/lock_popovers.vue create mode 100644 app/assets/javascripts/namespaces/cascading_settings/index.js create mode 100644 app/assets/javascripts/packages/shared/components/package_icon_and_name.vue create mode 100644 app/assets/javascripts/packages_and_registries/infrastructure_registry/components/infrastructure_icon_and_name.vue create mode 100644 app/assets/javascripts/packages_and_registries/infrastructure_registry/components/infrastructure_search.vue create mode 100644 app/assets/javascripts/packages_and_registries/infrastructure_registry/components/infrastructure_title.vue create mode 100644 app/assets/javascripts/packages_and_registries/infrastructure_registry/list_app_bundle.js create mode 100644 app/assets/javascripts/packages_and_registries/shared/constants.js create mode 100644 app/assets/javascripts/packages_and_registries/shared/utils.js create mode 100644 app/assets/javascripts/pages/admin/application_settings/general/components/signup_checkbox.vue create mode 100644 app/assets/javascripts/pages/admin/application_settings/general/components/signup_form.vue create mode 100644 app/assets/javascripts/pages/admin/application_settings/gitpod.js create mode 100644 app/assets/javascripts/pages/admin/application_settings/signup_restrictions.js create mode 100644 app/assets/javascripts/pages/admin/application_settings/utils.js create mode 100644 app/assets/javascripts/pages/admin/labels/index/index.js rename app/assets/javascripts/pages/admin/runners/{ => index}/index.js (100%) create mode 100644 app/assets/javascripts/pages/admin/runners/show/index.js create mode 100644 app/assets/javascripts/pages/admin/spam_logs/index.js create mode 100644 app/assets/javascripts/pages/groups/settings/index.js create mode 100644 app/assets/javascripts/pages/groups/settings/integrations/index.js create mode 100644 app/assets/javascripts/pages/projects/hooks/index.js create mode 100644 app/assets/javascripts/pages/projects/learn_gitlab/components/learn_gitlab_section_card.vue create mode 100644 app/assets/javascripts/pages/projects/learn_gitlab/components/learn_gitlab_section_link.vue create mode 100644 app/assets/javascripts/pages/projects/packages/infrastructure_registry/index/index.js create mode 100644 app/assets/javascripts/pages/projects/pages/index.js create mode 100644 app/assets/javascripts/pages/projects/path_locks/index.js create mode 100644 app/assets/javascripts/pages/projects/settings/index.js create mode 100644 app/assets/javascripts/pages/shared/wikis/components/wiki_form.vue create mode 100644 app/assets/javascripts/performance_bar/constants.js create mode 100644 app/assets/javascripts/pipeline_editor/components/code_snippet_alert/code_snippet_alert.vue create mode 100644 app/assets/javascripts/pipeline_editor/components/code_snippet_alert/constants.js create mode 100644 app/assets/javascripts/pipeline_editor/components/file_nav/branch_switcher.vue create mode 100644 app/assets/javascripts/pipeline_editor/components/file_nav/pipeline_editor_file_nav.vue create mode 100644 app/assets/javascripts/pipeline_editor/graphql/queries/available_branches.graphql create mode 100644 app/assets/javascripts/pipeline_editor/graphql/queries/client/app_status.graphql create mode 100644 app/assets/javascripts/pipelines/components/graph/graph_view_selector.vue rename app/assets/javascripts/pipelines/components/{graph => jobs_shared}/action_component.vue (98%) rename app/assets/javascripts/pipelines/components/{graph => jobs_shared}/job_name_component.vue (100%) create mode 100644 app/assets/javascripts/pipelines/components/notification/pipeline_notification.vue delete mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/blank_state.vue create mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/job_item.vue create mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/pipelines_ci_templates.vue delete mode 100644 app/assets/javascripts/pipelines/components/pipelines_list/pipelines_table_row.vue create mode 100644 app/assets/javascripts/pipelines/graphql/mutations/dismiss_pipeline_notification.graphql create mode 100644 app/assets/javascripts/pipelines/graphql/queries/get_user_callouts.query.graphql create mode 100644 app/assets/javascripts/pipelines/pipeline_details_notification.js create mode 100644 app/assets/javascripts/pipelines/pipeline_shared_client.js create mode 100644 app/assets/javascripts/projects/commit/components/commit_comments_button.vue create mode 100644 app/assets/javascripts/projects/commit/components/commit_options_dropdown.vue delete mode 100644 app/assets/javascripts/projects/commit/components/form_trigger.vue delete mode 100644 app/assets/javascripts/projects/commit/init_cherry_pick_commit_trigger.js create mode 100644 app/assets/javascripts/projects/commit/init_commit_comments_button.js create mode 100644 app/assets/javascripts/projects/commit/init_commit_options_dropdown.js delete mode 100644 app/assets/javascripts/projects/commit/init_revert_commit_trigger.js create mode 100644 app/assets/javascripts/projects/experiment_new_project_creation/constants.js delete mode 100644 app/assets/javascripts/releases/stores/modules/detail/actions.js create mode 100644 app/assets/javascripts/releases/stores/modules/edit_new/actions.js rename app/assets/javascripts/releases/stores/modules/{detail => edit_new}/getters.js (100%) rename app/assets/javascripts/releases/stores/modules/{detail => edit_new}/index.js (100%) rename app/assets/javascripts/releases/stores/modules/{detail => edit_new}/mutation_types.js (100%) rename app/assets/javascripts/releases/stores/modules/{detail => edit_new}/mutations.js (100%) rename app/assets/javascripts/releases/stores/modules/{detail => edit_new}/state.js (100%) rename app/assets/javascripts/releases/stores/modules/{list => index}/actions.js (100%) rename app/assets/javascripts/releases/stores/modules/{list => index}/index.js (100%) rename app/assets/javascripts/releases/stores/modules/{list => index}/mutation_types.js (100%) rename app/assets/javascripts/releases/stores/modules/{list => index}/mutations.js (100%) rename app/assets/javascripts/releases/stores/modules/{list => index}/state.js (100%) create mode 100644 app/assets/javascripts/repository/components/blob_content_viewer.vue delete mode 100644 app/assets/javascripts/repository/components/tree_action_link.vue create mode 100644 app/assets/javascripts/repository/pages/blob.vue create mode 100644 app/assets/javascripts/repository/queries/blob_info.query.graphql create mode 100644 app/assets/javascripts/runner/runner_details/constants.js create mode 100644 app/assets/javascripts/runner/runner_details/index.js create mode 100644 app/assets/javascripts/runner/runner_details/runner_details_app.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/sidebar_invite_members.vue create mode 100644 app/assets/javascripts/sidebar/components/assignees/sidebar_participant.vue create mode 100644 app/assets/javascripts/sidebar/components/due_date/sidebar_due_date_widget.vue create mode 100644 app/assets/javascripts/sidebar/queries/issue_due_date.query.graphql create mode 100644 app/assets/javascripts/sidebar/queries/update_epic_subscription.mutation.graphql create mode 100644 app/assets/javascripts/sidebar/queries/update_epic_title.mutation.graphql create mode 100644 app/assets/javascripts/sidebar/queries/update_issue_due_date.mutation.graphql create mode 100644 app/assets/javascripts/tags/components/sort_dropdown.vue create mode 100644 app/assets/javascripts/tags/index.js create mode 100644 app/assets/javascripts/vue_shared/components/delete_label_modal.vue delete mode 100644 app/assets/javascripts/vue_shared/components/deprecated_modal.vue create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/emoji_token.vue create mode 100644 app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/epic_token.vue delete mode 100644 app/assets/javascripts/vue_shared/components/gl_toggle_vuex.vue create mode 100644 app/assets/javascripts/vue_shared/components/lib/utils/props_utils.js create mode 100644 app/assets/javascripts/vue_shared/components/oncall_schedules_list.vue delete mode 100644 app/assets/javascripts/vue_shared/components/recaptcha_eventhub.js delete mode 100644 app/assets/javascripts/vue_shared/components/recaptcha_modal.vue create mode 100644 app/assets/javascripts/vue_shared/components/runner_instructions/runner_instructions_modal.vue create mode 100644 app/assets/javascripts/vue_shared/components/sidebar/copyable_field.vue rename app/assets/javascripts/{admin/users => vue_shared}/components/user_date.vue (100%) delete mode 100644 app/assets/javascripts/vue_shared/mixins/recaptcha_modal_implementor.js create mode 100644 app/assets/stylesheets/components/feature_highlight.scss delete mode 100644 app/assets/stylesheets/fontawesome_custom.scss delete mode 100644 app/assets/stylesheets/pages/runners.scss create mode 100644 app/controllers/admin/clusters/integrations_controller.rb create mode 100644 app/controllers/clusters/integrations_controller.rb create mode 100644 app/controllers/customers_dot/proxy_controller.rb create mode 100644 app/controllers/groups/clusters/integrations_controller.rb create mode 100644 app/controllers/groups/settings/applications_controller.rb create mode 100644 app/controllers/projects/clusters/integrations_controller.rb create mode 100644 app/controllers/projects/packages/infrastructure_registry_controller.rb delete mode 100644 app/experiments/strategy/round_robin.rb create mode 100644 app/finders/concerns/finder_with_group_hierarchy.rb create mode 100644 app/finders/environments_by_deployments_finder.rb create mode 100644 app/finders/packages/go/package_finder.rb create mode 100644 app/finders/repositories/branch_names_finder.rb create mode 100644 app/finders/repositories/changelog_tag_finder.rb delete mode 100644 app/finders/repositories/previous_tag_finder.rb create mode 100644 app/graphql/mutations/concerns/mutations/spam_protection.rb create mode 100644 app/graphql/mutations/release_asset_links/delete.rb create mode 100644 app/graphql/resolvers/blobs_resolver.rb create mode 100644 app/graphql/resolvers/ci/test_report_summary_resolver.rb create mode 100644 app/graphql/resolvers/ci/test_suite_resolver.rb delete mode 100644 app/graphql/resolvers/concerns/manual_authorization.rb create mode 100644 app/graphql/resolvers/project_jobs_resolver.rb create mode 100644 app/graphql/resolvers/repository_branch_names_resolver.rb create mode 100644 app/graphql/resolvers/timelog_resolver.rb create mode 100644 app/graphql/types/boards/assignee_wildcard_id_enum.rb create mode 100644 app/graphql/types/boards/board_issuable_input_base_type.rb create mode 100644 app/graphql/types/boards/negated_board_issue_input_type.rb create mode 100644 app/graphql/types/ci/job_status_enum.rb create mode 100644 app/graphql/types/ci/recent_failures_type.rb create mode 100644 app/graphql/types/ci/test_case_status_enum.rb create mode 100644 app/graphql/types/ci/test_case_type.rb create mode 100644 app/graphql/types/ci/test_report_summary_type.rb create mode 100644 app/graphql/types/ci/test_report_total_type.rb create mode 100644 app/graphql/types/ci/test_suite_summary_type.rb create mode 100644 app/graphql/types/ci/test_suite_type.rb create mode 100644 app/graphql/types/concerns/find_closest.rb create mode 100644 app/graphql/types/issues/negated_issue_filter_input_type.rb create mode 100644 app/graphql/types/merge_request_review_state_enum.rb create mode 100644 app/graphql/types/merge_requests/reviewer_type.rb create mode 100644 app/graphql/types/packages/conan/file_metadatum_type.rb create mode 100644 app/graphql/types/packages/conan/metadatum_file_type_enum.rb create mode 100644 app/graphql/types/packages/conan/metadatum_type.rb create mode 100644 app/graphql/types/packages/file_metadata_type.rb create mode 100644 app/graphql/types/packages/package_details_type.rb create mode 100644 app/graphql/types/packages/package_file_type.rb delete mode 100644 app/graphql/types/packages/package_without_versions_type.rb create mode 100644 app/graphql/types/repository/blob_type.rb create mode 100644 app/graphql/types/timelog_type.rb create mode 100644 app/graphql/types/user_merge_request_interaction_type.rb create mode 100644 app/helpers/sidebars_helper.rb delete mode 100644 app/models/audit_event_archived.rb create mode 100644 app/models/bulk_imports/stage.rb delete mode 100644 app/models/ci/test_case.rb delete mode 100644 app/models/ci/test_case_failure.rb create mode 100644 app/models/ci/unit_test.rb create mode 100644 app/models/ci/unit_test_failure.rb create mode 100644 app/models/clusters/concerns/prometheus_client.rb create mode 100644 app/models/clusters/integrations/prometheus.rb create mode 100644 app/models/concerns/cascading_namespace_setting_attribute.rb create mode 100644 app/models/concerns/has_timelogs_report.rb create mode 100644 app/models/concerns/object_storable.rb create mode 100644 app/models/concerns/sidebars/container_with_html_options.rb create mode 100644 app/models/concerns/sidebars/has_active_routes.rb create mode 100644 app/models/concerns/sidebars/has_hint.rb create mode 100644 app/models/concerns/sidebars/has_icon.rb create mode 100644 app/models/concerns/sidebars/has_pill.rb create mode 100644 app/models/concerns/sidebars/positionable_list.rb create mode 100644 app/models/concerns/sidebars/renderable.rb create mode 100644 app/models/concerns/token_authenticatable_strategies/encryption_helper.rb create mode 100644 app/models/concerns/vulnerability_finding_helpers.rb create mode 100644 app/models/concerns/vulnerability_finding_signature_helpers.rb create mode 100644 app/models/members/last_group_owner_assigner.rb create mode 100644 app/models/namespace/admin_note.rb create mode 100644 app/models/namespaces/traversal/linear.rb create mode 100644 app/models/packages/debian/file_entry.rb create mode 100644 app/models/preloaders/labels_preloader.rb create mode 100644 app/models/preloaders/user_max_access_level_in_projects_preloader.rb create mode 100644 app/models/sidebars/context.rb create mode 100644 app/models/sidebars/menu.rb create mode 100644 app/models/sidebars/menu_item.rb create mode 100644 app/models/sidebars/panel.rb create mode 100644 app/models/sidebars/projects/context.rb create mode 100644 app/models/sidebars/projects/menus/learn_gitlab/menu.rb create mode 100644 app/models/sidebars/projects/menus/project_overview/menu.rb create mode 100644 app/models/sidebars/projects/menus/project_overview/menu_items/activity.rb create mode 100644 app/models/sidebars/projects/menus/project_overview/menu_items/details.rb create mode 100644 app/models/sidebars/projects/menus/project_overview/menu_items/releases.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/branches.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/commits.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/compare.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/contributors.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/files.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/graphs.rb create mode 100644 app/models/sidebars/projects/menus/repository/menu_items/tags.rb create mode 100644 app/models/sidebars/projects/menus/scope/menu.rb create mode 100644 app/models/sidebars/projects/panel.rb create mode 100644 app/models/users/in_product_marketing_email.rb create mode 100644 app/models/users/merge_request_interaction.rb create mode 100644 app/policies/packages/conan/file_metadatum_policy.rb create mode 100644 app/policies/packages/conan/metadatum_policy.rb create mode 100644 app/policies/packages/package_file_policy.rb create mode 100644 app/policies/timelog_policy.rb create mode 100644 app/presenters/clusters/integration_presenter.rb create mode 100644 app/services/authorized_project_update/find_records_due_for_refresh_service.rb create mode 100644 app/services/boards/lists/base_update_service.rb create mode 100644 app/services/ci/abort_pipelines_service.rb delete mode 100644 app/services/ci/abort_project_pipelines_service.rb create mode 100644 app/services/ci/after_requeue_job_service.rb delete mode 100644 app/services/ci/cancel_user_pipelines_service.rb delete mode 100644 app/services/ci/create_job_artifacts_service.rb delete mode 100644 app/services/ci/destroy_expired_job_artifacts_service.rb create mode 100644 app/services/ci/disable_user_pipeline_schedules_service.rb create mode 100644 app/services/ci/drop_pipeline_service.rb create mode 100644 app/services/ci/job_artifacts/create_service.rb create mode 100644 app/services/ci/job_artifacts/destroy_all_expired_service.rb create mode 100644 app/services/ci/job_artifacts/destroy_batch_service.rb delete mode 100644 app/services/ci/job_artifacts_destroy_batch_service.rb create mode 100644 app/services/ci/pipeline_artifacts/destroy_all_expired_service.rb delete mode 100644 app/services/ci/pipeline_artifacts/destroy_expired_artifacts_service.rb create mode 100644 app/services/clusters/integrations/create_service.rb create mode 100644 app/services/groups/count_service.rb create mode 100644 app/services/groups/merge_requests_count_service.rb create mode 100644 app/services/issues/after_create_service.rb create mode 100644 app/services/keys/expiry_notification_service.rb create mode 100644 app/services/merge_requests/handle_assignees_change_service.rb create mode 100644 app/services/merge_requests/resolve_todos_service.rb create mode 100644 app/services/merge_requests/update_assignees_service.rb create mode 100644 app/services/milestones/merge_requests_count_service.rb create mode 100644 app/services/packages/debian/extract_changes_metadata_service.rb create mode 100644 app/services/packages/debian/process_changes_service.rb create mode 100644 app/services/packages/go/create_package_service.rb create mode 100644 app/services/packages/go/sync_packages_service.rb create mode 100644 app/services/packages/rubygems/create_dependencies_service.rb create mode 100644 app/services/packages/rubygems/create_gemspec_service.rb create mode 100644 app/services/packages/rubygems/metadata_extraction_service.rb create mode 100644 app/services/packages/rubygems/process_gem_service.rb create mode 100644 app/services/todos/destroy/destroyed_issuable_service.rb create mode 100644 app/services/user_preferences/update_service.rb create mode 100644 app/services/users/update_todo_count_cache_service.rb delete mode 100644 app/validators/json_schemas/security_scan_info.json delete mode 100644 app/validators/json_schemas/vulnerability_finding_details.json create mode 100644 app/views/admin/services/_service_templates_deprecated_alert.html.haml delete mode 100644 app/views/ci/status/_dropdown_graph_badge.html.haml create mode 100644 app/views/clusters/clusters/_integrations.html.haml create mode 100644 app/views/clusters/clusters/_integrations_tab.html.haml create mode 100644 app/views/devise/shared/_email_opted_in.html.haml delete mode 100644 app/views/doorkeeper/applications/_delete_form.html.haml create mode 100644 app/views/groups/settings/_project_access_token_creation.html.haml create mode 100644 app/views/groups/settings/_remove_button.html.haml create mode 100644 app/views/groups/settings/applications/edit.html.haml create mode 100644 app/views/groups/settings/applications/index.html.haml create mode 100644 app/views/groups/settings/applications/show.html.haml delete mode 100644 app/views/layouts/header/_new_dropdown.haml create mode 100644 app/views/layouts/header/_new_dropdown.html.haml create mode 100644 app/views/layouts/header/_new_repo_experiment.html.haml create mode 100644 app/views/layouts/header/_service_templates_deprecation_callout.html.haml create mode 100644 app/views/layouts/nav/_combined_menu.html.haml create mode 100644 app/views/layouts/nav/sidebar/_project_menus.html.haml create mode 100644 app/views/notify/ssh_key_expired_email.html.haml create mode 100644 app/views/notify/ssh_key_expired_email.text.erb create mode 100644 app/views/notify/ssh_key_expiring_soon.text.erb create mode 100644 app/views/notify/ssh_key_expiring_soon_email.html.haml create mode 100644 app/views/projects/_merge_request_target_project_settings.html.haml create mode 100644 app/views/projects/packages/infrastructure_registry/index.html.haml delete mode 100644 app/views/projects/pipelines/_stage.html.haml delete mode 100644 app/views/shared/_delete_label_modal.html.haml delete mode 100644 app/views/shared/_mini_pipeline_graph.html.haml create mode 100644 app/views/shared/admin/_admin_note.html.haml create mode 100644 app/views/shared/admin/_admin_note_form.html.haml delete mode 100644 app/views/shared/deploy_tokens/_revoke_modal.html.haml create mode 100644 app/views/shared/doorkeeper/applications/_delete_form.html.haml rename app/views/{ => shared}/doorkeeper/applications/_form.html.haml (81%) create mode 100644 app/views/shared/doorkeeper/applications/_index.html.haml create mode 100644 app/views/shared/doorkeeper/applications/_show.html.haml create mode 100644 app/views/shared/issuable/_invite_members_trigger.html.haml create mode 100644 app/views/shared/namespaces/cascading_settings/_enforcement_checkbox.html.haml create mode 100644 app/views/shared/namespaces/cascading_settings/_lock_popovers.html.haml create mode 100644 app/views/shared/namespaces/cascading_settings/_setting_label.html.haml create mode 100644 app/views/shared/nav/_scope_menu.html.haml create mode 100644 app/views/shared/nav/_sidebar.html.haml create mode 100644 app/views/shared/nav/_sidebar_menu.html.haml create mode 100644 app/views/shared/nav/_sidebar_menu_item.html.haml create mode 100644 app/views/shared/runners/_runner_type_alert.html.haml create mode 100644 app/views/shared/runners/_runner_type_badge.html.haml create mode 100644 app/workers/bulk_imports/pipeline_worker.rb create mode 100644 app/workers/ci/drop_pipeline_worker.rb create mode 100644 app/workers/ci/initial_pipeline_process_worker.rb create mode 100644 app/workers/ci/merge_requests/add_todo_when_build_fails_worker.rb create mode 100644 app/workers/database/batched_background_migration_worker.rb create mode 100644 app/workers/merge_requests/assignees_change_worker.rb create mode 100644 app/workers/merge_requests/create_pipeline_worker.rb create mode 100644 app/workers/merge_requests/handle_assignees_change_worker.rb create mode 100644 app/workers/merge_requests/resolve_todos_worker.rb create mode 100644 app/workers/packages/go/sync_packages_worker.rb create mode 100644 app/workers/packages/rubygems/extraction_worker.rb create mode 100644 app/workers/projects/post_creation_worker.rb create mode 100644 app/workers/ssh_keys/expired_notification_worker.rb create mode 100644 app/workers/ssh_keys/expiring_soon_notification_worker.rb create mode 100644 app/workers/todos_destroyer/destroyed_issuable_worker.rb create mode 100644 config/bullet.yml delete mode 100644 config/feature_flags/development/add_issues_button.yml create mode 100644 config/feature_flags/development/api_caching_tags.yml create mode 100644 config/feature_flags/development/async_handle_merge_request_assignees_change.yml delete mode 100644 config/feature_flags/development/attachment_with_filename.yml delete mode 100644 config/feature_flags/development/avatar_cache_for_email.yml delete mode 100644 config/feature_flags/development/batch_suggestions.yml create mode 100644 config/feature_flags/development/cached_sidebar_merge_requests_count.yml create mode 100644 config/feature_flags/development/cached_sidebar_open_epics_count.yml delete mode 100644 config/feature_flags/development/cached_sidebar_open_issues_count.yml create mode 100644 config/feature_flags/development/cascading_namespace_settings.yml create mode 100644 config/feature_flags/development/check_maven_path_first.yml create mode 100644 config/feature_flags/development/check_mergeability_async_in_widget.yml delete mode 100644 config/feature_flags/development/ci_commit_pipeline_mini_graph_vue.yml create mode 100644 config/feature_flags/development/ci_external_validation_service.yml delete mode 100644 config/feature_flags/development/ci_instance_variables_ui.yml create mode 100644 config/feature_flags/development/ci_no_empty_groups.yml create mode 100644 config/feature_flags/development/ci_runner_builds_queue_on_replicas.yml delete mode 100644 config/feature_flags/development/ci_trigger_payload_into_pipeline.yml create mode 100644 config/feature_flags/development/ci_wildcard_file_paths.yml create mode 100644 config/feature_flags/development/ci_workflow_rules_variables.yml delete mode 100644 config/feature_flags/development/cluster_agent_list.yml create mode 100644 config/feature_flags/development/code_review_async_pipeline_creation.yml delete mode 100644 config/feature_flags/development/codequality_backend_comparison.yml create mode 100644 config/feature_flags/development/combined_menu.yml create mode 100644 config/feature_flags/development/container_registry_expiration_policies_loopless.yml delete mode 100644 config/feature_flags/development/customize_homepage.yml create mode 100644 config/feature_flags/development/destroy_issuable_todos_async.yml create mode 100644 config/feature_flags/development/diff_line_syntax_highlighting.yml delete mode 100644 config/feature_flags/development/dora_daily_metrics.yml delete mode 100644 config/feature_flags/development/dynamic_nonce_creation.yml create mode 100644 config/feature_flags/development/enforce_max_attachment_size_upload_api.yml create mode 100644 config/feature_flags/development/erase_traces_from_already_archived_jobs_when_archiving_again.yml create mode 100644 config/feature_flags/development/geo_pipeline_artifact_replication.yml delete mode 100644 config/feature_flags/development/gitaly_find_file.yml create mode 100644 config/feature_flags/development/gitaly_replace_wiki_delete_page.yml delete mode 100644 config/feature_flags/development/gitlab_org_sitemap.yml create mode 100644 config/feature_flags/development/gldropdown_tags.yml delete mode 100644 config/feature_flags/development/graphql_individual_release_page.yml create mode 100644 config/feature_flags/development/infrastructure_registry_page.yml create mode 100644 config/feature_flags/development/issue_assignees_widget.yml delete mode 100644 config/feature_flags/development/jira_issues_list.yml delete mode 100644 config/feature_flags/development/jira_issues_show_integration.yml create mode 100644 config/feature_flags/development/jobs_table_vue.yml create mode 100644 config/feature_flags/development/lfs_integrity_inspect_quarantined_objects.yml create mode 100644 config/feature_flags/development/load_balancing_atomic_replica.yml create mode 100644 config/feature_flags/development/load_balancing_for_build_hooks_worker.yml create mode 100644 config/feature_flags/development/load_balancing_for_bulk_cron_workers.yml create mode 100644 config/feature_flags/development/longer_count_cache_validity.yml create mode 100644 config/feature_flags/development/loose_index_scan_for_distinct_values.yml create mode 100644 config/feature_flags/development/maven_metadata_by_path_with_optimization_fence.yml create mode 100644 config/feature_flags/development/maven_packages_group_level_improvements.yml create mode 100644 config/feature_flags/development/merge_request_cached_merge_pipeline_serializer.yml delete mode 100644 config/feature_flags/development/merge_request_cached_pipeline_serializer.yml delete mode 100644 config/feature_flags/development/migrate_delayed_project_removal.yml delete mode 100644 config/feature_flags/development/new_pipelines_table.yml create mode 100644 config/feature_flags/development/notification_setting_recipient_refactor.yml create mode 100644 config/feature_flags/development/other_storage_tab.yml create mode 100644 config/feature_flags/development/packages_finder_helper_deploy_token.yml delete mode 100644 config/feature_flags/development/pages_migration_mark_as_not_deployed.yml delete mode 100644 config/feature_flags/development/pages_serve_from_migrated_zip.yml create mode 100644 config/feature_flags/development/periodic_project_authorization_update_via_replica.yml create mode 100644 config/feature_flags/development/pipeline_editor_branch_switcher.yml create mode 100644 config/feature_flags/development/pipeline_filter_jobs.yml create mode 100644 config/feature_flags/development/pipeline_graph_layers_view.yml create mode 100644 config/feature_flags/development/preload_associations_jobs_request_api_endpoint.yml delete mode 100644 config/feature_flags/development/product_intelligence_metrics_names_suggestions.yml create mode 100644 config/feature_flags/development/project_sidebar_refactor.yml create mode 100644 config/feature_flags/development/projects_post_creation_worker.yml delete mode 100644 config/feature_flags/development/recursive_namespace_lookup_as_inner_join.yml create mode 100644 config/feature_flags/development/refactor_blob_viewer.yml create mode 100644 config/feature_flags/development/reject_unsigned_commits_by_gitlab.yml delete mode 100644 config/feature_flags/development/remove_resolve_note.yml create mode 100644 config/feature_flags/development/resolve_merge_request_todos_async.yml delete mode 100644 config/feature_flags/development/resource_access_token_feature.yml create mode 100644 config/feature_flags/development/runner_detailed_view_vue_ui.yml create mode 100644 config/feature_flags/development/runners_cached_states.yml delete mode 100644 config/feature_flags/development/scoped_group_variables.yml delete mode 100644 config/feature_flags/development/search_settings_in_page.yml create mode 100644 config/feature_flags/development/security_dast_site_profiles_api_option.yml create mode 100644 config/feature_flags/development/sentry_processors_before_send.yml delete mode 100644 config/feature_flags/development/simplified_commit_status_group_name.yml delete mode 100644 config/feature_flags/development/skip_dag_manual_and_delayed_jobs.yml create mode 100644 config/feature_flags/development/skip_pages_deploy_to_legacy_storage.yml create mode 100644 config/feature_flags/development/ssh_key_expiration_email_notification.yml create mode 100644 config/feature_flags/development/swimlanes_buffered_rendering.yml create mode 100644 config/feature_flags/development/sync_traversal_ids.yml create mode 100644 config/feature_flags/development/upgrade_link_in_user_menu_a.yml delete mode 100644 config/feature_flags/development/usage_data_g_compliance_dashboard.yml delete mode 100644 config/feature_flags/development/usage_data_i_analytics_cohorts.yml create mode 100644 config/feature_flags/development/usage_data_i_incident_management_oncall_notification_sent.yml create mode 100644 config/feature_flags/development/usage_data_i_testing_summary_widget_total.yml delete mode 100644 config/feature_flags/development/usage_data_track_ci_templates_unique_projects.yml create mode 100644 config/feature_flags/development/use_distinct_for_all_object_hierarchy.yml create mode 100644 config/feature_flags/development/use_distinct_in_register_job_object_hierarchy.yml create mode 100644 config/feature_flags/development/use_marker_ranges.yml create mode 100644 config/feature_flags/development/use_traversal_ids.yml delete mode 100644 config/feature_flags/development/user_mode_in_session.yml create mode 100644 config/feature_flags/development/users_expanding_widgets_usage_data.yml delete mode 100644 config/feature_flags/development/value_stream_analytics_extended_form.yml create mode 100644 config/feature_flags/development/workhorse_extract_filename_base.yml create mode 100644 config/feature_flags/experiment/invite_members_in_comment.yml create mode 100644 config/feature_flags/experiment/new_repo.yml create mode 100644 config/feature_flags/experiment/pipeline_empty_state_templates.yml create mode 100644 config/feature_flags/ops/execute_batched_migrations_on_schedule.yml create mode 100644 config/feature_flags/ops/gitlab_service_measuring_projects_create_service.yml create mode 100644 config/feature_flags/ops/gitlab_service_measuring_projects_import_export_export_service.yml create mode 100644 config/feature_flags/ops/gitlab_service_measuring_projects_import_service.yml create mode 100644 config/feature_flags/ops/recaptcha_on_top_level_group_creation.yml create mode 100644 config/feature_flags/ops/redis_hll_tracking.yml rename config/feature_flags/{development => ops}/usage_data_api.yml (81%) create mode 100644 config/feature_flags/ops/usage_data_non_sql_metrics.yml create mode 100644 config/feature_flags/ops/usage_data_queries_api.yml create mode 100644 config/feature_flags/ops/x509_forced_cert_loading.yml create mode 100644 config/helpers/check_frontend_integration_env.js delete mode 100644 config/initializers/json_validator_patch.rb delete mode 100644 config/initializers/kramdown_patch.rb create mode 100644 config/initializers/pages_storage_check.rb create mode 100644 config/initializers/postgres_cte_as_materialized.rb create mode 100644 config/initializers/puma_client_tempfile_patch.rb create mode 100644 config/metrics/aggregates/code_review.yml create mode 100644 config/metrics/aggregates/common.yml delete mode 100644 config/metrics/counts_28d/20210216181201_milestone_lists.yml create mode 100644 config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181341_g_project_management_issue_iteration_changed_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181345_g_project_management_issue_weight_changed_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181414_g_project_management_issue_added_to_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181416_g_project_management_issue_removed_from_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181420_g_project_management_issue_changed_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181457_g_project_management_issue_health_status_changed_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181516_i_quickactions_assign_multiple_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181534_i_quickactions_child_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181538_i_quickactions_clear_weight_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181618_i_quickactions_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181626_i_quickactions_iteration_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181648_i_quickactions_parent_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181652_i_quickactions_promote_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181655_i_quickactions_publish_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181718_i_quickactions_remove_child_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181725_i_quickactions_remove_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181732_i_quickactions_remove_iteration_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181740_i_quickactions_remove_parent_epic_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216181857_i_quickactions_weight_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216182200_i_testing_metrics_report_artifact_uploaders_monthly.yml delete mode 100644 config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml delete mode 100644 config/metrics/counts_28d/20210216183209_i_testing_paid_monthly_active_user_total.yml create mode 100644 config/metrics/counts_28d/20210409095855_users_expanding_secure_security_report_monthly.yml create mode 100644 config/metrics/counts_28d/20210409100451_users_expanding_testing_code_quality_report_monthly.yml create mode 100644 config/metrics/counts_28d/20210409100628_users_expanding_testing_accessibility_report_monthly.yml create mode 100644 config/metrics/counts_28d/20210413205507_i_testing_summary_widget_total_monthly.yml create mode 100644 config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml create mode 100644 config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml delete mode 100644 config/metrics/counts_7d/20210216182158_i_testing_metrics_report_artifact_uploaders_weekly.yml create mode 100644 config/metrics/counts_7d/20210216183213_product_analytics_test_metrics_union.yml create mode 100644 config/metrics/counts_7d/20210216183215_product_analytics_test_metrics_intersection.yml create mode 100644 config/metrics/counts_7d/20210409095855_users_expanding_secure_security_report_weekly.yml create mode 100644 config/metrics/counts_7d/20210409100451_users_expanding_testing_code_quality_report_weekly.yml create mode 100644 config/metrics/counts_7d/20210409100628_users_expanding_testing_accessibility_report_weekly.yml create mode 100644 config/metrics/counts_7d/20210413205507_i_testing_summary_widget_total_weekly.yml delete mode 100644 config/metrics/counts_all/20210216174829_smtp_server.yml delete mode 100644 config/metrics/counts_all/20210216180922_duration_s.yml delete mode 100644 config/metrics/counts_all/20210216180924_failures.yml delete mode 100644 config/metrics/counts_all/20210216181106_milestone_lists.yml delete mode 100644 config/metrics/counts_all/20210216181137_milestone_lists.yml delete mode 100644 config/metrics/counts_all/20210216181205_confidential_epics.yml delete mode 100644 config/metrics/counts_all/20210216181206_epics.yml delete mode 100644 config/metrics/counts_all/20210216181210_issues_with_health_status.yml delete mode 100644 config/metrics/counts_all/20210216182203_user_preferences_group_overview_details.yml delete mode 100644 config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml delete mode 100644 config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml create mode 100644 config/metrics/objects_schemas/topology_schema.json create mode 100644 config/metrics/settings/20210216174829_smtp_server.yml rename config/metrics/{license => settings}/20210216175609_version.yml (85%) create mode 100644 config/metrics/settings/20210323120839_topology.yml create mode 100644 config/routes/customers_dot.rb create mode 100644 danger/datateam/Dangerfile create mode 100644 data/whats_new/202104220001_13_11.yml create mode 100644 db/migrate/20201218194311_create_admin_notes.rb create mode 100644 db/migrate/20210106061254_add_unique_index_for_golang_packages.rb create mode 100644 db/migrate/20210219211845_add_version_usage_data_id_to_raw_usage_data.rb create mode 100644 db/migrate/20210223230600_update_rubygems_metadata_metadata.rb create mode 100644 db/migrate/20210224161552_add_jira_issue_transition_automatic_to_jira_tracker_data.rb create mode 100644 db/migrate/20210302025305_add_excluded_urls_and_request_headers_to_dast_site_profiles.rb create mode 100644 db/migrate/20210305031822_create_dast_site_profile_variables.rb create mode 100644 db/migrate/20210305180331_create_ci_unit_tests.rb create mode 100644 db/migrate/20210305182740_add_projects_fk_to_ci_unit_tests.rb create mode 100644 db/migrate/20210305182855_create_ci_unit_test_failures.rb create mode 100644 db/migrate/20210305183904_add_ci_builds_fk_to_ci_unit_test_failures.rb create mode 100644 db/migrate/20210308175224_change_namespace_settings_delayed_project_removal_null.rb create mode 100644 db/migrate/20210308175225_add_lock_delayed_project_removal_to_namespace_settings.rb create mode 100644 db/migrate/20210308175226_add_delayed_project_removal_to_application_settings.rb create mode 100644 db/migrate/20210308175227_add_lock_delayed_project_removal_to_application_settings.rb create mode 100644 db/migrate/20210309160106_add_admin_mode_to_application_setting.rb create mode 100644 db/migrate/20210311022012_add_text_limits_to_dast_site_profiles.rb create mode 100644 db/migrate/20210311120152_add_metrics_to_batched_background_migration_jobs.rb create mode 100644 db/migrate/20210311120153_initialize_conversion_of_events_id_to_bigint.rb create mode 100644 db/migrate/20210311120154_initialize_conversion_of_push_event_payloads_event_id_to_bigint.rb create mode 100644 db/migrate/20210312140029_add_owner_and_id_index_on_active_ci_pipeline_schedules.rb create mode 100644 db/migrate/20210312174321_add_enforced_git_check_to_saml_provider.rb create mode 100644 db/migrate/20210312193532_add_resource_access_token_creation_allowed_to_namespace_settings.rb create mode 100644 db/migrate/20210313045617_add_verification_state_and_started_at_to_snippet_repositories.rb create mode 100644 db/migrate/20210313045845_add_verification_indexes_to_snippet_repositories.rb create mode 100644 db/migrate/20210316094047_add_trial_extension_type_to_gitlab_subscription_histories.rb create mode 100644 db/migrate/20210316094323_add_trial_extension_type_to_gitlab_subscriptions.rb create mode 100644 db/migrate/20210316152500_add_index_ci_stages_on_pipeline_id_and_id.rb create mode 100644 db/migrate/20210317035357_create_dast_profiles_pipelines.rb create mode 100644 db/migrate/20210317100520_create_elastic_index_settings.rb create mode 100644 db/migrate/20210317104301_create_in_product_marketing_emails.rb create mode 100644 db/migrate/20210317105904_add_user_foreign_key_to_in_product_marketing_emails.rb create mode 100644 db/migrate/20210317192943_add_expiry_notification_delivered_to_keys.rb create mode 100644 db/migrate/20210318134427_delete_security_findings_without_uuid.rb create mode 100644 db/migrate/20210322063407_add_dast_profile_id_fk_to_dast_profiles_pipelines.rb create mode 100644 db/migrate/20210322063450_add_ci_pipeline_id_fk_to_dast_profiles_pipelines.rb create mode 100644 db/migrate/20210322182751_add_index_to_keys_on_expires_at_and_expiry_notification_undelivered.rb create mode 100644 db/migrate/20210323064751_add_namespace_traversal_ids_index.rb create mode 100644 db/migrate/20210323155010_populate_dismissal_information_for_vulnerabilities.rb create mode 100644 db/migrate/20210323182846_add_project_status_date_index_to_merge_requests.rb create mode 100644 db/migrate/20210324112439_add_index_mirror_data_on_retry_next_execution_where_status.rb create mode 100644 db/migrate/20210324131727_migrate_elastic_index_settings.rb create mode 100644 db/migrate/20210325092215_add_not_valid_foreign_key_to_group_hooks.rb create mode 100644 db/migrate/20210325113129_validate_foreign_key_on_service_hooks.rb create mode 100644 db/migrate/20210325150837_add_verification_state_to_ci_pipeline_artifact.rb create mode 100644 db/migrate/20210325151758_add_verification_failure_limit_to_ci_pipeline_artifact.rb create mode 100644 db/migrate/20210325152011_add_verification_indexes_to_ci_pipeline_artifacts.rb create mode 100644 db/migrate/20210326035553_add_index_for_project_deployments_with_environment_id_and_updated_at.rb create mode 100644 db/migrate/20210326190903_create_vulnerability_finding_evidences.rb create mode 100644 db/migrate/20210329095548_add_target_project_and_source_branch_index_to_merge_request.rb create mode 100644 db/migrate/20210329191850_add_finding_signature_table.rb create mode 100644 db/migrate/20210329192716_add_composite_index_to_award_emoji.rb create mode 100644 db/migrate/20210330015805_add_cloud_to_licenses.rb create mode 100644 db/migrate/20210331125111_add_default_target_project.rb create mode 100644 db/migrate/20210331145548_add_index_for_last_deployment.rb create mode 100644 db/migrate/20210331180118_remove_deprecated_index_from_award_emoji.rb create mode 100644 db/migrate/20210401134157_add_index_to_pages_deployments.rb create mode 100644 db/migrate/20210401134455_remove_index_mirror_data_on_next_execution_and_retry_count.rb create mode 100644 db/migrate/20210401175134_add_before_expiry_notification_delivered_to_keys.rb create mode 100644 db/migrate/20210401192808_add_index_to_keys_on_expires_at_and_before_expiry_notification_undelivered.rb create mode 100644 db/migrate/20210406063442_create_namespaces_id_parent_id_partial_index.rb create mode 100644 db/migrate/20210406140057_add_total_tuple_count_to_batched_migrations.rb create mode 100644 db/migrate/20210407002511_add_type_to_dast_site_profile.rb create mode 100644 db/migrate/20210409084242_create_index_on_notes_for_cherry_picked_merge_requests.rb create mode 100644 db/migrate/20210411212813_add_clusters_integrations_prometheus.rb create mode 100644 db/migrate/20210412132736_add_instance_url_to_jira_connect_installations.rb create mode 100644 db/migrate/20210412132824_add_text_limit_to_jira_connect_installations_instance_url.rb create mode 100644 db/migrate/20210412142223_add_user_index_on_spam_logs.rb create mode 100644 db/migrate/20210413121101_add_created_at_web_hook_id_index_to_partitioned_web_hook_log.rb create mode 100644 db/migrate/20210413123832_add_index_on_web_hook_id_to_partitioned_web_hook_log.rb create mode 100644 db/migrate/20210414095944_add_index_services_on_project_and_type_where_inherit_null.rb create mode 100644 db/migrate/20210414131600_add_external_pipeline_validation_to_application_setting.rb create mode 100644 db/migrate/20210415142700_add_url_limit_to_pipeline_validation.rb create mode 100644 db/migrate/20210415144538_remove_index_epics_on_group_id_from_epics.rb create mode 100644 db/post_migrate/20210226141517_dedup_issue_metrics.rb create mode 100644 db/post_migrate/20210302150310_schedule_migrate_pages_to_zip_storage.rb create mode 100644 db/post_migrate/20210311045138_set_traversal_ids_for_gitlab_org_group_staging.rb create mode 100644 db/post_migrate/20210311045139_set_traversal_ids_for_gitlab_org_group_com.rb create mode 100644 db/post_migrate/20210311093723_add_partial_index_on_ci_pipelines_by_cancelable_status_and_users.rb create mode 100644 db/post_migrate/20210311120155_backfill_events_id_for_bigint_conversion.rb create mode 100644 db/post_migrate/20210311120156_backfill_push_event_payload_event_id_for_bigint_conversion.rb create mode 100644 db/post_migrate/20210317104032_set_iteration_cadence_automatic_to_false.rb create mode 100644 db/post_migrate/20210317155207_validate_not_null_constraint_on_cluster_token_name.rb create mode 100644 db/post_migrate/20210322115438_validate_not_null_constraint_on_gitlab_subscriptions_namespace_id.rb create mode 100644 db/post_migrate/20210326121537_backfill_cleanup_for_partitioned_web_hook_logs.rb create mode 100644 db/post_migrate/20210328214434_remove_temporary_index_from_vulnerabilities_table.rb create mode 100644 db/post_migrate/20210329102724_add_new_trail_plans.rb create mode 100644 db/post_migrate/20210330091751_remove_records_without_group_from_webhooks_table.rb create mode 100644 db/post_migrate/20210330130420_drop_finding_fingerprint_table.rb create mode 100644 db/post_migrate/20210331105335_drop_non_partitioned_audit_events.rb create mode 100644 db/post_migrate/20210401131948_move_container_registry_enabled_to_project_features2.rb create mode 100644 db/post_migrate/20210402005225_add_source_and_level_index_on_notification_settings.rb create mode 100644 db/post_migrate/20210406144743_backfill_total_tuple_count_for_batched_migrations.rb create mode 100644 db/post_migrate/20210407150240_confirm_support_bot_user.rb create mode 100644 db/post_migrate/20210409185501_index_members_on_user_id_source_id_source_type.rb create mode 100644 db/post_migrate/20210409185531_remove_members_index_on_user_id.rb create mode 100644 db/post_migrate/20210413092922_add_index_to_packages_maven_metadata_path.rb create mode 100644 db/post_migrate/20210413130011_add_partitioned_web_hook_log_fk.rb create mode 100644 db/post_migrate/20210413132500_reschedule_artifact_expiry_backfill_again.rb create mode 100644 db/post_migrate/20210415074645_index_members_on_user_id_access_level_requested_at_is_null.rb create mode 100644 db/schema_migrations/20201218194311 create mode 100644 db/schema_migrations/20210106061254 create mode 100644 db/schema_migrations/20210219211845 create mode 100644 db/schema_migrations/20210223230600 create mode 100644 db/schema_migrations/20210224161552 create mode 100644 db/schema_migrations/20210226141517 create mode 100644 db/schema_migrations/20210302025305 create mode 100644 db/schema_migrations/20210302150310 create mode 100644 db/schema_migrations/20210305031822 create mode 100644 db/schema_migrations/20210305180331 create mode 100644 db/schema_migrations/20210305182740 create mode 100644 db/schema_migrations/20210305182855 create mode 100644 db/schema_migrations/20210305183904 create mode 100644 db/schema_migrations/20210308175224 create mode 100644 db/schema_migrations/20210308175225 create mode 100644 db/schema_migrations/20210308175226 create mode 100644 db/schema_migrations/20210308175227 create mode 100644 db/schema_migrations/20210309160106 create mode 100644 db/schema_migrations/20210311022012 create mode 100644 db/schema_migrations/20210311045138 create mode 100644 db/schema_migrations/20210311045139 create mode 100644 db/schema_migrations/20210311093723 create mode 100644 db/schema_migrations/20210311120152 create mode 100644 db/schema_migrations/20210311120153 create mode 100644 db/schema_migrations/20210311120154 create mode 100644 db/schema_migrations/20210311120155 create mode 100644 db/schema_migrations/20210311120156 create mode 100644 db/schema_migrations/20210312140029 create mode 100644 db/schema_migrations/20210312174321 create mode 100644 db/schema_migrations/20210312193532 create mode 100644 db/schema_migrations/20210313045617 create mode 100644 db/schema_migrations/20210313045845 create mode 100644 db/schema_migrations/20210316094047 create mode 100644 db/schema_migrations/20210316094323 create mode 100644 db/schema_migrations/20210316152500 create mode 100644 db/schema_migrations/20210317035357 create mode 100644 db/schema_migrations/20210317100520 create mode 100644 db/schema_migrations/20210317104032 create mode 100644 db/schema_migrations/20210317104301 create mode 100644 db/schema_migrations/20210317105904 create mode 100644 db/schema_migrations/20210317155207 create mode 100644 db/schema_migrations/20210317192943 create mode 100644 db/schema_migrations/20210318134427 create mode 100644 db/schema_migrations/20210322063407 create mode 100644 db/schema_migrations/20210322063450 create mode 100644 db/schema_migrations/20210322115438 create mode 100644 db/schema_migrations/20210322182751 create mode 100644 db/schema_migrations/20210323064751 create mode 100644 db/schema_migrations/20210323155010 create mode 100644 db/schema_migrations/20210323182846 create mode 100644 db/schema_migrations/20210324112439 create mode 100644 db/schema_migrations/20210324131727 create mode 100644 db/schema_migrations/20210325092215 create mode 100644 db/schema_migrations/20210325113129 create mode 100644 db/schema_migrations/20210325150837 create mode 100644 db/schema_migrations/20210325151758 create mode 100644 db/schema_migrations/20210325152011 create mode 100644 db/schema_migrations/20210326035553 create mode 100644 db/schema_migrations/20210326121537 create mode 100644 db/schema_migrations/20210326190903 create mode 100644 db/schema_migrations/20210328214434 create mode 100644 db/schema_migrations/20210329095548 create mode 100644 db/schema_migrations/20210329102724 create mode 100644 db/schema_migrations/20210329191850 create mode 100644 db/schema_migrations/20210329192716 create mode 100644 db/schema_migrations/20210330015805 create mode 100644 db/schema_migrations/20210330091751 create mode 100644 db/schema_migrations/20210330130420 create mode 100644 db/schema_migrations/20210331105335 create mode 100644 db/schema_migrations/20210331125111 create mode 100644 db/schema_migrations/20210331145548 create mode 100644 db/schema_migrations/20210331180118 create mode 100644 db/schema_migrations/20210401131948 create mode 100644 db/schema_migrations/20210401134157 create mode 100644 db/schema_migrations/20210401134455 create mode 100644 db/schema_migrations/20210401175134 create mode 100644 db/schema_migrations/20210401192808 create mode 100644 db/schema_migrations/20210402005225 create mode 100644 db/schema_migrations/20210406063442 create mode 100644 db/schema_migrations/20210406140057 create mode 100644 db/schema_migrations/20210406144743 create mode 100644 db/schema_migrations/20210407002511 create mode 100644 db/schema_migrations/20210407150240 create mode 100644 db/schema_migrations/20210409084242 create mode 100644 db/schema_migrations/20210409185501 create mode 100644 db/schema_migrations/20210409185531 create mode 100644 db/schema_migrations/20210411212813 create mode 100644 db/schema_migrations/20210412132736 create mode 100644 db/schema_migrations/20210412132824 create mode 100644 db/schema_migrations/20210412142223 create mode 100644 db/schema_migrations/20210413092922 create mode 100644 db/schema_migrations/20210413121101 create mode 100644 db/schema_migrations/20210413123832 create mode 100644 db/schema_migrations/20210413130011 create mode 100644 db/schema_migrations/20210413132500 create mode 100644 db/schema_migrations/20210414095944 create mode 100644 db/schema_migrations/20210414131600 create mode 100644 db/schema_migrations/20210415074645 create mode 100644 db/schema_migrations/20210415142700 create mode 100644 db/schema_migrations/20210415144538 create mode 100644 doc/.vale/gitlab/NonStandardQuotes.yml create mode 100644 doc/administration/clusters/kas.md create mode 100644 doc/administration/geo/replication/remove_geo_site.md create mode 100644 doc/administration/geo/replication/usage.md delete mode 100644 doc/administration/gitaly/img/architecture_v12_4.png create mode 100644 doc/administration/maintenance_mode/img/maintenance_mode_error_message.png delete mode 100644 doc/administration/maintenance_mode/maintenance_mode_error_message.png delete mode 100644 doc/administration/troubleshooting/img/ADFS-configure-NameID.png delete mode 100644 doc/administration/troubleshooting/img/ADFS-configure-assertions.png delete mode 100644 doc/administration/troubleshooting/img/ADFS-determine-token-signing-certificate-fingerprint.png delete mode 100644 doc/administration/troubleshooting/img/ADFS-determine-token-signing-fingerprint-from-shell.png delete mode 100644 doc/administration/troubleshooting/img/ADFS-saml-setup-sso-url.png rename doc/administration/{auth => troubleshooting}/img/okta_admin_panel_v13_9.png (100%) rename doc/administration/{auth => troubleshooting}/img/okta_saml_settings.png (100%) create mode 100644 doc/administration/whats-new.md create mode 100644 doc/api/dora/metrics.md create mode 100644 doc/api/packages/composer.md create mode 100644 doc/api/packages/conan.md create mode 100644 doc/api/packages/go_proxy.md create mode 100644 doc/api/packages/maven.md create mode 100644 doc/api/packages/nuget.md create mode 100644 doc/api/packages/pypi.md create mode 100644 doc/api/packages/rubygems.md create mode 100644 doc/api/usage_data.md delete mode 100644 doc/ci/jobs/img/collapsible_log_v12_6.png create mode 100644 doc/ci/jobs/img/collapsible_log_v13_10.png delete mode 100644 doc/ci/jobs/img/manual_job_variables.png create mode 100644 doc/ci/jobs/img/manual_job_variables_v13_10.png delete mode 100644 doc/ci/pipelines/img/job_artifacts_browser.png delete mode 100644 doc/ci/pipelines/img/job_artifacts_browser_button.png create mode 100644 doc/ci/pipelines/img/job_artifacts_browser_button_v13_11.png create mode 100644 doc/ci/pipelines/img/job_artifacts_browser_v13_11.png delete mode 100644 doc/ci/pipelines/img/job_artifacts_builds_page.png create mode 100644 doc/ci/pipelines/img/job_artifacts_jobs_page_v13_11.png delete mode 100644 doc/ci/pipelines/img/job_artifacts_merge_request.png create mode 100644 doc/ci/pipelines/img/job_artifacts_merge_request_v13_11.png delete mode 100644 doc/ci/pipelines/img/job_artifacts_pipelines_page.png create mode 100644 doc/ci/pipelines/img/job_artifacts_pipelines_page_v13_11.png create mode 100644 doc/ci/pipelines/img/pipelines_v13_11.png create mode 100644 doc/ci/services/gitlab.md delete mode 100644 doc/ci/variables/img/override_value_via_manual_pipeline_output.png delete mode 100644 doc/ci/variables/img/override_variable_manual_pipeline.png delete mode 100644 doc/ci/yaml/img/job_running.png create mode 100644 doc/ci/yaml/img/job_running_v13_10.png create mode 100644 doc/development/avoiding_downtime_in_migrations.md create mode 100644 doc/development/graphql_guide/authorization.md create mode 100644 doc/development/snowplow/index.md delete mode 100644 doc/install/azure/img/azure-add-inbound-sec-rule-http.png delete mode 100644 doc/install/azure/img/azure-add-inbound-sec-rule-ssh.png delete mode 100644 doc/install/azure/img/azure-create-virtual-machine-basics-password.png delete mode 100644 doc/install/azure/img/azure-create-virtual-machine-basics.png delete mode 100644 doc/install/azure/img/azure-create-virtual-machine-deployment.png delete mode 100644 doc/install/azure/img/azure-create-virtual-machine-purchase.png delete mode 100644 doc/install/azure/img/azure-create-virtual-machine-settings.png delete mode 100644 doc/install/azure/img/azure-create-virtual-machine-size.png delete mode 100644 doc/install/azure/img/azure-dashboard-highlight-nsg.png delete mode 100644 doc/install/azure/img/azure-dashboard-running-resources.png delete mode 100644 doc/install/azure/img/azure-dashboard.png delete mode 100644 doc/install/azure/img/azure-inbound-sec-rules-list.png delete mode 100644 doc/install/azure/img/azure-new-gitlab-ce.png delete mode 100644 doc/install/azure/img/azure-new-search-gitlab.png delete mode 100644 doc/install/azure/img/azure-nsg-inbound-sec-rules-add-highlight.png delete mode 100644 doc/install/azure/img/azure-nsg-inbound-sec-rules-highlight.png delete mode 100644 doc/install/azure/img/azure-vm-domain-name.png delete mode 100644 doc/install/azure/img/azure-vm-management-public-ip.png delete mode 100644 doc/install/azure/img/gitlab-admin-area-9.4.0.png delete mode 100644 doc/install/azure/img/gitlab-admin-area.png delete mode 100644 doc/install/azure/img/gitlab-change-password.png delete mode 100644 doc/install/azure/img/gitlab-home.png delete mode 100644 doc/install/azure/img/gitlab-login.png delete mode 100644 doc/install/azure/img/gitlab-new-project.png delete mode 100644 doc/install/azure/img/gitlab-project-home-empty.png delete mode 100644 doc/install/azure/img/gitlab-project-home-instructions.png delete mode 100644 doc/install/azure/img/gitlab-ssh-update-in-progress.png delete mode 100644 doc/integration/img/enabled-oauth-sign-in-sources.png create mode 100644 doc/integration/img/enabled-oauth-sign-in-sources_v13_10.png delete mode 100644 doc/integration/img/jira_dev_panel_gl_setup_1.png delete mode 100644 doc/integration/img/jira_dev_panel_jira_setup_2.png create mode 100644 doc/integration/jira/connect-app.md create mode 100644 doc/integration/jira/development_panel.md create mode 100644 doc/integration/jira/dvcs.md create mode 100644 doc/integration/jira/img/jira-upload-app-success_v13_11.png create mode 100644 doc/integration/jira/img/jira-upload-app_v13_11.png rename doc/{user/project/integrations => integration/jira}/img/jira_added_user_to_group.png (100%) rename doc/{user/project/integrations => integration/jira}/img/jira_create_new_group.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_jira_setup_3.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_jira_setup_4.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_jira_setup_5.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_manual_refresh.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_setup_com_1.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_setup_com_2.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_setup_com_3_v13_9.png (100%) rename doc/integration/{ => jira}/img/jira_dev_panel_setup_com_4_v13_9.png (100%) create mode 100644 doc/integration/jira/img/jira_group_access.png create mode 100644 doc/integration/jira/img/jira_issue_detail_view_v13.10.png rename doc/{user/project/integrations => integration/jira}/img/jira_issue_reference.png (100%) rename doc/{user/project/integrations => integration/jira}/img/jira_merge_request_close.png (100%) rename doc/{user/project/integrations => integration/jira}/img/jira_project_settings.png (100%) rename doc/{user/project/integrations => integration/jira}/img/jira_service_close_issue.png (100%) rename doc/{user/project/integrations/img/jira => integration/jira/img}/open_jira_issues_list_v13.2.png (100%) create mode 100644 doc/integration/jira/index.md create mode 100644 doc/integration/jira/issues.md create mode 100644 doc/integration/jira/jira_cloud_configuration.md create mode 100644 doc/integration/jira/jira_server_configuration.md delete mode 100644 doc/operations/incident_management/img/custom_alert_mapping_v13_10.png create mode 100644 doc/operations/incident_management/img/custom_alert_mapping_v13_11.png create mode 100644 doc/operations/incident_management/img/oncall_schedule_day_grid_v13_10.png create mode 100644 doc/operations/incident_management/img/oncall_schedule_empty_grid_v13_10.png create mode 100644 doc/operations/incident_management/oncall_schedules.md delete mode 100644 doc/user/admin_area/img/abuse_reports_page.png create mode 100644 doc/user/admin_area/img/abuse_reports_page_v13_11.png delete mode 100644 doc/user/admin_area/img/admin_area_settings_button.png create mode 100644 doc/user/admin_area/img/export_permissions_v13_11.png delete mode 100644 doc/user/admin_area/img/license_details_v13_8.png delete mode 100644 doc/user/analytics/img/code_review_analytics_v12_8.png create mode 100644 doc/user/analytics/img/code_review_analytics_v13_11.png delete mode 100644 doc/user/analytics/img/issues_created_per_month_v12_8.png create mode 100644 doc/user/analytics/img/issues_created_per_month_v13_11.png create mode 100644 doc/user/analytics/img/lead_time_chart_v13_11.png create mode 100644 doc/user/application_security/dast/dast_troubleshooting.md delete mode 100644 doc/user/application_security/dast/img/dast_v13_4.png delete mode 100644 doc/user/application_security/dependency_list/img/dependency_list_v12_10.png create mode 100644 doc/user/application_security/dependency_list/img/dependency_list_v13_11.png delete mode 100644 doc/user/application_security/img/adding_a_dismissal_reason_v13_4.png delete mode 100644 doc/user/application_security/img/interacting_with_vulnerability_v13_3.png delete mode 100644 doc/user/application_security/img/multi_select_v12_9.png delete mode 100644 doc/user/application_security/img/vulnerability_related_issues_text_box_tags_v13_2.gif create mode 100644 doc/user/application_security/policies/index.md create mode 100644 doc/user/application_security/security_dashboard/img/project_security_dashboard_chart_v13_11.png delete mode 100644 doc/user/application_security/security_dashboard/img/project_security_dashboard_chart_v13_6.png create mode 100644 doc/user/application_security/threat_monitoring/img/threat_monitoring_policy_alert_list_v13_11.png delete mode 100644 doc/user/application_security/threat_monitoring/img/threat_monitoring_policy_alert_list_v13_9.png delete mode 100644 doc/user/application_security/vulnerabilities/img/vulnerability_page_merge_request_button_v13_1.png rename doc/user/application_security/vulnerability_report/img/{project_security_dashboard_status_change_v13_9.png => project_security_dashboard_status_change_v13_10.png} (100%) create mode 100644 doc/user/clusters/integrations.md create mode 100644 doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v13_11.png delete mode 100644 doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v13_6.png create mode 100644 doc/user/discussions/img/mr_review_new_comment_v13_11.png delete mode 100644 doc/user/discussions/img/review_preview.png create mode 100644 doc/user/discussions/img/review_preview_v13_11.png create mode 100644 doc/user/group/devops_adoption/img/group_devops_adoption_v13_11.png create mode 100644 doc/user/group/devops_adoption/index.md delete mode 100644 doc/user/group/epics/img/epics_search.png create mode 100644 doc/user/group/epics/img/epics_search_v13_11.png delete mode 100644 doc/user/group/insights/img/insights_example_stacked_bar_chart.png create mode 100644 doc/user/group/insights/img/insights_example_stacked_bar_chart_v13_11.png delete mode 100644 doc/user/group/insights/img/insights_sidebar_link_v12_8.png create mode 100644 doc/user/group/roadmap/img/roadmap_filters_v13_11.png delete mode 100644 doc/user/group/roadmap/img/roadmap_filters_v13_8.png delete mode 100644 doc/user/group/saml_sso/img/scim_name_identifier_mapping.png delete mode 100644 doc/user/group/saml_sso/img/scim_provisioning_status.png create mode 100644 doc/user/group/value_stream_analytics/img/vsa_path_nav_v13_11.png delete mode 100644 doc/user/img/new_project_snippet_from_project_v12_10.png create mode 100644 doc/user/img/snippet_intro_v13_11.png create mode 100644 doc/user/img/snippet_tooltip_v13_10.png create mode 100644 doc/user/packages/rubygems_registry/index.md create mode 100644 doc/user/project/img/issue_board_iteration_lists_v13_10.png create mode 100644 doc/user/project/img/issue_boards_blocked_icon_v13_10.png delete mode 100644 doc/user/project/img/issue_boards_blocked_icon_v13_6.png delete mode 100644 doc/user/project/img/project_overview_badges.png create mode 100644 doc/user/project/img/project_overview_badges_v13_10.png delete mode 100644 doc/user/project/img/project_repository_settings.png create mode 100644 doc/user/project/integrations/asana.md create mode 100644 doc/user/project/integrations/img/emails_on_push_service_v13_11.png delete mode 100644 doc/user/project/integrations/img/github_configuration.png delete mode 100644 doc/user/project/integrations/img/jira_add_user_to_group.png delete mode 100644 doc/user/project/integrations/img/jira_api_token.png delete mode 100644 doc/user/project/integrations/img/jira_api_token_menu.png delete mode 100644 doc/user/project/integrations/img/jira_create_new_user.png delete mode 100644 doc/user/project/integrations/img/jira_group_access.png delete mode 100644 doc/user/project/integrations/img/jira_user_management_link.png delete mode 100644 doc/user/project/integrations/img/mattermost_configuration_v2.png delete mode 100644 doc/user/project/integrations/img/microsoft_teams_configuration.png delete mode 100644 doc/user/project/integrations/img/redmine_configuration.png delete mode 100644 doc/user/project/issues/img/issue_health_status_dropdown_v12_10.png delete mode 100644 doc/user/project/issues/img/issues_main_view.png delete mode 100644 doc/user/project/issues/img/project_issues_list_view.png create mode 100644 doc/user/project/merge_requests/img/cherry_pick_into_project_v13_11.png delete mode 100644 doc/user/project/merge_requests/img/code_quality.png create mode 100644 doc/user/project/merge_requests/img/code_quality_mr_diff_report_v13_11.png create mode 100644 doc/user/project/merge_requests/img/code_quality_report_13_11.png create mode 100644 doc/user/project/merge_requests/img/code_quality_widget_13_11.png create mode 100644 doc/user/project/merge_requests/img/commit_nav_v13_11.png delete mode 100644 doc/user/project/merge_requests/img/commit_nav_v13_4.png delete mode 100644 doc/user/project/merge_requests/img/merge_request_tab_position_v12_6.png create mode 100644 doc/user/project/merge_requests/img/merge_request_tab_position_v13_11.png create mode 100644 doc/user/project/releases/img/deploy_freeze_v13_10.png delete mode 100644 doc/user/project/releases/img/deploy_freeze_v13_2.png create mode 100644 doc/user/project/repository/branches/default.md delete mode 100644 doc/user/project/repository/img/file_blame_button_v12_6.png delete mode 100644 doc/user/project/repository/img/file_finder_find_button_v12_10.png delete mode 100644 doc/user/project/repository/img/file_history_button_v12_6.png create mode 100644 doc/user/project/repository/img/fork_form_v13_10.png create mode 100644 doc/user/project/repository/img/forking_workflow_choose_namespace_v13_10.png delete mode 100644 doc/user/project/repository/img/forking_workflow_fork_button.png create mode 100644 doc/user/project/repository/img/forking_workflow_fork_button_v13_10.png create mode 100644 doc/user/project/repository/img/web_editor_line_link_v13_10.png delete mode 100644 doc/user/project/settings/img/general_settings.png create mode 100644 doc/user/project/settings/img/general_settings_v13_11.png delete mode 100644 doc/user/project/settings/img/merge_requests_settings.png delete mode 100644 doc/user/project/web_ide/img/commit_changes_v12_9.png create mode 100644 doc/user/project/web_ide/img/commit_changes_v13_11.png delete mode 100644 doc/user/project/wiki/img/wiki_create_home_page.png delete mode 100644 doc/user/project/wiki/img/wiki_create_new_page.png delete mode 100644 doc/user/search/img/dashboard_links.png create mode 100644 doc/user/search/img/dashboard_links_v13_11.png delete mode 100644 doc/user/search/img/project_search_dropdown.png create mode 100644 lib/api/entities/clusters/agent.rb create mode 100644 lib/api/entities/namespace_existence.rb create mode 100644 lib/api/entities/user_preferences.rb create mode 100644 lib/api/helpers/caching.rb create mode 100644 lib/api/helpers/variables_helpers.rb create mode 100644 lib/api/usage_data_non_sql_metrics.rb create mode 100644 lib/api/usage_data_queries.rb delete mode 100644 lib/banzai/filter/abstract_reference_filter.rb delete mode 100644 lib/banzai/filter/alert_reference_filter.rb delete mode 100644 lib/banzai/filter/commit_range_reference_filter.rb delete mode 100644 lib/banzai/filter/commit_reference_filter.rb delete mode 100644 lib/banzai/filter/design_reference_filter.rb delete mode 100644 lib/banzai/filter/epic_reference_filter.rb delete mode 100644 lib/banzai/filter/external_issue_reference_filter.rb delete mode 100644 lib/banzai/filter/feature_flag_reference_filter.rb delete mode 100644 lib/banzai/filter/issuable_reference_filter.rb delete mode 100644 lib/banzai/filter/issue_reference_filter.rb delete mode 100644 lib/banzai/filter/iteration_reference_filter.rb delete mode 100644 lib/banzai/filter/label_reference_filter.rb delete mode 100644 lib/banzai/filter/merge_request_reference_filter.rb delete mode 100644 lib/banzai/filter/milestone_reference_filter.rb delete mode 100644 lib/banzai/filter/project_reference_filter.rb delete mode 100644 lib/banzai/filter/reference_filter.rb create mode 100644 lib/banzai/filter/references/abstract_reference_filter.rb create mode 100644 lib/banzai/filter/references/alert_reference_filter.rb create mode 100644 lib/banzai/filter/references/commit_range_reference_filter.rb create mode 100644 lib/banzai/filter/references/commit_reference_filter.rb create mode 100644 lib/banzai/filter/references/design_reference_filter.rb create mode 100644 lib/banzai/filter/references/epic_reference_filter.rb create mode 100644 lib/banzai/filter/references/external_issue_reference_filter.rb create mode 100644 lib/banzai/filter/references/feature_flag_reference_filter.rb create mode 100644 lib/banzai/filter/references/issuable_reference_filter.rb create mode 100644 lib/banzai/filter/references/issue_reference_filter.rb create mode 100644 lib/banzai/filter/references/iteration_reference_filter.rb create mode 100644 lib/banzai/filter/references/label_reference_filter.rb create mode 100644 lib/banzai/filter/references/merge_request_reference_filter.rb create mode 100644 lib/banzai/filter/references/milestone_reference_filter.rb create mode 100644 lib/banzai/filter/references/project_reference_filter.rb create mode 100644 lib/banzai/filter/references/reference_filter.rb create mode 100644 lib/banzai/filter/references/snippet_reference_filter.rb create mode 100644 lib/banzai/filter/references/user_reference_filter.rb create mode 100644 lib/banzai/filter/references/vulnerability_reference_filter.rb delete mode 100644 lib/banzai/filter/snippet_reference_filter.rb delete mode 100644 lib/banzai/filter/user_reference_filter.rb delete mode 100644 lib/banzai/filter/vulnerability_reference_filter.rb create mode 100644 lib/bulk_imports/common/extractors/rest_extractor.rb create mode 100644 lib/bulk_imports/groups/pipelines/badges_pipeline.rb create mode 100644 lib/bulk_imports/groups/pipelines/entity_finisher.rb create mode 100644 lib/bulk_imports/groups/rest/get_badges_query.rb delete mode 100644 lib/bulk_imports/importers/group_importer.rb create mode 100644 lib/feature/active_support_cache_store_adapter.rb create mode 100644 lib/generators/gitlab/usage_metric_definition/redis_hll_generator.rb create mode 100644 lib/gitlab/background_migration/migrate_pages_to_zip_storage.rb create mode 100644 lib/gitlab/background_migration/user_mentions/lib/banzai/reference_parser/isolated_mentioned_project_parser.rb create mode 100644 lib/gitlab/background_migration/user_mentions/lib/banzai/reference_parser/isolated_mentioned_user_parser.rb create mode 100644 lib/gitlab/background_migration/user_mentions/lib/gitlab/isolated_visibility_level.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/concerns/isolated_feature_gate.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/project.rb create mode 100644 lib/gitlab/background_migration/user_mentions/models/user.rb create mode 100644 lib/gitlab/bullet.rb create mode 100644 lib/gitlab/bullet/exclusions.rb create mode 100644 lib/gitlab/ci/pipeline/seed/context.rb create mode 100644 lib/gitlab/ci/templates/Hello-World.gitlab-ci.yml create mode 100644 lib/gitlab/ci/templates/Indeni.Cloudrail.gitlab-ci-.yml create mode 100644 lib/gitlab/ci/templates/Security/API-Fuzzing.latest.gitlab-ci.yml create mode 100644 lib/gitlab/database/as_with_materialized.rb create mode 100644 lib/gitlab/database/background_migration/batch_metrics.rb create mode 100644 lib/gitlab/database/background_migration/batched_migration_runner.rb delete mode 100644 lib/gitlab/database/background_migration/scheduler.rb create mode 100644 lib/gitlab/database/loose_index_scan_distinct_count.rb create mode 100644 lib/gitlab/database/pg_class.rb create mode 100644 lib/gitlab/database/unidirectional_copy_trigger.rb delete mode 100644 lib/gitlab/downtime_check.rb delete mode 100644 lib/gitlab/downtime_check/message.rb delete mode 100644 lib/gitlab/gitaly_client/wiki_file.rb delete mode 100644 lib/gitlab/graphql/authorize.rb delete mode 100644 lib/gitlab/graphql/authorize/authorize_field_service.rb create mode 100644 lib/gitlab/graphql/authorize/connection_filter_extension.rb delete mode 100644 lib/gitlab/graphql/authorize/instrumentation.rb create mode 100644 lib/gitlab/graphql/deprecation.rb create mode 100644 lib/gitlab/graphql/negatable_arguments.rb create mode 100644 lib/gitlab/hook_data/user_builder.rb create mode 100644 lib/gitlab/middleware/rack_multipart_tempfile_factory.rb create mode 100644 lib/gitlab/pages/migration_helper.rb create mode 100644 lib/gitlab/pages/stores/local_store.rb create mode 100644 lib/gitlab/sidekiq_config/worker_matcher.rb create mode 100644 lib/gitlab/usage/metrics/names_suggestions/relation_parsers/joins.rb delete mode 100644 lib/gitlab/usage_data_counters/aggregated_metrics/code_review.yml delete mode 100644 lib/gitlab/usage_data_counters/aggregated_metrics/common.yml create mode 100644 lib/gitlab/usage_data_counters/known_events/epic_events.yml create mode 100644 lib/gitlab/usage_data_non_sql_metrics.rb delete mode 100644 lib/tasks/brakeman.rake delete mode 100644 lib/tasks/downtime_check.rake create mode 100644 lib/tasks/gitlab/docs/redirect.rake delete mode 100644 lib/tasks/gitlab/test.rake create mode 100644 locale/ta_IN/gitlab.po delete mode 100644 public/-/emojis/2/100.png delete mode 100644 public/-/emojis/2/1234.png delete mode 100644 public/-/emojis/2/1f3cf.png delete mode 100644 public/-/emojis/2/1f468-1f469-1f466.png delete mode 100644 public/-/emojis/2/1f469-2764-1f468.png delete mode 100644 public/-/emojis/2/1f5fe.png delete mode 100644 public/-/emojis/2/1f983.png delete mode 100644 public/-/emojis/2/26f9-1f3fb.png delete mode 100644 public/-/emojis/2/26f9-1f3fc.png delete mode 100644 public/-/emojis/2/26f9-1f3fd.png delete mode 100644 public/-/emojis/2/26f9-1f3fe.png delete mode 100644 public/-/emojis/2/26f9-1f3ff.png delete mode 100644 public/-/emojis/2/8ball.png delete mode 100644 public/-/emojis/2/a.png delete mode 100644 public/-/emojis/2/ab.png delete mode 100644 public/-/emojis/2/abacus.png delete mode 100644 public/-/emojis/2/abc.png delete mode 100644 public/-/emojis/2/abcd.png delete mode 100644 public/-/emojis/2/accept.png delete mode 100644 public/-/emojis/2/adult.png delete mode 100644 public/-/emojis/2/adult_tone1.png delete mode 100644 public/-/emojis/2/adult_tone2.png delete mode 100644 public/-/emojis/2/adult_tone3.png delete mode 100644 public/-/emojis/2/adult_tone4.png delete mode 100644 public/-/emojis/2/adult_tone5.png delete mode 100644 public/-/emojis/2/aerial_tramway.png delete mode 100644 public/-/emojis/2/airplane.png delete mode 100644 public/-/emojis/2/airplane_arriving.png delete mode 100644 public/-/emojis/2/airplane_departure.png delete mode 100644 public/-/emojis/2/airplane_small.png delete mode 100644 public/-/emojis/2/alarm_clock.png delete mode 100644 public/-/emojis/2/alembic.png delete mode 100644 public/-/emojis/2/alien.png delete mode 100644 public/-/emojis/2/ambulance.png delete mode 100644 public/-/emojis/2/amphora.png delete mode 100644 public/-/emojis/2/anchor.png delete mode 100644 public/-/emojis/2/angel.png delete mode 100644 public/-/emojis/2/angel_tone1.png delete mode 100644 public/-/emojis/2/angel_tone2.png delete mode 100644 public/-/emojis/2/angel_tone3.png delete mode 100644 public/-/emojis/2/angel_tone4.png delete mode 100644 public/-/emojis/2/angel_tone5.png delete mode 100644 public/-/emojis/2/anger.png delete mode 100644 public/-/emojis/2/anger_right.png delete mode 100644 public/-/emojis/2/angry.png delete mode 100644 public/-/emojis/2/anguished.png delete mode 100644 public/-/emojis/2/ant.png delete mode 100644 public/-/emojis/2/apple.png delete mode 100644 public/-/emojis/2/aquarius.png delete mode 100644 public/-/emojis/2/aries.png delete mode 100644 public/-/emojis/2/arrow_backward.png delete mode 100644 public/-/emojis/2/arrow_double_down.png delete mode 100644 public/-/emojis/2/arrow_double_up.png delete mode 100644 public/-/emojis/2/arrow_down.png delete mode 100644 public/-/emojis/2/arrow_down_small.png delete mode 100644 public/-/emojis/2/arrow_forward.png delete mode 100644 public/-/emojis/2/arrow_heading_down.png delete mode 100644 public/-/emojis/2/arrow_heading_up.png delete mode 100644 public/-/emojis/2/arrow_left.png delete mode 100644 public/-/emojis/2/arrow_lower_left.png delete mode 100644 public/-/emojis/2/arrow_lower_right.png delete mode 100644 public/-/emojis/2/arrow_right.png delete mode 100644 public/-/emojis/2/arrow_right_hook.png delete mode 100644 public/-/emojis/2/arrow_up.png delete mode 100644 public/-/emojis/2/arrow_up_down.png delete mode 100644 public/-/emojis/2/arrow_up_small.png delete mode 100644 public/-/emojis/2/arrow_upper_left.png delete mode 100644 public/-/emojis/2/arrow_upper_right.png delete mode 100644 public/-/emojis/2/arrows_clockwise.png delete mode 100644 public/-/emojis/2/arrows_counterclockwise.png delete mode 100644 public/-/emojis/2/art.png delete mode 100644 public/-/emojis/2/articulated_lorry.png delete mode 100644 public/-/emojis/2/asterisk.png delete mode 100644 public/-/emojis/2/asterisk_symbol.png delete mode 100644 public/-/emojis/2/astonished.png delete mode 100644 public/-/emojis/2/athletic_shoe.png delete mode 100644 public/-/emojis/2/atm.png delete mode 100644 public/-/emojis/2/atom.png delete mode 100644 public/-/emojis/2/avocado.png delete mode 100644 public/-/emojis/2/b.png delete mode 100644 public/-/emojis/2/baby.png delete mode 100644 public/-/emojis/2/baby_bottle.png delete mode 100644 public/-/emojis/2/baby_chick.png delete mode 100644 public/-/emojis/2/baby_symbol.png delete mode 100644 public/-/emojis/2/baby_tone1.png delete mode 100644 public/-/emojis/2/baby_tone2.png delete mode 100644 public/-/emojis/2/baby_tone3.png delete mode 100644 public/-/emojis/2/baby_tone4.png delete mode 100644 public/-/emojis/2/baby_tone5.png delete mode 100644 public/-/emojis/2/back.png delete mode 100644 public/-/emojis/2/bacon.png delete mode 100644 public/-/emojis/2/badger.png delete mode 100644 public/-/emojis/2/badminton.png delete mode 100644 public/-/emojis/2/bagel.png delete mode 100644 public/-/emojis/2/baggage_claim.png delete mode 100644 public/-/emojis/2/balance_scale.png delete mode 100644 public/-/emojis/2/bald.png delete mode 100644 public/-/emojis/2/balloon.png delete mode 100644 public/-/emojis/2/ballot_box.png delete mode 100644 public/-/emojis/2/ballot_box_with_check.png delete mode 100644 public/-/emojis/2/bamboo.png delete mode 100644 public/-/emojis/2/banana.png delete mode 100644 public/-/emojis/2/bangbang.png delete mode 100644 public/-/emojis/2/bank.png delete mode 100644 public/-/emojis/2/bar_chart.png delete mode 100644 public/-/emojis/2/barber.png delete mode 100644 public/-/emojis/2/baseball.png delete mode 100644 public/-/emojis/2/basket.png delete mode 100644 public/-/emojis/2/basketball.png delete mode 100644 public/-/emojis/2/basketball_man.png delete mode 100644 public/-/emojis/2/bat.png delete mode 100644 public/-/emojis/2/bath.png delete mode 100644 public/-/emojis/2/bath_tone1.png delete mode 100644 public/-/emojis/2/bath_tone2.png delete mode 100644 public/-/emojis/2/bath_tone3.png delete mode 100644 public/-/emojis/2/bath_tone4.png delete mode 100644 public/-/emojis/2/bath_tone5.png delete mode 100644 public/-/emojis/2/bathtub.png delete mode 100644 public/-/emojis/2/battery.png delete mode 100644 public/-/emojis/2/beach.png delete mode 100644 public/-/emojis/2/beach_umbrella.png delete mode 100644 public/-/emojis/2/bear.png delete mode 100644 public/-/emojis/2/bearded_person.png delete mode 100644 public/-/emojis/2/bearded_person_tone1.png delete mode 100644 public/-/emojis/2/bearded_person_tone2.png delete mode 100644 public/-/emojis/2/bearded_person_tone3.png delete mode 100644 public/-/emojis/2/bearded_person_tone4.png delete mode 100644 public/-/emojis/2/bearded_person_tone5.png delete mode 100644 public/-/emojis/2/bed.png delete mode 100644 public/-/emojis/2/bee.png delete mode 100644 public/-/emojis/2/beer.png delete mode 100644 public/-/emojis/2/beers.png delete mode 100644 public/-/emojis/2/beetle.png delete mode 100644 public/-/emojis/2/beginner.png delete mode 100644 public/-/emojis/2/bell.png delete mode 100644 public/-/emojis/2/bellhop.png delete mode 100644 public/-/emojis/2/bento.png delete mode 100644 public/-/emojis/2/bicyclist.png delete mode 100644 public/-/emojis/2/bicyclist_tone1.png delete mode 100644 public/-/emojis/2/bicyclist_tone2.png delete mode 100644 public/-/emojis/2/bicyclist_tone3.png delete mode 100644 public/-/emojis/2/bicyclist_tone4.png delete mode 100644 public/-/emojis/2/bicyclist_tone5.png delete mode 100644 public/-/emojis/2/bike.png delete mode 100644 public/-/emojis/2/bikini.png delete mode 100644 public/-/emojis/2/billed_cap.png delete mode 100644 public/-/emojis/2/biohazard.png delete mode 100644 public/-/emojis/2/bird.png delete mode 100644 public/-/emojis/2/birthday.png delete mode 100644 public/-/emojis/2/black_circle.png delete mode 100644 public/-/emojis/2/black_heart.png delete mode 100644 public/-/emojis/2/black_joker.png delete mode 100644 public/-/emojis/2/black_large_square.png delete mode 100644 public/-/emojis/2/black_medium_small_square.png delete mode 100644 public/-/emojis/2/black_medium_square.png delete mode 100644 public/-/emojis/2/black_nib.png delete mode 100644 public/-/emojis/2/black_small_square.png delete mode 100644 public/-/emojis/2/black_square_button.png delete mode 100644 public/-/emojis/2/blond-haired_man.png delete mode 100644 public/-/emojis/2/blond-haired_man_tone1.png delete mode 100644 public/-/emojis/2/blond-haired_man_tone2.png delete mode 100644 public/-/emojis/2/blond-haired_man_tone3.png delete mode 100644 public/-/emojis/2/blond-haired_man_tone4.png delete mode 100644 public/-/emojis/2/blond-haired_man_tone5.png delete mode 100644 public/-/emojis/2/blond-haired_woman.png delete mode 100644 public/-/emojis/2/blond-haired_woman_tone1.png delete mode 100644 public/-/emojis/2/blond-haired_woman_tone2.png delete mode 100644 public/-/emojis/2/blond-haired_woman_tone3.png delete mode 100644 public/-/emojis/2/blond-haired_woman_tone4.png delete mode 100644 public/-/emojis/2/blond-haired_woman_tone5.png delete mode 100644 public/-/emojis/2/blossom.png delete mode 100644 public/-/emojis/2/blowfish.png delete mode 100644 public/-/emojis/2/blue_book.png delete mode 100644 public/-/emojis/2/blue_car.png delete mode 100644 public/-/emojis/2/blue_circle.png delete mode 100644 public/-/emojis/2/blue_heart.png delete mode 100644 public/-/emojis/2/blush.png delete mode 100644 public/-/emojis/2/boar.png delete mode 100644 public/-/emojis/2/boat.png delete mode 100644 public/-/emojis/2/bomb.png delete mode 100644 public/-/emojis/2/bone.png delete mode 100644 public/-/emojis/2/book.png delete mode 100644 public/-/emojis/2/bookmark.png delete mode 100644 public/-/emojis/2/bookmark_tabs.png delete mode 100644 public/-/emojis/2/books.png delete mode 100644 public/-/emojis/2/boom.png delete mode 100644 public/-/emojis/2/boot.png delete mode 100644 public/-/emojis/2/bouquet.png delete mode 100644 public/-/emojis/2/bow.png delete mode 100644 public/-/emojis/2/bow_and_arrow.png delete mode 100644 public/-/emojis/2/bow_tone1.png delete mode 100644 public/-/emojis/2/bow_tone2.png delete mode 100644 public/-/emojis/2/bow_tone3.png delete mode 100644 public/-/emojis/2/bow_tone4.png delete mode 100644 public/-/emojis/2/bow_tone5.png delete mode 100644 public/-/emojis/2/bowl_with_spoon.png delete mode 100644 public/-/emojis/2/bowling.png delete mode 100644 public/-/emojis/2/boxing_glove.png delete mode 100644 public/-/emojis/2/boy.png delete mode 100644 public/-/emojis/2/boy_tone1.png delete mode 100644 public/-/emojis/2/boy_tone2.png delete mode 100644 public/-/emojis/2/boy_tone3.png delete mode 100644 public/-/emojis/2/boy_tone4.png delete mode 100644 public/-/emojis/2/boy_tone5.png delete mode 100644 public/-/emojis/2/brain.png delete mode 100644 public/-/emojis/2/bread.png delete mode 100644 public/-/emojis/2/breast_feeding.png delete mode 100644 public/-/emojis/2/breast_feeding_tone1.png delete mode 100644 public/-/emojis/2/breast_feeding_tone2.png delete mode 100644 public/-/emojis/2/breast_feeding_tone3.png delete mode 100644 public/-/emojis/2/breast_feeding_tone4.png delete mode 100644 public/-/emojis/2/breast_feeding_tone5.png delete mode 100644 public/-/emojis/2/bricks.png delete mode 100644 public/-/emojis/2/bride_with_veil.png delete mode 100644 public/-/emojis/2/bride_with_veil_tone1.png delete mode 100644 public/-/emojis/2/bride_with_veil_tone2.png delete mode 100644 public/-/emojis/2/bride_with_veil_tone3.png delete mode 100644 public/-/emojis/2/bride_with_veil_tone4.png delete mode 100644 public/-/emojis/2/bride_with_veil_tone5.png delete mode 100644 public/-/emojis/2/bridge_at_night.png delete mode 100644 public/-/emojis/2/briefcase.png delete mode 100644 public/-/emojis/2/broccoli.png delete mode 100644 public/-/emojis/2/broken_heart.png delete mode 100644 public/-/emojis/2/broom.png delete mode 100644 public/-/emojis/2/bug.png delete mode 100644 public/-/emojis/2/bulb.png delete mode 100644 public/-/emojis/2/bullettrain_front.png delete mode 100644 public/-/emojis/2/bullettrain_side.png delete mode 100644 public/-/emojis/2/burrito.png delete mode 100644 public/-/emojis/2/bus.png delete mode 100644 public/-/emojis/2/busstop.png delete mode 100644 public/-/emojis/2/bust_in_silhouette.png delete mode 100644 public/-/emojis/2/busts_in_silhouette.png delete mode 100644 public/-/emojis/2/butterfly.png delete mode 100644 public/-/emojis/2/cactus.png delete mode 100644 public/-/emojis/2/cake.png delete mode 100644 public/-/emojis/2/calendar.png delete mode 100644 public/-/emojis/2/calendar_spiral.png delete mode 100644 public/-/emojis/2/call_me.png delete mode 100644 public/-/emojis/2/call_me_tone1.png delete mode 100644 public/-/emojis/2/call_me_tone2.png delete mode 100644 public/-/emojis/2/call_me_tone3.png delete mode 100644 public/-/emojis/2/call_me_tone4.png delete mode 100644 public/-/emojis/2/call_me_tone5.png delete mode 100644 public/-/emojis/2/calling.png delete mode 100644 public/-/emojis/2/camel.png delete mode 100644 public/-/emojis/2/camera.png delete mode 100644 public/-/emojis/2/camera_with_flash.png delete mode 100644 public/-/emojis/2/camping.png delete mode 100644 public/-/emojis/2/cancer.png delete mode 100644 public/-/emojis/2/candle.png delete mode 100644 public/-/emojis/2/candy.png delete mode 100644 public/-/emojis/2/canned_food.png delete mode 100644 public/-/emojis/2/canoe.png delete mode 100644 public/-/emojis/2/capital_abcd.png delete mode 100644 public/-/emojis/2/capricorn.png delete mode 100644 public/-/emojis/2/card_box.png delete mode 100644 public/-/emojis/2/card_index.png delete mode 100644 public/-/emojis/2/carousel_horse.png delete mode 100644 public/-/emojis/2/carrot.png delete mode 100644 public/-/emojis/2/cartwheel.png delete mode 100644 public/-/emojis/2/cartwheel_tone1.png delete mode 100644 public/-/emojis/2/cartwheel_tone2.png delete mode 100644 public/-/emojis/2/cartwheel_tone3.png delete mode 100644 public/-/emojis/2/cartwheel_tone4.png delete mode 100644 public/-/emojis/2/cartwheel_tone5.png delete mode 100644 public/-/emojis/2/cat.png delete mode 100644 public/-/emojis/2/cat2.png delete mode 100644 public/-/emojis/2/cd.png delete mode 100644 public/-/emojis/2/chains.png delete mode 100644 public/-/emojis/2/champagne.png delete mode 100644 public/-/emojis/2/champagne_glass.png delete mode 100644 public/-/emojis/2/chart.png delete mode 100644 public/-/emojis/2/chart_with_downwards_trend.png delete mode 100644 public/-/emojis/2/chart_with_upwards_trend.png delete mode 100644 public/-/emojis/2/checkered_flag.png delete mode 100644 public/-/emojis/2/cheese.png delete mode 100644 public/-/emojis/2/cherries.png delete mode 100644 public/-/emojis/2/cherry_blossom.png delete mode 100644 public/-/emojis/2/chess_pawn.png delete mode 100644 public/-/emojis/2/chestnut.png delete mode 100644 public/-/emojis/2/chicken.png delete mode 100644 public/-/emojis/2/child.png delete mode 100644 public/-/emojis/2/child_tone1.png delete mode 100644 public/-/emojis/2/child_tone2.png delete mode 100644 public/-/emojis/2/child_tone3.png delete mode 100644 public/-/emojis/2/child_tone4.png delete mode 100644 public/-/emojis/2/child_tone5.png delete mode 100644 public/-/emojis/2/children_crossing.png delete mode 100644 public/-/emojis/2/chipmunk.png delete mode 100644 public/-/emojis/2/chocolate_bar.png delete mode 100644 public/-/emojis/2/chopsticks.png delete mode 100644 public/-/emojis/2/christmas_tree.png delete mode 100644 public/-/emojis/2/church.png delete mode 100644 public/-/emojis/2/cinema.png delete mode 100644 public/-/emojis/2/circus_tent.png delete mode 100644 public/-/emojis/2/city_dusk.png delete mode 100644 public/-/emojis/2/city_sunset.png delete mode 100644 public/-/emojis/2/cityscape.png delete mode 100644 public/-/emojis/2/cl.png delete mode 100644 public/-/emojis/2/clap.png delete mode 100644 public/-/emojis/2/clap_tone1.png delete mode 100644 public/-/emojis/2/clap_tone2.png delete mode 100644 public/-/emojis/2/clap_tone3.png delete mode 100644 public/-/emojis/2/clap_tone4.png delete mode 100644 public/-/emojis/2/clap_tone5.png delete mode 100644 public/-/emojis/2/clapper.png delete mode 100644 public/-/emojis/2/classical_building.png delete mode 100644 public/-/emojis/2/clipboard.png delete mode 100644 public/-/emojis/2/clock.png delete mode 100644 public/-/emojis/2/clock1.png delete mode 100644 public/-/emojis/2/clock10.png delete mode 100644 public/-/emojis/2/clock1030.png delete mode 100644 public/-/emojis/2/clock11.png delete mode 100644 public/-/emojis/2/clock1130.png delete mode 100644 public/-/emojis/2/clock12.png delete mode 100644 public/-/emojis/2/clock1230.png delete mode 100644 public/-/emojis/2/clock130.png delete mode 100644 public/-/emojis/2/clock2.png delete mode 100644 public/-/emojis/2/clock230.png delete mode 100644 public/-/emojis/2/clock3.png delete mode 100644 public/-/emojis/2/clock330.png delete mode 100644 public/-/emojis/2/clock4.png delete mode 100644 public/-/emojis/2/clock430.png delete mode 100644 public/-/emojis/2/clock5.png delete mode 100644 public/-/emojis/2/clock530.png delete mode 100644 public/-/emojis/2/clock6.png delete mode 100644 public/-/emojis/2/clock630.png delete mode 100644 public/-/emojis/2/clock7.png delete mode 100644 public/-/emojis/2/clock730.png delete mode 100644 public/-/emojis/2/clock8.png delete mode 100644 public/-/emojis/2/clock830.png delete mode 100644 public/-/emojis/2/clock9.png delete mode 100644 public/-/emojis/2/clock930.png delete mode 100644 public/-/emojis/2/closed_book.png delete mode 100644 public/-/emojis/2/closed_lock_with_key.png delete mode 100644 public/-/emojis/2/closed_umbrella.png delete mode 100644 public/-/emojis/2/cloud.png delete mode 100644 public/-/emojis/2/cloud_lightning.png delete mode 100644 public/-/emojis/2/cloud_rain.png delete mode 100644 public/-/emojis/2/cloud_snow.png delete mode 100644 public/-/emojis/2/cloud_tornado.png delete mode 100644 public/-/emojis/2/clown.png delete mode 100644 public/-/emojis/2/clubs.png delete mode 100644 public/-/emojis/2/coat.png delete mode 100644 public/-/emojis/2/cocktail.png delete mode 100644 public/-/emojis/2/coconut.png delete mode 100644 public/-/emojis/2/coffee.png delete mode 100644 public/-/emojis/2/coffin.png delete mode 100644 public/-/emojis/2/cold_face.png delete mode 100644 public/-/emojis/2/cold_sweat.png delete mode 100644 public/-/emojis/2/comet.png delete mode 100644 public/-/emojis/2/compass.png delete mode 100644 public/-/emojis/2/compression.png delete mode 100644 public/-/emojis/2/computer.png delete mode 100644 public/-/emojis/2/confetti_ball.png delete mode 100644 public/-/emojis/2/confounded.png delete mode 100644 public/-/emojis/2/confused.png delete mode 100644 public/-/emojis/2/congratulations.png delete mode 100644 public/-/emojis/2/construction.png delete mode 100644 public/-/emojis/2/construction_site.png delete mode 100644 public/-/emojis/2/construction_worker.png delete mode 100644 public/-/emojis/2/construction_worker_tone1.png delete mode 100644 public/-/emojis/2/construction_worker_tone2.png delete mode 100644 public/-/emojis/2/construction_worker_tone3.png delete mode 100644 public/-/emojis/2/construction_worker_tone4.png delete mode 100644 public/-/emojis/2/construction_worker_tone5.png delete mode 100644 public/-/emojis/2/control_knobs.png delete mode 100644 public/-/emojis/2/convenience_store.png delete mode 100644 public/-/emojis/2/cookie.png delete mode 100644 public/-/emojis/2/cooking.png delete mode 100644 public/-/emojis/2/cool.png delete mode 100644 public/-/emojis/2/cop.png delete mode 100644 public/-/emojis/2/cop_tone1.png delete mode 100644 public/-/emojis/2/cop_tone2.png delete mode 100644 public/-/emojis/2/cop_tone3.png delete mode 100644 public/-/emojis/2/cop_tone4.png delete mode 100644 public/-/emojis/2/cop_tone5.png delete mode 100644 public/-/emojis/2/copyright.png delete mode 100644 public/-/emojis/2/corn.png delete mode 100644 public/-/emojis/2/couch.png delete mode 100644 public/-/emojis/2/couple.png delete mode 100644 public/-/emojis/2/couple_mm.png delete mode 100644 public/-/emojis/2/couple_with_heart.png delete mode 100644 public/-/emojis/2/couple_ww.png delete mode 100644 public/-/emojis/2/couplekiss.png delete mode 100644 public/-/emojis/2/cow.png delete mode 100644 public/-/emojis/2/cow2.png delete mode 100644 public/-/emojis/2/cowboy.png delete mode 100644 public/-/emojis/2/crab.png delete mode 100644 public/-/emojis/2/crayon.png delete mode 100644 public/-/emojis/2/credit_card.png delete mode 100644 public/-/emojis/2/crescent_moon.png delete mode 100644 public/-/emojis/2/cricket.png delete mode 100644 public/-/emojis/2/crocodile.png delete mode 100644 public/-/emojis/2/croissant.png delete mode 100644 public/-/emojis/2/cross.png delete mode 100644 public/-/emojis/2/crossed_flags.png delete mode 100644 public/-/emojis/2/crossed_swords.png delete mode 100644 public/-/emojis/2/crown.png delete mode 100644 public/-/emojis/2/cruise_ship.png delete mode 100644 public/-/emojis/2/cry.png delete mode 100644 public/-/emojis/2/crying_cat_face.png delete mode 100644 public/-/emojis/2/crystal_ball.png delete mode 100644 public/-/emojis/2/cucumber.png delete mode 100644 public/-/emojis/2/cup_with_straw.png delete mode 100644 public/-/emojis/2/cupcake.png delete mode 100644 public/-/emojis/2/cupid.png delete mode 100644 public/-/emojis/2/curling_stone.png delete mode 100644 public/-/emojis/2/curly_haired.png delete mode 100644 public/-/emojis/2/curly_loop.png delete mode 100644 public/-/emojis/2/currency_exchange.png delete mode 100644 public/-/emojis/2/curry.png delete mode 100644 public/-/emojis/2/custard.png delete mode 100644 public/-/emojis/2/customs.png delete mode 100644 public/-/emojis/2/cut_of_meat.png delete mode 100644 public/-/emojis/2/cyclone.png delete mode 100644 public/-/emojis/2/dagger.png delete mode 100644 public/-/emojis/2/dancer.png delete mode 100644 public/-/emojis/2/dancer_tone1.png delete mode 100644 public/-/emojis/2/dancer_tone2.png delete mode 100644 public/-/emojis/2/dancer_tone3.png delete mode 100644 public/-/emojis/2/dancer_tone4.png delete mode 100644 public/-/emojis/2/dancer_tone5.png delete mode 100644 public/-/emojis/2/dancers.png delete mode 100644 public/-/emojis/2/dango.png delete mode 100644 public/-/emojis/2/dark_sunglasses.png delete mode 100644 public/-/emojis/2/dart.png delete mode 100644 public/-/emojis/2/dash.png delete mode 100644 public/-/emojis/2/date.png delete mode 100644 public/-/emojis/2/deciduous_tree.png delete mode 100644 public/-/emojis/2/deer.png delete mode 100644 public/-/emojis/2/department_store.png delete mode 100644 public/-/emojis/2/desert.png delete mode 100644 public/-/emojis/2/desktop.png delete mode 100644 public/-/emojis/2/diamond_shape_with_a_dot_inside.png delete mode 100644 public/-/emojis/2/diamonds.png delete mode 100644 public/-/emojis/2/digit_eight.png delete mode 100644 public/-/emojis/2/digit_five.png delete mode 100644 public/-/emojis/2/digit_four.png delete mode 100644 public/-/emojis/2/digit_nine.png delete mode 100644 public/-/emojis/2/digit_one.png delete mode 100644 public/-/emojis/2/digit_seven.png delete mode 100644 public/-/emojis/2/digit_six.png delete mode 100644 public/-/emojis/2/digit_three.png delete mode 100644 public/-/emojis/2/digit_two.png delete mode 100644 public/-/emojis/2/digit_zero.png delete mode 100644 public/-/emojis/2/disappointed.png delete mode 100644 public/-/emojis/2/disappointed_relieved.png delete mode 100644 public/-/emojis/2/dividers.png delete mode 100644 public/-/emojis/2/dizzy.png delete mode 100644 public/-/emojis/2/dizzy_face.png delete mode 100644 public/-/emojis/2/dna.png delete mode 100644 public/-/emojis/2/do_not_litter.png delete mode 100644 public/-/emojis/2/dog.png delete mode 100644 public/-/emojis/2/dog2.png delete mode 100644 public/-/emojis/2/dollar.png delete mode 100644 public/-/emojis/2/dolls.png delete mode 100644 public/-/emojis/2/dolphin.png delete mode 100644 public/-/emojis/2/door.png delete mode 100644 public/-/emojis/2/doughnut.png delete mode 100644 public/-/emojis/2/dove.png delete mode 100644 public/-/emojis/2/dragon.png delete mode 100644 public/-/emojis/2/dragon_face.png delete mode 100644 public/-/emojis/2/dress.png delete mode 100644 public/-/emojis/2/dromedary_camel.png delete mode 100644 public/-/emojis/2/drooling_face.png delete mode 100644 public/-/emojis/2/droplet.png delete mode 100644 public/-/emojis/2/drum.png delete mode 100644 public/-/emojis/2/duck.png delete mode 100644 public/-/emojis/2/dumpling.png delete mode 100644 public/-/emojis/2/dvd.png delete mode 100644 public/-/emojis/2/e-mail.png delete mode 100644 public/-/emojis/2/eagle.png delete mode 100644 public/-/emojis/2/ear.png delete mode 100644 public/-/emojis/2/ear_of_rice.png delete mode 100644 public/-/emojis/2/ear_tone1.png delete mode 100644 public/-/emojis/2/ear_tone2.png delete mode 100644 public/-/emojis/2/ear_tone3.png delete mode 100644 public/-/emojis/2/ear_tone4.png delete mode 100644 public/-/emojis/2/ear_tone5.png delete mode 100644 public/-/emojis/2/earth_africa.png delete mode 100644 public/-/emojis/2/earth_americas.png delete mode 100644 public/-/emojis/2/earth_asia.png delete mode 100644 public/-/emojis/2/egg.png delete mode 100644 public/-/emojis/2/eggplant.png delete mode 100644 public/-/emojis/2/eight.png delete mode 100644 public/-/emojis/2/eight_pointed_black_star.png delete mode 100644 public/-/emojis/2/eight_spoked_asterisk.png delete mode 100644 public/-/emojis/2/eject.png delete mode 100644 public/-/emojis/2/electric_plug.png delete mode 100644 public/-/emojis/2/elephant.png delete mode 100644 public/-/emojis/2/elf.png delete mode 100644 public/-/emojis/2/elf_tone1.png delete mode 100644 public/-/emojis/2/elf_tone2.png delete mode 100644 public/-/emojis/2/elf_tone3.png delete mode 100644 public/-/emojis/2/elf_tone4.png delete mode 100644 public/-/emojis/2/elf_tone5.png delete mode 100644 public/-/emojis/2/end.png delete mode 100644 public/-/emojis/2/england.png delete mode 100644 public/-/emojis/2/envelope.png delete mode 100644 public/-/emojis/2/envelope_with_arrow.png delete mode 100644 public/-/emojis/2/euro.png delete mode 100644 public/-/emojis/2/european_castle.png delete mode 100644 public/-/emojis/2/european_post_office.png delete mode 100644 public/-/emojis/2/evergreen_tree.png delete mode 100644 public/-/emojis/2/exclamation.png delete mode 100644 public/-/emojis/2/exploding_head.png delete mode 100644 public/-/emojis/2/expressionless.png delete mode 100644 public/-/emojis/2/eye.png delete mode 100644 public/-/emojis/2/eye_in_speech_bubble.png delete mode 100644 public/-/emojis/2/eyeglasses.png delete mode 100644 public/-/emojis/2/eyes.png delete mode 100644 public/-/emojis/2/face_palm.png delete mode 100644 public/-/emojis/2/face_palm_tone1.png delete mode 100644 public/-/emojis/2/face_palm_tone2.png delete mode 100644 public/-/emojis/2/face_palm_tone3.png delete mode 100644 public/-/emojis/2/face_palm_tone4.png delete mode 100644 public/-/emojis/2/face_palm_tone5.png delete mode 100644 public/-/emojis/2/face_vomiting.png delete mode 100644 public/-/emojis/2/face_with_hand_over_mouth.png delete mode 100644 public/-/emojis/2/face_with_monocle.png delete mode 100644 public/-/emojis/2/face_with_raised_eyebrow.png delete mode 100644 public/-/emojis/2/face_with_symbols_over_mouth.png delete mode 100644 public/-/emojis/2/factory.png delete mode 100644 public/-/emojis/2/fairy.png delete mode 100644 public/-/emojis/2/fairy_tone1.png delete mode 100644 public/-/emojis/2/fairy_tone2.png delete mode 100644 public/-/emojis/2/fairy_tone3.png delete mode 100644 public/-/emojis/2/fairy_tone4.png delete mode 100644 public/-/emojis/2/fairy_tone5.png delete mode 100644 public/-/emojis/2/fallen_leaf.png delete mode 100644 public/-/emojis/2/family.png delete mode 100644 public/-/emojis/2/family_man_boy.png delete mode 100644 public/-/emojis/2/family_man_boy_boy.png delete mode 100644 public/-/emojis/2/family_man_girl.png delete mode 100644 public/-/emojis/2/family_man_girl_boy.png delete mode 100644 public/-/emojis/2/family_man_girl_girl.png delete mode 100644 public/-/emojis/2/family_mmb.png delete mode 100644 public/-/emojis/2/family_mmbb.png delete mode 100644 public/-/emojis/2/family_mmg.png delete mode 100644 public/-/emojis/2/family_mmgb.png delete mode 100644 public/-/emojis/2/family_mmgg.png delete mode 100644 public/-/emojis/2/family_mwbb.png delete mode 100644 public/-/emojis/2/family_mwg.png delete mode 100644 public/-/emojis/2/family_mwgb.png delete mode 100644 public/-/emojis/2/family_mwgg.png delete mode 100644 public/-/emojis/2/family_woman_boy.png delete mode 100644 public/-/emojis/2/family_woman_boy_boy.png delete mode 100644 public/-/emojis/2/family_woman_girl.png delete mode 100644 public/-/emojis/2/family_woman_girl_boy.png delete mode 100644 public/-/emojis/2/family_woman_girl_girl.png delete mode 100644 public/-/emojis/2/family_wwb.png delete mode 100644 public/-/emojis/2/family_wwbb.png delete mode 100644 public/-/emojis/2/family_wwg.png delete mode 100644 public/-/emojis/2/family_wwgb.png delete mode 100644 public/-/emojis/2/family_wwgg.png delete mode 100644 public/-/emojis/2/fast_forward.png delete mode 100644 public/-/emojis/2/fax.png delete mode 100644 public/-/emojis/2/fearful.png delete mode 100644 public/-/emojis/2/feet.png delete mode 100644 public/-/emojis/2/female_sign.png delete mode 100644 public/-/emojis/2/fencer.png delete mode 100644 public/-/emojis/2/ferris_wheel.png delete mode 100644 public/-/emojis/2/ferry.png delete mode 100644 public/-/emojis/2/field_hockey.png delete mode 100644 public/-/emojis/2/file_cabinet.png delete mode 100644 public/-/emojis/2/file_folder.png delete mode 100644 public/-/emojis/2/film_frames.png delete mode 100644 public/-/emojis/2/fingers_crossed.png delete mode 100644 public/-/emojis/2/fingers_crossed_tone1.png delete mode 100644 public/-/emojis/2/fingers_crossed_tone2.png delete mode 100644 public/-/emojis/2/fingers_crossed_tone3.png delete mode 100644 public/-/emojis/2/fingers_crossed_tone4.png delete mode 100644 public/-/emojis/2/fingers_crossed_tone5.png delete mode 100644 public/-/emojis/2/fire.png delete mode 100644 public/-/emojis/2/fire_engine.png delete mode 100644 public/-/emojis/2/fire_extinguisher.png delete mode 100644 public/-/emojis/2/firecracker.png delete mode 100644 public/-/emojis/2/fireworks.png delete mode 100644 public/-/emojis/2/first_place.png delete mode 100644 public/-/emojis/2/first_quarter_moon.png delete mode 100644 public/-/emojis/2/first_quarter_moon_with_face.png delete mode 100644 public/-/emojis/2/fish.png delete mode 100644 public/-/emojis/2/fish_cake.png delete mode 100644 public/-/emojis/2/fishing_pole_and_fish.png delete mode 100644 public/-/emojis/2/fist.png delete mode 100644 public/-/emojis/2/fist_tone1.png delete mode 100644 public/-/emojis/2/fist_tone2.png delete mode 100644 public/-/emojis/2/fist_tone3.png delete mode 100644 public/-/emojis/2/fist_tone4.png delete mode 100644 public/-/emojis/2/fist_tone5.png delete mode 100644 public/-/emojis/2/five.png delete mode 100644 public/-/emojis/2/flag_ac.png delete mode 100644 public/-/emojis/2/flag_ad.png delete mode 100644 public/-/emojis/2/flag_ae.png delete mode 100644 public/-/emojis/2/flag_af.png delete mode 100644 public/-/emojis/2/flag_ag.png delete mode 100644 public/-/emojis/2/flag_ai.png delete mode 100644 public/-/emojis/2/flag_al.png delete mode 100644 public/-/emojis/2/flag_am.png delete mode 100644 public/-/emojis/2/flag_ao.png delete mode 100644 public/-/emojis/2/flag_aq.png delete mode 100644 public/-/emojis/2/flag_ar.png delete mode 100644 public/-/emojis/2/flag_as.png delete mode 100644 public/-/emojis/2/flag_at.png delete mode 100644 public/-/emojis/2/flag_au.png delete mode 100644 public/-/emojis/2/flag_aw.png delete mode 100644 public/-/emojis/2/flag_ax.png delete mode 100644 public/-/emojis/2/flag_az.png delete mode 100644 public/-/emojis/2/flag_ba.png delete mode 100644 public/-/emojis/2/flag_bb.png delete mode 100644 public/-/emojis/2/flag_bd.png delete mode 100644 public/-/emojis/2/flag_be.png delete mode 100644 public/-/emojis/2/flag_bf.png delete mode 100644 public/-/emojis/2/flag_bg.png delete mode 100644 public/-/emojis/2/flag_bh.png delete mode 100644 public/-/emojis/2/flag_bi.png delete mode 100644 public/-/emojis/2/flag_bj.png delete mode 100644 public/-/emojis/2/flag_bl.png delete mode 100644 public/-/emojis/2/flag_black.png delete mode 100644 public/-/emojis/2/flag_bm.png delete mode 100644 public/-/emojis/2/flag_bn.png delete mode 100644 public/-/emojis/2/flag_bo.png delete mode 100644 public/-/emojis/2/flag_bq.png delete mode 100644 public/-/emojis/2/flag_br.png delete mode 100644 public/-/emojis/2/flag_bs.png delete mode 100644 public/-/emojis/2/flag_bt.png delete mode 100644 public/-/emojis/2/flag_bv.png delete mode 100644 public/-/emojis/2/flag_bw.png delete mode 100644 public/-/emojis/2/flag_by.png delete mode 100644 public/-/emojis/2/flag_bz.png delete mode 100644 public/-/emojis/2/flag_ca.png delete mode 100644 public/-/emojis/2/flag_cc.png delete mode 100644 public/-/emojis/2/flag_cd.png delete mode 100644 public/-/emojis/2/flag_cf.png delete mode 100644 public/-/emojis/2/flag_cg.png delete mode 100644 public/-/emojis/2/flag_ch.png delete mode 100644 public/-/emojis/2/flag_ci.png delete mode 100644 public/-/emojis/2/flag_ck.png delete mode 100644 public/-/emojis/2/flag_cl.png delete mode 100644 public/-/emojis/2/flag_cm.png delete mode 100644 public/-/emojis/2/flag_cn.png delete mode 100644 public/-/emojis/2/flag_co.png delete mode 100644 public/-/emojis/2/flag_cp.png delete mode 100644 public/-/emojis/2/flag_cr.png delete mode 100644 public/-/emojis/2/flag_cu.png delete mode 100644 public/-/emojis/2/flag_cv.png delete mode 100644 public/-/emojis/2/flag_cw.png delete mode 100644 public/-/emojis/2/flag_cx.png delete mode 100644 public/-/emojis/2/flag_cy.png delete mode 100644 public/-/emojis/2/flag_cz.png delete mode 100644 public/-/emojis/2/flag_de.png delete mode 100644 public/-/emojis/2/flag_dg.png delete mode 100644 public/-/emojis/2/flag_dj.png delete mode 100644 public/-/emojis/2/flag_dk.png delete mode 100644 public/-/emojis/2/flag_dm.png delete mode 100644 public/-/emojis/2/flag_do.png delete mode 100644 public/-/emojis/2/flag_dz.png delete mode 100644 public/-/emojis/2/flag_ea.png delete mode 100644 public/-/emojis/2/flag_ec.png delete mode 100644 public/-/emojis/2/flag_ee.png delete mode 100644 public/-/emojis/2/flag_eg.png delete mode 100644 public/-/emojis/2/flag_eh.png delete mode 100644 public/-/emojis/2/flag_er.png delete mode 100644 public/-/emojis/2/flag_es.png delete mode 100644 public/-/emojis/2/flag_et.png delete mode 100644 public/-/emojis/2/flag_eu.png delete mode 100644 public/-/emojis/2/flag_fi.png delete mode 100644 public/-/emojis/2/flag_fj.png delete mode 100644 public/-/emojis/2/flag_fk.png delete mode 100644 public/-/emojis/2/flag_fm.png delete mode 100644 public/-/emojis/2/flag_fo.png delete mode 100644 public/-/emojis/2/flag_fr.png delete mode 100644 public/-/emojis/2/flag_ga.png delete mode 100644 public/-/emojis/2/flag_gb.png delete mode 100644 public/-/emojis/2/flag_gd.png delete mode 100644 public/-/emojis/2/flag_ge.png delete mode 100644 public/-/emojis/2/flag_gf.png delete mode 100644 public/-/emojis/2/flag_gg.png delete mode 100644 public/-/emojis/2/flag_gh.png delete mode 100644 public/-/emojis/2/flag_gi.png delete mode 100644 public/-/emojis/2/flag_gl.png delete mode 100644 public/-/emojis/2/flag_gm.png delete mode 100644 public/-/emojis/2/flag_gn.png delete mode 100644 public/-/emojis/2/flag_gp.png delete mode 100644 public/-/emojis/2/flag_gq.png delete mode 100644 public/-/emojis/2/flag_gr.png delete mode 100644 public/-/emojis/2/flag_gs.png delete mode 100644 public/-/emojis/2/flag_gt.png delete mode 100644 public/-/emojis/2/flag_gu.png delete mode 100644 public/-/emojis/2/flag_gw.png delete mode 100644 public/-/emojis/2/flag_gy.png delete mode 100644 public/-/emojis/2/flag_hk.png delete mode 100644 public/-/emojis/2/flag_hm.png delete mode 100644 public/-/emojis/2/flag_hn.png delete mode 100644 public/-/emojis/2/flag_hr.png delete mode 100644 public/-/emojis/2/flag_ht.png delete mode 100644 public/-/emojis/2/flag_hu.png delete mode 100644 public/-/emojis/2/flag_ic.png delete mode 100644 public/-/emojis/2/flag_id.png delete mode 100644 public/-/emojis/2/flag_ie.png delete mode 100644 public/-/emojis/2/flag_il.png delete mode 100644 public/-/emojis/2/flag_im.png delete mode 100644 public/-/emojis/2/flag_in.png delete mode 100644 public/-/emojis/2/flag_io.png delete mode 100644 public/-/emojis/2/flag_iq.png delete mode 100644 public/-/emojis/2/flag_ir.png delete mode 100644 public/-/emojis/2/flag_is.png delete mode 100644 public/-/emojis/2/flag_it.png delete mode 100644 public/-/emojis/2/flag_je.png delete mode 100644 public/-/emojis/2/flag_jm.png delete mode 100644 public/-/emojis/2/flag_jo.png delete mode 100644 public/-/emojis/2/flag_jp.png delete mode 100644 public/-/emojis/2/flag_ke.png delete mode 100644 public/-/emojis/2/flag_kg.png delete mode 100644 public/-/emojis/2/flag_kh.png delete mode 100644 public/-/emojis/2/flag_ki.png delete mode 100644 public/-/emojis/2/flag_km.png delete mode 100644 public/-/emojis/2/flag_kn.png delete mode 100644 public/-/emojis/2/flag_kp.png delete mode 100644 public/-/emojis/2/flag_kr.png delete mode 100644 public/-/emojis/2/flag_kw.png delete mode 100644 public/-/emojis/2/flag_ky.png delete mode 100644 public/-/emojis/2/flag_kz.png delete mode 100644 public/-/emojis/2/flag_la.png delete mode 100644 public/-/emojis/2/flag_lb.png delete mode 100644 public/-/emojis/2/flag_lc.png delete mode 100644 public/-/emojis/2/flag_li.png delete mode 100644 public/-/emojis/2/flag_lk.png delete mode 100644 public/-/emojis/2/flag_lr.png delete mode 100644 public/-/emojis/2/flag_ls.png delete mode 100644 public/-/emojis/2/flag_lt.png delete mode 100644 public/-/emojis/2/flag_lu.png delete mode 100644 public/-/emojis/2/flag_lv.png delete mode 100644 public/-/emojis/2/flag_ly.png delete mode 100644 public/-/emojis/2/flag_ma.png delete mode 100644 public/-/emojis/2/flag_mc.png delete mode 100644 public/-/emojis/2/flag_md.png delete mode 100644 public/-/emojis/2/flag_me.png delete mode 100644 public/-/emojis/2/flag_mf.png delete mode 100644 public/-/emojis/2/flag_mg.png delete mode 100644 public/-/emojis/2/flag_mh.png delete mode 100644 public/-/emojis/2/flag_mk.png delete mode 100644 public/-/emojis/2/flag_ml.png delete mode 100644 public/-/emojis/2/flag_mm.png delete mode 100644 public/-/emojis/2/flag_mn.png delete mode 100644 public/-/emojis/2/flag_mo.png delete mode 100644 public/-/emojis/2/flag_mp.png delete mode 100644 public/-/emojis/2/flag_mq.png delete mode 100644 public/-/emojis/2/flag_mr.png delete mode 100644 public/-/emojis/2/flag_ms.png delete mode 100644 public/-/emojis/2/flag_mt.png delete mode 100644 public/-/emojis/2/flag_mu.png delete mode 100644 public/-/emojis/2/flag_mv.png delete mode 100644 public/-/emojis/2/flag_mw.png delete mode 100644 public/-/emojis/2/flag_mx.png delete mode 100644 public/-/emojis/2/flag_my.png delete mode 100644 public/-/emojis/2/flag_mz.png delete mode 100644 public/-/emojis/2/flag_na.png delete mode 100644 public/-/emojis/2/flag_nc.png delete mode 100644 public/-/emojis/2/flag_ne.png delete mode 100644 public/-/emojis/2/flag_nf.png delete mode 100644 public/-/emojis/2/flag_ng.png delete mode 100644 public/-/emojis/2/flag_ni.png delete mode 100644 public/-/emojis/2/flag_nl.png delete mode 100644 public/-/emojis/2/flag_no.png delete mode 100644 public/-/emojis/2/flag_np.png delete mode 100644 public/-/emojis/2/flag_nr.png delete mode 100644 public/-/emojis/2/flag_nu.png delete mode 100644 public/-/emojis/2/flag_nz.png delete mode 100644 public/-/emojis/2/flag_om.png delete mode 100644 public/-/emojis/2/flag_pa.png delete mode 100644 public/-/emojis/2/flag_pe.png delete mode 100644 public/-/emojis/2/flag_pf.png delete mode 100644 public/-/emojis/2/flag_pg.png delete mode 100644 public/-/emojis/2/flag_ph.png delete mode 100644 public/-/emojis/2/flag_pk.png delete mode 100644 public/-/emojis/2/flag_pl.png delete mode 100644 public/-/emojis/2/flag_pm.png delete mode 100644 public/-/emojis/2/flag_pn.png delete mode 100644 public/-/emojis/2/flag_pr.png delete mode 100644 public/-/emojis/2/flag_ps.png delete mode 100644 public/-/emojis/2/flag_pt.png delete mode 100644 public/-/emojis/2/flag_pw.png delete mode 100644 public/-/emojis/2/flag_py.png delete mode 100644 public/-/emojis/2/flag_qa.png delete mode 100644 public/-/emojis/2/flag_re.png delete mode 100644 public/-/emojis/2/flag_ro.png delete mode 100644 public/-/emojis/2/flag_rs.png delete mode 100644 public/-/emojis/2/flag_ru.png delete mode 100644 public/-/emojis/2/flag_rw.png delete mode 100644 public/-/emojis/2/flag_sa.png delete mode 100644 public/-/emojis/2/flag_sb.png delete mode 100644 public/-/emojis/2/flag_sc.png delete mode 100644 public/-/emojis/2/flag_sd.png delete mode 100644 public/-/emojis/2/flag_se.png delete mode 100644 public/-/emojis/2/flag_sg.png delete mode 100644 public/-/emojis/2/flag_sh.png delete mode 100644 public/-/emojis/2/flag_si.png delete mode 100644 public/-/emojis/2/flag_sj.png delete mode 100644 public/-/emojis/2/flag_sk.png delete mode 100644 public/-/emojis/2/flag_sl.png delete mode 100644 public/-/emojis/2/flag_sm.png delete mode 100644 public/-/emojis/2/flag_sn.png delete mode 100644 public/-/emojis/2/flag_so.png delete mode 100644 public/-/emojis/2/flag_sr.png delete mode 100644 public/-/emojis/2/flag_ss.png delete mode 100644 public/-/emojis/2/flag_st.png delete mode 100644 public/-/emojis/2/flag_sv.png delete mode 100644 public/-/emojis/2/flag_sx.png delete mode 100644 public/-/emojis/2/flag_sy.png delete mode 100644 public/-/emojis/2/flag_sz.png delete mode 100644 public/-/emojis/2/flag_ta.png delete mode 100644 public/-/emojis/2/flag_tc.png delete mode 100644 public/-/emojis/2/flag_td.png delete mode 100644 public/-/emojis/2/flag_tf.png delete mode 100644 public/-/emojis/2/flag_tg.png delete mode 100644 public/-/emojis/2/flag_th.png delete mode 100644 public/-/emojis/2/flag_tj.png delete mode 100644 public/-/emojis/2/flag_tk.png delete mode 100644 public/-/emojis/2/flag_tl.png delete mode 100644 public/-/emojis/2/flag_tm.png delete mode 100644 public/-/emojis/2/flag_tn.png delete mode 100644 public/-/emojis/2/flag_to.png delete mode 100644 public/-/emojis/2/flag_tr.png delete mode 100644 public/-/emojis/2/flag_tt.png delete mode 100644 public/-/emojis/2/flag_tv.png delete mode 100644 public/-/emojis/2/flag_tw.png delete mode 100644 public/-/emojis/2/flag_tz.png delete mode 100644 public/-/emojis/2/flag_ua.png delete mode 100644 public/-/emojis/2/flag_ug.png delete mode 100644 public/-/emojis/2/flag_um.png delete mode 100644 public/-/emojis/2/flag_us.png delete mode 100644 public/-/emojis/2/flag_uy.png delete mode 100644 public/-/emojis/2/flag_uz.png delete mode 100644 public/-/emojis/2/flag_va.png delete mode 100644 public/-/emojis/2/flag_vc.png delete mode 100644 public/-/emojis/2/flag_ve.png delete mode 100644 public/-/emojis/2/flag_vg.png delete mode 100644 public/-/emojis/2/flag_vi.png delete mode 100644 public/-/emojis/2/flag_vn.png delete mode 100644 public/-/emojis/2/flag_vu.png delete mode 100644 public/-/emojis/2/flag_wf.png delete mode 100644 public/-/emojis/2/flag_ws.png delete mode 100644 public/-/emojis/2/flag_xk.png delete mode 100644 public/-/emojis/2/flag_ye.png delete mode 100644 public/-/emojis/2/flag_yt.png delete mode 100644 public/-/emojis/2/flag_za.png delete mode 100644 public/-/emojis/2/flag_zm.png delete mode 100644 public/-/emojis/2/flag_zw.png delete mode 100644 public/-/emojis/2/flags.png delete mode 100644 public/-/emojis/2/flashlight.png delete mode 100644 public/-/emojis/2/fleur_de_lis.png delete mode 100644 public/-/emojis/2/floppy_disk.png delete mode 100644 public/-/emojis/2/flower_playing_cards.png delete mode 100644 public/-/emojis/2/flushed.png delete mode 100644 public/-/emojis/2/flying_disc.png delete mode 100644 public/-/emojis/2/flying_saucer.png delete mode 100644 public/-/emojis/2/fog.png delete mode 100644 public/-/emojis/2/foggy.png delete mode 100644 public/-/emojis/2/foot.png delete mode 100644 public/-/emojis/2/foot_tone1.png delete mode 100644 public/-/emojis/2/foot_tone2.png delete mode 100644 public/-/emojis/2/foot_tone3.png delete mode 100644 public/-/emojis/2/foot_tone4.png delete mode 100644 public/-/emojis/2/foot_tone5.png delete mode 100644 public/-/emojis/2/football.png delete mode 100644 public/-/emojis/2/footprints.png delete mode 100644 public/-/emojis/2/fork_and_knife.png delete mode 100644 public/-/emojis/2/fork_knife_plate.png delete mode 100644 public/-/emojis/2/fortune_cookie.png delete mode 100644 public/-/emojis/2/fountain.png delete mode 100644 public/-/emojis/2/four.png delete mode 100644 public/-/emojis/2/four_leaf_clover.png delete mode 100644 public/-/emojis/2/fox.png delete mode 100644 public/-/emojis/2/frame_photo.png delete mode 100644 public/-/emojis/2/free.png delete mode 100644 public/-/emojis/2/french_bread.png delete mode 100644 public/-/emojis/2/fried_shrimp.png delete mode 100644 public/-/emojis/2/fries.png delete mode 100644 public/-/emojis/2/frog.png delete mode 100644 public/-/emojis/2/frowning.png delete mode 100644 public/-/emojis/2/frowning_face.png delete mode 100644 public/-/emojis/2/fuelpump.png delete mode 100644 public/-/emojis/2/full_moon.png delete mode 100644 public/-/emojis/2/full_moon_with_face.png delete mode 100644 public/-/emojis/2/game_die.png delete mode 100644 public/-/emojis/2/gay_pride_flag.png delete mode 100644 public/-/emojis/2/gear.png delete mode 100644 public/-/emojis/2/gem.png delete mode 100644 public/-/emojis/2/gemini.png delete mode 100644 public/-/emojis/2/genie.png delete mode 100644 public/-/emojis/2/ghost.png delete mode 100644 public/-/emojis/2/gift.png delete mode 100644 public/-/emojis/2/gift_heart.png delete mode 100644 public/-/emojis/2/giraffe.png delete mode 100644 public/-/emojis/2/girl.png delete mode 100644 public/-/emojis/2/girl_tone1.png delete mode 100644 public/-/emojis/2/girl_tone2.png delete mode 100644 public/-/emojis/2/girl_tone3.png delete mode 100644 public/-/emojis/2/girl_tone4.png delete mode 100644 public/-/emojis/2/girl_tone5.png delete mode 100644 public/-/emojis/2/globe_with_meridians.png delete mode 100644 public/-/emojis/2/gloves.png delete mode 100644 public/-/emojis/2/goal.png delete mode 100644 public/-/emojis/2/goat.png delete mode 100644 public/-/emojis/2/goggles.png delete mode 100644 public/-/emojis/2/golf.png delete mode 100644 public/-/emojis/2/golfing_man.png delete mode 100644 public/-/emojis/2/gorilla.png delete mode 100644 public/-/emojis/2/grapes.png delete mode 100644 public/-/emojis/2/green_apple.png delete mode 100644 public/-/emojis/2/green_book.png delete mode 100644 public/-/emojis/2/green_heart.png delete mode 100644 public/-/emojis/2/grey_exclamation.png delete mode 100644 public/-/emojis/2/grey_question.png delete mode 100644 public/-/emojis/2/grimacing.png delete mode 100644 public/-/emojis/2/grin.png delete mode 100644 public/-/emojis/2/grinning.png delete mode 100644 public/-/emojis/2/guardsman.png delete mode 100644 public/-/emojis/2/guardsman_tone1.png delete mode 100644 public/-/emojis/2/guardsman_tone2.png delete mode 100644 public/-/emojis/2/guardsman_tone3.png delete mode 100644 public/-/emojis/2/guardsman_tone4.png delete mode 100644 public/-/emojis/2/guardsman_tone5.png delete mode 100644 public/-/emojis/2/guitar.png delete mode 100644 public/-/emojis/2/gun.png delete mode 100644 public/-/emojis/2/haircut.png delete mode 100644 public/-/emojis/2/haircut_tone1.png delete mode 100644 public/-/emojis/2/haircut_tone2.png delete mode 100644 public/-/emojis/2/haircut_tone3.png delete mode 100644 public/-/emojis/2/haircut_tone4.png delete mode 100644 public/-/emojis/2/haircut_tone5.png delete mode 100644 public/-/emojis/2/hamburger.png delete mode 100644 public/-/emojis/2/hammer.png delete mode 100644 public/-/emojis/2/hammer_pick.png delete mode 100644 public/-/emojis/2/hamster.png delete mode 100644 public/-/emojis/2/hand_splayed.png delete mode 100644 public/-/emojis/2/hand_splayed_tone1.png delete mode 100644 public/-/emojis/2/hand_splayed_tone2.png delete mode 100644 public/-/emojis/2/hand_splayed_tone3.png delete mode 100644 public/-/emojis/2/hand_splayed_tone4.png delete mode 100644 public/-/emojis/2/hand_splayed_tone5.png delete mode 100644 public/-/emojis/2/handbag.png delete mode 100644 public/-/emojis/2/handball.png delete mode 100644 public/-/emojis/2/handball_tone1.png delete mode 100644 public/-/emojis/2/handball_tone2.png delete mode 100644 public/-/emojis/2/handball_tone3.png delete mode 100644 public/-/emojis/2/handball_tone4.png delete mode 100644 public/-/emojis/2/handball_tone5.png delete mode 100644 public/-/emojis/2/handshake.png delete mode 100644 public/-/emojis/2/hash.png delete mode 100644 public/-/emojis/2/hatched_chick.png delete mode 100644 public/-/emojis/2/hatching_chick.png delete mode 100644 public/-/emojis/2/head_bandage.png delete mode 100644 public/-/emojis/2/headphones.png delete mode 100644 public/-/emojis/2/hear_no_evil.png delete mode 100644 public/-/emojis/2/heart.png delete mode 100644 public/-/emojis/2/heart_decoration.png delete mode 100644 public/-/emojis/2/heart_eyes.png delete mode 100644 public/-/emojis/2/heart_eyes_cat.png delete mode 100644 public/-/emojis/2/heartbeat.png delete mode 100644 public/-/emojis/2/heartpulse.png delete mode 100644 public/-/emojis/2/hearts.png delete mode 100644 public/-/emojis/2/heavy_check_mark.png delete mode 100644 public/-/emojis/2/heavy_division_sign.png delete mode 100644 public/-/emojis/2/heavy_dollar_sign.png delete mode 100644 public/-/emojis/2/heavy_heart_exclamation.png delete mode 100644 public/-/emojis/2/heavy_minus_sign.png delete mode 100644 public/-/emojis/2/heavy_multiplication_x.png delete mode 100644 public/-/emojis/2/heavy_plus_sign.png delete mode 100644 public/-/emojis/2/hedgehog.png delete mode 100644 public/-/emojis/2/helicopter.png delete mode 100644 public/-/emojis/2/helmet_with_cross.png delete mode 100644 public/-/emojis/2/herb.png delete mode 100644 public/-/emojis/2/hibiscus.png delete mode 100644 public/-/emojis/2/high_brightness.png delete mode 100644 public/-/emojis/2/high_heel.png delete mode 100644 public/-/emojis/2/hiking_boot.png delete mode 100644 public/-/emojis/2/hippopotamus.png delete mode 100644 public/-/emojis/2/hockey.png delete mode 100644 public/-/emojis/2/hole.png delete mode 100644 public/-/emojis/2/homes.png delete mode 100644 public/-/emojis/2/honey_pot.png delete mode 100644 public/-/emojis/2/horse.png delete mode 100644 public/-/emojis/2/horse_racing.png delete mode 100644 public/-/emojis/2/horse_racing_tone1.png delete mode 100644 public/-/emojis/2/horse_racing_tone2.png delete mode 100644 public/-/emojis/2/horse_racing_tone3.png delete mode 100644 public/-/emojis/2/horse_racing_tone4.png delete mode 100644 public/-/emojis/2/horse_racing_tone5.png delete mode 100644 public/-/emojis/2/hospital.png delete mode 100644 public/-/emojis/2/hot_face.png delete mode 100644 public/-/emojis/2/hot_pepper.png delete mode 100644 public/-/emojis/2/hotdog.png delete mode 100644 public/-/emojis/2/hotel.png delete mode 100644 public/-/emojis/2/hotsprings.png delete mode 100644 public/-/emojis/2/hourglass.png delete mode 100644 public/-/emojis/2/hourglass_flowing_sand.png delete mode 100644 public/-/emojis/2/house.png delete mode 100644 public/-/emojis/2/house_abandoned.png delete mode 100644 public/-/emojis/2/house_with_garden.png delete mode 100644 public/-/emojis/2/hugging.png delete mode 100644 public/-/emojis/2/hushed.png delete mode 100644 public/-/emojis/2/ice_cream.png delete mode 100644 public/-/emojis/2/ice_skate.png delete mode 100644 public/-/emojis/2/icecream.png delete mode 100644 public/-/emojis/2/id.png delete mode 100644 public/-/emojis/2/ideograph_advantage.png delete mode 100644 public/-/emojis/2/imp.png delete mode 100644 public/-/emojis/2/inbox_tray.png delete mode 100644 public/-/emojis/2/incoming_envelope.png delete mode 100644 public/-/emojis/2/infinity.png delete mode 100644 public/-/emojis/2/information_desk_person.png delete mode 100644 public/-/emojis/2/information_desk_person_tone1.png delete mode 100644 public/-/emojis/2/information_desk_person_tone2.png delete mode 100644 public/-/emojis/2/information_desk_person_tone3.png delete mode 100644 public/-/emojis/2/information_desk_person_tone4.png delete mode 100644 public/-/emojis/2/information_desk_person_tone5.png delete mode 100644 public/-/emojis/2/information_source.png delete mode 100644 public/-/emojis/2/innocent.png delete mode 100644 public/-/emojis/2/interrobang.png delete mode 100644 public/-/emojis/2/iphone.png delete mode 100644 public/-/emojis/2/island.png delete mode 100644 public/-/emojis/2/izakaya_lantern.png delete mode 100644 public/-/emojis/2/jack_o_lantern.png delete mode 100644 public/-/emojis/2/japanese_castle.png delete mode 100644 public/-/emojis/2/japanese_goblin.png delete mode 100644 public/-/emojis/2/japanese_ogre.png delete mode 100644 public/-/emojis/2/jeans.png delete mode 100644 public/-/emojis/2/jigsaw.png delete mode 100644 public/-/emojis/2/joy.png delete mode 100644 public/-/emojis/2/joy_cat.png delete mode 100644 public/-/emojis/2/joystick.png delete mode 100644 public/-/emojis/2/juggling.png delete mode 100644 public/-/emojis/2/juggling_tone1.png delete mode 100644 public/-/emojis/2/juggling_tone2.png delete mode 100644 public/-/emojis/2/juggling_tone3.png delete mode 100644 public/-/emojis/2/juggling_tone4.png delete mode 100644 public/-/emojis/2/juggling_tone5.png delete mode 100644 public/-/emojis/2/kaaba.png delete mode 100644 public/-/emojis/2/kangaroo.png delete mode 100644 public/-/emojis/2/key.png delete mode 100644 public/-/emojis/2/key2.png delete mode 100644 public/-/emojis/2/keyboard.png delete mode 100644 public/-/emojis/2/kimono.png delete mode 100644 public/-/emojis/2/kiss.png delete mode 100644 public/-/emojis/2/kiss_mm.png delete mode 100644 public/-/emojis/2/kiss_woman_man.png delete mode 100644 public/-/emojis/2/kiss_ww.png delete mode 100644 public/-/emojis/2/kissing.png delete mode 100644 public/-/emojis/2/kissing_cat.png delete mode 100644 public/-/emojis/2/kissing_closed_eyes.png delete mode 100644 public/-/emojis/2/kissing_heart.png delete mode 100644 public/-/emojis/2/kissing_smiling_eyes.png delete mode 100644 public/-/emojis/2/kiwi.png delete mode 100644 public/-/emojis/2/knife.png delete mode 100644 public/-/emojis/2/koala.png delete mode 100644 public/-/emojis/2/koko.png delete mode 100644 public/-/emojis/2/lab_coat.png delete mode 100644 public/-/emojis/2/label.png delete mode 100644 public/-/emojis/2/lacrosse.png delete mode 100644 public/-/emojis/2/large_blue_diamond.png delete mode 100644 public/-/emojis/2/large_orange_diamond.png delete mode 100644 public/-/emojis/2/last_quarter_moon.png delete mode 100644 public/-/emojis/2/last_quarter_moon_with_face.png delete mode 100644 public/-/emojis/2/laughing.png delete mode 100644 public/-/emojis/2/leafy_green.png delete mode 100644 public/-/emojis/2/leaves.png delete mode 100644 public/-/emojis/2/ledger.png delete mode 100644 public/-/emojis/2/left_facing_fist.png delete mode 100644 public/-/emojis/2/left_facing_fist_tone1.png delete mode 100644 public/-/emojis/2/left_facing_fist_tone2.png delete mode 100644 public/-/emojis/2/left_facing_fist_tone3.png delete mode 100644 public/-/emojis/2/left_facing_fist_tone4.png delete mode 100644 public/-/emojis/2/left_facing_fist_tone5.png delete mode 100644 public/-/emojis/2/left_luggage.png delete mode 100644 public/-/emojis/2/left_right_arrow.png delete mode 100644 public/-/emojis/2/leftwards_arrow_with_hook.png delete mode 100644 public/-/emojis/2/leg.png delete mode 100644 public/-/emojis/2/leg_tone1.png delete mode 100644 public/-/emojis/2/leg_tone2.png delete mode 100644 public/-/emojis/2/leg_tone3.png delete mode 100644 public/-/emojis/2/leg_tone4.png delete mode 100644 public/-/emojis/2/leg_tone5.png delete mode 100644 public/-/emojis/2/lemon.png delete mode 100644 public/-/emojis/2/leo.png delete mode 100644 public/-/emojis/2/leopard.png delete mode 100644 public/-/emojis/2/level_slider.png delete mode 100644 public/-/emojis/2/levitate.png delete mode 100644 public/-/emojis/2/levitate_tone1.png delete mode 100644 public/-/emojis/2/levitate_tone2.png delete mode 100644 public/-/emojis/2/levitate_tone3.png delete mode 100644 public/-/emojis/2/levitate_tone4.png delete mode 100644 public/-/emojis/2/levitate_tone5.png delete mode 100644 public/-/emojis/2/libra.png delete mode 100644 public/-/emojis/2/lifter_tone1.png delete mode 100644 public/-/emojis/2/lifter_tone2.png delete mode 100644 public/-/emojis/2/lifter_tone3.png delete mode 100644 public/-/emojis/2/lifter_tone4.png delete mode 100644 public/-/emojis/2/lifter_tone5.png delete mode 100644 public/-/emojis/2/light_rail.png delete mode 100644 public/-/emojis/2/link.png delete mode 100644 public/-/emojis/2/lion_face.png delete mode 100644 public/-/emojis/2/lips.png delete mode 100644 public/-/emojis/2/lipstick.png delete mode 100644 public/-/emojis/2/lizard.png delete mode 100644 public/-/emojis/2/llama.png delete mode 100644 public/-/emojis/2/lobster.png delete mode 100644 public/-/emojis/2/lock.png delete mode 100644 public/-/emojis/2/lock_with_ink_pen.png delete mode 100644 public/-/emojis/2/lollipop.png delete mode 100644 public/-/emojis/2/loop.png delete mode 100644 public/-/emojis/2/loud_sound.png delete mode 100644 public/-/emojis/2/loudspeaker.png delete mode 100644 public/-/emojis/2/love_hotel.png delete mode 100644 public/-/emojis/2/love_letter.png delete mode 100644 public/-/emojis/2/love_you_gesture.png delete mode 100644 public/-/emojis/2/love_you_gesture_tone1.png delete mode 100644 public/-/emojis/2/love_you_gesture_tone2.png delete mode 100644 public/-/emojis/2/love_you_gesture_tone3.png delete mode 100644 public/-/emojis/2/love_you_gesture_tone4.png delete mode 100644 public/-/emojis/2/love_you_gesture_tone5.png delete mode 100644 public/-/emojis/2/low_brightness.png delete mode 100644 public/-/emojis/2/luggage.png delete mode 100644 public/-/emojis/2/lying_face.png delete mode 100644 public/-/emojis/2/m.png delete mode 100644 public/-/emojis/2/mag.png delete mode 100644 public/-/emojis/2/mag_right.png delete mode 100644 public/-/emojis/2/mage.png delete mode 100644 public/-/emojis/2/mage_tone1.png delete mode 100644 public/-/emojis/2/mage_tone2.png delete mode 100644 public/-/emojis/2/mage_tone3.png delete mode 100644 public/-/emojis/2/mage_tone4.png delete mode 100644 public/-/emojis/2/mage_tone5.png delete mode 100644 public/-/emojis/2/magnet.png delete mode 100644 public/-/emojis/2/mahjong.png delete mode 100644 public/-/emojis/2/mailbox.png delete mode 100644 public/-/emojis/2/mailbox_closed.png delete mode 100644 public/-/emojis/2/mailbox_with_mail.png delete mode 100644 public/-/emojis/2/mailbox_with_no_mail.png delete mode 100644 public/-/emojis/2/male_detective.png delete mode 100644 public/-/emojis/2/male_sign.png delete mode 100644 public/-/emojis/2/man.png delete mode 100644 public/-/emojis/2/man_artist.png delete mode 100644 public/-/emojis/2/man_artist_tone1.png delete mode 100644 public/-/emojis/2/man_artist_tone2.png delete mode 100644 public/-/emojis/2/man_artist_tone3.png delete mode 100644 public/-/emojis/2/man_artist_tone4.png delete mode 100644 public/-/emojis/2/man_artist_tone5.png delete mode 100644 public/-/emojis/2/man_astronaut.png delete mode 100644 public/-/emojis/2/man_astronaut_tone1.png delete mode 100644 public/-/emojis/2/man_astronaut_tone2.png delete mode 100644 public/-/emojis/2/man_astronaut_tone3.png delete mode 100644 public/-/emojis/2/man_astronaut_tone4.png delete mode 100644 public/-/emojis/2/man_astronaut_tone5.png delete mode 100644 public/-/emojis/2/man_bald.png delete mode 100644 public/-/emojis/2/man_bald_tone1.png delete mode 100644 public/-/emojis/2/man_bald_tone2.png delete mode 100644 public/-/emojis/2/man_bald_tone3.png delete mode 100644 public/-/emojis/2/man_bald_tone4.png delete mode 100644 public/-/emojis/2/man_bald_tone5.png delete mode 100644 public/-/emojis/2/man_biking.png delete mode 100644 public/-/emojis/2/man_biking_tone1.png delete mode 100644 public/-/emojis/2/man_biking_tone2.png delete mode 100644 public/-/emojis/2/man_biking_tone3.png delete mode 100644 public/-/emojis/2/man_biking_tone4.png delete mode 100644 public/-/emojis/2/man_biking_tone5.png delete mode 100644 public/-/emojis/2/man_bouncing_ball.png delete mode 100644 public/-/emojis/2/man_bouncing_ball_tone1.png delete mode 100644 public/-/emojis/2/man_bouncing_ball_tone2.png delete mode 100644 public/-/emojis/2/man_bouncing_ball_tone3.png delete mode 100644 public/-/emojis/2/man_bouncing_ball_tone4.png delete mode 100644 public/-/emojis/2/man_bouncing_ball_tone5.png delete mode 100644 public/-/emojis/2/man_bowing.png delete mode 100644 public/-/emojis/2/man_bowing_tone1.png delete mode 100644 public/-/emojis/2/man_bowing_tone2.png delete mode 100644 public/-/emojis/2/man_bowing_tone3.png delete mode 100644 public/-/emojis/2/man_bowing_tone4.png delete mode 100644 public/-/emojis/2/man_bowing_tone5.png delete mode 100644 public/-/emojis/2/man_cartwheeling.png delete mode 100644 public/-/emojis/2/man_cartwheeling_tone1.png delete mode 100644 public/-/emojis/2/man_cartwheeling_tone2.png delete mode 100644 public/-/emojis/2/man_cartwheeling_tone3.png delete mode 100644 public/-/emojis/2/man_cartwheeling_tone4.png delete mode 100644 public/-/emojis/2/man_cartwheeling_tone5.png delete mode 100644 public/-/emojis/2/man_climbing.png delete mode 100644 public/-/emojis/2/man_climbing_tone1.png delete mode 100644 public/-/emojis/2/man_climbing_tone2.png delete mode 100644 public/-/emojis/2/man_climbing_tone3.png delete mode 100644 public/-/emojis/2/man_climbing_tone4.png delete mode 100644 public/-/emojis/2/man_climbing_tone5.png delete mode 100644 public/-/emojis/2/man_construction_worker.png delete mode 100644 public/-/emojis/2/man_construction_worker_tone1.png delete mode 100644 public/-/emojis/2/man_construction_worker_tone2.png delete mode 100644 public/-/emojis/2/man_construction_worker_tone3.png delete mode 100644 public/-/emojis/2/man_construction_worker_tone4.png delete mode 100644 public/-/emojis/2/man_construction_worker_tone5.png delete mode 100644 public/-/emojis/2/man_cook.png delete mode 100644 public/-/emojis/2/man_cook_tone1.png delete mode 100644 public/-/emojis/2/man_cook_tone2.png delete mode 100644 public/-/emojis/2/man_cook_tone3.png delete mode 100644 public/-/emojis/2/man_cook_tone4.png delete mode 100644 public/-/emojis/2/man_cook_tone5.png delete mode 100644 public/-/emojis/2/man_curly_haired.png delete mode 100644 public/-/emojis/2/man_curly_haired_tone1.png delete mode 100644 public/-/emojis/2/man_curly_haired_tone2.png delete mode 100644 public/-/emojis/2/man_curly_haired_tone3.png delete mode 100644 public/-/emojis/2/man_curly_haired_tone4.png delete mode 100644 public/-/emojis/2/man_curly_haired_tone5.png delete mode 100644 public/-/emojis/2/man_dancing.png delete mode 100644 public/-/emojis/2/man_dancing_tone1.png delete mode 100644 public/-/emojis/2/man_dancing_tone2.png delete mode 100644 public/-/emojis/2/man_dancing_tone3.png delete mode 100644 public/-/emojis/2/man_dancing_tone4.png delete mode 100644 public/-/emojis/2/man_dancing_tone5.png delete mode 100644 public/-/emojis/2/man_detective.png delete mode 100644 public/-/emojis/2/man_detective_tone1.png delete mode 100644 public/-/emojis/2/man_detective_tone2.png delete mode 100644 public/-/emojis/2/man_detective_tone3.png delete mode 100644 public/-/emojis/2/man_detective_tone4.png delete mode 100644 public/-/emojis/2/man_detective_tone5.png delete mode 100644 public/-/emojis/2/man_elf.png delete mode 100644 public/-/emojis/2/man_elf_tone1.png delete mode 100644 public/-/emojis/2/man_elf_tone2.png delete mode 100644 public/-/emojis/2/man_elf_tone3.png delete mode 100644 public/-/emojis/2/man_elf_tone4.png delete mode 100644 public/-/emojis/2/man_elf_tone5.png delete mode 100644 public/-/emojis/2/man_facepalming.png delete mode 100644 public/-/emojis/2/man_facepalming_tone1.png delete mode 100644 public/-/emojis/2/man_facepalming_tone2.png delete mode 100644 public/-/emojis/2/man_facepalming_tone3.png delete mode 100644 public/-/emojis/2/man_facepalming_tone4.png delete mode 100644 public/-/emojis/2/man_facepalming_tone5.png delete mode 100644 public/-/emojis/2/man_factory_worker.png delete mode 100644 public/-/emojis/2/man_factory_worker_tone1.png delete mode 100644 public/-/emojis/2/man_factory_worker_tone2.png delete mode 100644 public/-/emojis/2/man_factory_worker_tone3.png delete mode 100644 public/-/emojis/2/man_factory_worker_tone4.png delete mode 100644 public/-/emojis/2/man_factory_worker_tone5.png delete mode 100644 public/-/emojis/2/man_fairy.png delete mode 100644 public/-/emojis/2/man_fairy_tone1.png delete mode 100644 public/-/emojis/2/man_fairy_tone2.png delete mode 100644 public/-/emojis/2/man_fairy_tone3.png delete mode 100644 public/-/emojis/2/man_fairy_tone4.png delete mode 100644 public/-/emojis/2/man_fairy_tone5.png delete mode 100644 public/-/emojis/2/man_farmer.png delete mode 100644 public/-/emojis/2/man_farmer_tone1.png delete mode 100644 public/-/emojis/2/man_farmer_tone2.png delete mode 100644 public/-/emojis/2/man_farmer_tone3.png delete mode 100644 public/-/emojis/2/man_farmer_tone4.png delete mode 100644 public/-/emojis/2/man_farmer_tone5.png delete mode 100644 public/-/emojis/2/man_firefighter.png delete mode 100644 public/-/emojis/2/man_firefighter_tone1.png delete mode 100644 public/-/emojis/2/man_firefighter_tone2.png delete mode 100644 public/-/emojis/2/man_firefighter_tone3.png delete mode 100644 public/-/emojis/2/man_firefighter_tone4.png delete mode 100644 public/-/emojis/2/man_firefighter_tone5.png delete mode 100644 public/-/emojis/2/man_frowning.png delete mode 100644 public/-/emojis/2/man_frowning_tone1.png delete mode 100644 public/-/emojis/2/man_frowning_tone2.png delete mode 100644 public/-/emojis/2/man_frowning_tone3.png delete mode 100644 public/-/emojis/2/man_frowning_tone4.png delete mode 100644 public/-/emojis/2/man_frowning_tone5.png delete mode 100644 public/-/emojis/2/man_genie.png delete mode 100644 public/-/emojis/2/man_gesturing_no.png delete mode 100644 public/-/emojis/2/man_gesturing_no_tone1.png delete mode 100644 public/-/emojis/2/man_gesturing_no_tone2.png delete mode 100644 public/-/emojis/2/man_gesturing_no_tone3.png delete mode 100644 public/-/emojis/2/man_gesturing_no_tone4.png delete mode 100644 public/-/emojis/2/man_gesturing_no_tone5.png delete mode 100644 public/-/emojis/2/man_gesturing_ok.png delete mode 100644 public/-/emojis/2/man_gesturing_ok_tone1.png delete mode 100644 public/-/emojis/2/man_gesturing_ok_tone2.png delete mode 100644 public/-/emojis/2/man_gesturing_ok_tone3.png delete mode 100644 public/-/emojis/2/man_gesturing_ok_tone4.png delete mode 100644 public/-/emojis/2/man_gesturing_ok_tone5.png delete mode 100644 public/-/emojis/2/man_getting_face_massage.png delete mode 100644 public/-/emojis/2/man_getting_face_massage_tone1.png delete mode 100644 public/-/emojis/2/man_getting_face_massage_tone2.png delete mode 100644 public/-/emojis/2/man_getting_face_massage_tone3.png delete mode 100644 public/-/emojis/2/man_getting_face_massage_tone4.png delete mode 100644 public/-/emojis/2/man_getting_face_massage_tone5.png delete mode 100644 public/-/emojis/2/man_getting_haircut.png delete mode 100644 public/-/emojis/2/man_getting_haircut_tone1.png delete mode 100644 public/-/emojis/2/man_getting_haircut_tone2.png delete mode 100644 public/-/emojis/2/man_getting_haircut_tone3.png delete mode 100644 public/-/emojis/2/man_getting_haircut_tone4.png delete mode 100644 public/-/emojis/2/man_getting_haircut_tone5.png delete mode 100644 public/-/emojis/2/man_golfing.png delete mode 100644 public/-/emojis/2/man_golfing_tone1.png delete mode 100644 public/-/emojis/2/man_golfing_tone2.png delete mode 100644 public/-/emojis/2/man_golfing_tone3.png delete mode 100644 public/-/emojis/2/man_golfing_tone4.png delete mode 100644 public/-/emojis/2/man_golfing_tone5.png delete mode 100644 public/-/emojis/2/man_guard.png delete mode 100644 public/-/emojis/2/man_guard_tone1.png delete mode 100644 public/-/emojis/2/man_guard_tone2.png delete mode 100644 public/-/emojis/2/man_guard_tone3.png delete mode 100644 public/-/emojis/2/man_guard_tone4.png delete mode 100644 public/-/emojis/2/man_guard_tone5.png delete mode 100644 public/-/emojis/2/man_health_worker.png delete mode 100644 public/-/emojis/2/man_health_worker_tone1.png delete mode 100644 public/-/emojis/2/man_health_worker_tone2.png delete mode 100644 public/-/emojis/2/man_health_worker_tone3.png delete mode 100644 public/-/emojis/2/man_health_worker_tone4.png delete mode 100644 public/-/emojis/2/man_health_worker_tone5.png delete mode 100644 public/-/emojis/2/man_in_lotus_position.png delete mode 100644 public/-/emojis/2/man_in_lotus_position_tone1.png delete mode 100644 public/-/emojis/2/man_in_lotus_position_tone2.png delete mode 100644 public/-/emojis/2/man_in_lotus_position_tone3.png delete mode 100644 public/-/emojis/2/man_in_lotus_position_tone4.png delete mode 100644 public/-/emojis/2/man_in_lotus_position_tone5.png delete mode 100644 public/-/emojis/2/man_in_steamy_room.png delete mode 100644 public/-/emojis/2/man_in_steamy_room_tone1.png delete mode 100644 public/-/emojis/2/man_in_steamy_room_tone2.png delete mode 100644 public/-/emojis/2/man_in_steamy_room_tone3.png delete mode 100644 public/-/emojis/2/man_in_steamy_room_tone4.png delete mode 100644 public/-/emojis/2/man_in_steamy_room_tone5.png delete mode 100644 public/-/emojis/2/man_in_tuxedo.png delete mode 100644 public/-/emojis/2/man_in_tuxedo_tone1.png delete mode 100644 public/-/emojis/2/man_in_tuxedo_tone2.png delete mode 100644 public/-/emojis/2/man_in_tuxedo_tone3.png delete mode 100644 public/-/emojis/2/man_in_tuxedo_tone4.png delete mode 100644 public/-/emojis/2/man_in_tuxedo_tone5.png delete mode 100644 public/-/emojis/2/man_judge.png delete mode 100644 public/-/emojis/2/man_judge_tone1.png delete mode 100644 public/-/emojis/2/man_judge_tone2.png delete mode 100644 public/-/emojis/2/man_judge_tone3.png delete mode 100644 public/-/emojis/2/man_judge_tone4.png delete mode 100644 public/-/emojis/2/man_judge_tone5.png delete mode 100644 public/-/emojis/2/man_juggling.png delete mode 100644 public/-/emojis/2/man_juggling_tone1.png delete mode 100644 public/-/emojis/2/man_juggling_tone2.png delete mode 100644 public/-/emojis/2/man_juggling_tone3.png delete mode 100644 public/-/emojis/2/man_juggling_tone4.png delete mode 100644 public/-/emojis/2/man_juggling_tone5.png delete mode 100644 public/-/emojis/2/man_lifting_weights.png delete mode 100644 public/-/emojis/2/man_lifting_weights_tone1.png delete mode 100644 public/-/emojis/2/man_lifting_weights_tone2.png delete mode 100644 public/-/emojis/2/man_lifting_weights_tone3.png delete mode 100644 public/-/emojis/2/man_lifting_weights_tone4.png delete mode 100644 public/-/emojis/2/man_lifting_weights_tone5.png delete mode 100644 public/-/emojis/2/man_mage.png delete mode 100644 public/-/emojis/2/man_mage_tone1.png delete mode 100644 public/-/emojis/2/man_mage_tone2.png delete mode 100644 public/-/emojis/2/man_mage_tone3.png delete mode 100644 public/-/emojis/2/man_mage_tone4.png delete mode 100644 public/-/emojis/2/man_mage_tone5.png delete mode 100644 public/-/emojis/2/man_mechanic.png delete mode 100644 public/-/emojis/2/man_mechanic_tone1.png delete mode 100644 public/-/emojis/2/man_mechanic_tone2.png delete mode 100644 public/-/emojis/2/man_mechanic_tone3.png delete mode 100644 public/-/emojis/2/man_mechanic_tone4.png delete mode 100644 public/-/emojis/2/man_mechanic_tone5.png delete mode 100644 public/-/emojis/2/man_mountain_biking.png delete mode 100644 public/-/emojis/2/man_mountain_biking_tone1.png delete mode 100644 public/-/emojis/2/man_mountain_biking_tone2.png delete mode 100644 public/-/emojis/2/man_mountain_biking_tone3.png delete mode 100644 public/-/emojis/2/man_mountain_biking_tone4.png delete mode 100644 public/-/emojis/2/man_mountain_biking_tone5.png delete mode 100644 public/-/emojis/2/man_office_worker.png delete mode 100644 public/-/emojis/2/man_office_worker_tone1.png delete mode 100644 public/-/emojis/2/man_office_worker_tone2.png delete mode 100644 public/-/emojis/2/man_office_worker_tone3.png delete mode 100644 public/-/emojis/2/man_office_worker_tone4.png delete mode 100644 public/-/emojis/2/man_office_worker_tone5.png delete mode 100644 public/-/emojis/2/man_pilot.png delete mode 100644 public/-/emojis/2/man_pilot_tone1.png delete mode 100644 public/-/emojis/2/man_pilot_tone2.png delete mode 100644 public/-/emojis/2/man_pilot_tone3.png delete mode 100644 public/-/emojis/2/man_pilot_tone4.png delete mode 100644 public/-/emojis/2/man_pilot_tone5.png delete mode 100644 public/-/emojis/2/man_playing_handball.png delete mode 100644 public/-/emojis/2/man_playing_handball_tone1.png delete mode 100644 public/-/emojis/2/man_playing_handball_tone2.png delete mode 100644 public/-/emojis/2/man_playing_handball_tone3.png delete mode 100644 public/-/emojis/2/man_playing_handball_tone4.png delete mode 100644 public/-/emojis/2/man_playing_handball_tone5.png delete mode 100644 public/-/emojis/2/man_playing_water_polo.png delete mode 100644 public/-/emojis/2/man_playing_water_polo_tone1.png delete mode 100644 public/-/emojis/2/man_playing_water_polo_tone2.png delete mode 100644 public/-/emojis/2/man_playing_water_polo_tone3.png delete mode 100644 public/-/emojis/2/man_playing_water_polo_tone4.png delete mode 100644 public/-/emojis/2/man_playing_water_polo_tone5.png delete mode 100644 public/-/emojis/2/man_police_officer.png delete mode 100644 public/-/emojis/2/man_police_officer_tone1.png delete mode 100644 public/-/emojis/2/man_police_officer_tone2.png delete mode 100644 public/-/emojis/2/man_police_officer_tone3.png delete mode 100644 public/-/emojis/2/man_police_officer_tone4.png delete mode 100644 public/-/emojis/2/man_police_officer_tone5.png delete mode 100644 public/-/emojis/2/man_pouting.png delete mode 100644 public/-/emojis/2/man_pouting_tone1.png delete mode 100644 public/-/emojis/2/man_pouting_tone2.png delete mode 100644 public/-/emojis/2/man_pouting_tone3.png delete mode 100644 public/-/emojis/2/man_pouting_tone4.png delete mode 100644 public/-/emojis/2/man_pouting_tone5.png delete mode 100644 public/-/emojis/2/man_raising_hand.png delete mode 100644 public/-/emojis/2/man_raising_hand_tone1.png delete mode 100644 public/-/emojis/2/man_raising_hand_tone2.png delete mode 100644 public/-/emojis/2/man_raising_hand_tone3.png delete mode 100644 public/-/emojis/2/man_raising_hand_tone4.png delete mode 100644 public/-/emojis/2/man_raising_hand_tone5.png delete mode 100644 public/-/emojis/2/man_red_haired.png delete mode 100644 public/-/emojis/2/man_red_haired_tone1.png delete mode 100644 public/-/emojis/2/man_red_haired_tone2.png delete mode 100644 public/-/emojis/2/man_red_haired_tone3.png delete mode 100644 public/-/emojis/2/man_red_haired_tone4.png delete mode 100644 public/-/emojis/2/man_red_haired_tone5.png delete mode 100644 public/-/emojis/2/man_rowing_boat.png delete mode 100644 public/-/emojis/2/man_rowing_boat_tone1.png delete mode 100644 public/-/emojis/2/man_rowing_boat_tone2.png delete mode 100644 public/-/emojis/2/man_rowing_boat_tone3.png delete mode 100644 public/-/emojis/2/man_rowing_boat_tone4.png delete mode 100644 public/-/emojis/2/man_rowing_boat_tone5.png delete mode 100644 public/-/emojis/2/man_running.png delete mode 100644 public/-/emojis/2/man_running_tone1.png delete mode 100644 public/-/emojis/2/man_running_tone2.png delete mode 100644 public/-/emojis/2/man_running_tone3.png delete mode 100644 public/-/emojis/2/man_running_tone4.png delete mode 100644 public/-/emojis/2/man_running_tone5.png delete mode 100644 public/-/emojis/2/man_scientist.png delete mode 100644 public/-/emojis/2/man_scientist_tone1.png delete mode 100644 public/-/emojis/2/man_scientist_tone2.png delete mode 100644 public/-/emojis/2/man_scientist_tone3.png delete mode 100644 public/-/emojis/2/man_scientist_tone4.png delete mode 100644 public/-/emojis/2/man_scientist_tone5.png delete mode 100644 public/-/emojis/2/man_shrugging.png delete mode 100644 public/-/emojis/2/man_shrugging_tone1.png delete mode 100644 public/-/emojis/2/man_shrugging_tone2.png delete mode 100644 public/-/emojis/2/man_shrugging_tone3.png delete mode 100644 public/-/emojis/2/man_shrugging_tone4.png delete mode 100644 public/-/emojis/2/man_shrugging_tone5.png delete mode 100644 public/-/emojis/2/man_singer.png delete mode 100644 public/-/emojis/2/man_singer_tone1.png delete mode 100644 public/-/emojis/2/man_singer_tone2.png delete mode 100644 public/-/emojis/2/man_singer_tone3.png delete mode 100644 public/-/emojis/2/man_singer_tone4.png delete mode 100644 public/-/emojis/2/man_singer_tone5.png delete mode 100644 public/-/emojis/2/man_student.png delete mode 100644 public/-/emojis/2/man_student_tone1.png delete mode 100644 public/-/emojis/2/man_student_tone2.png delete mode 100644 public/-/emojis/2/man_student_tone3.png delete mode 100644 public/-/emojis/2/man_student_tone4.png delete mode 100644 public/-/emojis/2/man_student_tone5.png delete mode 100644 public/-/emojis/2/man_superhero.png delete mode 100644 public/-/emojis/2/man_superhero_tone1.png delete mode 100644 public/-/emojis/2/man_superhero_tone2.png delete mode 100644 public/-/emojis/2/man_superhero_tone3.png delete mode 100644 public/-/emojis/2/man_superhero_tone4.png delete mode 100644 public/-/emojis/2/man_superhero_tone5.png delete mode 100644 public/-/emojis/2/man_supervillain.png delete mode 100644 public/-/emojis/2/man_supervillain_tone1.png delete mode 100644 public/-/emojis/2/man_supervillain_tone2.png delete mode 100644 public/-/emojis/2/man_supervillain_tone3.png delete mode 100644 public/-/emojis/2/man_supervillain_tone4.png delete mode 100644 public/-/emojis/2/man_supervillain_tone5.png delete mode 100644 public/-/emojis/2/man_surfing.png delete mode 100644 public/-/emojis/2/man_surfing_tone1.png delete mode 100644 public/-/emojis/2/man_surfing_tone2.png delete mode 100644 public/-/emojis/2/man_surfing_tone3.png delete mode 100644 public/-/emojis/2/man_surfing_tone4.png delete mode 100644 public/-/emojis/2/man_surfing_tone5.png delete mode 100644 public/-/emojis/2/man_swimming.png delete mode 100644 public/-/emojis/2/man_swimming_tone1.png delete mode 100644 public/-/emojis/2/man_swimming_tone2.png delete mode 100644 public/-/emojis/2/man_swimming_tone3.png delete mode 100644 public/-/emojis/2/man_swimming_tone4.png delete mode 100644 public/-/emojis/2/man_swimming_tone5.png delete mode 100644 public/-/emojis/2/man_teacher.png delete mode 100644 public/-/emojis/2/man_teacher_tone1.png delete mode 100644 public/-/emojis/2/man_teacher_tone2.png delete mode 100644 public/-/emojis/2/man_teacher_tone3.png delete mode 100644 public/-/emojis/2/man_teacher_tone4.png delete mode 100644 public/-/emojis/2/man_teacher_tone5.png delete mode 100644 public/-/emojis/2/man_technologist.png delete mode 100644 public/-/emojis/2/man_technologist_tone1.png delete mode 100644 public/-/emojis/2/man_technologist_tone2.png delete mode 100644 public/-/emojis/2/man_technologist_tone3.png delete mode 100644 public/-/emojis/2/man_technologist_tone4.png delete mode 100644 public/-/emojis/2/man_technologist_tone5.png delete mode 100644 public/-/emojis/2/man_tipping_hand.png delete mode 100644 public/-/emojis/2/man_tipping_hand_tone1.png delete mode 100644 public/-/emojis/2/man_tipping_hand_tone2.png delete mode 100644 public/-/emojis/2/man_tipping_hand_tone3.png delete mode 100644 public/-/emojis/2/man_tipping_hand_tone4.png delete mode 100644 public/-/emojis/2/man_tipping_hand_tone5.png delete mode 100644 public/-/emojis/2/man_tone1.png delete mode 100644 public/-/emojis/2/man_tone2.png delete mode 100644 public/-/emojis/2/man_tone3.png delete mode 100644 public/-/emojis/2/man_tone4.png delete mode 100644 public/-/emojis/2/man_tone5.png delete mode 100644 public/-/emojis/2/man_vampire.png delete mode 100644 public/-/emojis/2/man_vampire_tone1.png delete mode 100644 public/-/emojis/2/man_vampire_tone2.png delete mode 100644 public/-/emojis/2/man_vampire_tone3.png delete mode 100644 public/-/emojis/2/man_vampire_tone4.png delete mode 100644 public/-/emojis/2/man_vampire_tone5.png delete mode 100644 public/-/emojis/2/man_walking.png delete mode 100644 public/-/emojis/2/man_walking_tone1.png delete mode 100644 public/-/emojis/2/man_walking_tone2.png delete mode 100644 public/-/emojis/2/man_walking_tone3.png delete mode 100644 public/-/emojis/2/man_walking_tone4.png delete mode 100644 public/-/emojis/2/man_walking_tone5.png delete mode 100644 public/-/emojis/2/man_wearing_turban.png delete mode 100644 public/-/emojis/2/man_wearing_turban_tone1.png delete mode 100644 public/-/emojis/2/man_wearing_turban_tone2.png delete mode 100644 public/-/emojis/2/man_wearing_turban_tone3.png delete mode 100644 public/-/emojis/2/man_wearing_turban_tone4.png delete mode 100644 public/-/emojis/2/man_wearing_turban_tone5.png delete mode 100644 public/-/emojis/2/man_white_haired.png delete mode 100644 public/-/emojis/2/man_white_haired_tone1.png delete mode 100644 public/-/emojis/2/man_white_haired_tone2.png delete mode 100644 public/-/emojis/2/man_white_haired_tone3.png delete mode 100644 public/-/emojis/2/man_white_haired_tone4.png delete mode 100644 public/-/emojis/2/man_white_haired_tone5.png delete mode 100644 public/-/emojis/2/man_with_gua_pi_mao.png delete mode 100644 public/-/emojis/2/man_with_gua_pi_mao_tone1.png delete mode 100644 public/-/emojis/2/man_with_gua_pi_mao_tone2.png delete mode 100644 public/-/emojis/2/man_with_gua_pi_mao_tone3.png delete mode 100644 public/-/emojis/2/man_with_gua_pi_mao_tone4.png delete mode 100644 public/-/emojis/2/man_with_gua_pi_mao_tone5.png delete mode 100644 public/-/emojis/2/man_with_turban.png delete mode 100644 public/-/emojis/2/man_with_turban_tone1.png delete mode 100644 public/-/emojis/2/man_with_turban_tone2.png delete mode 100644 public/-/emojis/2/man_with_turban_tone3.png delete mode 100644 public/-/emojis/2/man_with_turban_tone4.png delete mode 100644 public/-/emojis/2/man_with_turban_tone5.png delete mode 100644 public/-/emojis/2/man_zombie.png delete mode 100644 public/-/emojis/2/mango.png delete mode 100644 public/-/emojis/2/mans_shoe.png delete mode 100644 public/-/emojis/2/map.png delete mode 100644 public/-/emojis/2/maple_leaf.png delete mode 100644 public/-/emojis/2/martial_arts_uniform.png delete mode 100644 public/-/emojis/2/mask.png delete mode 100644 public/-/emojis/2/massage.png delete mode 100644 public/-/emojis/2/massage_tone1.png delete mode 100644 public/-/emojis/2/massage_tone2.png delete mode 100644 public/-/emojis/2/massage_tone3.png delete mode 100644 public/-/emojis/2/massage_tone4.png delete mode 100644 public/-/emojis/2/massage_tone5.png delete mode 100644 public/-/emojis/2/meat_on_bone.png delete mode 100644 public/-/emojis/2/medal.png delete mode 100644 public/-/emojis/2/medical_symbol.png delete mode 100644 public/-/emojis/2/mega.png delete mode 100644 public/-/emojis/2/melon.png delete mode 100644 public/-/emojis/2/men_with_bunny_ears_partying.png delete mode 100644 public/-/emojis/2/men_wrestling.png delete mode 100644 public/-/emojis/2/menorah.png delete mode 100644 public/-/emojis/2/mens.png delete mode 100644 public/-/emojis/2/mermaid.png delete mode 100644 public/-/emojis/2/mermaid_tone1.png delete mode 100644 public/-/emojis/2/mermaid_tone2.png delete mode 100644 public/-/emojis/2/mermaid_tone3.png delete mode 100644 public/-/emojis/2/mermaid_tone4.png delete mode 100644 public/-/emojis/2/mermaid_tone5.png delete mode 100644 public/-/emojis/2/merman.png delete mode 100644 public/-/emojis/2/merman_tone1.png delete mode 100644 public/-/emojis/2/merman_tone2.png delete mode 100644 public/-/emojis/2/merman_tone3.png delete mode 100644 public/-/emojis/2/merman_tone4.png delete mode 100644 public/-/emojis/2/merman_tone5.png delete mode 100644 public/-/emojis/2/merperson.png delete mode 100644 public/-/emojis/2/merperson_tone1.png delete mode 100644 public/-/emojis/2/merperson_tone2.png delete mode 100644 public/-/emojis/2/merperson_tone3.png delete mode 100644 public/-/emojis/2/merperson_tone4.png delete mode 100644 public/-/emojis/2/merperson_tone5.png delete mode 100644 public/-/emojis/2/metal.png delete mode 100644 public/-/emojis/2/metal_tone1.png delete mode 100644 public/-/emojis/2/metal_tone2.png delete mode 100644 public/-/emojis/2/metal_tone3.png delete mode 100644 public/-/emojis/2/metal_tone4.png delete mode 100644 public/-/emojis/2/metal_tone5.png delete mode 100644 public/-/emojis/2/metro.png delete mode 100644 public/-/emojis/2/microbe.png delete mode 100644 public/-/emojis/2/microphone.png delete mode 100644 public/-/emojis/2/microphone2.png delete mode 100644 public/-/emojis/2/microscope.png delete mode 100644 public/-/emojis/2/middle_finger.png delete mode 100644 public/-/emojis/2/middle_finger_tone1.png delete mode 100644 public/-/emojis/2/middle_finger_tone2.png delete mode 100644 public/-/emojis/2/middle_finger_tone3.png delete mode 100644 public/-/emojis/2/middle_finger_tone4.png delete mode 100644 public/-/emojis/2/middle_finger_tone5.png delete mode 100644 public/-/emojis/2/military_medal.png delete mode 100644 public/-/emojis/2/milk.png delete mode 100644 public/-/emojis/2/milky_way.png delete mode 100644 public/-/emojis/2/minibus.png delete mode 100644 public/-/emojis/2/minidisc.png delete mode 100644 public/-/emojis/2/mobile_phone_off.png delete mode 100644 public/-/emojis/2/money_mouth.png delete mode 100644 public/-/emojis/2/money_with_wings.png delete mode 100644 public/-/emojis/2/moneybag.png delete mode 100644 public/-/emojis/2/monkey.png delete mode 100644 public/-/emojis/2/monkey_face.png delete mode 100644 public/-/emojis/2/monorail.png delete mode 100644 public/-/emojis/2/moon_cake.png delete mode 100644 public/-/emojis/2/mortar_board.png delete mode 100644 public/-/emojis/2/mosque.png delete mode 100644 public/-/emojis/2/mosquito.png delete mode 100644 public/-/emojis/2/motor_scooter.png delete mode 100644 public/-/emojis/2/motorboat.png delete mode 100644 public/-/emojis/2/motorcycle.png delete mode 100644 public/-/emojis/2/motorway.png delete mode 100644 public/-/emojis/2/mount_fuji.png delete mode 100644 public/-/emojis/2/mountain.png delete mode 100644 public/-/emojis/2/mountain_bicyclist.png delete mode 100644 public/-/emojis/2/mountain_bicyclist_tone1.png delete mode 100644 public/-/emojis/2/mountain_bicyclist_tone2.png delete mode 100644 public/-/emojis/2/mountain_bicyclist_tone3.png delete mode 100644 public/-/emojis/2/mountain_bicyclist_tone4.png delete mode 100644 public/-/emojis/2/mountain_bicyclist_tone5.png delete mode 100644 public/-/emojis/2/mountain_cableway.png delete mode 100644 public/-/emojis/2/mountain_railway.png delete mode 100644 public/-/emojis/2/mountain_snow.png delete mode 100644 public/-/emojis/2/mouse.png delete mode 100644 public/-/emojis/2/mouse2.png delete mode 100644 public/-/emojis/2/mouse_three_button.png delete mode 100644 public/-/emojis/2/movie_camera.png delete mode 100644 public/-/emojis/2/moyai.png delete mode 100644 public/-/emojis/2/mrs_claus.png delete mode 100644 public/-/emojis/2/mrs_claus_tone1.png delete mode 100644 public/-/emojis/2/mrs_claus_tone2.png delete mode 100644 public/-/emojis/2/mrs_claus_tone3.png delete mode 100644 public/-/emojis/2/mrs_claus_tone4.png delete mode 100644 public/-/emojis/2/mrs_claus_tone5.png delete mode 100644 public/-/emojis/2/muscle.png delete mode 100644 public/-/emojis/2/muscle_tone1.png delete mode 100644 public/-/emojis/2/muscle_tone2.png delete mode 100644 public/-/emojis/2/muscle_tone3.png delete mode 100644 public/-/emojis/2/muscle_tone4.png delete mode 100644 public/-/emojis/2/muscle_tone5.png delete mode 100644 public/-/emojis/2/mushroom.png delete mode 100644 public/-/emojis/2/musical_keyboard.png delete mode 100644 public/-/emojis/2/musical_note.png delete mode 100644 public/-/emojis/2/musical_score.png delete mode 100644 public/-/emojis/2/mute.png delete mode 100644 public/-/emojis/2/nail_care.png delete mode 100644 public/-/emojis/2/nail_care_tone1.png delete mode 100644 public/-/emojis/2/nail_care_tone2.png delete mode 100644 public/-/emojis/2/nail_care_tone3.png delete mode 100644 public/-/emojis/2/nail_care_tone4.png delete mode 100644 public/-/emojis/2/nail_care_tone5.png delete mode 100644 public/-/emojis/2/name_badge.png delete mode 100644 public/-/emojis/2/nauseated_face.png delete mode 100644 public/-/emojis/2/nazar_amulet.png delete mode 100644 public/-/emojis/2/necktie.png delete mode 100644 public/-/emojis/2/negative_squared_cross_mark.png delete mode 100644 public/-/emojis/2/nerd.png delete mode 100644 public/-/emojis/2/neutral_face.png delete mode 100644 public/-/emojis/2/new.png delete mode 100644 public/-/emojis/2/new_moon.png delete mode 100644 public/-/emojis/2/new_moon_with_face.png delete mode 100644 public/-/emojis/2/newspaper.png delete mode 100644 public/-/emojis/2/newspaper2.png delete mode 100644 public/-/emojis/2/ng.png delete mode 100644 public/-/emojis/2/night_with_stars.png delete mode 100644 public/-/emojis/2/nine.png delete mode 100644 public/-/emojis/2/no_bell.png delete mode 100644 public/-/emojis/2/no_bicycles.png delete mode 100644 public/-/emojis/2/no_entry.png delete mode 100644 public/-/emojis/2/no_entry_sign.png delete mode 100644 public/-/emojis/2/no_good.png delete mode 100644 public/-/emojis/2/no_good_tone1.png delete mode 100644 public/-/emojis/2/no_good_tone2.png delete mode 100644 public/-/emojis/2/no_good_tone3.png delete mode 100644 public/-/emojis/2/no_good_tone4.png delete mode 100644 public/-/emojis/2/no_good_tone5.png delete mode 100644 public/-/emojis/2/no_mobile_phones.png delete mode 100644 public/-/emojis/2/no_mouth.png delete mode 100644 public/-/emojis/2/no_pedestrians.png delete mode 100644 public/-/emojis/2/no_smoking.png delete mode 100644 public/-/emojis/2/non-potable_water.png delete mode 100644 public/-/emojis/2/nose.png delete mode 100644 public/-/emojis/2/nose_tone1.png delete mode 100644 public/-/emojis/2/nose_tone2.png delete mode 100644 public/-/emojis/2/nose_tone3.png delete mode 100644 public/-/emojis/2/nose_tone4.png delete mode 100644 public/-/emojis/2/nose_tone5.png delete mode 100644 public/-/emojis/2/notebook.png delete mode 100644 public/-/emojis/2/notebook_with_decorative_cover.png delete mode 100644 public/-/emojis/2/notepad_spiral.png delete mode 100644 public/-/emojis/2/notes.png delete mode 100644 public/-/emojis/2/nut_and_bolt.png delete mode 100644 public/-/emojis/2/o.png delete mode 100644 public/-/emojis/2/o2.png delete mode 100644 public/-/emojis/2/ocean.png delete mode 100644 public/-/emojis/2/octagonal_sign.png delete mode 100644 public/-/emojis/2/octopus.png delete mode 100644 public/-/emojis/2/oden.png delete mode 100644 public/-/emojis/2/office.png delete mode 100644 public/-/emojis/2/oil.png delete mode 100644 public/-/emojis/2/ok.png delete mode 100644 public/-/emojis/2/ok_hand.png delete mode 100644 public/-/emojis/2/ok_hand_tone1.png delete mode 100644 public/-/emojis/2/ok_hand_tone2.png delete mode 100644 public/-/emojis/2/ok_hand_tone3.png delete mode 100644 public/-/emojis/2/ok_hand_tone4.png delete mode 100644 public/-/emojis/2/ok_hand_tone5.png delete mode 100644 public/-/emojis/2/ok_woman.png delete mode 100644 public/-/emojis/2/ok_woman_tone1.png delete mode 100644 public/-/emojis/2/ok_woman_tone2.png delete mode 100644 public/-/emojis/2/ok_woman_tone3.png delete mode 100644 public/-/emojis/2/ok_woman_tone4.png delete mode 100644 public/-/emojis/2/ok_woman_tone5.png delete mode 100644 public/-/emojis/2/older_adult.png delete mode 100644 public/-/emojis/2/older_adult_tone1.png delete mode 100644 public/-/emojis/2/older_adult_tone2.png delete mode 100644 public/-/emojis/2/older_adult_tone3.png delete mode 100644 public/-/emojis/2/older_adult_tone4.png delete mode 100644 public/-/emojis/2/older_adult_tone5.png delete mode 100644 public/-/emojis/2/older_man.png delete mode 100644 public/-/emojis/2/older_man_tone1.png delete mode 100644 public/-/emojis/2/older_man_tone2.png delete mode 100644 public/-/emojis/2/older_man_tone3.png delete mode 100644 public/-/emojis/2/older_man_tone4.png delete mode 100644 public/-/emojis/2/older_man_tone5.png delete mode 100644 public/-/emojis/2/older_woman.png delete mode 100644 public/-/emojis/2/older_woman_tone1.png delete mode 100644 public/-/emojis/2/older_woman_tone2.png delete mode 100644 public/-/emojis/2/older_woman_tone3.png delete mode 100644 public/-/emojis/2/older_woman_tone4.png delete mode 100644 public/-/emojis/2/older_woman_tone5.png delete mode 100644 public/-/emojis/2/om_symbol.png delete mode 100644 public/-/emojis/2/on.png delete mode 100644 public/-/emojis/2/oncoming_automobile.png delete mode 100644 public/-/emojis/2/oncoming_bus.png delete mode 100644 public/-/emojis/2/oncoming_police_car.png delete mode 100644 public/-/emojis/2/oncoming_taxi.png delete mode 100644 public/-/emojis/2/one.png delete mode 100644 public/-/emojis/2/open_file_folder.png delete mode 100644 public/-/emojis/2/open_hands.png delete mode 100644 public/-/emojis/2/open_hands_tone1.png delete mode 100644 public/-/emojis/2/open_hands_tone2.png delete mode 100644 public/-/emojis/2/open_hands_tone3.png delete mode 100644 public/-/emojis/2/open_hands_tone4.png delete mode 100644 public/-/emojis/2/open_hands_tone5.png delete mode 100644 public/-/emojis/2/open_mouth.png delete mode 100644 public/-/emojis/2/open_umbrella.png delete mode 100644 public/-/emojis/2/ophiuchus.png delete mode 100644 public/-/emojis/2/orange_book.png delete mode 100644 public/-/emojis/2/orange_heart.png delete mode 100644 public/-/emojis/2/orthodox_cross.png delete mode 100644 public/-/emojis/2/outbox_tray.png delete mode 100644 public/-/emojis/2/owl.png delete mode 100644 public/-/emojis/2/ox.png delete mode 100644 public/-/emojis/2/package.png delete mode 100644 public/-/emojis/2/page_facing_up.png delete mode 100644 public/-/emojis/2/page_with_curl.png delete mode 100644 public/-/emojis/2/pager.png delete mode 100644 public/-/emojis/2/paintbrush.png delete mode 100644 public/-/emojis/2/palm_tree.png delete mode 100644 public/-/emojis/2/palms_up_together.png delete mode 100644 public/-/emojis/2/palms_up_together_tone1.png delete mode 100644 public/-/emojis/2/palms_up_together_tone2.png delete mode 100644 public/-/emojis/2/palms_up_together_tone3.png delete mode 100644 public/-/emojis/2/palms_up_together_tone4.png delete mode 100644 public/-/emojis/2/palms_up_together_tone5.png delete mode 100644 public/-/emojis/2/pancakes.png delete mode 100644 public/-/emojis/2/panda_face.png delete mode 100644 public/-/emojis/2/paperclip.png delete mode 100644 public/-/emojis/2/paperclips.png delete mode 100644 public/-/emojis/2/park.png delete mode 100644 public/-/emojis/2/parking.png delete mode 100644 public/-/emojis/2/parrot.png delete mode 100644 public/-/emojis/2/part_alternation_mark.png delete mode 100644 public/-/emojis/2/partly_sunny.png delete mode 100644 public/-/emojis/2/partying_face.png delete mode 100644 public/-/emojis/2/passport_control.png delete mode 100644 public/-/emojis/2/pause_button.png delete mode 100644 public/-/emojis/2/peace.png delete mode 100644 public/-/emojis/2/peach.png delete mode 100644 public/-/emojis/2/peacock.png delete mode 100644 public/-/emojis/2/peanuts.png delete mode 100644 public/-/emojis/2/pear.png delete mode 100644 public/-/emojis/2/pen_ballpoint.png delete mode 100644 public/-/emojis/2/pen_fountain.png delete mode 100644 public/-/emojis/2/pencil.png delete mode 100644 public/-/emojis/2/pencil2.png delete mode 100644 public/-/emojis/2/penguin.png delete mode 100644 public/-/emojis/2/pensive.png delete mode 100644 public/-/emojis/2/performing_arts.png delete mode 100644 public/-/emojis/2/persevere.png delete mode 100644 public/-/emojis/2/person_climbing.png delete mode 100644 public/-/emojis/2/person_climbing_tone1.png delete mode 100644 public/-/emojis/2/person_climbing_tone2.png delete mode 100644 public/-/emojis/2/person_climbing_tone3.png delete mode 100644 public/-/emojis/2/person_climbing_tone4.png delete mode 100644 public/-/emojis/2/person_climbing_tone5.png delete mode 100644 public/-/emojis/2/person_frowning.png delete mode 100644 public/-/emojis/2/person_frowning_tone1.png delete mode 100644 public/-/emojis/2/person_frowning_tone2.png delete mode 100644 public/-/emojis/2/person_frowning_tone3.png delete mode 100644 public/-/emojis/2/person_frowning_tone4.png delete mode 100644 public/-/emojis/2/person_frowning_tone5.png delete mode 100644 public/-/emojis/2/person_golfing_tone1.png delete mode 100644 public/-/emojis/2/person_golfing_tone2.png delete mode 100644 public/-/emojis/2/person_golfing_tone3.png delete mode 100644 public/-/emojis/2/person_golfing_tone4.png delete mode 100644 public/-/emojis/2/person_golfing_tone5.png delete mode 100644 public/-/emojis/2/person_in_bed_tone1.png delete mode 100644 public/-/emojis/2/person_in_bed_tone2.png delete mode 100644 public/-/emojis/2/person_in_bed_tone3.png delete mode 100644 public/-/emojis/2/person_in_bed_tone4.png delete mode 100644 public/-/emojis/2/person_in_bed_tone5.png delete mode 100644 public/-/emojis/2/person_in_lotus_position.png delete mode 100644 public/-/emojis/2/person_in_lotus_position_tone1.png delete mode 100644 public/-/emojis/2/person_in_lotus_position_tone2.png delete mode 100644 public/-/emojis/2/person_in_lotus_position_tone3.png delete mode 100644 public/-/emojis/2/person_in_lotus_position_tone4.png delete mode 100644 public/-/emojis/2/person_in_lotus_position_tone5.png delete mode 100644 public/-/emojis/2/person_in_steamy_room.png delete mode 100644 public/-/emojis/2/person_in_steamy_room_tone1.png delete mode 100644 public/-/emojis/2/person_in_steamy_room_tone2.png delete mode 100644 public/-/emojis/2/person_in_steamy_room_tone3.png delete mode 100644 public/-/emojis/2/person_in_steamy_room_tone4.png delete mode 100644 public/-/emojis/2/person_in_steamy_room_tone5.png delete mode 100644 public/-/emojis/2/person_with_blond_hair.png delete mode 100644 public/-/emojis/2/person_with_blond_hair_tone1.png delete mode 100644 public/-/emojis/2/person_with_blond_hair_tone2.png delete mode 100644 public/-/emojis/2/person_with_blond_hair_tone3.png delete mode 100644 public/-/emojis/2/person_with_blond_hair_tone4.png delete mode 100644 public/-/emojis/2/person_with_blond_hair_tone5.png delete mode 100644 public/-/emojis/2/person_with_pouting_face.png delete mode 100644 public/-/emojis/2/person_with_pouting_face_tone1.png delete mode 100644 public/-/emojis/2/person_with_pouting_face_tone2.png delete mode 100644 public/-/emojis/2/person_with_pouting_face_tone3.png delete mode 100644 public/-/emojis/2/person_with_pouting_face_tone4.png delete mode 100644 public/-/emojis/2/person_with_pouting_face_tone5.png delete mode 100644 public/-/emojis/2/petri_dish.png delete mode 100644 public/-/emojis/2/phone.png delete mode 100644 public/-/emojis/2/pick.png delete mode 100644 public/-/emojis/2/pie.png delete mode 100644 public/-/emojis/2/pig.png delete mode 100644 public/-/emojis/2/pig2.png delete mode 100644 public/-/emojis/2/pig_nose.png delete mode 100644 public/-/emojis/2/pill.png delete mode 100644 public/-/emojis/2/pineapple.png delete mode 100644 public/-/emojis/2/ping_pong.png delete mode 100644 public/-/emojis/2/pirate_flag.png delete mode 100644 public/-/emojis/2/pisces.png delete mode 100644 public/-/emojis/2/pizza.png delete mode 100644 public/-/emojis/2/place_of_worship.png delete mode 100644 public/-/emojis/2/play_pause.png delete mode 100644 public/-/emojis/2/pleading_face.png delete mode 100644 public/-/emojis/2/point_down.png delete mode 100644 public/-/emojis/2/point_down_tone1.png delete mode 100644 public/-/emojis/2/point_down_tone2.png delete mode 100644 public/-/emojis/2/point_down_tone3.png delete mode 100644 public/-/emojis/2/point_down_tone4.png delete mode 100644 public/-/emojis/2/point_down_tone5.png delete mode 100644 public/-/emojis/2/point_left.png delete mode 100644 public/-/emojis/2/point_left_tone1.png delete mode 100644 public/-/emojis/2/point_left_tone2.png delete mode 100644 public/-/emojis/2/point_left_tone3.png delete mode 100644 public/-/emojis/2/point_left_tone4.png delete mode 100644 public/-/emojis/2/point_left_tone5.png delete mode 100644 public/-/emojis/2/point_right.png delete mode 100644 public/-/emojis/2/point_right_tone1.png delete mode 100644 public/-/emojis/2/point_right_tone2.png delete mode 100644 public/-/emojis/2/point_right_tone3.png delete mode 100644 public/-/emojis/2/point_right_tone4.png delete mode 100644 public/-/emojis/2/point_right_tone5.png delete mode 100644 public/-/emojis/2/point_up.png delete mode 100644 public/-/emojis/2/point_up_2.png delete mode 100644 public/-/emojis/2/point_up_2_tone1.png delete mode 100644 public/-/emojis/2/point_up_2_tone2.png delete mode 100644 public/-/emojis/2/point_up_2_tone3.png delete mode 100644 public/-/emojis/2/point_up_2_tone4.png delete mode 100644 public/-/emojis/2/point_up_2_tone5.png delete mode 100644 public/-/emojis/2/point_up_tone1.png delete mode 100644 public/-/emojis/2/point_up_tone2.png delete mode 100644 public/-/emojis/2/point_up_tone3.png delete mode 100644 public/-/emojis/2/point_up_tone4.png delete mode 100644 public/-/emojis/2/point_up_tone5.png delete mode 100644 public/-/emojis/2/police_car.png delete mode 100644 public/-/emojis/2/poodle.png delete mode 100644 public/-/emojis/2/poop.png delete mode 100644 public/-/emojis/2/popcorn.png delete mode 100644 public/-/emojis/2/post_office.png delete mode 100644 public/-/emojis/2/postal_horn.png delete mode 100644 public/-/emojis/2/postbox.png delete mode 100644 public/-/emojis/2/potable_water.png delete mode 100644 public/-/emojis/2/potato.png delete mode 100644 public/-/emojis/2/pouch.png delete mode 100644 public/-/emojis/2/poultry_leg.png delete mode 100644 public/-/emojis/2/pound.png delete mode 100644 public/-/emojis/2/pound_symbol.png delete mode 100644 public/-/emojis/2/pouting_cat.png delete mode 100644 public/-/emojis/2/pray.png delete mode 100644 public/-/emojis/2/pray_tone1.png delete mode 100644 public/-/emojis/2/pray_tone2.png delete mode 100644 public/-/emojis/2/pray_tone3.png delete mode 100644 public/-/emojis/2/pray_tone4.png delete mode 100644 public/-/emojis/2/pray_tone5.png delete mode 100644 public/-/emojis/2/prayer_beads.png delete mode 100644 public/-/emojis/2/pregnant_woman.png delete mode 100644 public/-/emojis/2/pregnant_woman_tone1.png delete mode 100644 public/-/emojis/2/pregnant_woman_tone2.png delete mode 100644 public/-/emojis/2/pregnant_woman_tone3.png delete mode 100644 public/-/emojis/2/pregnant_woman_tone4.png delete mode 100644 public/-/emojis/2/pregnant_woman_tone5.png delete mode 100644 public/-/emojis/2/pretzel.png delete mode 100644 public/-/emojis/2/prince.png delete mode 100644 public/-/emojis/2/prince_tone1.png delete mode 100644 public/-/emojis/2/prince_tone2.png delete mode 100644 public/-/emojis/2/prince_tone3.png delete mode 100644 public/-/emojis/2/prince_tone4.png delete mode 100644 public/-/emojis/2/prince_tone5.png delete mode 100644 public/-/emojis/2/princess.png delete mode 100644 public/-/emojis/2/princess_tone1.png delete mode 100644 public/-/emojis/2/princess_tone2.png delete mode 100644 public/-/emojis/2/princess_tone3.png delete mode 100644 public/-/emojis/2/princess_tone4.png delete mode 100644 public/-/emojis/2/princess_tone5.png delete mode 100644 public/-/emojis/2/printer.png delete mode 100644 public/-/emojis/2/projector.png delete mode 100644 public/-/emojis/2/punch.png delete mode 100644 public/-/emojis/2/punch_tone1.png delete mode 100644 public/-/emojis/2/punch_tone2.png delete mode 100644 public/-/emojis/2/punch_tone3.png delete mode 100644 public/-/emojis/2/punch_tone4.png delete mode 100644 public/-/emojis/2/punch_tone5.png delete mode 100644 public/-/emojis/2/purple_heart.png delete mode 100644 public/-/emojis/2/purse.png delete mode 100644 public/-/emojis/2/pushpin.png delete mode 100644 public/-/emojis/2/put_litter_in_its_place.png delete mode 100644 public/-/emojis/2/question.png delete mode 100644 public/-/emojis/2/rabbit.png delete mode 100644 public/-/emojis/2/rabbit2.png delete mode 100644 public/-/emojis/2/raccoon.png delete mode 100644 public/-/emojis/2/race_car.png delete mode 100644 public/-/emojis/2/racehorse.png delete mode 100644 public/-/emojis/2/radio.png delete mode 100644 public/-/emojis/2/radio_button.png delete mode 100644 public/-/emojis/2/radioactive.png delete mode 100644 public/-/emojis/2/rage.png delete mode 100644 public/-/emojis/2/railway_car.png delete mode 100644 public/-/emojis/2/railway_track.png delete mode 100644 public/-/emojis/2/rainbow.png delete mode 100644 public/-/emojis/2/raised_back_of_hand.png delete mode 100644 public/-/emojis/2/raised_back_of_hand_tone1.png delete mode 100644 public/-/emojis/2/raised_back_of_hand_tone2.png delete mode 100644 public/-/emojis/2/raised_back_of_hand_tone3.png delete mode 100644 public/-/emojis/2/raised_back_of_hand_tone4.png delete mode 100644 public/-/emojis/2/raised_back_of_hand_tone5.png delete mode 100644 public/-/emojis/2/raised_hand.png delete mode 100644 public/-/emojis/2/raised_hand_tone1.png delete mode 100644 public/-/emojis/2/raised_hand_tone2.png delete mode 100644 public/-/emojis/2/raised_hand_tone3.png delete mode 100644 public/-/emojis/2/raised_hand_tone4.png delete mode 100644 public/-/emojis/2/raised_hand_tone5.png delete mode 100644 public/-/emojis/2/raised_hands.png delete mode 100644 public/-/emojis/2/raised_hands_tone1.png delete mode 100644 public/-/emojis/2/raised_hands_tone2.png delete mode 100644 public/-/emojis/2/raised_hands_tone3.png delete mode 100644 public/-/emojis/2/raised_hands_tone4.png delete mode 100644 public/-/emojis/2/raised_hands_tone5.png delete mode 100644 public/-/emojis/2/raising_hand.png delete mode 100644 public/-/emojis/2/raising_hand_tone1.png delete mode 100644 public/-/emojis/2/raising_hand_tone2.png delete mode 100644 public/-/emojis/2/raising_hand_tone3.png delete mode 100644 public/-/emojis/2/raising_hand_tone4.png delete mode 100644 public/-/emojis/2/raising_hand_tone5.png delete mode 100644 public/-/emojis/2/ram.png delete mode 100644 public/-/emojis/2/ramen.png delete mode 100644 public/-/emojis/2/rat.png delete mode 100644 public/-/emojis/2/receipt.png delete mode 100644 public/-/emojis/2/record_button.png delete mode 100644 public/-/emojis/2/recycle.png delete mode 100644 public/-/emojis/2/red_car.png delete mode 100644 public/-/emojis/2/red_circle.png delete mode 100644 public/-/emojis/2/red_envelope.png delete mode 100644 public/-/emojis/2/red_haired.png delete mode 100644 public/-/emojis/2/regional_indicator_a.png delete mode 100644 public/-/emojis/2/regional_indicator_b.png delete mode 100644 public/-/emojis/2/regional_indicator_c.png delete mode 100644 public/-/emojis/2/regional_indicator_d.png delete mode 100644 public/-/emojis/2/regional_indicator_e.png delete mode 100644 public/-/emojis/2/regional_indicator_f.png delete mode 100644 public/-/emojis/2/regional_indicator_g.png delete mode 100644 public/-/emojis/2/regional_indicator_h.png delete mode 100644 public/-/emojis/2/regional_indicator_i.png delete mode 100644 public/-/emojis/2/regional_indicator_j.png delete mode 100644 public/-/emojis/2/regional_indicator_k.png delete mode 100644 public/-/emojis/2/regional_indicator_l.png delete mode 100644 public/-/emojis/2/regional_indicator_m.png delete mode 100644 public/-/emojis/2/regional_indicator_n.png delete mode 100644 public/-/emojis/2/regional_indicator_o.png delete mode 100644 public/-/emojis/2/regional_indicator_p.png delete mode 100644 public/-/emojis/2/regional_indicator_q.png delete mode 100644 public/-/emojis/2/regional_indicator_r.png delete mode 100644 public/-/emojis/2/regional_indicator_s.png delete mode 100644 public/-/emojis/2/regional_indicator_t.png delete mode 100644 public/-/emojis/2/regional_indicator_u.png delete mode 100644 public/-/emojis/2/regional_indicator_v.png delete mode 100644 public/-/emojis/2/regional_indicator_w.png delete mode 100644 public/-/emojis/2/regional_indicator_x.png delete mode 100644 public/-/emojis/2/regional_indicator_y.png delete mode 100644 public/-/emojis/2/regional_indicator_z.png delete mode 100644 public/-/emojis/2/registered.png delete mode 100644 public/-/emojis/2/relaxed.png delete mode 100644 public/-/emojis/2/relieved.png delete mode 100644 public/-/emojis/2/reminder_ribbon.png delete mode 100644 public/-/emojis/2/repeat.png delete mode 100644 public/-/emojis/2/repeat_one.png delete mode 100644 public/-/emojis/2/restroom.png delete mode 100644 public/-/emojis/2/revolving_hearts.png delete mode 100644 public/-/emojis/2/rewind.png delete mode 100644 public/-/emojis/2/rhino.png delete mode 100644 public/-/emojis/2/ribbon.png delete mode 100644 public/-/emojis/2/rice.png delete mode 100644 public/-/emojis/2/rice_ball.png delete mode 100644 public/-/emojis/2/rice_cracker.png delete mode 100644 public/-/emojis/2/rice_scene.png delete mode 100644 public/-/emojis/2/right_facing_fist.png delete mode 100644 public/-/emojis/2/right_facing_fist_tone1.png delete mode 100644 public/-/emojis/2/right_facing_fist_tone2.png delete mode 100644 public/-/emojis/2/right_facing_fist_tone3.png delete mode 100644 public/-/emojis/2/right_facing_fist_tone4.png delete mode 100644 public/-/emojis/2/right_facing_fist_tone5.png delete mode 100644 public/-/emojis/2/ring.png delete mode 100644 public/-/emojis/2/robot.png delete mode 100644 public/-/emojis/2/rocket.png delete mode 100644 public/-/emojis/2/rofl.png delete mode 100644 public/-/emojis/2/roll_of_paper.png delete mode 100644 public/-/emojis/2/roller_coaster.png delete mode 100644 public/-/emojis/2/rolling_eyes.png delete mode 100644 public/-/emojis/2/rooster.png delete mode 100644 public/-/emojis/2/rose.png delete mode 100644 public/-/emojis/2/rosette.png delete mode 100644 public/-/emojis/2/rotating_light.png delete mode 100644 public/-/emojis/2/round_pushpin.png delete mode 100644 public/-/emojis/2/rowboat.png delete mode 100644 public/-/emojis/2/rowboat_tone1.png delete mode 100644 public/-/emojis/2/rowboat_tone2.png delete mode 100644 public/-/emojis/2/rowboat_tone3.png delete mode 100644 public/-/emojis/2/rowboat_tone4.png delete mode 100644 public/-/emojis/2/rowboat_tone5.png delete mode 100644 public/-/emojis/2/rugby_football.png delete mode 100644 public/-/emojis/2/runner.png delete mode 100644 public/-/emojis/2/runner_tone1.png delete mode 100644 public/-/emojis/2/runner_tone2.png delete mode 100644 public/-/emojis/2/runner_tone3.png delete mode 100644 public/-/emojis/2/runner_tone4.png delete mode 100644 public/-/emojis/2/runner_tone5.png delete mode 100644 public/-/emojis/2/running_shirt_with_sash.png delete mode 100644 public/-/emojis/2/sa.png delete mode 100644 public/-/emojis/2/safety_pin.png delete mode 100644 public/-/emojis/2/sagittarius.png delete mode 100644 public/-/emojis/2/sake.png delete mode 100644 public/-/emojis/2/salad.png delete mode 100644 public/-/emojis/2/salt.png delete mode 100644 public/-/emojis/2/sandal.png delete mode 100644 public/-/emojis/2/sandwich.png delete mode 100644 public/-/emojis/2/santa.png delete mode 100644 public/-/emojis/2/santa_tone1.png delete mode 100644 public/-/emojis/2/santa_tone2.png delete mode 100644 public/-/emojis/2/santa_tone3.png delete mode 100644 public/-/emojis/2/santa_tone4.png delete mode 100644 public/-/emojis/2/santa_tone5.png delete mode 100644 public/-/emojis/2/satellite.png delete mode 100644 public/-/emojis/2/satellite_orbital.png delete mode 100644 public/-/emojis/2/sauropod.png delete mode 100644 public/-/emojis/2/saxophone.png delete mode 100644 public/-/emojis/2/scarf.png delete mode 100644 public/-/emojis/2/school.png delete mode 100644 public/-/emojis/2/school_satchel.png delete mode 100644 public/-/emojis/2/scissors.png delete mode 100644 public/-/emojis/2/scooter.png delete mode 100644 public/-/emojis/2/scorpion.png delete mode 100644 public/-/emojis/2/scorpius.png delete mode 100644 public/-/emojis/2/scotland.png delete mode 100644 public/-/emojis/2/scream.png delete mode 100644 public/-/emojis/2/scream_cat.png delete mode 100644 public/-/emojis/2/scroll.png delete mode 100644 public/-/emojis/2/seat.png delete mode 100644 public/-/emojis/2/second_place.png delete mode 100644 public/-/emojis/2/secret.png delete mode 100644 public/-/emojis/2/see_no_evil.png delete mode 100644 public/-/emojis/2/seedling.png delete mode 100644 public/-/emojis/2/selfie.png delete mode 100644 public/-/emojis/2/selfie_tone1.png delete mode 100644 public/-/emojis/2/selfie_tone2.png delete mode 100644 public/-/emojis/2/selfie_tone3.png delete mode 100644 public/-/emojis/2/selfie_tone4.png delete mode 100644 public/-/emojis/2/selfie_tone5.png delete mode 100644 public/-/emojis/2/seven.png delete mode 100644 public/-/emojis/2/shallow_pan_of_food.png delete mode 100644 public/-/emojis/2/shamrock.png delete mode 100644 public/-/emojis/2/shark.png delete mode 100644 public/-/emojis/2/shaved_ice.png delete mode 100644 public/-/emojis/2/sheep.png delete mode 100644 public/-/emojis/2/shell.png delete mode 100644 public/-/emojis/2/shield.png delete mode 100644 public/-/emojis/2/shinto_shrine.png delete mode 100644 public/-/emojis/2/ship.png delete mode 100644 public/-/emojis/2/shirt.png delete mode 100644 public/-/emojis/2/shopping_bags.png delete mode 100644 public/-/emojis/2/shopping_cart.png delete mode 100644 public/-/emojis/2/shower.png delete mode 100644 public/-/emojis/2/shrimp.png delete mode 100644 public/-/emojis/2/shrug.png delete mode 100644 public/-/emojis/2/shrug_tone1.png delete mode 100644 public/-/emojis/2/shrug_tone2.png delete mode 100644 public/-/emojis/2/shrug_tone3.png delete mode 100644 public/-/emojis/2/shrug_tone4.png delete mode 100644 public/-/emojis/2/shrug_tone5.png delete mode 100644 public/-/emojis/2/shushing_face.png delete mode 100644 public/-/emojis/2/signal_strength.png delete mode 100644 public/-/emojis/2/six.png delete mode 100644 public/-/emojis/2/six_pointed_star.png delete mode 100644 public/-/emojis/2/skateboard.png delete mode 100644 public/-/emojis/2/ski.png delete mode 100644 public/-/emojis/2/skier.png delete mode 100644 public/-/emojis/2/skull.png delete mode 100644 public/-/emojis/2/skull_crossbones.png delete mode 100644 public/-/emojis/2/sled.png delete mode 100644 public/-/emojis/2/sleeping.png delete mode 100644 public/-/emojis/2/sleeping_accommodation.png delete mode 100644 public/-/emojis/2/sleepy.png delete mode 100644 public/-/emojis/2/slight_frown.png delete mode 100644 public/-/emojis/2/slight_smile.png delete mode 100644 public/-/emojis/2/slot_machine.png delete mode 100644 public/-/emojis/2/small_blue_diamond.png delete mode 100644 public/-/emojis/2/small_orange_diamond.png delete mode 100644 public/-/emojis/2/small_red_triangle.png delete mode 100644 public/-/emojis/2/small_red_triangle_down.png delete mode 100644 public/-/emojis/2/smile.png delete mode 100644 public/-/emojis/2/smile_cat.png delete mode 100644 public/-/emojis/2/smiley.png delete mode 100644 public/-/emojis/2/smiley_cat.png delete mode 100644 public/-/emojis/2/smiling_face_with_3_hearts.png delete mode 100644 public/-/emojis/2/smiling_imp.png delete mode 100644 public/-/emojis/2/smirk.png delete mode 100644 public/-/emojis/2/smirk_cat.png delete mode 100644 public/-/emojis/2/smoking.png delete mode 100644 public/-/emojis/2/snail.png delete mode 100644 public/-/emojis/2/snake.png delete mode 100644 public/-/emojis/2/sneezing_face.png delete mode 100644 public/-/emojis/2/snowboarder.png delete mode 100644 public/-/emojis/2/snowboarder_tone1.png delete mode 100644 public/-/emojis/2/snowboarder_tone2.png delete mode 100644 public/-/emojis/2/snowboarder_tone3.png delete mode 100644 public/-/emojis/2/snowboarder_tone4.png delete mode 100644 public/-/emojis/2/snowboarder_tone5.png delete mode 100644 public/-/emojis/2/snowflake.png delete mode 100644 public/-/emojis/2/snowman.png delete mode 100644 public/-/emojis/2/snowman_with_snow.png delete mode 100644 public/-/emojis/2/soap.png delete mode 100644 public/-/emojis/2/sob.png delete mode 100644 public/-/emojis/2/soccer.png delete mode 100644 public/-/emojis/2/socks.png delete mode 100644 public/-/emojis/2/softball.png delete mode 100644 public/-/emojis/2/soon.png delete mode 100644 public/-/emojis/2/sos.png delete mode 100644 public/-/emojis/2/sound.png delete mode 100644 public/-/emojis/2/space_invader.png delete mode 100644 public/-/emojis/2/spades.png delete mode 100644 public/-/emojis/2/spaghetti.png delete mode 100644 public/-/emojis/2/sparkle.png delete mode 100644 public/-/emojis/2/sparkler.png delete mode 100644 public/-/emojis/2/sparkles.png delete mode 100644 public/-/emojis/2/sparkling_heart.png delete mode 100644 public/-/emojis/2/speak_no_evil.png delete mode 100644 public/-/emojis/2/speaker.png delete mode 100644 public/-/emojis/2/speaking_head.png delete mode 100644 public/-/emojis/2/speech_balloon.png delete mode 100644 public/-/emojis/2/speech_left.png delete mode 100644 public/-/emojis/2/speedboat.png delete mode 100644 public/-/emojis/2/spider.png delete mode 100644 public/-/emojis/2/spider_web.png delete mode 100644 public/-/emojis/2/sponge.png delete mode 100644 public/-/emojis/2/spoon.png delete mode 100644 public/-/emojis/2/spy_tone1.png delete mode 100644 public/-/emojis/2/spy_tone2.png delete mode 100644 public/-/emojis/2/spy_tone3.png delete mode 100644 public/-/emojis/2/spy_tone4.png delete mode 100644 public/-/emojis/2/spy_tone5.png delete mode 100644 public/-/emojis/2/squeeze_bottle.png delete mode 100644 public/-/emojis/2/squid.png delete mode 100644 public/-/emojis/2/stadium.png delete mode 100644 public/-/emojis/2/star.png delete mode 100644 public/-/emojis/2/star2.png delete mode 100644 public/-/emojis/2/star_and_crescent.png delete mode 100644 public/-/emojis/2/star_of_david.png delete mode 100644 public/-/emojis/2/star_struck.png delete mode 100644 public/-/emojis/2/stars.png delete mode 100644 public/-/emojis/2/station.png delete mode 100644 public/-/emojis/2/statue_of_liberty.png delete mode 100644 public/-/emojis/2/steam_locomotive.png delete mode 100644 public/-/emojis/2/stew.png delete mode 100644 public/-/emojis/2/stop_button.png delete mode 100644 public/-/emojis/2/stopwatch.png delete mode 100644 public/-/emojis/2/straight_ruler.png delete mode 100644 public/-/emojis/2/strawberry.png delete mode 100644 public/-/emojis/2/stuck_out_tongue.png delete mode 100644 public/-/emojis/2/stuck_out_tongue_closed_eyes.png delete mode 100644 public/-/emojis/2/stuck_out_tongue_winking_eye.png delete mode 100644 public/-/emojis/2/stuffed_flatbread.png delete mode 100644 public/-/emojis/2/sun_with_face.png delete mode 100644 public/-/emojis/2/sunflower.png delete mode 100644 public/-/emojis/2/sunglasses.png delete mode 100644 public/-/emojis/2/sunny.png delete mode 100644 public/-/emojis/2/sunrise.png delete mode 100644 public/-/emojis/2/sunrise_over_mountains.png delete mode 100644 public/-/emojis/2/superhero.png delete mode 100644 public/-/emojis/2/superhero_tone1.png delete mode 100644 public/-/emojis/2/superhero_tone2.png delete mode 100644 public/-/emojis/2/superhero_tone3.png delete mode 100644 public/-/emojis/2/superhero_tone4.png delete mode 100644 public/-/emojis/2/superhero_tone5.png delete mode 100644 public/-/emojis/2/supervillain.png delete mode 100644 public/-/emojis/2/supervillain_tone1.png delete mode 100644 public/-/emojis/2/supervillain_tone2.png delete mode 100644 public/-/emojis/2/supervillain_tone3.png delete mode 100644 public/-/emojis/2/supervillain_tone4.png delete mode 100644 public/-/emojis/2/supervillain_tone5.png delete mode 100644 public/-/emojis/2/surfer.png delete mode 100644 public/-/emojis/2/surfer_tone1.png delete mode 100644 public/-/emojis/2/surfer_tone2.png delete mode 100644 public/-/emojis/2/surfer_tone3.png delete mode 100644 public/-/emojis/2/surfer_tone4.png delete mode 100644 public/-/emojis/2/surfer_tone5.png delete mode 100644 public/-/emojis/2/sushi.png delete mode 100644 public/-/emojis/2/suspension_railway.png delete mode 100644 public/-/emojis/2/swan.png delete mode 100644 public/-/emojis/2/sweat.png delete mode 100644 public/-/emojis/2/sweat_drops.png delete mode 100644 public/-/emojis/2/sweat_smile.png delete mode 100644 public/-/emojis/2/sweet_potato.png delete mode 100644 public/-/emojis/2/swimmer.png delete mode 100644 public/-/emojis/2/swimmer_tone1.png delete mode 100644 public/-/emojis/2/swimmer_tone2.png delete mode 100644 public/-/emojis/2/swimmer_tone3.png delete mode 100644 public/-/emojis/2/swimmer_tone4.png delete mode 100644 public/-/emojis/2/swimmer_tone5.png delete mode 100644 public/-/emojis/2/symbols.png delete mode 100644 public/-/emojis/2/synagogue.png delete mode 100644 public/-/emojis/2/syringe.png delete mode 100644 public/-/emojis/2/t_rex.png delete mode 100644 public/-/emojis/2/taco.png delete mode 100644 public/-/emojis/2/tada.png delete mode 100644 public/-/emojis/2/takeout_box.png delete mode 100644 public/-/emojis/2/tanabata_tree.png delete mode 100644 public/-/emojis/2/tangerine.png delete mode 100644 public/-/emojis/2/taurus.png delete mode 100644 public/-/emojis/2/taxi.png delete mode 100644 public/-/emojis/2/tea.png delete mode 100644 public/-/emojis/2/teddy_bear.png delete mode 100644 public/-/emojis/2/telephone_receiver.png delete mode 100644 public/-/emojis/2/telescope.png delete mode 100644 public/-/emojis/2/ten.png delete mode 100644 public/-/emojis/2/tennis.png delete mode 100644 public/-/emojis/2/tent.png delete mode 100644 public/-/emojis/2/test_tube.png delete mode 100644 public/-/emojis/2/thermometer.png delete mode 100644 public/-/emojis/2/thermometer_face.png delete mode 100644 public/-/emojis/2/thinking.png delete mode 100644 public/-/emojis/2/third_place.png delete mode 100644 public/-/emojis/2/thought_balloon.png delete mode 100644 public/-/emojis/2/thread.png delete mode 100644 public/-/emojis/2/three.png delete mode 100644 public/-/emojis/2/thumbsdown.png delete mode 100644 public/-/emojis/2/thumbsdown_tone1.png delete mode 100644 public/-/emojis/2/thumbsdown_tone2.png delete mode 100644 public/-/emojis/2/thumbsdown_tone3.png delete mode 100644 public/-/emojis/2/thumbsdown_tone4.png delete mode 100644 public/-/emojis/2/thumbsdown_tone5.png delete mode 100644 public/-/emojis/2/thumbsup.png delete mode 100644 public/-/emojis/2/thumbsup_tone1.png delete mode 100644 public/-/emojis/2/thumbsup_tone2.png delete mode 100644 public/-/emojis/2/thumbsup_tone3.png delete mode 100644 public/-/emojis/2/thumbsup_tone4.png delete mode 100644 public/-/emojis/2/thumbsup_tone5.png delete mode 100644 public/-/emojis/2/thunder_cloud_rain.png delete mode 100644 public/-/emojis/2/ticket.png delete mode 100644 public/-/emojis/2/tickets.png delete mode 100644 public/-/emojis/2/tiger.png delete mode 100644 public/-/emojis/2/tiger2.png delete mode 100644 public/-/emojis/2/timer.png delete mode 100644 public/-/emojis/2/tired_face.png delete mode 100644 public/-/emojis/2/tm.png delete mode 100644 public/-/emojis/2/toilet.png delete mode 100644 public/-/emojis/2/tokyo_tower.png delete mode 100644 public/-/emojis/2/tomato.png delete mode 100644 public/-/emojis/2/tone1.png delete mode 100644 public/-/emojis/2/tone2.png delete mode 100644 public/-/emojis/2/tone3.png delete mode 100644 public/-/emojis/2/tone4.png delete mode 100644 public/-/emojis/2/tone5.png delete mode 100644 public/-/emojis/2/tongue.png delete mode 100644 public/-/emojis/2/toolbox.png delete mode 100644 public/-/emojis/2/tools.png delete mode 100644 public/-/emojis/2/tooth.png delete mode 100644 public/-/emojis/2/top.png delete mode 100644 public/-/emojis/2/tophat.png delete mode 100644 public/-/emojis/2/track_next.png delete mode 100644 public/-/emojis/2/track_previous.png delete mode 100644 public/-/emojis/2/trackball.png delete mode 100644 public/-/emojis/2/tractor.png delete mode 100644 public/-/emojis/2/traffic_light.png delete mode 100644 public/-/emojis/2/train.png delete mode 100644 public/-/emojis/2/train2.png delete mode 100644 public/-/emojis/2/tram.png delete mode 100644 public/-/emojis/2/triangular_flag_on_post.png delete mode 100644 public/-/emojis/2/triangular_ruler.png delete mode 100644 public/-/emojis/2/trident.png delete mode 100644 public/-/emojis/2/triumph.png delete mode 100644 public/-/emojis/2/trolleybus.png delete mode 100644 public/-/emojis/2/trophy.png delete mode 100644 public/-/emojis/2/tropical_drink.png delete mode 100644 public/-/emojis/2/tropical_fish.png delete mode 100644 public/-/emojis/2/truck.png delete mode 100644 public/-/emojis/2/trumpet.png delete mode 100644 public/-/emojis/2/tulip.png delete mode 100644 public/-/emojis/2/tumbler_glass.png delete mode 100644 public/-/emojis/2/turtle.png delete mode 100644 public/-/emojis/2/tv.png delete mode 100644 public/-/emojis/2/twisted_rightwards_arrows.png delete mode 100644 public/-/emojis/2/two.png delete mode 100644 public/-/emojis/2/two_hearts.png delete mode 100644 public/-/emojis/2/two_men_holding_hands.png delete mode 100644 public/-/emojis/2/two_women_holding_hands.png delete mode 100644 public/-/emojis/2/u5272.png delete mode 100644 public/-/emojis/2/u5408.png delete mode 100644 public/-/emojis/2/u55b6.png delete mode 100644 public/-/emojis/2/u6307.png delete mode 100644 public/-/emojis/2/u6708.png delete mode 100644 public/-/emojis/2/u6709.png delete mode 100644 public/-/emojis/2/u6e80.png delete mode 100644 public/-/emojis/2/u7121.png delete mode 100644 public/-/emojis/2/u7533.png delete mode 100644 public/-/emojis/2/u7981.png delete mode 100644 public/-/emojis/2/u7a7a.png delete mode 100644 public/-/emojis/2/umbrella.png delete mode 100644 public/-/emojis/2/unamused.png delete mode 100644 public/-/emojis/2/underage.png delete mode 100644 public/-/emojis/2/unicorn.png delete mode 100644 public/-/emojis/2/united_nations.png delete mode 100644 public/-/emojis/2/unlock.png delete mode 100644 public/-/emojis/2/up.png delete mode 100644 public/-/emojis/2/upside_down.png delete mode 100644 public/-/emojis/2/urn.png delete mode 100644 public/-/emojis/2/v.png delete mode 100644 public/-/emojis/2/v_tone1.png delete mode 100644 public/-/emojis/2/v_tone2.png delete mode 100644 public/-/emojis/2/v_tone3.png delete mode 100644 public/-/emojis/2/v_tone4.png delete mode 100644 public/-/emojis/2/v_tone5.png delete mode 100644 public/-/emojis/2/vampire.png delete mode 100644 public/-/emojis/2/vampire_tone1.png delete mode 100644 public/-/emojis/2/vampire_tone2.png delete mode 100644 public/-/emojis/2/vampire_tone3.png delete mode 100644 public/-/emojis/2/vampire_tone4.png delete mode 100644 public/-/emojis/2/vampire_tone5.png delete mode 100644 public/-/emojis/2/vertical_traffic_light.png delete mode 100644 public/-/emojis/2/vhs.png delete mode 100644 public/-/emojis/2/vibration_mode.png delete mode 100644 public/-/emojis/2/video_camera.png delete mode 100644 public/-/emojis/2/video_game.png delete mode 100644 public/-/emojis/2/violin.png delete mode 100644 public/-/emojis/2/virgo.png delete mode 100644 public/-/emojis/2/volcano.png delete mode 100644 public/-/emojis/2/volleyball.png delete mode 100644 public/-/emojis/2/vs.png delete mode 100644 public/-/emojis/2/vulcan.png delete mode 100644 public/-/emojis/2/vulcan_tone1.png delete mode 100644 public/-/emojis/2/vulcan_tone2.png delete mode 100644 public/-/emojis/2/vulcan_tone3.png delete mode 100644 public/-/emojis/2/vulcan_tone4.png delete mode 100644 public/-/emojis/2/vulcan_tone5.png delete mode 100644 public/-/emojis/2/wales.png delete mode 100644 public/-/emojis/2/walking.png delete mode 100644 public/-/emojis/2/walking_tone1.png delete mode 100644 public/-/emojis/2/walking_tone2.png delete mode 100644 public/-/emojis/2/walking_tone3.png delete mode 100644 public/-/emojis/2/walking_tone4.png delete mode 100644 public/-/emojis/2/walking_tone5.png delete mode 100644 public/-/emojis/2/waning_crescent_moon.png delete mode 100644 public/-/emojis/2/waning_gibbous_moon.png delete mode 100644 public/-/emojis/2/warning.png delete mode 100644 public/-/emojis/2/wastebasket.png delete mode 100644 public/-/emojis/2/watch.png delete mode 100644 public/-/emojis/2/water_buffalo.png delete mode 100644 public/-/emojis/2/water_polo.png delete mode 100644 public/-/emojis/2/water_polo_tone1.png delete mode 100644 public/-/emojis/2/water_polo_tone2.png delete mode 100644 public/-/emojis/2/water_polo_tone3.png delete mode 100644 public/-/emojis/2/water_polo_tone4.png delete mode 100644 public/-/emojis/2/water_polo_tone5.png delete mode 100644 public/-/emojis/2/watermelon.png delete mode 100644 public/-/emojis/2/wave.png delete mode 100644 public/-/emojis/2/wave_tone1.png delete mode 100644 public/-/emojis/2/wave_tone2.png delete mode 100644 public/-/emojis/2/wave_tone3.png delete mode 100644 public/-/emojis/2/wave_tone4.png delete mode 100644 public/-/emojis/2/wave_tone5.png delete mode 100644 public/-/emojis/2/wavy_dash.png delete mode 100644 public/-/emojis/2/waxing_crescent_moon.png delete mode 100644 public/-/emojis/2/waxing_gibbous_moon.png delete mode 100644 public/-/emojis/2/wc.png delete mode 100644 public/-/emojis/2/weary.png delete mode 100644 public/-/emojis/2/wedding.png delete mode 100644 public/-/emojis/2/weight_lifting_man.png delete mode 100644 public/-/emojis/2/whale.png delete mode 100644 public/-/emojis/2/whale2.png delete mode 100644 public/-/emojis/2/wheel_of_dharma.png delete mode 100644 public/-/emojis/2/wheelchair.png delete mode 100644 public/-/emojis/2/white_check_mark.png delete mode 100644 public/-/emojis/2/white_circle.png delete mode 100644 public/-/emojis/2/white_flag.png delete mode 100644 public/-/emojis/2/white_flower.png delete mode 100644 public/-/emojis/2/white_haired.png delete mode 100644 public/-/emojis/2/white_large_square.png delete mode 100644 public/-/emojis/2/white_medium_small_square.png delete mode 100644 public/-/emojis/2/white_medium_square.png delete mode 100644 public/-/emojis/2/white_small_square.png delete mode 100644 public/-/emojis/2/white_square_button.png delete mode 100644 public/-/emojis/2/white_sun_cloud.png delete mode 100644 public/-/emojis/2/white_sun_rain_cloud.png delete mode 100644 public/-/emojis/2/white_sun_small_cloud.png delete mode 100644 public/-/emojis/2/wilted_rose.png delete mode 100644 public/-/emojis/2/wind_blowing_face.png delete mode 100644 public/-/emojis/2/wind_chime.png delete mode 100644 public/-/emojis/2/wine_glass.png delete mode 100644 public/-/emojis/2/wink.png delete mode 100644 public/-/emojis/2/wolf.png delete mode 100644 public/-/emojis/2/woman.png delete mode 100644 public/-/emojis/2/woman_artist.png delete mode 100644 public/-/emojis/2/woman_artist_tone1.png delete mode 100644 public/-/emojis/2/woman_artist_tone2.png delete mode 100644 public/-/emojis/2/woman_artist_tone3.png delete mode 100644 public/-/emojis/2/woman_artist_tone4.png delete mode 100644 public/-/emojis/2/woman_artist_tone5.png delete mode 100644 public/-/emojis/2/woman_astronaut.png delete mode 100644 public/-/emojis/2/woman_astronaut_tone1.png delete mode 100644 public/-/emojis/2/woman_astronaut_tone2.png delete mode 100644 public/-/emojis/2/woman_astronaut_tone3.png delete mode 100644 public/-/emojis/2/woman_astronaut_tone4.png delete mode 100644 public/-/emojis/2/woman_astronaut_tone5.png delete mode 100644 public/-/emojis/2/woman_bald.png delete mode 100644 public/-/emojis/2/woman_bald_tone1.png delete mode 100644 public/-/emojis/2/woman_bald_tone2.png delete mode 100644 public/-/emojis/2/woman_bald_tone3.png delete mode 100644 public/-/emojis/2/woman_bald_tone4.png delete mode 100644 public/-/emojis/2/woman_bald_tone5.png delete mode 100644 public/-/emojis/2/woman_biking.png delete mode 100644 public/-/emojis/2/woman_biking_tone1.png delete mode 100644 public/-/emojis/2/woman_biking_tone2.png delete mode 100644 public/-/emojis/2/woman_biking_tone3.png delete mode 100644 public/-/emojis/2/woman_biking_tone4.png delete mode 100644 public/-/emojis/2/woman_biking_tone5.png delete mode 100644 public/-/emojis/2/woman_bouncing_ball.png delete mode 100644 public/-/emojis/2/woman_bouncing_ball_tone1.png delete mode 100644 public/-/emojis/2/woman_bouncing_ball_tone2.png delete mode 100644 public/-/emojis/2/woman_bouncing_ball_tone3.png delete mode 100644 public/-/emojis/2/woman_bouncing_ball_tone4.png delete mode 100644 public/-/emojis/2/woman_bouncing_ball_tone5.png delete mode 100644 public/-/emojis/2/woman_bowing.png delete mode 100644 public/-/emojis/2/woman_bowing_tone1.png delete mode 100644 public/-/emojis/2/woman_bowing_tone2.png delete mode 100644 public/-/emojis/2/woman_bowing_tone3.png delete mode 100644 public/-/emojis/2/woman_bowing_tone4.png delete mode 100644 public/-/emojis/2/woman_bowing_tone5.png delete mode 100644 public/-/emojis/2/woman_cartwheeling.png delete mode 100644 public/-/emojis/2/woman_cartwheeling_tone1.png delete mode 100644 public/-/emojis/2/woman_cartwheeling_tone2.png delete mode 100644 public/-/emojis/2/woman_cartwheeling_tone3.png delete mode 100644 public/-/emojis/2/woman_cartwheeling_tone4.png delete mode 100644 public/-/emojis/2/woman_cartwheeling_tone5.png delete mode 100644 public/-/emojis/2/woman_climbing.png delete mode 100644 public/-/emojis/2/woman_climbing_tone1.png delete mode 100644 public/-/emojis/2/woman_climbing_tone2.png delete mode 100644 public/-/emojis/2/woman_climbing_tone3.png delete mode 100644 public/-/emojis/2/woman_climbing_tone4.png delete mode 100644 public/-/emojis/2/woman_climbing_tone5.png delete mode 100644 public/-/emojis/2/woman_construction_worker.png delete mode 100644 public/-/emojis/2/woman_construction_worker_tone1.png delete mode 100644 public/-/emojis/2/woman_construction_worker_tone2.png delete mode 100644 public/-/emojis/2/woman_construction_worker_tone3.png delete mode 100644 public/-/emojis/2/woman_construction_worker_tone4.png delete mode 100644 public/-/emojis/2/woman_construction_worker_tone5.png delete mode 100644 public/-/emojis/2/woman_cook.png delete mode 100644 public/-/emojis/2/woman_cook_tone1.png delete mode 100644 public/-/emojis/2/woman_cook_tone2.png delete mode 100644 public/-/emojis/2/woman_cook_tone3.png delete mode 100644 public/-/emojis/2/woman_cook_tone4.png delete mode 100644 public/-/emojis/2/woman_cook_tone5.png delete mode 100644 public/-/emojis/2/woman_curly_haired.png delete mode 100644 public/-/emojis/2/woman_curly_haired_tone1.png delete mode 100644 public/-/emojis/2/woman_curly_haired_tone2.png delete mode 100644 public/-/emojis/2/woman_curly_haired_tone3.png delete mode 100644 public/-/emojis/2/woman_curly_haired_tone4.png delete mode 100644 public/-/emojis/2/woman_curly_haired_tone5.png delete mode 100644 public/-/emojis/2/woman_detective.png delete mode 100644 public/-/emojis/2/woman_detective_tone1.png delete mode 100644 public/-/emojis/2/woman_detective_tone2.png delete mode 100644 public/-/emojis/2/woman_detective_tone3.png delete mode 100644 public/-/emojis/2/woman_detective_tone4.png delete mode 100644 public/-/emojis/2/woman_detective_tone5.png delete mode 100644 public/-/emojis/2/woman_elf.png delete mode 100644 public/-/emojis/2/woman_elf_tone1.png delete mode 100644 public/-/emojis/2/woman_elf_tone2.png delete mode 100644 public/-/emojis/2/woman_elf_tone3.png delete mode 100644 public/-/emojis/2/woman_elf_tone4.png delete mode 100644 public/-/emojis/2/woman_elf_tone5.png delete mode 100644 public/-/emojis/2/woman_facepalming.png delete mode 100644 public/-/emojis/2/woman_facepalming_tone1.png delete mode 100644 public/-/emojis/2/woman_facepalming_tone2.png delete mode 100644 public/-/emojis/2/woman_facepalming_tone3.png delete mode 100644 public/-/emojis/2/woman_facepalming_tone4.png delete mode 100644 public/-/emojis/2/woman_facepalming_tone5.png delete mode 100644 public/-/emojis/2/woman_factory_worker.png delete mode 100644 public/-/emojis/2/woman_factory_worker_tone1.png delete mode 100644 public/-/emojis/2/woman_factory_worker_tone2.png delete mode 100644 public/-/emojis/2/woman_factory_worker_tone3.png delete mode 100644 public/-/emojis/2/woman_factory_worker_tone4.png delete mode 100644 public/-/emojis/2/woman_factory_worker_tone5.png delete mode 100644 public/-/emojis/2/woman_fairy.png delete mode 100644 public/-/emojis/2/woman_fairy_tone1.png delete mode 100644 public/-/emojis/2/woman_fairy_tone2.png delete mode 100644 public/-/emojis/2/woman_fairy_tone3.png delete mode 100644 public/-/emojis/2/woman_fairy_tone4.png delete mode 100644 public/-/emojis/2/woman_fairy_tone5.png delete mode 100644 public/-/emojis/2/woman_farmer.png delete mode 100644 public/-/emojis/2/woman_farmer_tone1.png delete mode 100644 public/-/emojis/2/woman_farmer_tone2.png delete mode 100644 public/-/emojis/2/woman_farmer_tone3.png delete mode 100644 public/-/emojis/2/woman_farmer_tone4.png delete mode 100644 public/-/emojis/2/woman_farmer_tone5.png delete mode 100644 public/-/emojis/2/woman_firefighter.png delete mode 100644 public/-/emojis/2/woman_firefighter_tone1.png delete mode 100644 public/-/emojis/2/woman_firefighter_tone2.png delete mode 100644 public/-/emojis/2/woman_firefighter_tone3.png delete mode 100644 public/-/emojis/2/woman_firefighter_tone4.png delete mode 100644 public/-/emojis/2/woman_firefighter_tone5.png delete mode 100644 public/-/emojis/2/woman_frowning.png delete mode 100644 public/-/emojis/2/woman_frowning_tone1.png delete mode 100644 public/-/emojis/2/woman_frowning_tone2.png delete mode 100644 public/-/emojis/2/woman_frowning_tone3.png delete mode 100644 public/-/emojis/2/woman_frowning_tone4.png delete mode 100644 public/-/emojis/2/woman_frowning_tone5.png delete mode 100644 public/-/emojis/2/woman_genie.png delete mode 100644 public/-/emojis/2/woman_gesturing_no.png delete mode 100644 public/-/emojis/2/woman_gesturing_no_tone1.png delete mode 100644 public/-/emojis/2/woman_gesturing_no_tone2.png delete mode 100644 public/-/emojis/2/woman_gesturing_no_tone3.png delete mode 100644 public/-/emojis/2/woman_gesturing_no_tone4.png delete mode 100644 public/-/emojis/2/woman_gesturing_no_tone5.png delete mode 100644 public/-/emojis/2/woman_gesturing_ok.png delete mode 100644 public/-/emojis/2/woman_gesturing_ok_tone1.png delete mode 100644 public/-/emojis/2/woman_gesturing_ok_tone2.png delete mode 100644 public/-/emojis/2/woman_gesturing_ok_tone3.png delete mode 100644 public/-/emojis/2/woman_gesturing_ok_tone4.png delete mode 100644 public/-/emojis/2/woman_gesturing_ok_tone5.png delete mode 100644 public/-/emojis/2/woman_getting_face_massage.png delete mode 100644 public/-/emojis/2/woman_getting_face_massage_tone1.png delete mode 100644 public/-/emojis/2/woman_getting_face_massage_tone2.png delete mode 100644 public/-/emojis/2/woman_getting_face_massage_tone3.png delete mode 100644 public/-/emojis/2/woman_getting_face_massage_tone4.png delete mode 100644 public/-/emojis/2/woman_getting_face_massage_tone5.png delete mode 100644 public/-/emojis/2/woman_getting_haircut.png delete mode 100644 public/-/emojis/2/woman_getting_haircut_tone1.png delete mode 100644 public/-/emojis/2/woman_getting_haircut_tone2.png delete mode 100644 public/-/emojis/2/woman_getting_haircut_tone3.png delete mode 100644 public/-/emojis/2/woman_getting_haircut_tone4.png delete mode 100644 public/-/emojis/2/woman_getting_haircut_tone5.png delete mode 100644 public/-/emojis/2/woman_golfing.png delete mode 100644 public/-/emojis/2/woman_golfing_tone1.png delete mode 100644 public/-/emojis/2/woman_golfing_tone2.png delete mode 100644 public/-/emojis/2/woman_golfing_tone3.png delete mode 100644 public/-/emojis/2/woman_golfing_tone4.png delete mode 100644 public/-/emojis/2/woman_golfing_tone5.png delete mode 100644 public/-/emojis/2/woman_guard.png delete mode 100644 public/-/emojis/2/woman_guard_tone1.png delete mode 100644 public/-/emojis/2/woman_guard_tone2.png delete mode 100644 public/-/emojis/2/woman_guard_tone3.png delete mode 100644 public/-/emojis/2/woman_guard_tone4.png delete mode 100644 public/-/emojis/2/woman_guard_tone5.png delete mode 100644 public/-/emojis/2/woman_health_worker.png delete mode 100644 public/-/emojis/2/woman_health_worker_tone1.png delete mode 100644 public/-/emojis/2/woman_health_worker_tone2.png delete mode 100644 public/-/emojis/2/woman_health_worker_tone3.png delete mode 100644 public/-/emojis/2/woman_health_worker_tone4.png delete mode 100644 public/-/emojis/2/woman_health_worker_tone5.png delete mode 100644 public/-/emojis/2/woman_in_lotus_position.png delete mode 100644 public/-/emojis/2/woman_in_lotus_position_tone1.png delete mode 100644 public/-/emojis/2/woman_in_lotus_position_tone2.png delete mode 100644 public/-/emojis/2/woman_in_lotus_position_tone3.png delete mode 100644 public/-/emojis/2/woman_in_lotus_position_tone4.png delete mode 100644 public/-/emojis/2/woman_in_lotus_position_tone5.png delete mode 100644 public/-/emojis/2/woman_in_steamy_room.png delete mode 100644 public/-/emojis/2/woman_in_steamy_room_tone1.png delete mode 100644 public/-/emojis/2/woman_in_steamy_room_tone2.png delete mode 100644 public/-/emojis/2/woman_in_steamy_room_tone3.png delete mode 100644 public/-/emojis/2/woman_in_steamy_room_tone4.png delete mode 100644 public/-/emojis/2/woman_in_steamy_room_tone5.png delete mode 100644 public/-/emojis/2/woman_judge.png delete mode 100644 public/-/emojis/2/woman_judge_tone1.png delete mode 100644 public/-/emojis/2/woman_judge_tone2.png delete mode 100644 public/-/emojis/2/woman_judge_tone3.png delete mode 100644 public/-/emojis/2/woman_judge_tone4.png delete mode 100644 public/-/emojis/2/woman_judge_tone5.png delete mode 100644 public/-/emojis/2/woman_juggling.png delete mode 100644 public/-/emojis/2/woman_juggling_tone1.png delete mode 100644 public/-/emojis/2/woman_juggling_tone2.png delete mode 100644 public/-/emojis/2/woman_juggling_tone3.png delete mode 100644 public/-/emojis/2/woman_juggling_tone4.png delete mode 100644 public/-/emojis/2/woman_juggling_tone5.png delete mode 100644 public/-/emojis/2/woman_lifting_weights.png delete mode 100644 public/-/emojis/2/woman_lifting_weights_tone1.png delete mode 100644 public/-/emojis/2/woman_lifting_weights_tone2.png delete mode 100644 public/-/emojis/2/woman_lifting_weights_tone3.png delete mode 100644 public/-/emojis/2/woman_lifting_weights_tone4.png delete mode 100644 public/-/emojis/2/woman_lifting_weights_tone5.png delete mode 100644 public/-/emojis/2/woman_mage.png delete mode 100644 public/-/emojis/2/woman_mage_tone1.png delete mode 100644 public/-/emojis/2/woman_mage_tone2.png delete mode 100644 public/-/emojis/2/woman_mage_tone3.png delete mode 100644 public/-/emojis/2/woman_mage_tone4.png delete mode 100644 public/-/emojis/2/woman_mage_tone5.png delete mode 100644 public/-/emojis/2/woman_mechanic.png delete mode 100644 public/-/emojis/2/woman_mechanic_tone1.png delete mode 100644 public/-/emojis/2/woman_mechanic_tone2.png delete mode 100644 public/-/emojis/2/woman_mechanic_tone3.png delete mode 100644 public/-/emojis/2/woman_mechanic_tone4.png delete mode 100644 public/-/emojis/2/woman_mechanic_tone5.png delete mode 100644 public/-/emojis/2/woman_mountain_biking.png delete mode 100644 public/-/emojis/2/woman_mountain_biking_tone1.png delete mode 100644 public/-/emojis/2/woman_mountain_biking_tone2.png delete mode 100644 public/-/emojis/2/woman_mountain_biking_tone3.png delete mode 100644 public/-/emojis/2/woman_mountain_biking_tone4.png delete mode 100644 public/-/emojis/2/woman_mountain_biking_tone5.png delete mode 100644 public/-/emojis/2/woman_office_worker.png delete mode 100644 public/-/emojis/2/woman_office_worker_tone1.png delete mode 100644 public/-/emojis/2/woman_office_worker_tone2.png delete mode 100644 public/-/emojis/2/woman_office_worker_tone3.png delete mode 100644 public/-/emojis/2/woman_office_worker_tone4.png delete mode 100644 public/-/emojis/2/woman_office_worker_tone5.png delete mode 100644 public/-/emojis/2/woman_pilot.png delete mode 100644 public/-/emojis/2/woman_pilot_tone1.png delete mode 100644 public/-/emojis/2/woman_pilot_tone2.png delete mode 100644 public/-/emojis/2/woman_pilot_tone3.png delete mode 100644 public/-/emojis/2/woman_pilot_tone4.png delete mode 100644 public/-/emojis/2/woman_pilot_tone5.png delete mode 100644 public/-/emojis/2/woman_playing_handball.png delete mode 100644 public/-/emojis/2/woman_playing_handball_tone1.png delete mode 100644 public/-/emojis/2/woman_playing_handball_tone2.png delete mode 100644 public/-/emojis/2/woman_playing_handball_tone3.png delete mode 100644 public/-/emojis/2/woman_playing_handball_tone4.png delete mode 100644 public/-/emojis/2/woman_playing_handball_tone5.png delete mode 100644 public/-/emojis/2/woman_playing_water_polo.png delete mode 100644 public/-/emojis/2/woman_playing_water_polo_tone1.png delete mode 100644 public/-/emojis/2/woman_playing_water_polo_tone2.png delete mode 100644 public/-/emojis/2/woman_playing_water_polo_tone3.png delete mode 100644 public/-/emojis/2/woman_playing_water_polo_tone4.png delete mode 100644 public/-/emojis/2/woman_playing_water_polo_tone5.png delete mode 100644 public/-/emojis/2/woman_police_officer.png delete mode 100644 public/-/emojis/2/woman_police_officer_tone1.png delete mode 100644 public/-/emojis/2/woman_police_officer_tone2.png delete mode 100644 public/-/emojis/2/woman_police_officer_tone3.png delete mode 100644 public/-/emojis/2/woman_police_officer_tone4.png delete mode 100644 public/-/emojis/2/woman_police_officer_tone5.png delete mode 100644 public/-/emojis/2/woman_pouting.png delete mode 100644 public/-/emojis/2/woman_pouting_tone1.png delete mode 100644 public/-/emojis/2/woman_pouting_tone2.png delete mode 100644 public/-/emojis/2/woman_pouting_tone3.png delete mode 100644 public/-/emojis/2/woman_pouting_tone4.png delete mode 100644 public/-/emojis/2/woman_pouting_tone5.png delete mode 100644 public/-/emojis/2/woman_raising_hand.png delete mode 100644 public/-/emojis/2/woman_raising_hand_tone1.png delete mode 100644 public/-/emojis/2/woman_raising_hand_tone2.png delete mode 100644 public/-/emojis/2/woman_raising_hand_tone3.png delete mode 100644 public/-/emojis/2/woman_raising_hand_tone4.png delete mode 100644 public/-/emojis/2/woman_raising_hand_tone5.png delete mode 100644 public/-/emojis/2/woman_red_haired.png delete mode 100644 public/-/emojis/2/woman_red_haired_tone1.png delete mode 100644 public/-/emojis/2/woman_red_haired_tone2.png delete mode 100644 public/-/emojis/2/woman_red_haired_tone3.png delete mode 100644 public/-/emojis/2/woman_red_haired_tone4.png delete mode 100644 public/-/emojis/2/woman_red_haired_tone5.png delete mode 100644 public/-/emojis/2/woman_rowing_boat.png delete mode 100644 public/-/emojis/2/woman_rowing_boat_tone1.png delete mode 100644 public/-/emojis/2/woman_rowing_boat_tone2.png delete mode 100644 public/-/emojis/2/woman_rowing_boat_tone3.png delete mode 100644 public/-/emojis/2/woman_rowing_boat_tone4.png delete mode 100644 public/-/emojis/2/woman_rowing_boat_tone5.png delete mode 100644 public/-/emojis/2/woman_running.png delete mode 100644 public/-/emojis/2/woman_running_tone1.png delete mode 100644 public/-/emojis/2/woman_running_tone2.png delete mode 100644 public/-/emojis/2/woman_running_tone3.png delete mode 100644 public/-/emojis/2/woman_running_tone4.png delete mode 100644 public/-/emojis/2/woman_running_tone5.png delete mode 100644 public/-/emojis/2/woman_scientist.png delete mode 100644 public/-/emojis/2/woman_scientist_tone1.png delete mode 100644 public/-/emojis/2/woman_scientist_tone2.png delete mode 100644 public/-/emojis/2/woman_scientist_tone3.png delete mode 100644 public/-/emojis/2/woman_scientist_tone4.png delete mode 100644 public/-/emojis/2/woman_scientist_tone5.png delete mode 100644 public/-/emojis/2/woman_shrugging.png delete mode 100644 public/-/emojis/2/woman_shrugging_tone1.png delete mode 100644 public/-/emojis/2/woman_shrugging_tone2.png delete mode 100644 public/-/emojis/2/woman_shrugging_tone3.png delete mode 100644 public/-/emojis/2/woman_shrugging_tone4.png delete mode 100644 public/-/emojis/2/woman_shrugging_tone5.png delete mode 100644 public/-/emojis/2/woman_singer.png delete mode 100644 public/-/emojis/2/woman_singer_tone1.png delete mode 100644 public/-/emojis/2/woman_singer_tone2.png delete mode 100644 public/-/emojis/2/woman_singer_tone3.png delete mode 100644 public/-/emojis/2/woman_singer_tone4.png delete mode 100644 public/-/emojis/2/woman_singer_tone5.png delete mode 100644 public/-/emojis/2/woman_student.png delete mode 100644 public/-/emojis/2/woman_student_tone1.png delete mode 100644 public/-/emojis/2/woman_student_tone2.png delete mode 100644 public/-/emojis/2/woman_student_tone3.png delete mode 100644 public/-/emojis/2/woman_student_tone4.png delete mode 100644 public/-/emojis/2/woman_student_tone5.png delete mode 100644 public/-/emojis/2/woman_superhero.png delete mode 100644 public/-/emojis/2/woman_superhero_tone1.png delete mode 100644 public/-/emojis/2/woman_superhero_tone2.png delete mode 100644 public/-/emojis/2/woman_superhero_tone3.png delete mode 100644 public/-/emojis/2/woman_superhero_tone4.png delete mode 100644 public/-/emojis/2/woman_superhero_tone5.png delete mode 100644 public/-/emojis/2/woman_supervillain.png delete mode 100644 public/-/emojis/2/woman_supervillain_tone1.png delete mode 100644 public/-/emojis/2/woman_supervillain_tone2.png delete mode 100644 public/-/emojis/2/woman_supervillain_tone3.png delete mode 100644 public/-/emojis/2/woman_supervillain_tone4.png delete mode 100644 public/-/emojis/2/woman_supervillain_tone5.png delete mode 100644 public/-/emojis/2/woman_surfing.png delete mode 100644 public/-/emojis/2/woman_surfing_tone1.png delete mode 100644 public/-/emojis/2/woman_surfing_tone2.png delete mode 100644 public/-/emojis/2/woman_surfing_tone3.png delete mode 100644 public/-/emojis/2/woman_surfing_tone4.png delete mode 100644 public/-/emojis/2/woman_surfing_tone5.png delete mode 100644 public/-/emojis/2/woman_swimming.png delete mode 100644 public/-/emojis/2/woman_swimming_tone1.png delete mode 100644 public/-/emojis/2/woman_swimming_tone2.png delete mode 100644 public/-/emojis/2/woman_swimming_tone3.png delete mode 100644 public/-/emojis/2/woman_swimming_tone4.png delete mode 100644 public/-/emojis/2/woman_swimming_tone5.png delete mode 100644 public/-/emojis/2/woman_teacher.png delete mode 100644 public/-/emojis/2/woman_teacher_tone1.png delete mode 100644 public/-/emojis/2/woman_teacher_tone2.png delete mode 100644 public/-/emojis/2/woman_teacher_tone3.png delete mode 100644 public/-/emojis/2/woman_teacher_tone4.png delete mode 100644 public/-/emojis/2/woman_teacher_tone5.png delete mode 100644 public/-/emojis/2/woman_technologist.png delete mode 100644 public/-/emojis/2/woman_technologist_tone1.png delete mode 100644 public/-/emojis/2/woman_technologist_tone2.png delete mode 100644 public/-/emojis/2/woman_technologist_tone3.png delete mode 100644 public/-/emojis/2/woman_technologist_tone4.png delete mode 100644 public/-/emojis/2/woman_technologist_tone5.png delete mode 100644 public/-/emojis/2/woman_tipping_hand.png delete mode 100644 public/-/emojis/2/woman_tipping_hand_tone1.png delete mode 100644 public/-/emojis/2/woman_tipping_hand_tone2.png delete mode 100644 public/-/emojis/2/woman_tipping_hand_tone3.png delete mode 100644 public/-/emojis/2/woman_tipping_hand_tone4.png delete mode 100644 public/-/emojis/2/woman_tipping_hand_tone5.png delete mode 100644 public/-/emojis/2/woman_tone1.png delete mode 100644 public/-/emojis/2/woman_tone2.png delete mode 100644 public/-/emojis/2/woman_tone3.png delete mode 100644 public/-/emojis/2/woman_tone4.png delete mode 100644 public/-/emojis/2/woman_tone5.png delete mode 100644 public/-/emojis/2/woman_vampire.png delete mode 100644 public/-/emojis/2/woman_vampire_tone1.png delete mode 100644 public/-/emojis/2/woman_vampire_tone2.png delete mode 100644 public/-/emojis/2/woman_vampire_tone3.png delete mode 100644 public/-/emojis/2/woman_vampire_tone4.png delete mode 100644 public/-/emojis/2/woman_vampire_tone5.png delete mode 100644 public/-/emojis/2/woman_walking.png delete mode 100644 public/-/emojis/2/woman_walking_tone1.png delete mode 100644 public/-/emojis/2/woman_walking_tone2.png delete mode 100644 public/-/emojis/2/woman_walking_tone3.png delete mode 100644 public/-/emojis/2/woman_walking_tone4.png delete mode 100644 public/-/emojis/2/woman_walking_tone5.png delete mode 100644 public/-/emojis/2/woman_wearing_turban.png delete mode 100644 public/-/emojis/2/woman_wearing_turban_tone1.png delete mode 100644 public/-/emojis/2/woman_wearing_turban_tone2.png delete mode 100644 public/-/emojis/2/woman_wearing_turban_tone3.png delete mode 100644 public/-/emojis/2/woman_wearing_turban_tone4.png delete mode 100644 public/-/emojis/2/woman_wearing_turban_tone5.png delete mode 100644 public/-/emojis/2/woman_white_haired.png delete mode 100644 public/-/emojis/2/woman_white_haired_tone1.png delete mode 100644 public/-/emojis/2/woman_white_haired_tone2.png delete mode 100644 public/-/emojis/2/woman_white_haired_tone3.png delete mode 100644 public/-/emojis/2/woman_white_haired_tone4.png delete mode 100644 public/-/emojis/2/woman_white_haired_tone5.png delete mode 100644 public/-/emojis/2/woman_with_headscarf.png delete mode 100644 public/-/emojis/2/woman_with_headscarf_tone1.png delete mode 100644 public/-/emojis/2/woman_with_headscarf_tone2.png delete mode 100644 public/-/emojis/2/woman_with_headscarf_tone3.png delete mode 100644 public/-/emojis/2/woman_with_headscarf_tone4.png delete mode 100644 public/-/emojis/2/woman_with_headscarf_tone5.png delete mode 100644 public/-/emojis/2/woman_zombie.png delete mode 100644 public/-/emojis/2/womans_clothes.png delete mode 100644 public/-/emojis/2/womans_flat_shoe.png delete mode 100644 public/-/emojis/2/womans_hat.png delete mode 100644 public/-/emojis/2/women_with_bunny_ears_partying.png delete mode 100644 public/-/emojis/2/women_wrestling.png delete mode 100644 public/-/emojis/2/womens.png delete mode 100644 public/-/emojis/2/woozy_face.png delete mode 100644 public/-/emojis/2/worried.png delete mode 100644 public/-/emojis/2/wrench.png delete mode 100644 public/-/emojis/2/wrestlers.png delete mode 100644 public/-/emojis/2/writing_hand.png delete mode 100644 public/-/emojis/2/writing_hand_tone1.png delete mode 100644 public/-/emojis/2/writing_hand_tone2.png delete mode 100644 public/-/emojis/2/writing_hand_tone3.png delete mode 100644 public/-/emojis/2/writing_hand_tone4.png delete mode 100644 public/-/emojis/2/writing_hand_tone5.png delete mode 100644 public/-/emojis/2/x.png delete mode 100644 public/-/emojis/2/yarn.png delete mode 100644 public/-/emojis/2/yellow_heart.png delete mode 100644 public/-/emojis/2/yen.png delete mode 100644 public/-/emojis/2/yin_yang.png delete mode 100644 public/-/emojis/2/yum.png delete mode 100644 public/-/emojis/2/zany_face.png delete mode 100644 public/-/emojis/2/zap.png delete mode 100644 public/-/emojis/2/zebra.png delete mode 100644 public/-/emojis/2/zero.png delete mode 100644 public/-/emojis/2/zipper_mouth.png delete mode 100644 public/-/emojis/2/zombie.png delete mode 100644 public/-/emojis/2/zzz.png create mode 100644 qa/qa/page/component/access_tokens.rb create mode 100644 qa/qa/page/component/commit_modal.rb create mode 100644 qa/qa/page/project/settings/access_tokens.rb create mode 100644 qa/qa/resource/package.rb create mode 100644 qa/qa/resource/pipeline_schedules.rb create mode 100644 qa/qa/resource/project_access_token.rb delete mode 100644 qa/qa/scenario/test/integration/object_storage.rb create mode 100644 qa/qa/specs/features/api/1_manage/project_access_token_spec.rb create mode 100644 qa/qa/specs/features/api/3_create/repository/push_postreceive_idempotent_spec.rb create mode 100644 qa/qa/specs/features/api/4_verify/cancel_pipeline_when_block_user_spec.rb delete mode 100644 qa/qa/specs/features/api/5_package/.gitkeep create mode 100644 qa/qa/specs/features/api/5_package/container_registry_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/1_manage/group/transfer_group_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/1_manage/project/project_access_token_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/2_plan/transient/comment_on_discussion_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_a_merge_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/merge_request/cherry_pick/cherry_pick_commit_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/merge_request/revert_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/batch_suggestion_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/3_create/merge_request/suggestions/custom_commit_suggestion_spec.rb delete mode 100644 qa/qa/specs/features/browser_ui/3_create/transient/apply_suggestion_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/4_verify/pipeline/include_local_config_file_paths_with_wildcard_spec.rb create mode 100644 qa/qa/specs/features/browser_ui/4_verify/pipeline/trigger_matrix_spec.rb create mode 100644 qa/qa/specs/helpers/context_selector.rb create mode 100644 qa/qa/specs/helpers/rspec.rb delete mode 100644 qa/spec/scenario/test/integration/object_storage_spec.rb create mode 100644 qa/spec/specs/helpers/context_selector_spec.rb create mode 100644 rubocop/cop/gitlab/delegate_predicate_methods.rb create mode 100644 rubocop/cop/gitlab/feature_available_usage.rb create mode 100644 rubocop/cop/style/regexp_literal_mixed_preserve.rb create mode 100644 rubocop/cop/user_admin.rb create mode 100755 scripts/perf/query_limiting_report.rb rename spec/{lib/gitlab/usage_data_counters => config/metrics/aggregates}/aggregated_metrics_spec.rb (100%) create mode 100644 spec/controllers/groups/settings/applications_controller_spec.rb delete mode 100644 spec/experiments/strategy/round_robin_spec.rb delete mode 100644 spec/factories/ci/test_case.rb delete mode 100644 spec/factories/ci/test_case_failure.rb create mode 100644 spec/factories/ci/unit_test.rb create mode 100644 spec/factories/ci/unit_test_failure.rb create mode 100644 spec/factories/clusters/integrations/prometheus.rb create mode 100644 spec/factories/users/in_product_marketing_email.rb delete mode 100644 spec/features/admin/services/admin_activates_prometheus_spec.rb delete mode 100644 spec/features/boards/add_issues_modal_spec.rb delete mode 100644 spec/features/boards/modal_filter_spec.rb create mode 100644 spec/features/boards/sidebar_assignee_spec.rb create mode 100644 spec/features/boards/sidebar_due_date_spec.rb create mode 100644 spec/features/boards/sidebar_labels_spec.rb create mode 100644 spec/features/boards/sidebar_milestones_spec.rb create mode 100644 spec/features/callouts/service_templates_deprecation_spec.rb create mode 100644 spec/features/file_uploads/attachment_spec.rb create mode 100644 spec/features/file_uploads/rubygem_package_spec.rb create mode 100644 spec/features/gitlab_experiments_spec.rb create mode 100644 spec/features/issues/user_invites_from_a_comment_spec.rb create mode 100644 spec/features/merge_request/user_invites_from_a_comment_spec.rb create mode 100644 spec/features/projects/blobs/user_views_pipeline_editor_button_spec.rb delete mode 100644 spec/features/projects/services/user_activates_hipchat_spec.rb create mode 100644 spec/features/registrations/welcome_spec.rb create mode 100644 spec/finders/concerns/finder_with_group_hierarchy_spec.rb create mode 100644 spec/finders/environments_by_deployments_finder_spec.rb create mode 100644 spec/finders/packages/go/package_finder_spec.rb create mode 100644 spec/finders/repositories/branch_names_finder_spec.rb create mode 100644 spec/finders/repositories/changelog_tag_finder_spec.rb delete mode 100644 spec/finders/repositories/previous_tag_finder_spec.rb create mode 100644 spec/fixtures/api/schemas/graphql/packages/package_conan_metadata.json rename qa/qa/specs/features/api/4_verify/.gitkeep => spec/fixtures/ce_sample_schema.json (100%) create mode 100644 spec/fixtures/config/mail_room_enabled_ms_graph.yml create mode 100644 spec/fixtures/emails/update_commands_only.eml create mode 100644 spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric.yml create mode 100644 spec/fixtures/lib/generators/gitlab/usage_metric_definition_generator/sample_metric_with_name_suggestions.yml create mode 100644 spec/fixtures/packages/rubygems/package.gem create mode 100644 spec/fixtures/unsafe_javascript.xml create mode 100644 spec/frontend/__helpers__/web_worker_fake.js delete mode 100644 spec/frontend/__helpers__/web_worker_mock.js create mode 100644 spec/frontend/__helpers__/web_worker_transformer.js create mode 100644 spec/frontend/__mocks__/vue/index.js create mode 100644 spec/frontend/admin/signup_restrictions/components/signup_checkbox_spec.js create mode 100644 spec/frontend/admin/signup_restrictions/components/signup_form_spec.js create mode 100644 spec/frontend/admin/signup_restrictions/mock_data.js create mode 100644 spec/frontend/admin/signup_restrictions/utils.js create mode 100644 spec/frontend/admin/signup_restrictions/utils_spec.js create mode 100644 spec/frontend/admin/users/new_spec.js delete mode 100644 spec/frontend/alerts_settings/components/__snapshots__/alerts_settings_form_spec.js.snap create mode 100644 spec/frontend/behaviors/markdown/render_mermaid_spec.js create mode 100644 spec/frontend/blob/file_template_selector_spec.js create mode 100644 spec/frontend/boards/components/__snapshots__/board_blocked_icon_spec.js.snap create mode 100644 spec/frontend/boards/components/board_blocked_icon_spec.js create mode 100644 spec/frontend/boards/components/board_content_sidebar_spec.js delete mode 100644 spec/frontend/boards/components/filtered_search_spec.js delete mode 100644 spec/frontend/boards/components/sidebar/board_sidebar_issue_title_spec.js create mode 100644 spec/frontend/boards/components/sidebar/board_sidebar_time_tracker_spec.js create mode 100644 spec/frontend/boards/components/sidebar/board_sidebar_title_spec.js delete mode 100644 spec/frontend/boards/modal_store_spec.js create mode 100644 spec/frontend/branches/components/sort_dropdown_spec.js create mode 100644 spec/frontend/captcha/apollo_captcha_link_spec.js create mode 100644 spec/frontend/cascading_settings/components/lock_popovers_spec.js create mode 100644 spec/frontend/content_editor/components/content_editor_spec.js create mode 100644 spec/frontend/content_editor/markdown_processing_examples.js create mode 100644 spec/frontend/content_editor/markdown_processing_spec.js create mode 100644 spec/frontend/content_editor/services/create_editor_spec.js create mode 100644 spec/frontend/delete_label_modal_spec.js create mode 100644 spec/frontend/deploy_tokens/components/revoke_button_spec.js create mode 100644 spec/frontend/diffs/find_interop_attributes.js create mode 100644 spec/frontend/diffs/utils/interoperability_spec.js create mode 100644 spec/frontend/emoji/awards_app/store/actions_spec.js create mode 100644 spec/frontend/emoji/awards_app/store/mutations_spec.js create mode 100644 spec/frontend/experimentation/components/experiment_spec.js create mode 100644 spec/frontend/fixtures/api_markdown.rb create mode 100644 spec/frontend/fixtures/api_markdown.yml create mode 100644 spec/frontend/fixtures/autocomplete.rb delete mode 100644 spec/frontend/fixtures/static/mini_dropdown_graph.html create mode 100644 spec/frontend/ide/components/cannot_push_code_alert_spec.js create mode 100644 spec/frontend/integrations/edit/components/jira_upgrade_cta_spec.js create mode 100644 spec/frontend/integrations/index/components/integrations_list_spec.js create mode 100644 spec/frontend/integrations/index/components/integrations_table_spec.js create mode 100644 spec/frontend/integrations/index/mock_data.js create mode 100644 spec/frontend/issuable_type_selector/components/__snapshots__/info_popover_spec.js.snap create mode 100644 spec/frontend/issuable_type_selector/components/info_popover_spec.js create mode 100644 spec/frontend/jira_connect/components/__snapshots__/group_item_name_spec.js.snap create mode 100644 spec/frontend/jira_connect/components/group_item_name_spec.js create mode 100644 spec/frontend/jira_connect/components/subscriptions_list_spec.js create mode 100644 spec/frontend/jobs/components/table/jobs_table_spec.js create mode 100644 spec/frontend/jobs/components/table/jobs_table_tabs_spec.js create mode 100644 spec/frontend/merge_conflicts/components/merge_conflict_resolver_app_spec.js create mode 100644 spec/frontend/merge_conflicts/mock_data.js create mode 100644 spec/frontend/merge_conflicts/store/getters_spec.js create mode 100644 spec/frontend/merge_conflicts/store/mutations_spec.js create mode 100644 spec/frontend/merge_conflicts/utils_spec.js delete mode 100644 spec/frontend/mini_pipeline_graph_dropdown_spec.js delete mode 100644 spec/frontend/mocks/ce/diffs/workers/tree_worker.js delete mode 100644 spec/frontend/mocks/ce/ide/lib/diff/diff_worker.js create mode 100644 spec/frontend/mr_notes/stores/actions_spec.js create mode 100644 spec/frontend/mr_notes/stores/mutations_spec.js create mode 100644 spec/frontend/packages/shared/components/package_icon_and_name_spec.js create mode 100644 spec/frontend/packages_and_registries/infrastructure_registry/components/infrastructure_icon_and_name_spec.js create mode 100644 spec/frontend/packages_and_registries/infrastructure_registry/components/infrastructure_search_spec.js create mode 100644 spec/frontend/packages_and_registries/infrastructure_registry/components/infrastructure_title_spec.js create mode 100644 spec/frontend/packages_and_registries/shared/utils_spec.js delete mode 100644 spec/frontend/pages/admin/users/new/index_spec.js create mode 100644 spec/frontend/pages/projects/learn_gitlab/components/__snapshots__/learn_gitlab_section_card_spec.js.snap create mode 100644 spec/frontend/pages/projects/learn_gitlab/components/learn_gitlab_section_card_spec.js create mode 100644 spec/frontend/pages/projects/learn_gitlab/components/learn_gitlab_section_link_spec.js rename spec/frontend/pages/shared/wikis/{ => components}/wiki_alert_spec.js (100%) create mode 100644 spec/frontend/pages/shared/wikis/components/wiki_form_spec.js create mode 100644 spec/frontend/pipeline_editor/components/code_snippet_alert/code_snippet_alert_spec.js create mode 100644 spec/frontend/pipeline_editor/components/file-nav/branch_switcher_spec.js create mode 100644 spec/frontend/pipeline_editor/components/file-nav/pipeline_editor_file_nav_spec.js delete mode 100644 spec/frontend/pipelines/blank_state_spec.js create mode 100644 spec/frontend/pipelines/notification/pipeline_notification_spec.js create mode 100644 spec/frontend/pipelines/pipelines_ci_templates_spec.js delete mode 100644 spec/frontend/pipelines/pipelines_table_row_spec.js create mode 100644 spec/frontend/projects/commit/components/commit_comments_button_spec.js create mode 100644 spec/frontend/projects/commit/components/commit_options_dropdown_spec.js delete mode 100644 spec/frontend/projects/commit/components/form_trigger_spec.js create mode 100644 spec/frontend/repository/components/blob_content_viewer_spec.js create mode 100644 spec/frontend/repository/pages/blob_spec.js create mode 100644 spec/frontend/runner/runner_detail/runner_detail_app_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/sidebar_assignees_widget_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/sidebar_invite_members_spec.js create mode 100644 spec/frontend/sidebar/components/assignees/sidebar_participant_spec.js create mode 100644 spec/frontend/sidebar/components/due_date/sidebar_due_date_widget_spec.js create mode 100644 spec/frontend/tags/components/sort_dropdown_spec.js create mode 100644 spec/frontend/users_select/index_spec.js create mode 100644 spec/frontend/vue_shared/components/delete_label_modal_spec.js delete mode 100644 spec/frontend/vue_shared/components/deprecated_modal_spec.js create mode 100644 spec/frontend/vue_shared/components/ensure_data_spec.js create mode 100644 spec/frontend/vue_shared/components/filtered_search_bar/tokens/emoji_token_spec.js create mode 100644 spec/frontend/vue_shared/components/filtered_search_bar/tokens/epic_token_spec.js delete mode 100644 spec/frontend/vue_shared/components/gl_toggle_vuex_spec.js create mode 100644 spec/frontend/vue_shared/components/lib/utils/props_utils_spec.js delete mode 100644 spec/frontend/vue_shared/components/recaptcha_eventhub_spec.js delete mode 100644 spec/frontend/vue_shared/components/recaptcha_modal_spec.js create mode 100644 spec/frontend/vue_shared/components/runner_instructions/runner_instructions_modal_spec.js create mode 100644 spec/frontend/vue_shared/components/sidebar/copyable_field_spec.js create mode 100644 spec/frontend/vue_shared/components/url_sync_spec.js create mode 100644 spec/frontend/vue_shared/oncall_schedules_list_spec.js create mode 100644 spec/frontend_integration/diffs/diffs_interopability_api.js create mode 100644 spec/frontend_integration/diffs/diffs_interopability_spec.js create mode 100644 spec/frontend_integration/test_helpers/mock_server/routes/diffs.js delete mode 100644 spec/graphql/mutations/concerns/mutations/can_mutate_spammable_spec.rb create mode 100644 spec/graphql/mutations/release_asset_links/delete_spec.rb create mode 100644 spec/graphql/resolvers/blobs_resolver_spec.rb create mode 100644 spec/graphql/resolvers/ci/test_report_summary_resolver_spec.rb create mode 100644 spec/graphql/resolvers/ci/test_suite_resolver_spec.rb create mode 100644 spec/graphql/resolvers/project_jobs_resolver_spec.rb create mode 100644 spec/graphql/resolvers/repository_branch_names_resolver_spec.rb create mode 100644 spec/graphql/resolvers/timelog_resolver_spec.rb create mode 100644 spec/graphql/types/base_object_spec.rb create mode 100644 spec/graphql/types/ci/job_status_enum_spec.rb create mode 100644 spec/graphql/types/ci/recent_failures_type_spec.rb create mode 100644 spec/graphql/types/ci/test_case_status_enum_spec.rb create mode 100644 spec/graphql/types/ci/test_case_type_spec.rb create mode 100644 spec/graphql/types/ci/test_report_summary_type_spec.rb create mode 100644 spec/graphql/types/ci/test_report_total_type_spec.rb create mode 100644 spec/graphql/types/ci/test_suite_summary_type_spec.rb create mode 100644 spec/graphql/types/ci/test_suite_type_spec.rb create mode 100644 spec/graphql/types/merge_request_review_state_enum_spec.rb create mode 100644 spec/graphql/types/merge_requests/reviewer_type_spec.rb create mode 100644 spec/graphql/types/packages/conan/file_metadatum_type_spec.rb create mode 100644 spec/graphql/types/packages/conan/metadatum_file_type_enum_spec.rb create mode 100644 spec/graphql/types/packages/conan/metadatum_type_spec.rb create mode 100644 spec/graphql/types/packages/package_details_type_spec.rb create mode 100644 spec/graphql/types/packages/package_file_type_spec.rb delete mode 100644 spec/graphql/types/packages/package_without_versions_type_spec.rb create mode 100644 spec/graphql/types/repository/blob_type_spec.rb create mode 100644 spec/graphql/types/timelog_type_spec.rb create mode 100644 spec/graphql/types/user_merge_request_interaction_type_spec.rb create mode 100644 spec/helpers/sidebars_helper_spec.rb delete mode 100644 spec/initializers/json_validator_patch_spec.rb delete mode 100644 spec/initializers/kramdown_patch_spec.rb create mode 100644 spec/initializers/pages_storage_check_spec.rb create mode 100644 spec/knapsack_env.rb create mode 100644 spec/lib/api/entities/clusters/agent_spec.rb create mode 100644 spec/lib/api/helpers/caching_spec.rb create mode 100644 spec/lib/api/helpers/variables_helpers_spec.rb rename spec/lib/banzai/filter/{ => references}/abstract_reference_filter_spec.rb (97%) rename spec/lib/banzai/filter/{ => references}/alert_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/commit_range_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/commit_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/design_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/external_issue_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/feature_flag_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/issue_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/label_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/merge_request_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/milestone_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/project_reference_filter_spec.rb (97%) rename spec/lib/banzai/filter/{ => references}/reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/snippet_reference_filter_spec.rb (99%) rename spec/lib/banzai/filter/{ => references}/user_reference_filter_spec.rb (98%) create mode 100644 spec/lib/bulk_imports/common/extractors/rest_extractor_spec.rb create mode 100644 spec/lib/bulk_imports/groups/pipelines/badges_pipeline_spec.rb create mode 100644 spec/lib/bulk_imports/groups/pipelines/entity_finisher_spec.rb create mode 100644 spec/lib/bulk_imports/groups/rest/get_badges_query_spec.rb delete mode 100644 spec/lib/bulk_imports/importers/group_importer_spec.rb create mode 100644 spec/lib/generators/gitlab/usage_metric_definition/redis_hll_generator_spec.rb create mode 100644 spec/lib/gitlab/background_migration/migrate_pages_to_zip_storage_spec.rb create mode 100644 spec/lib/gitlab/bullet/exclusions_spec.rb create mode 100644 spec/lib/gitlab/bullet_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/chain/helpers_spec.rb create mode 100644 spec/lib/gitlab/ci/pipeline/chain/pipeline/process_spec.rb create mode 100644 spec/lib/gitlab/database/background_migration/batch_metrics_spec.rb create mode 100644 spec/lib/gitlab/database/background_migration/batched_migration_runner_spec.rb delete mode 100644 spec/lib/gitlab/database/background_migration/scheduler_spec.rb create mode 100644 spec/lib/gitlab/database/loose_index_scan_distinct_count_spec.rb create mode 100644 spec/lib/gitlab/database/pg_class_spec.rb create mode 100644 spec/lib/gitlab/database/unidirectional_copy_trigger_spec.rb delete mode 100644 spec/lib/gitlab/downtime_check/message_spec.rb delete mode 100644 spec/lib/gitlab/downtime_check_spec.rb delete mode 100644 spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb create mode 100644 spec/lib/gitlab/graphql/authorize/object_authorization_spec.rb create mode 100644 spec/lib/gitlab/graphql/deprecation_spec.rb create mode 100644 spec/lib/gitlab/graphql/negatable_arguments_spec.rb create mode 100644 spec/lib/gitlab/hook_data/user_builder_spec.rb create mode 100644 spec/lib/gitlab/middleware/rack_multipart_tempfile_factory_spec.rb create mode 100644 spec/lib/gitlab/pages/stores/local_store_spec.rb create mode 100644 spec/lib/gitlab/pagination/offset_header_builder_with_controller_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_config/worker_matcher_spec.rb create mode 100644 spec/lib/gitlab/sidekiq_middleware/instrumentation_logger_spec.rb create mode 100644 spec/lib/gitlab/usage/metrics/names_suggestions/relation_parsers/joins_spec.rb create mode 100644 spec/lib/gitlab/usage_data_non_sql_metrics_spec.rb create mode 100644 spec/lib/kramdown/kramdown_spec.rb create mode 100644 spec/lib/rouge/formatters/html_gitlab_spec.rb create mode 100644 spec/migrations/20210226141517_dedup_issue_metrics_spec.rb create mode 100644 spec/migrations/20210406144743_backfill_total_tuple_count_for_batched_migrations_spec.rb create mode 100644 spec/migrations/20210413132500_reschedule_artifact_expiry_backfill_again_spec.rb create mode 100644 spec/migrations/add_new_trail_plans_spec.rb create mode 100644 spec/migrations/confirm_support_bot_user_spec.rb create mode 100644 spec/migrations/delete_security_findings_without_uuid_spec.rb create mode 100644 spec/migrations/migrate_elastic_index_settings_spec.rb create mode 100644 spec/migrations/move_container_registry_enabled_to_project_features2_spec.rb delete mode 100644 spec/migrations/move_container_registry_enabled_to_project_features_spec.rb create mode 100644 spec/migrations/populate_dismissal_information_for_vulnerabilities_spec.rb create mode 100644 spec/migrations/remove_records_without_group_from_webhooks_table_spec.rb create mode 100644 spec/migrations/schedule_migrate_pages_to_zip_storage_spec.rb delete mode 100644 spec/models/audit_event_archived_spec.rb create mode 100644 spec/models/bulk_imports/stage_spec.rb delete mode 100644 spec/models/ci/test_case_failure_spec.rb delete mode 100644 spec/models/ci/test_case_spec.rb create mode 100644 spec/models/ci/unit_test_failure_spec.rb create mode 100644 spec/models/ci/unit_test_spec.rb create mode 100644 spec/models/clusters/integrations/prometheus_spec.rb create mode 100644 spec/models/concerns/cascading_namespace_setting_attribute_spec.rb create mode 100644 spec/models/concerns/has_timelogs_report_spec.rb create mode 100644 spec/models/concerns/sidebars/container_with_html_options_spec.rb create mode 100644 spec/models/concerns/sidebars/positionable_list_spec.rb create mode 100644 spec/models/concerns/token_authenticatable_strategies/encryption_helper_spec.rb create mode 100644 spec/models/members/last_group_owner_assigner_spec.rb create mode 100644 spec/models/namespace/admin_note_spec.rb create mode 100644 spec/models/packages/debian/file_entry_spec.rb create mode 100644 spec/models/preloaders/labels_preloader_spec.rb create mode 100644 spec/models/preloaders/user_max_access_level_in_projects_preloader_spec.rb create mode 100644 spec/models/sidebars/menu_spec.rb create mode 100644 spec/models/sidebars/panel_spec.rb create mode 100644 spec/models/sidebars/projects/context_spec.rb create mode 100644 spec/models/sidebars/projects/menus/learn_gitlab/menu_spec.rb create mode 100644 spec/models/sidebars/projects/menus/project_overview/menu_items/releases_spec.rb create mode 100644 spec/models/sidebars/projects/menus/project_overview/menu_spec.rb create mode 100644 spec/models/sidebars/projects/menus/repository/menu_spec.rb create mode 100644 spec/models/sidebars/projects/panel_spec.rb create mode 100644 spec/models/users/in_product_marketing_email_spec.rb create mode 100644 spec/models/users/merge_request_interaction_spec.rb create mode 100644 spec/requests/admin/clusters/integrations_controller_spec.rb create mode 100644 spec/requests/api/graphql/ci/job_spec.rb create mode 100644 spec/requests/api/graphql/group/timelogs_spec.rb create mode 100644 spec/requests/api/graphql/mutations/release_asset_links/delete_spec.rb create mode 100644 spec/requests/api/graphql/project/repository/blobs_spec.rb create mode 100644 spec/requests/api/usage_data_non_sql_metrics_spec.rb create mode 100644 spec/requests/api/usage_data_queries_spec.rb create mode 100644 spec/requests/api/users_preferences_spec.rb create mode 100644 spec/requests/customers_dot/proxy_controller_spec.rb create mode 100644 spec/requests/groups/clusters/integrations_controller_spec.rb create mode 100644 spec/requests/projects/clusters/integrations_controller_spec.rb create mode 100644 spec/rubocop/cop/gitlab/delegate_predicate_methods_spec.rb create mode 100644 spec/rubocop/cop/gitlab/feature_available_usage_spec.rb create mode 100644 spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb create mode 100644 spec/rubocop/cop/user_admin_spec.rb create mode 100644 spec/services/authorized_project_update/find_records_due_for_refresh_service_spec.rb create mode 100644 spec/services/boards/destroy_service_spec.rb create mode 100644 spec/services/ci/abort_pipelines_service_spec.rb delete mode 100644 spec/services/ci/abort_project_pipelines_service_spec.rb create mode 100644 spec/services/ci/after_requeue_job_service_spec.rb delete mode 100644 spec/services/ci/cancel_user_pipelines_service_spec.rb delete mode 100644 spec/services/ci/create_job_artifacts_service_spec.rb delete mode 100644 spec/services/ci/destroy_expired_job_artifacts_service_spec.rb create mode 100644 spec/services/ci/disable_user_pipeline_schedules_service_spec.rb create mode 100644 spec/services/ci/drop_pipeline_service_spec.rb create mode 100644 spec/services/ci/job_artifacts/create_service_spec.rb create mode 100644 spec/services/ci/job_artifacts/destroy_all_expired_service_spec.rb create mode 100644 spec/services/ci/job_artifacts/destroy_batch_service_spec.rb delete mode 100644 spec/services/ci/job_artifacts_destroy_batch_service_spec.rb create mode 100644 spec/services/ci/pipeline_artifacts/destroy_all_expired_service_spec.rb delete mode 100644 spec/services/ci/pipeline_artifacts/destroy_expired_artifacts_service_spec.rb create mode 100644 spec/services/ci/pipeline_processing/test_cases/dag_build_test_two_manual_review_test_staging_production.yml delete mode 100644 spec/services/ci/pipeline_processing/test_cases/dag_test_manual_allow_failure_true.yml create mode 100644 spec/services/ci/pipeline_processing/test_cases/dag_test_manual_allow_failure_true_fails.yml create mode 100644 spec/services/ci/pipeline_processing/test_cases/dag_test_manual_allow_failure_true_succeeds.yml create mode 100644 spec/services/clusters/integrations/create_service_spec.rb create mode 100644 spec/services/groups/merge_requests_count_service_spec.rb create mode 100644 spec/services/issues/after_create_service_spec.rb create mode 100644 spec/services/keys/expiry_notification_service_spec.rb create mode 100644 spec/services/merge_requests/handle_assignees_change_service_spec.rb create mode 100644 spec/services/merge_requests/resolve_todos_service_spec.rb create mode 100644 spec/services/merge_requests/update_assignees_service_spec.rb create mode 100644 spec/services/milestones/merge_requests_count_service_spec.rb create mode 100644 spec/services/packages/debian/extract_changes_metadata_service_spec.rb create mode 100644 spec/services/packages/debian/process_changes_service_spec.rb create mode 100644 spec/services/packages/go/create_package_service_spec.rb create mode 100644 spec/services/packages/go/sync_packages_service_spec.rb create mode 100644 spec/services/packages/rubygems/create_dependencies_service_spec.rb create mode 100644 spec/services/packages/rubygems/create_gemspec_service_spec.rb create mode 100644 spec/services/packages/rubygems/metadata_extraction_service_spec.rb create mode 100644 spec/services/packages/rubygems/process_gem_service_spec.rb create mode 100644 spec/services/pages/delete_service_spec.rb delete mode 100644 spec/services/pages/delete_services_spec.rb create mode 100644 spec/services/todos/destroy/destroyed_issuable_service_spec.rb create mode 100644 spec/services/user_preferences/update_service_spec.rb create mode 100644 spec/services/users/update_todo_count_cache_service_spec.rb create mode 100644 spec/support/helpers/reload_helpers.rb create mode 100644 spec/support/helpers/rubygems_helpers.rb delete mode 100644 spec/support/matchers/track_self_describing_event_matcher.rb create mode 100644 spec/support/shared_contexts/lib/gitlab/sidekiq_logging/structured_logger_shared_context.rb create mode 100644 spec/support/shared_contexts/lib/gitlab/sidekiq_middleware/server_metrics_shared_context.rb create mode 100644 spec/support/shared_contexts/requests/api/go_modules_shared_context.rb create mode 100644 spec/support/shared_examples/boards/destroy_service_shared_examples.rb create mode 100644 spec/support/shared_examples/boards/lists/update_service_shared_examples.rb create mode 100644 spec/support/shared_examples/controllers/snippet_shared_examples.rb delete mode 100644 spec/support/shared_examples/controllers/trackable_shared_examples.rb create mode 100644 spec/support/shared_examples/features/cascading_settings_shared_examples.rb create mode 100644 spec/support/shared_examples/features/sidebar_shared_examples.rb create mode 100644 spec/support/shared_examples/graphql/spam_protection_shared_examples.rb create mode 100644 spec/support/shared_examples/helpers/groups_shared_examples.rb create mode 100644 spec/support/shared_examples/lib/gitlab/database/cte_materialized_shared_examples.rb create mode 100644 spec/support/shared_examples/lib/gitlab/sidekiq_middleware/metrics_middleware_with_worker_attribution_shared_examples.rb create mode 100644 spec/support/shared_examples/models/clusters/prometheus_client_shared.rb create mode 100644 spec/support/shared_examples/namespaces/namespace_traversal_examples.rb delete mode 100644 spec/support/shared_examples/namespaces/recursive_traversal_examples.rb create mode 100644 spec/support/shared_examples/querying_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/api/graphql/projects/alert_management/integrations_shared_examples.rb create mode 100644 spec/support/shared_examples/requests/clusters/integrations_controller_shared_examples.rb create mode 100644 spec/support/shared_examples/serializers/environment_serializer_shared_examples.rb create mode 100644 spec/support/shared_examples/services/groups_count_service_shared_examples.rb create mode 100644 spec/support/shared_examples/services/issuable/destroy_service_shared_examples.rb create mode 100644 spec/support/shared_examples/workers/in_product_marketing_email_shared_example.rb create mode 100644 spec/support/shared_examples/workers/worker_with_data_consistency_shared_example.rb create mode 100644 spec/tooling/merge_request_spec.rb rename spec/{lib => tooling}/quality/test_level_spec.rb (98%) delete mode 100644 spec/views/admin/services/index.html.haml_spec.rb create mode 100644 spec/views/dashboard/projects/index.html.haml_spec.rb create mode 100644 spec/views/groups/settings/_remove.html.haml_spec.rb create mode 100644 spec/views/layouts/_search.html.haml_spec.rb create mode 100644 spec/views/profiles/keys/_form.html.haml_spec.rb create mode 100644 spec/views/profiles/keys/_key.html.haml_spec.rb delete mode 100644 spec/views/projects/pipelines/_stage.html.haml_spec.rb create mode 100644 spec/views/shared/nav/_sidebar.html.haml_spec.rb create mode 100644 spec/workers/bulk_imports/pipeline_worker_spec.rb create mode 100644 spec/workers/ci/drop_pipeline_worker_spec.rb create mode 100644 spec/workers/ci/initial_pipeline_process_worker_spec.rb create mode 100644 spec/workers/ci/merge_requests/add_todo_when_build_fails_worker_spec.rb create mode 100644 spec/workers/concerns/worker_attributes_spec.rb create mode 100644 spec/workers/database/batched_background_migration_worker_spec.rb create mode 100644 spec/workers/merge_requests/assignees_change_worker_spec.rb create mode 100644 spec/workers/merge_requests/create_pipeline_worker_spec.rb create mode 100644 spec/workers/merge_requests/handle_assignees_change_worker_spec.rb create mode 100644 spec/workers/merge_requests/resolve_todos_worker_spec.rb create mode 100644 spec/workers/packages/go/sync_packages_worker_spec.rb create mode 100644 spec/workers/packages/rubygems/extraction_worker_spec.rb create mode 100644 spec/workers/projects/post_creation_worker_spec.rb create mode 100644 spec/workers/ssh_keys/expired_notification_worker_spec.rb create mode 100644 spec/workers/ssh_keys/expiring_soon_notification_worker_spec.rb create mode 100644 spec/workers/todos_destroyer/destroyed_issuable_worker_spec.rb create mode 100644 tooling/merge_request.rb create mode 100644 tooling/merge_request_rspec_failure_rake_task.rb rename {lib => tooling}/quality/test_level.rb (100%) create mode 100644 vendor/gems/mail-smtp_pool/.gitignore create mode 100644 vendor/gems/mail-smtp_pool/.gitlab-ci.yml create mode 100644 vendor/gems/mail-smtp_pool/Gemfile create mode 100644 vendor/gems/mail-smtp_pool/LICENSE create mode 100644 vendor/gems/mail-smtp_pool/README.md create mode 100644 vendor/gems/mail-smtp_pool/lib/mail/smtp_pool.rb create mode 100644 vendor/gems/mail-smtp_pool/lib/mail/smtp_pool/connection.rb create mode 100644 vendor/gems/mail-smtp_pool/mail-smtp_pool.gemspec create mode 100644 vendor/gems/mail-smtp_pool/spec/lib/mail/smtp_pool/connection_spec.rb create mode 100644 vendor/gems/mail-smtp_pool/spec/lib/mail/smtp_pool_spec.rb create mode 100644 vendor/gems/mail-smtp_pool/spec/spec_helper.rb delete mode 100644 vendor/shims/mimemagic/Gemfile delete mode 100644 vendor/shims/mimemagic/LICENSE.txt delete mode 100644 vendor/shims/mimemagic/README.md delete mode 100644 vendor/shims/mimemagic/Rakefile delete mode 100644 vendor/shims/mimemagic/lib/mimemagic.rb delete mode 100644 vendor/shims/mimemagic/lib/mimemagic/version.rb delete mode 100644 vendor/shims/mimemagic/mimemagic.gemspec diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8bb09825e6..c722f0a597 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,7 +17,7 @@ stages: # in cases where jobs require Docker-in-Docker, the job # definition must be extended with `.use-docker-in-docker` default: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" tags: - gitlab-org # All jobs are interruptible by default @@ -38,7 +38,7 @@ workflow: when: never # For merge requests, create a pipeline. - if: '$CI_MERGE_REQUEST_IID' - # For `master` branch, create a pipeline (this includes on schedules, pushes, merges, etc.). + # For `$CI_DEFAULT_BRANCH` branch, create a pipeline (this includes on schedules, pushes, merges, etc.). - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # For tags, create a pipeline. - if: '$CI_COMMIT_TAG' @@ -53,6 +53,8 @@ workflow: variables: RAILS_ENV: "test" NODE_ENV: "test" + # we override the max_old_space_size to prevent OOM errors + NODE_OPTIONS: --max_old_space_size=3584 SIMPLECOV: "true" GIT_DEPTH: "20" GIT_SUBMODULE_STRATEGY: "none" @@ -100,6 +102,7 @@ include: - local: .gitlab/ci/qa.gitlab-ci.yml - local: .gitlab/ci/reports.gitlab-ci.yml - local: .gitlab/ci/rails.gitlab-ci.yml + - local: .gitlab/ci/vendored-gems.gitlab-ci.yml - local: .gitlab/ci/review.gitlab-ci.yml - local: .gitlab/ci/rules.gitlab-ci.yml - local: .gitlab/ci/setup.gitlab-ci.yml @@ -111,4 +114,7 @@ include: - local: .gitlab/ci/dast.gitlab-ci.yml - local: .gitlab/ci/workhorse.gitlab-ci.yml - local: .gitlab/ci/graphql.gitlab-ci.yml - - remote: 'https://gitlab.com/gitlab-org/frontend/untamper-my-lockfile/-/raw/main/.gitlab-ci-template.yml' + # switch the remote include to a local include until this is resolved: + # https://gitlab.com/gitlab-org/gitlab/-/issues/327299 + # - remote: 'https://gitlab.com/gitlab-org/frontend/untamper-my-lockfile/-/raw/main/.gitlab-ci-template.yml' + - local: .gitlab/ci/untamper-my-lockfile.yml diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 2eda1a890d..6432640570 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -135,7 +135,7 @@ /doc/api/invitations.md @aqualls /doc/api/experiments.md @aqualls /doc/development/experiment_guide/ @aqualls -/doc/development/snowplow.md @aqualls +/doc/development/snowplow/ @aqualls /doc/development/usage_ping/ @aqualls /doc/user/admin_area/license.md @aqualls @@ -193,7 +193,7 @@ Dangerfile @gl-quality/eng-prod /lib/gitlab/auth/ldap/ @dblessing @mkozono [Templates] -/lib/gitlab/ci/templates/ @nolith @shinya.maeda +/lib/gitlab/ci/templates/ @nolith @shinya.maeda @matteeyah /lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml @DylanGriffith @mayra-cabrera @tkuah /lib/gitlab/ci/templates/Security/ @plafoucriere @gonzoyumo @twoodham @sethgitlab @@ -277,6 +277,7 @@ Dangerfile @gl-quality/eng-prod /lib/gitlab/experimentation/ @gitlab-org/growth/experiment-devs /lib/gitlab/experimentation.rb @gitlab-org/growth/experiment-devs /lib/gitlab/experimentation_logger.rb @gitlab-org/growth/experiment-devs +/ee/spec/requests/api/experiments_spec.rb @gitlab-org/growth/experiment-devs [Legal] /config/dependency_decisions.yml @gitlab-org/legal-reviewers diff --git a/.gitlab/changelog_config.yml b/.gitlab/changelog_config.yml new file mode 100644 index 0000000000..7aa18cc8f3 --- /dev/null +++ b/.gitlab/changelog_config.yml @@ -0,0 +1,38 @@ +--- +# Settings for generating changelogs using the GitLab API. See +# https://docs.gitlab.com/ee/api/repositories.html#generate-changelog-data for +# more information. +categories: + added: Added + fixed: Fixed + changed: Changed + deprecated: Deprecated + removed: Removed + security: Security + performance: Performance + other: Other +template: | + {% if categories %} + {% each categories %} + ### {{ title }} ({% if single_change %}1 change{% else %}{{ count }} changes{% end %}) + + {% each entries %} + - [{{ title }}]({{ commit.reference }})\ + {% if author.contributor %} by {{ author.reference }}{% end %}\ + {% if commit.trailers.MR %}\ + ([merge request]({{ commit.trailers.MR }}))\ + {% else %}\ + {% if merge_request %}\ + ([merge request]({{ merge_request.reference }}))\ + {% end %}\ + {% end %}\ + {% if commit.trailers.EE %}\ + **GitLab Enterprise Edition**\ + {% end %} + + {% end %} + + {% end %} + {% else %} + No changes. + {% end %} diff --git a/.gitlab/ci/build-images.gitlab-ci.yml b/.gitlab/ci/build-images.gitlab-ci.yml index e6c3e7598d..4e35247204 100644 --- a/.gitlab/ci/build-images.gitlab-ci.yml +++ b/.gitlab/ci/build-images.gitlab-ci.yml @@ -1,6 +1,8 @@ -# This image is used by the `review-qa-*` jobs. Not currently used by the `omnibus-gitlab` pipelines which rebuild this -# image, e.g. https://gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/-/jobs/587107399, which we could probably avoid. -# See https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5429. +# This image is used by the `review-qa-*` jobs. The image name is also passed to the downstream `omnibus-gitlab-mirror` pipeline +# triggered by `package-and-qa` so that it doesn't have to rebuild it a second time. The downstream `omnibus-gitlab-mirror` pipeline +# itself passes the image name to the `gitlab-qa-mirror` pipeline so that it can use it instead of inferring an end-to-end image +# from the GitLab image built by the downstream `omnibus-gitlab-mirror` pipeline. +# See https://docs.gitlab.com/ee/development/testing_guide/end_to_end/index.html#testing-code-in-merge-requests for more details. build-qa-image: extends: - .use-kaniko diff --git a/.gitlab/ci/cache-repo.gitlab-ci.yml b/.gitlab/ci/cache-repo.gitlab-ci.yml index 324c861508..475cbca315 100644 --- a/.gitlab/ci/cache-repo.gitlab-ci.yml +++ b/.gitlab/ci/cache-repo.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Builds a cached .tar.gz of the master branch with full history and +# Builds a cached .tar.gz of the $CI_DEFAULT_BRANCH branch with full history and # uploads it to Google Cloud Storage. This archive is downloaded by a # script defined by a CI/CD variable named CI_PRE_CLONE_SCRIPT. This has # two benefits: @@ -41,6 +41,7 @@ cache-repo: cd $CI_PROJECT_NAME; time git repack -d; echo "Archiving $CI_PROJECT_NAME into /tmp/$SHALLOW_CLONE_TAR_FILENAME."; + time git remote rm origin; time tar cf /tmp/$SHALLOW_CLONE_TAR_FILENAME .; echo "GZipping /tmp/$SHALLOW_CLONE_TAR_FILENAME."; time gzip /tmp/$SHALLOW_CLONE_TAR_FILENAME; @@ -52,7 +53,9 @@ cache-repo: echo "Cloning $CI_REPOSITORY_URL into $CI_PROJECT_NAME."; time git clone --progress $CI_REPOSITORY_URL $CI_PROJECT_NAME; cd $CI_PROJECT_NAME; + time git repack -d; echo "Archiving $CI_PROJECT_NAME into /tmp/$FULL_CLONE_TAR_FILENAME."; + time git remote rm origin; time tar cf /tmp/$FULL_CLONE_TAR_FILENAME .; echo "GZipping /tmp/$FULL_CLONE_TAR_FILENAME."; time gzip /tmp/$FULL_CLONE_TAR_FILENAME; diff --git a/.gitlab/ci/dast.gitlab-ci.yml b/.gitlab/ci/dast.gitlab-ci.yml index 33778b9cbd..a8a201bd1f 100644 --- a/.gitlab/ci/dast.gitlab-ci.yml +++ b/.gitlab/ci/dast.gitlab-ci.yml @@ -97,7 +97,7 @@ DAST-fullscan-ruleset5: variables: DAST_USERNAME: "user5" script: - - export DAST_EXCLUDE_RULES=$(echo $DAST_RULES | enable_rule 10010 | enable_rule 10011 | enable_rule 10015 | enable_rule 10017 | enable_rule 10019) + - export DAST_EXCLUDE_RULES=$(echo $DAST_RULES | enable_rule 10010 | enable_rule 10011 | enable_rule 10017 | enable_rule 10019) - echo $DAST_EXCLUDE_RULES - /analyze -t $DAST_WEBSITE -d diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index b42b32ea44..8f70127be6 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -10,17 +10,18 @@ # because some repos are private and CI_JOB_TOKEN cannot access files. # See https://gitlab.com/gitlab-org/gitlab/issues/191273 GIT_DEPTH: 1 + # By default, deploy the Review App using the `master` branch of the `gitlab-org/gitlab-docs` project + DOCS_BRANCH: master environment: - name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID + name: review-docs/mr-${CI_MERGE_REQUEST_IID} # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables # Discussion: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/14236/diffs#note_40140693 auto_stop_in: 2 weeks - url: http://docs-preview-$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID.$DOCS_REVIEW_APPS_DOMAIN/$DOCS_GITLAB_REPO_SUFFIX + url: http://${DOCS_BRANCH}-${DOCS_GITLAB_REPO_SUFFIX}-${CI_MERGE_REQUEST_IID}.${DOCS_REVIEW_APPS_DOMAIN}/${DOCS_GITLAB_REPO_SUFFIX} on_stop: review-docs-cleanup before_script: - - apk add --update openssl - - gem install httparty --no-document --version 0.17.3 - - gem install gitlab --no-document --version 4.13.0 + - source ./scripts/utils.sh + - install_gitlab_gem # Always trigger a docs build in gitlab-docs only on docs-only branches. # Useful to preview the docs changes live. @@ -33,7 +34,7 @@ review-docs-deploy: review-docs-cleanup: extends: .review-docs environment: - name: review-docs/$DOCS_GITLAB_REPO_SUFFIX-$CI_MERGE_REQUEST_IID + name: review-docs/mr-${CI_MERGE_REQUEST_IID} action: stop script: - ./scripts/trigger-build docs cleanup @@ -64,10 +65,8 @@ docs-lint links: - cd /tmp/gitlab-docs # 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 + # Check the internal links and anchors (in parallel) + - "parallel time bundle exec nanoc check ::: internal_links internal_anchors" ui-docs-links lint: extends: diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 910a58bcd0..c39f5cdce9 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -1,22 +1,15 @@ -.frontend-base: - extends: - - .default-retry - - .default-before_script - variables: - SETUP_DB: "false" - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 - .yarn-install: &yarn-install - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" .compile-assets-base: extends: - - .frontend-base + - .default-retry + - .default-before_script - .assets-compile-cache - image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.29-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.34 + image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.31-lfs-2.9-node-14.15-yarn-1.22-graphicsmagick-1.3.36 variables: + SETUP_DB: "false" WEBPACK_VENDOR_DLL: "true" stage: prepare script: @@ -93,13 +86,13 @@ update-yarn-cache: .frontend-fixtures-base: extends: - - .frontend-base + - .default-retry + - .default-before_script - .rails-cache - .use-pg11 stage: fixtures needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets"] variables: - SETUP_DB: "true" WEBPACK_VENDOR_DLL: "true" script: - run_timed_command "gem install knapsack --no-document" @@ -151,10 +144,8 @@ graphql-schema-dump: .frontend-test-base: extends: - - .frontend-base + - .default-retry - .yarn-cache - variables: - USE_BUNDLE_INSTALL: "false" stage: test eslint-as-if-foss: @@ -246,7 +237,7 @@ coverage-frontend: extends: - .default-retry - .yarn-cache - - .frontend:rules:ee-mr-and-master-only + - .frontend:rules:ee-mr-and-default-branch-only needs: ["jest"] stage: post-test before_script: diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index de4b609098..891457afe6 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -27,7 +27,7 @@ .rails-cache: cache: - key: "rails-v4" + key: "rails-v5" paths: - vendor/ruby/ - vendor/gitaly-ruby/ @@ -87,7 +87,7 @@ policy: pull .use-pg11: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" services: - name: postgres:11.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -96,7 +96,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg12: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" services: - name: postgres:12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -105,7 +105,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg11-ee: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-11-graphicsmagick-1.3.36" services: - name: postgres:11.6 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] @@ -116,7 +116,7 @@ POSTGRES_HOST_AUTH_METHOD: trust .use-pg12-ee: - image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.29-lfs-2.9-chrome-87-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.34" + image: "registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.14-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36" services: - name: postgres:12 command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] diff --git a/.gitlab/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml index ef6c9b9c8f..3e5639e4d6 100644 --- a/.gitlab/ci/memory.gitlab-ci.yml +++ b/.gitlab/ci/memory.gitlab-ci.yml @@ -44,8 +44,6 @@ memory-on-boot: NODE_ENV: "production" RAILS_ENV: "production" SETUP_DB: "true" - # we override the max_old_space_size to prevent OOM errors - NODE_OPTIONS: --max_old_space_size=3584 script: - PATH_TO_HIT="/users/sign_in" CUT_OFF=0.3 bundle exec derailed exec perf:mem >> 'tmp/memory_on_boot.txt' - scripts/generate-memory-metrics-on-boot tmp/memory_on_boot.txt >> 'tmp/memory_on_boot_metrics.txt' diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index e1ddefca99..064aa5a835 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -142,7 +142,7 @@ ############################ ####################################################### -# EE/FOSS: default refs (MRs, master, schedules) jobs # +# EE/FOSS: default refs (MRs, default branch, schedules) jobs # setup-test-env: extends: - .rails-job-base @@ -183,6 +183,7 @@ setup-test-env: - tmp/tests/gitlab-workhorse/gitlab-workhorse - tmp/tests/gitlab-workhorse/gitlab-resize-image - tmp/tests/gitlab-workhorse/config.toml + - tmp/tests/gitlab-workhorse/WORKHORSE_TREE - tmp/tests/repositories/ - tmp/tests/second_storage/ when: always @@ -256,17 +257,6 @@ static-analysis: - run_timed_command "retry yarn install --frozen-lockfile" - scripts/static-analysis -downtime_check: - extends: - - .rails-job-base - - .rails:rules:downtime_check - needs: [] - stage: test - variables: - SETUP_DB: "false" - script: - - bundle exec rake downtime_check - rspec migration pg11: extends: - .rspec-base-pg11 @@ -346,7 +336,7 @@ db:migrate:reset: db:check-schema: extends: - .db-job-base - - .rails:rules:ee-mr-and-master-only + - .rails:rules:ee-mr-and-default-branch-only script: - source scripts/schema_changed.sh @@ -358,32 +348,31 @@ db:check-migrations: - scripts/validate_migration_schema allow_failure: true -db:migrate-from-v12.10.0: +db:migrate-from-previous-major-version: extends: .db-job-base variables: + USE_BUNDLE_INSTALL: "false" SETUP_DB: "false" + PROJECT_TO_CHECKOUT: "gitlab-foss" + TAG_TO_CHECKOUT: "v12.10.14" script: - - export PROJECT_TO_CHECKOUT="gitlab" - - export TAG_TO_CHECKOUT="v12.10.0-ee" - - '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab-foss"' - - '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="v12.10.0"' + - '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"' + - '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="${TAG_TO_CHECKOUT}-ee"' - retry 'git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT' - git checkout -f FETCH_HEAD + # Patch Gemfile of the previous major version for compatibility. - sed -i -e "s/gem 'grpc', '~> 1.24.0'/gem 'grpc', '~> 1.30.2'/" Gemfile # Update gRPC for Ruby 2.7 - - sed -i -e "s/gem 'google-protobuf', '~> 3.8.0'/gem 'google-protobuf', '~> 3.12.0'/" Gemfile - - gem install bundler:1.17.3 - - bundle update google-protobuf grpc bootsnap - - bundle install $BUNDLE_INSTALL_FLAGS - - date + - sed -i -e "s/gem 'google-protobuf', '~> 3.8.0'/gem 'google-protobuf', '~> 3.12'/" Gemfile + - sed -i -e "s/gem 'nokogiri', '~> 1.10.5'/gem 'nokogiri', '~> 1.11.0'/" Gemfile + - sed -i -e "s/gem 'mimemagic', '~> 0.3.2'/gem 'ruby-magic', '~> 0.3.2'/" Gemfile + - run_timed_command "gem install bundler:1.17.3" + - run_timed_command "bundle update google-protobuf nokogiri grpc mimemagic bootsnap" + - run_timed_command "bundle install ${BUNDLE_INSTALL_FLAGS}" - cp config/gitlab.yml.example config/gitlab.yml - - bundle exec rake db:drop db:create db:structure:load db:seed_fu - - date + - run_timed_command "bundle exec rake db:drop db:create db:structure:load db:migrate db:seed_fu" - git checkout -f $CI_COMMIT_SHA - - bundle install $BUNDLE_INSTALL_FLAGS - - date - - . scripts/prepare_build.sh - - date - - bundle exec rake db:migrate + - run_timed_command "bundle install ${BUNDLE_INSTALL_FLAGS}" + - run_timed_command "bundle exec rake db:migrate" db:rollback: extends: .db-job-base @@ -535,11 +524,11 @@ rspec:feature-flags: run_timed_command "bundle exec scripts/used-feature-flags"; fi -# EE/FOSS: default refs (MRs, master, schedules) jobs # +# EE/FOSS: default refs (MRs, default branch, schedules) jobs # ####################################################### ################################################## -# EE: default refs (MRs, master, schedules) jobs # +# EE: default refs (MRs, default branch, schedules) jobs # rspec migration pg11-as-if-foss: extends: - .rspec-base-pg11-as-if-foss @@ -682,81 +671,81 @@ db:rollback geo: script: - bundle exec rake geo:db:migrate VERSION=20170627195211 - bundle exec rake geo:db:migrate -# EE: default refs (MRs, master, schedules) jobs # +# EE: default refs (MRs, default branch, schedules) jobs # ################################################## ########################################## -# EE/FOSS: master nightly scheduled jobs # +# EE/FOSS: default branch nightly scheduled jobs # rspec migration pg12: extends: - .rspec-base-pg12 - .rspec-base-migration - - .rails:rules:master-schedule-nightly--code-backstage + - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-migration-parallel rspec unit pg12: extends: - .rspec-base-pg12 - - .rails:rules:master-schedule-nightly--code-backstage + - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-unit-parallel rspec integration pg12: extends: - .rspec-base-pg12 - - .rails:rules:master-schedule-nightly--code-backstage + - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-integration-parallel rspec system pg12: extends: - .rspec-base-pg12 - - .rails:rules:master-schedule-nightly--code-backstage + - .rails:rules:default-branch-schedule-nightly--code-backstage - .rspec-system-parallel -# EE/FOSS: master nightly scheduled jobs # +# EE/FOSS: default branch nightly scheduled jobs # ########################################## ##################################### -# EE: master nightly scheduled jobs # +# EE: default branch nightly scheduled jobs # rspec-ee migration pg12: extends: - .rspec-ee-base-pg12 - .rspec-base-migration - - .rails:rules:master-schedule-nightly--code-backstage-ee-only + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-migration-parallel rspec-ee unit pg12: extends: - .rspec-ee-base-pg12 - - .rails:rules:master-schedule-nightly--code-backstage-ee-only + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-unit-parallel rspec-ee integration pg12: extends: - .rspec-ee-base-pg12 - - .rails:rules:master-schedule-nightly--code-backstage-ee-only + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-integration-parallel rspec-ee system pg12: extends: - .rspec-ee-base-pg12 - - .rails:rules:master-schedule-nightly--code-backstage-ee-only + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-system-parallel rspec-ee unit pg12 geo: extends: - .rspec-ee-base-geo-pg12 - - .rails:rules:master-schedule-nightly--code-backstage-ee-only + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only - .rspec-ee-unit-geo-parallel rspec-ee integration pg12 geo: extends: - .rspec-ee-base-geo-pg12 - - .rails:rules:master-schedule-nightly--code-backstage-ee-only + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only rspec-ee system pg12 geo: extends: - .rspec-ee-base-geo-pg12 - - .rails:rules:master-schedule-nightly--code-backstage-ee-only -# EE: master nightly scheduled jobs # + - .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only +# EE: default branch nightly scheduled jobs # ##################################### ################################################## @@ -799,7 +788,7 @@ fail-pipeline-early: GIT_DEPTH: 1 before_script: - source scripts/utils.sh - - install_api_client_dependencies_with_apt + - install_gitlab_gem script: - fail_pipeline_early # EE: Canonical MR pipelines diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index 76191a923b..e1037edc32 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -29,7 +29,6 @@ review-build-cng: stage: review-prepare before_script: - source ./scripts/utils.sh - - install_api_client_dependencies_with_apk - install_gitlab_gem needs: - job: compile-production-assets @@ -161,7 +160,7 @@ review-qa-smoke: review-qa-all: extends: - .review-qa-base - - .review:rules:mr-only-manual + - .review:rules:review-qa-all parallel: 5 script: - export KNAPSACK_REPORT_PATH=knapsack/master_report.json @@ -198,7 +197,7 @@ review-performance: parallel-spec-reports: extends: - - .review:rules:mr-only-manual + - .review:rules:review-qa-all image: ${GITLAB_DEPENDENCY_PROXY}ruby:2.7-alpine stage: post-qa dependencies: ["review-qa-all"] @@ -234,7 +233,15 @@ danger-review: - run_timed_command "bundle install --jobs=$(nproc) --path=vendor --retry=3 --quiet --with danger" - run_timed_command "retry yarn install --frozen-lockfile" script: - - run_timed_command "bundle exec danger --fail-on-errors=true --verbose" + - > + if [ -z "$DANGER_GITLAB_API_TOKEN" ]; then + # Force danger to skip CI source GitLab and fallback to "local only git repo". + unset GITLAB_CI + # We need to base SHA to help danger determine the base commit for this shallow clone. + run_timed_command "bundle exec danger dry_run --fail-on-errors=true --verbose --base='$CI_MERGE_REQUEST_DIFF_BASE_SHA'" + else + run_timed_command "bundle exec danger --fail-on-errors=true --verbose" + fi update-danger-review-cache: extends: diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index e76b0f2d07..c2d16582a6 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -11,25 +11,25 @@ if: '$CI_PROJECT_NAME != "gitlab-foss" && $CI_PROJECT_NAME != "gitlab-ce" && $CI_PROJECT_NAME != "gitlabhq"' .if-default-refs: &if-default-refs - if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main" || $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ || $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ || $CI_COMMIT_REF_NAME =~ /^security\// || $CI_MERGE_REQUEST_IID || $CI_COMMIT_TAG || $FORCE_GITLAB_CI' + if: '$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH || $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ || $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ || $CI_COMMIT_REF_NAME =~ /^security\// || $CI_MERGE_REQUEST_IID || $CI_COMMIT_TAG || $FORCE_GITLAB_CI' -.if-master-refs: &if-master-refs - if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main"' +.if-default-branch-refs: &if-default-branch-refs + if: '$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH' -.if-master-push: &if-master-push - if: '($CI_COMMIT_BRANCH == "master" || $CI_COMMIT_REF_NAME == "main") && $CI_PIPELINE_SOURCE == "push"' +.if-default-branch-push: &if-default-branch-push + if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "push"' -.if-master-schedule-2-hourly: &if-master-schedule-2-hourly - if: '($CI_COMMIT_BRANCH == "master" || $CI_COMMIT_REF_NAME == "main") && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "2-hourly"' +.if-default-branch-schedule-2-hourly: &if-default-branch-schedule-2-hourly + if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "2-hourly"' -.if-master-schedule-nightly: &if-master-schedule-nightly - if: '($CI_COMMIT_BRANCH == "master" || $CI_COMMIT_REF_NAME == "main") && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "nightly"' +.if-default-branch-schedule-nightly: &if-default-branch-schedule-nightly + if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule" && $FREQUENCY == "nightly"' .if-auto-deploy-branches: &if-auto-deploy-branches if: '$CI_COMMIT_BRANCH =~ /^\d+-\d+-auto-deploy-\d+$/' -.if-master-or-tag: &if-master-or-tag - if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main" || $CI_COMMIT_TAG' +.if-default-branch-or-tag: &if-default-branch-or-tag + if: '$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH || $CI_COMMIT_TAG' .if-merge-request: &if-merge-request if: '$CI_MERGE_REQUEST_IID' @@ -52,8 +52,8 @@ .if-dot-com-gitlab-org-schedule: &if-dot-com-gitlab-org-schedule if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_PIPELINE_SOURCE == "schedule"' -.if-dot-com-gitlab-org-master: &if-dot-com-gitlab-org-master - if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && ($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main")' +.if-dot-com-gitlab-org-default-branch: &if-dot-com-gitlab-org-default-branch + if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH' .if-dot-com-gitlab-org-merge-request: &if-dot-com-gitlab-org-merge-request if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" && $CI_MERGE_REQUEST_IID' @@ -101,6 +101,7 @@ - ".gitlab/ci/frontend.gitlab-ci.yml" - ".gitlab/ci/build-images.gitlab-ci.yml" - ".gitlab/ci/review.gitlab-ci.yml" + - "scripts/review_apps/base-config.yaml" - "scripts/trigger-build" .ci-qa-patterns: &ci-qa-patterns @@ -131,6 +132,14 @@ - "config/webpack.config.js" - "config/helpers/*.js" +.frontend-build-patterns: &frontend-build-patterns + - "{package.json,yarn.lock}" + - "babel.config.js" + - "config/webpack.config.js" + - "config/**/*.js" + - "vendor/assets/**/*" + - "{,ee/}app/assets/**/*" + .frontend-patterns: &frontend-patterns - "{package.json,yarn.lock}" - "babel.config.js" @@ -293,7 +302,7 @@ ################ .shared:rules:update-cache: rules: - - <<: *if-master-schedule-2-hourly + - <<: *if-default-branch-schedule-2-hourly - <<: *if-security-schedule - <<: *if-merge-request-title-update-caches @@ -314,6 +323,7 @@ rules: - <<: *if-not-canonical-namespace when: never + - <<: *if-auto-deploy-branches - changes: *ci-build-images-patterns - changes: *code-qa-patterns @@ -394,8 +404,8 @@ rules: - <<: *if-not-canonical-namespace when: never - - <<: *if-default-refs - changes: *code-qa-patterns + - <<: *if-auto-deploy-branches + - changes: *code-qa-patterns .frontend:rules:compile-test-assets: rules: @@ -434,26 +444,26 @@ - <<: *if-merge-request changes: *frontend-patterns -.frontend:rules:ee-mr-and-master-only: +.frontend:rules:ee-mr-and-default-branch-only: rules: - <<: *if-not-ee when: never - <<: *if-merge-request changes: *code-backstage-patterns when: always - - <<: *if-master-refs + - <<: *if-default-branch-refs changes: *code-backstage-patterns .frontend:rules:qa-frontend-node: rules: - - <<: *if-master-refs + - <<: *if-default-branch-refs changes: *frontend-dependency-patterns - <<: *if-merge-request changes: *frontend-dependency-patterns .frontend:rules:qa-frontend-node-latest: rules: - - <<: *if-master-refs + - <<: *if-default-branch-refs changes: *frontend-dependency-patterns allow_failure: true - <<: *if-merge-request @@ -464,8 +474,8 @@ rules: - <<: *if-not-canonical-namespace when: never - - if: '$DANGER_GITLAB_API_TOKEN && $CI_MERGE_REQUEST_IID && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main")' - changes: *frontend-patterns + - if: '$DANGER_GITLAB_API_TOKEN && $CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH' + changes: *frontend-build-patterns allow_failure: true ################ @@ -484,7 +494,7 @@ rules: - <<: *if-not-ee when: never - - <<: *if-master-schedule-2-hourly + - <<: *if-default-branch-schedule-2-hourly ############ # QA rules # @@ -553,6 +563,7 @@ when: never - <<: *if-merge-request changes: *db-patterns + when: manual .rails:rules:ee-and-foss-unit: rules: @@ -824,14 +835,14 @@ - changes: *db-library-patterns - <<: *if-merge-request-title-run-all-rspec -.rails:rules:ee-mr-and-master-only: +.rails:rules:ee-mr-and-default-branch-only: rules: - <<: *if-not-ee when: never - <<: *if-merge-request-title-run-all-rspec - <<: *if-merge-request changes: *code-backstage-patterns - - <<: *if-master-refs + - <<: *if-default-branch-refs changes: *code-backstage-patterns .rails:rules:detect-tests: @@ -878,16 +889,11 @@ changes: *code-backstage-patterns when: on_failure -.rails:rules:downtime_check: - rules: - - <<: *if-merge-request - changes: *code-backstage-patterns - .rails:rules:deprecations: rules: - <<: *if-not-ee when: never - - <<: *if-master-schedule-nightly + - <<: *if-default-branch-schedule-nightly - <<: *if-merge-request-title-run-all-rspec .rails:rules:rspec-coverage: @@ -897,7 +903,7 @@ - <<: *if-merge-request changes: *code-backstage-patterns when: always - - <<: *if-master-schedule-2-hourly + - <<: *if-default-branch-schedule-2-hourly - <<: *if-merge-request-title-run-all-rspec when: always @@ -905,24 +911,34 @@ rules: - <<: *if-not-ee when: never - - <<: *if-master-schedule-2-hourly + - <<: *if-default-branch-schedule-2-hourly allow_failure: true - <<: *if-merge-request-title-run-all-rspec -.rails:rules:master-schedule-nightly--code-backstage: +.rails:rules:default-branch-schedule-nightly--code-backstage: rules: - - <<: *if-master-schedule-nightly + - <<: *if-default-branch-schedule-nightly - <<: *if-merge-request changes: [".gitlab/ci/rails.gitlab-ci.yml"] -.rails:rules:master-schedule-nightly--code-backstage-ee-only: +.rails:rules:default-branch-schedule-nightly--code-backstage-ee-only: rules: - <<: *if-not-ee when: never - - <<: *if-master-schedule-nightly + - <<: *if-default-branch-schedule-nightly - <<: *if-merge-request changes: [".gitlab/ci/rails.gitlab-ci.yml"] +####################### +# Vendored gems rules # +####################### + +.vendor:rules:mail-smtp_pool: + rules: + - <<: *if-merge-request + changes: ["vendor/gems/mail-smtp_pool/**/*"] + - <<: *if-merge-request-title-run-all-rspec + ################## # Releases rules # ################## @@ -945,7 +961,7 @@ rules: - if: '$CODE_QUALITY_DISABLED' when: never - # - <<: *if-master-refs # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 + # - <<: *if-default-branch-refs # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 - <<: *if-default-refs changes: *code-backstage-patterns allow_failure: true @@ -954,7 +970,7 @@ rules: - if: '$SAST_DISABLED || $GITLAB_FEATURES !~ /\bsast\b/' when: never - # - <<: *if-master-refs # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 + # - <<: *if-default-branch-refs # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 - <<: *if-default-refs changes: *code-backstage-qa-patterns allow_failure: true @@ -963,7 +979,7 @@ rules: - if: '$DEPENDENCY_SCANNING_DISABLED || $GITLAB_FEATURES !~ /\bdependency_scanning\b/' when: never - # - <<: *if-master-refs # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 + # - <<: *if-default-branch-refs # To be done in a later iteration: https://gitlab.com/gitlab-org/gitlab/issues/31160#note_278188255 - <<: *if-default-refs changes: *code-backstage-qa-patterns allow_failure: true @@ -984,7 +1000,7 @@ rules: - if: '$DAST_DISABLED || $GITLAB_FEATURES !~ /\bdast\b/' when: never - - <<: *if-master-schedule-nightly + - <<: *if-default-branch-schedule-nightly allow_failure: true .reports:rules:license_scanning: @@ -1007,9 +1023,12 @@ - <<: *if-dot-com-gitlab-org-merge-request changes: *frontend-patterns - <<: *if-dot-com-gitlab-org-merge-request - changes: *code-qa-patterns + changes: *code-patterns when: manual allow_failure: true + - <<: *if-dot-com-gitlab-org-merge-request + changes: *qa-patterns + allow_failure: true - <<: *if-dot-com-gitlab-org-schedule .review:rules:review-deploy: @@ -1022,9 +1041,12 @@ changes: *frontend-patterns allow_failure: true - <<: *if-dot-com-gitlab-org-merge-request - changes: *code-qa-patterns + changes: *code-patterns when: manual allow_failure: true + - <<: *if-dot-com-gitlab-org-merge-request + changes: *qa-patterns + allow_failure: true - <<: *if-dot-com-gitlab-org-schedule allow_failure: true @@ -1067,14 +1089,17 @@ when: manual allow_failure: true -.review:rules:mr-only-manual: +.review:rules:review-qa-all: rules: - <<: *if-not-ee when: never - <<: *if-dot-com-gitlab-org-merge-request - changes: *code-qa-patterns + changes: *code-patterns when: manual allow_failure: true + - <<: *if-dot-com-gitlab-org-merge-request + changes: *qa-patterns + allow_failure: true .review:rules:review-cleanup: rules: @@ -1100,7 +1125,7 @@ .review:rules:danger: rules: - - if: '$DANGER_GITLAB_API_TOKEN && $CI_MERGE_REQUEST_IID' + - if: '$CI_MERGE_REQUEST_IID' ############### # Setup rules # @@ -1109,13 +1134,13 @@ rules: - <<: *if-not-canonical-namespace when: never - - <<: *if-master-or-tag + - <<: *if-default-branch-or-tag changes: *code-backstage-qa-patterns when: on_success .setup:rules:dont-interrupt-me: rules: - - <<: *if-master-or-tag + - <<: *if-default-branch-or-tag allow_failure: true - <<: *if-auto-deploy-branches allow_failure: true diff --git a/.gitlab/ci/untamper-my-lockfile.yml b/.gitlab/ci/untamper-my-lockfile.yml new file mode 100644 index 0000000000..54ba160f1b --- /dev/null +++ b/.gitlab/ci/untamper-my-lockfile.yml @@ -0,0 +1,26 @@ +untamper-my-lockfile: + image: registry.gitlab.com/gitlab-org/frontend/untamper-my-lockfile:main + stage: test + needs: [] + before_script: [] + after_script: [] + cache: {} + retry: 1 + script: + - untamper-my-lockfile --lockfile yarn.lock + rules: + # Create a pipeline if the branch is named 'add-untamper-my-lockfile' in + # order to have an integration check added in the MR that introduces it + - if: $CI_COMMIT_REF_NAME == "add-untamper-my-lockfile" + # Create a pipeline if there are changes in yarn.lock _and_ we are in a + # merge request _or_ branch pipeline. + # + # This ensures that the pipeline isn't run in scheduled jobs for example + # + # Also our best effort to support both branch and MR pipelines. In certain + # projects this might trigger _two_ pipelines. These projects can be fixed + # by adding proper workflow:rules + # https://docs.gitlab.com/ee/ci/yaml/#workflowrules + - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH + changes: + - yarn.lock diff --git a/.gitlab/ci/vendored-gems.gitlab-ci.yml b/.gitlab/ci/vendored-gems.gitlab-ci.yml new file mode 100644 index 0000000000..a39c4307c1 --- /dev/null +++ b/.gitlab/ci/vendored-gems.gitlab-ci.yml @@ -0,0 +1,7 @@ +vendor mail-smtp_pool: + extends: + - .vendor:rules:mail-smtp_pool + needs: [] + trigger: + include: vendor/gems/mail-smtp_pool/.gitlab-ci.yml + strategy: depend diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml index 8361d20d2b..ba4523f3bf 100644 --- a/.gitlab/ci/workhorse.gitlab-ci.yml +++ b/.gitlab/ci/workhorse.gitlab-ci.yml @@ -1,6 +1,6 @@ workhorse:verify: extends: .workhorse:rules:workhorse - image: ${GITLAB_DEPENDENCY_PROXY}golang:1.15 + image: ${GITLAB_DEPENDENCY_PROXY}golang:1.16 stage: test needs: [] script: @@ -23,14 +23,10 @@ workhorse:verify: - apt-get update && apt-get -y install libimage-exiftool-perl - make -C workhorse test -workhorse:test using go 1.13: - extends: .workhorse:test - image: ${GITLAB_DEPENDENCY_PROXY}golang:1.13 - -workhorse:test using go 1.14: - extends: .workhorse:test - image: ${GITLAB_DEPENDENCY_PROXY}golang:1.14 - workhorse:test using go 1.15: extends: .workhorse:test image: ${GITLAB_DEPENDENCY_PROXY}golang:1.15 + +workhorse:test using go 1.16: + extends: .workhorse:test + image: ${GITLAB_DEPENDENCY_PROXY}golang:1.16 diff --git a/.gitlab/issue_templates/Experiment Successful Cleanup.md b/.gitlab/issue_templates/Experiment Successful Cleanup.md index afe4793cdf..42f2634234 100644 --- a/.gitlab/issue_templates/Experiment Successful Cleanup.md +++ b/.gitlab/issue_templates/Experiment Successful Cleanup.md @@ -15,5 +15,6 @@ The changes need to become an official part of the product. - [ ] Optional: Migrate experiment to a default enabled [feature flag](https://docs.gitlab.com/ee/development/feature_flags) for one milestone and add a changelog. Converting to a feature flag can be skipped at the ICs discretion if risk is deemed low with consideration to both SaaS and (if applicable) self managed - [ ] In the next milestone, [remove the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) if applicable - [ ] After the flag removal is deployed, [clean up the feature/experiment feature flags](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel +- [ ] Ensure the corresponding [Experiment Tracking](https://gitlab.com/groups/gitlab-org/-/boards/1352542?label_name[]=devops%3A%3Agrowth&label_name[]=growth%20experiment&label_name[]=experiment%20tracking) issue is updated /label ~"feature" ~"feature::maintenance" ~"workflow::scheduling" ~"growth experiment" ~"feature flag" diff --git a/.gitlab/issue_templates/Experimentation.md b/.gitlab/issue_templates/Experimentation.md index f84c4305c2..ba7839fb94 100644 --- a/.gitlab/issue_templates/Experimentation.md +++ b/.gitlab/issue_templates/Experimentation.md @@ -18,7 +18,7 @@ # Tracking Details - [json schema](https://gitlab.com/gitlab-org/iglu/-/blob/master/public/schemas/com.gitlab/gitlab_experiment/jsonschema/0-3-0) used in `gitlab-experiment` tracking. -- see [taxonomy](https://docs.gitlab.com/ee/development/snowplow.html#structured-event-taxonomy) for a guide. +- see [taxonomy](https://docs.gitlab.com/ee/development/snowplow/index.html#structured-event-taxonomy) for a guide. | activity | category | action | label | context | property | value | | -------- | -------- | ------ | ----- | ------- | -------- | ----- | diff --git a/.gitlab/issue_templates/Feature Flag Roll Out.md b/.gitlab/issue_templates/Feature Flag Roll Out.md index fe263b932a..a67d0f4e31 100644 --- a/.gitlab/issue_templates/Feature Flag Roll Out.md +++ b/.gitlab/issue_templates/Feature Flag Roll Out.md @@ -1,48 +1,107 @@ -## What +## Feature -Remove the `:feature_name` feature flag ... +This feature uses the `:feature_name` feature flag! + + +- [Issue Name](ISSUE LINK) ## Owners - Team: NAME_OF_TEAM - Most appropriate slack channel to reach out to: `#g_TEAM_NAME` - Best individual to reach out to: NAME +- PM: NAME -## Expectations +## Stakeholders -### What are we expecting to happen? + -### What can we monitor to detect problems with this? +## The Rollout Plan + +- Partial Rollout on GitLab.com with beta groups +- Rollout on GitLab.com for a certain period (How long) +- Percentage Rollout on GitLab.com +- Rollout Feature for everyone as soon as it's ready - -## Beta groups/projects - -If applicable, any groups/projects that are happy to have this feature turned on early. Some organizations may wish to test big changes they are interested in with a small subset of users ahead of time for example. +**Beta Groups/Projects:** + - `gitlab-org/gitlab` project - `gitlab-org`/`gitlab-com` groups - ... -## Roll Out Steps +## Expectations + +### What are we expecting to happen? + + + +### What might happen if this goes wrong? + + + +### What can we monitor to detect problems with this? + + + +## Rollout Timeline + + + +**Initial Rollout** + +*Preparation Phase* - [ ] Enable on staging (`/chatops run feature set feature_name true --staging`) + - [ ] Test on staging -- [ ] Ensure that documentation has been updated -- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab feature_name true`) -- [ ] Coordinate a time to enable the flag with the SRE oncall and release managers - - In `#production` mention `@sre-oncall` and `@release-managers`. Once an SRE on call and Release Manager on call confirm, you can proceed with the rollout + +- [ ] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)) + - [ ] Announce on the issue an estimated time this will be enabled on GitLab.com -- [ ] Enable on GitLab.com by running chatops command in `#production` (`/chatops run feature set feature_name true`) -- [ ] Cross post chatops Slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel + +*Partial Rollout Phase* +- [ ] Enable on GitLab.com for individual groups/projects listed above and verify behaviour (`/chatops run feature set --project=gitlab-org/gitlab feature_name true`) + +- [ ] Verify behaviour (See Beta Groups) and add details with screenshots as a comment on this issue + +- [ ] If it is possible to perform an incremental rollout, this should be preferred. Proposed increments are: `10%`, `50%`, `100%`. Proposed minimum time between increments is 15 minutes. + - When setting percentages, make sure that the feature works correctly between feature checks. See https://gitlab.com/gitlab-org/gitlab/-/issues/327117 for more information + - For actor-based rollout: `/chatops run feature set feature_name 10 --actors` + - For time-based rollout: `/chatops run feature set feature_name 10` + +- [ ] Make the feature flag enabled by default i.e. Change `default_enabled` to `true` + +- [ ] Cross post chatops slack command to `#support_gitlab-com` ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#where-to-run-commands)) and in your team channel + + +**Cleanup** + +This is an __important__ phase, that should be either done in the next Milestone or as soon as possible. For the cleanup phase, please follow our documentation on how to [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up). + + - [ ] Announce on the issue that the flag has been enabled -- [ ] Remove feature flag and add changelog entry. Ensure that the feature flag definition YAML file has been removed in the **same MR** that is removing the feature flag from the code -- [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel + +- [ ] Remove `:feature_name` feature flag + - [ ] Remove all references to the feature flag from the codebase + - [ ] Remove the YAML definitions for the feature from the repository + - [ ] Create a Changelog Entry + +- [ ] Clean up the feature flag from all environments by running this chatops command in `#production` channel `/chatops run feature delete some_feature`. + +**Final Step** + +- [ ] Close this rollout issue for the feature flag after the feature flag is removed from the codebase. ## Rollback Steps @@ -53,3 +112,4 @@ If applicable, any groups/projects that are happy to have this feature turned on ``` /label ~"feature flag" +/assign DRI diff --git a/.gitlab/issue_templates/Feature proposal.md b/.gitlab/issue_templates/Feature proposal.md index 2cdf2341c8..72ee11e6f9 100644 --- a/.gitlab/issue_templates/Feature proposal.md +++ b/.gitlab/issue_templates/Feature proposal.md @@ -113,3 +113,5 @@ Use the following resources to find the appropriate labels: /label ~devops:: ~group: ~Category: /label ~"GitLab Core"/~"GitLab Premium"/~"GitLab Ultimate" /label ~feature +/label ~documentation +/label ~direction diff --git a/.gitlab/issue_templates/Geo: Replicate a new Git repository type.md b/.gitlab/issue_templates/Geo: Replicate a new Git repository type.md new file mode 100644 index 0000000000..6b2d732f24 --- /dev/null +++ b/.gitlab/issue_templates/Geo: Replicate a new Git repository type.md @@ -0,0 +1,756 @@ + + +## Replicate Cool Widgets + +This issue is for implementing Geo replication and verification of Cool Widgets. + +For more background, see [Geo self-service framework](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo/framework.md). + +In order to implement and test this feature, you need to first [set up Geo locally](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/geo.md). + +There are three main sections below. It is a good idea to structure your merge requests this way as well: + +1. Modify database schemas to prepare to add Geo support for Cool Widgets +1. Implement Geo support of Cool Widgets behind a feature flag +1. Release Geo support of Cool Widgets + +It is also a good idea to first open a proof-of-concept merge request. It can be helpful for working out kinks and getting initial support and feedback from the Geo team. As an example, see the [Proof of Concept to replicate Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56423). + +### Modify database schemas to prepare to add Geo support for Cool Widgets + +You might do this section in its own merge request, but it is not required. + +#### Add the registry table to track replication and verification state + +Geo secondary sites have a [Geo tracking database](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo.md#tracking-database) independent of the main database. It is used to track the replication and verification state of all replicables. Every Model has a corresponding "registry" table in the Geo tracking database. + +- [ ] Create the migration file in `ee/db/geo/migrate`: + + ```shell + bin/rails generate geo_migration CreateCoolWidgetRegistry + ``` + +- [ ] Replace the contents of the migration file with the following. Note that we cannot add a foreign key constraint on `cool_widget_id` because the `cool_widgets` table is in a different database. The application code must handle logic such as propagating deletions. + + ```ruby + # frozen_string_literal: true + + class CreateCoolWidgetRegistry < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + def up + unless table_exists?(:cool_widget_registry) + ActiveRecord::Base.transaction do + create_table :cool_widget_registry, id: :bigserial, force: :cascade do |t| + t.bigint :cool_widget_id, null: false + t.datetime_with_timezone :created_at, null: false + t.datetime_with_timezone :last_synced_at + t.datetime_with_timezone :retry_at + t.datetime_with_timezone :verified_at + t.datetime_with_timezone :verification_started_at + t.datetime_with_timezone :verification_retry_at + t.integer :state, default: 0, null: false, limit: 2 + t.integer :verification_state, default: 0, null: false, limit: 2 + t.integer :retry_count, default: 0, limit: 2, null: false + t.integer :verification_retry_count, default: 0, limit: 2, null: false + t.boolean :checksum_mismatch, default: false, null: false + t.boolean :force_to_redownload, default: false, null: false + t.boolean :missing_on_primary, default: false, null: false + t.binary :verification_checksum + t.binary :verification_checksum_mismatched + t.string :verification_failure, limit: 255 # rubocop:disable Migration/PreventStrings see https://gitlab.com/gitlab-org/gitlab/-/issues/323806 + t.string :last_sync_failure, limit: 255 # rubocop:disable Migration/PreventStrings see https://gitlab.com/gitlab-org/gitlab/-/issues/323806 + + t.index :cool_widget_id, name: :index_cool_widget_registry_on_cool_widget_id, unique: true + t.index :retry_at + t.index :state + # To optimize performance of CoolWidgetRegistry.verification_failed_batch + t.index :verification_retry_at, name: :cool_widget_registry_failed_verification, order: "NULLS FIRST", where: "((state = 2) AND (verification_state = 3))" + # To optimize performance of CoolWidgetRegistry.needs_verification_count + t.index :verification_state, name: :cool_widget_registry_needs_verification, where: "((state = 2) AND (verification_state = ANY (ARRAY[0, 3])))" + # To optimize performance of CoolWidgetRegistry.verification_pending_batch + t.index :verified_at, name: :cool_widget_registry_pending_verification, order: "NULLS FIRST", where: "((state = 2) AND (verification_state = 0))" + end + end + end + end + + def down + drop_table :cool_widget_registry + end + end + ``` + +- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md). +- [ ] Run Geo tracking database migrations: + + ```shell + bin/rake geo:db:migrate + ``` + +- [ ] Be sure to commit the relevant changes in `ee/db/geo/schema.rb` + +### Add verification state fields on the Geo primary site + +The Geo primary site needs to checksum every replicable in order for secondaries to verify their own checksums. To do this, Geo requires fields on the Model. There are two ways to add the necessary verification state fields. If the table is large and wide, then it may be a good idea to add verification state fields to a separate table (Option 2). Consult a database expert if needed. + +#### Add verification state fields to the model table (Option 1) + +- [ ] Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration AddVerificationStateToCoolWidgets + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class AddVerificationStateToCoolWidgets < ActiveRecord::Migration[6.0] + def change + change_table(:cool_widgets) do |t| + t.integer :verification_state, default: 0, limit: 2, null: false + t.column :verification_started_at, :datetime_with_timezone + t.integer :verification_retry_count, limit: 2, null: false + t.column :verification_retry_at, :datetime_with_timezone + t.column :verified_at, :datetime_with_timezone + t.binary :verification_checksum, using: 'verification_checksum::bytea' + + t.text :verification_failure # rubocop:disable Migration/AddLimitToTextColumns + end + end + end + ``` + +- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md). +- [ ] If `cool_widgets` is a high-traffic table, follow [the database documentation to use `with_lock_retries`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/migration_style_guide.md#when-to-use-the-helper-method) +- [ ] Adding a `text` column also [requires](../database/strings_and_the_text_data_type.md#add-a-text-column-to-an-existing-table) setting a limit. Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration AddVerificationFailureLimitToCoolWidgets + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class AddVerificationFailureLimitToCoolWidgets < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + CONSTRAINT_NAME = 'cool_widget_verification_failure_text_limit' + + def up + add_text_limit :cool_widget, :verification_failure, 255, constraint_name: CONSTRAINT_NAME + end + + def down + remove_check_constraint(:cool_widget, CONSTRAINT_NAME) + end + end + ``` + +- [ ] Add indexes on verification fields to ensure verification can be performed efficiently. Some or all of these indexes can be omitted if the table is guaranteed to be small. Ask a database expert if you are considering omitting indexes. Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration AddVerificationIndexesToCoolWidgets + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class AddVerificationIndexesToCoolWidgets < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + VERIFICATION_STATE_INDEX_NAME = "index_cool_widgets_on_verification_state" + PENDING_VERIFICATION_INDEX_NAME = "index_cool_widgets_pending_verification" + FAILED_VERIFICATION_INDEX_NAME = "index_cool_widgets_failed_verification" + NEEDS_VERIFICATION_INDEX_NAME = "index_cool_widgets_needs_verification" + + disable_ddl_transaction! + + def up + add_concurrent_index :cool_widgets, :verification_state, name: VERIFICATION_STATE_INDEX_NAME + add_concurrent_index :cool_widgets, :verified_at, where: "(verification_state = 0)", order: { verified_at: 'ASC NULLS FIRST' }, name: PENDING_VERIFICATION_INDEX_NAME + add_concurrent_index :cool_widgets, :verification_retry_at, where: "(verification_state = 3)", order: { verification_retry_at: 'ASC NULLS FIRST' }, name: FAILED_VERIFICATION_INDEX_NAME + add_concurrent_index :cool_widgets, :verification_state, where: "(verification_state = 0 OR verification_state = 3)", name: NEEDS_VERIFICATION_INDEX_NAME + end + + def down + remove_concurrent_index_by_name :cool_widgets, VERIFICATION_STATE_INDEX_NAME + remove_concurrent_index_by_name :cool_widgets, PENDING_VERIFICATION_INDEX_NAME + remove_concurrent_index_by_name :cool_widgets, FAILED_VERIFICATION_INDEX_NAME + remove_concurrent_index_by_name :cool_widgets, NEEDS_VERIFICATION_INDEX_NAME + end + end + ``` + +- [ ] Run database migrations: + + ```shell + bin/rake db:migrate + ``` + +- [ ] Be sure to commit the relevant changes in `db/structure.sql` + +#### Add verification state fields to a separate table (Option 2) + +- [ ] Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration CreateCoolWidgetStates + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class CreateCoolWidgetStates < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + VERIFICATION_STATE_INDEX_NAME = "index_cool_widget_states_on_verification_state" + PENDING_VERIFICATION_INDEX_NAME = "index_cool_widget_states_pending_verification" + FAILED_VERIFICATION_INDEX_NAME = "index_cool_widget_states_failed_verification" + NEEDS_VERIFICATION_INDEX_NAME = "index_cool_widget_states_needs_verification" + + disable_ddl_transaction! + + def up + unless table_exists?(:cool_widget_states) + with_lock_retries do + create_table :cool_widget_states, id: false do |t| + t.references :cool_widget, primary_key: true, null: false, foreign_key: { on_delete: :cascade } + t.integer :verification_state, default: 0, limit: 2, null: false + t.column :verification_started_at, :datetime_with_timezone + t.datetime_with_timezone :verification_retry_at + t.datetime_with_timezone :verified_at + t.integer :verification_retry_count, limit: 2 + t.binary :verification_checksum, using: 'verification_checksum::bytea' + t.text :verification_failure + + t.index :verification_state, name: VERIFICATION_STATE_INDEX_NAME + t.index :verified_at, where: "(verification_state = 0)", order: { verified_at: 'ASC NULLS FIRST' }, name: PENDING_VERIFICATION_INDEX_NAME + t.index :verification_retry_at, where: "(verification_state = 3)", order: { verification_retry_at: 'ASC NULLS FIRST' }, name: FAILED_VERIFICATION_INDEX_NAME + t.index :verification_state, where: "(verification_state = 0 OR verification_state = 3)", name: NEEDS_VERIFICATION_INDEX_NAME + end + end + end + + add_text_limit :cool_widget_states, :verification_failure, 255 + end + + def down + drop_table :cool_widget_states + end + end + ``` + +- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md). +- [ ] Run database migrations: + + ```shell + bin/rake db:migrate + ``` + +- [ ] Be sure to commit the relevant changes in `db/structure.sql` + +That's all of the required database changes. + +### Implement Geo support of Cool Widgets behind a feature flag + +#### Step 1. Implement replication and verification + +- [ ] Include `Gitlab::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`. + + Pay some attention to method `pool_repository`. Not every repository type uses repository pooling. As Geo prefers to use repository snapshotting, it can lead to data loss. Make sure to overwrite `pool_repository` so it returns nil for repositories that do not have pools. + + At this point the `CoolWidget` class should look like this: + + ```ruby + # frozen_string_literal: true + + class CoolWidget < ApplicationRecord + include ::Gitlab::Geo::ReplicableModel + include ::Gitlab::Geo::VerificationState + + with_replicator Geo::CoolWidgetReplicator + + mount_uploader :file, CoolWidgetUploader + + # Override the `all` default if not all records can be replicated. For an + # example of an existing Model that needs to do this, see + # `EE::MergeRequestDiff`. + # scope :available_replicables, -> { all } + + # @param primary_key_in [Range, CoolWidget] arg to pass to primary_key_in scope + # @return [ActiveRecord::Relation] everything that should be synced to this node, restricted by primary key + def self.replicables_for_current_secondary(primary_key_in) + # This issue template does not help you write this method. + # + # This method is called only on Geo secondary sites. It is called when + # we want to know which records to replicate. This is not easy to automate + # because for example: + # + # * The "selective sync" feature allows admins to choose which namespaces # to replicate, per secondary site. Most Models are scoped to a + # namespace, but the nature of the relationship to a namespace varies + # between Models. + # * The "selective sync" feature allows admins to choose which shards to + # replicate, per secondary site. Repositories are associated with + # shards. Most blob types are not, but Project Uploads are. + # * Remote stored replicables are not replicated, by default. But the + # setting `sync_object_storage` enables replication of remote stored + # replicables. + # + # Search the codebase for examples, and consult a Geo expert if needed. + end + + # Geo checks this method in FrameworkRepositorySyncService to avoid + # snapshotting repositories using object pools + def pool_repository + nil + end + + ... + end + ``` + +- [ ] Implement `CoolWidget.replicables_for_current_secondary` above. +- [ ] Ensure `CoolWidget.replicables_for_current_secondary` is well-tested. Search the codebase for `replicables_for_current_secondary` to find examples of parameterized table specs. You may need to add more `FactoryBot` traits. +- [ ] If you are using a separate table `cool_widget_states` to track verification state on the Geo primary site, then: + - [ ] Do not include `::Gitlab::Geo::VerificationState` on the `CoolWidget` class. + - [ ] Add the following lines to the `cool_widget_state.rb` model: + + ```ruby + class CoolWidgetState < ApplicationRecord + ... + self.primary_key = :cool_widget_id + + include ::Gitlab::Geo::VerificationState + + belongs_to :cool_widget, inverse_of: :cool_widget_state + ... + end + ``` + + - [ ] Add the following lines to the `cool_widget` model: + + ```ruby + class CoolWidget < ApplicationRecord + ... + has_one :cool_widget_state, inverse_of: :cool_widget + + delegate :verification_retry_at, :verification_retry_at=, + :verified_at, :verified_at=, + :verification_checksum, :verification_checksum=, + :verification_failure, :verification_failure=, + :verification_retry_count, :verification_retry_count=, + to: :cool_widget_state + ... + end + ``` + +- [ ] Create `ee/app/replicators/geo/cool_widget_replicator.rb`. Implement the `#repository` method which should return a `` instance, and implement the class method `.model` to return the `CoolWidget` class: + + ```ruby + # frozen_string_literal: true + + module Geo + class CoolWidgetReplicator < Gitlab::Geo::Replicator + include ::Geo::RepositoryReplicatorStrategy + + def self.model + ::CoolWidget + end + + def repository + model_record.repository + end + + def self.git_access_class + ::Gitlab::GitAccessCoolWidget + end + + # The feature flag follows the format `geo_#{replicable_name}_replication`, + # so here it would be `geo_cool_widget_replication` + def self.replication_enabled_by_default? + false + end + + override :verification_feature_flag_enabled? + def self.verification_feature_flag_enabled? + # We are adding verification at the same time as replication, so we + # don't need to toggle verification separately from replication. When + # the replication feature flag is off, then verification is also off + # (see `VerifiableReplicator.verification_enabled?`) + true + end + + end + end + ``` + +- [ ] Make sure Geo push events are created. Usually it needs some change in the `app/workers/post_receive.rb` file. Example: + + ```ruby + def replicate_cool_widget_changes(cool_widget) + if ::Gitlab::Geo.primary? + cool_widget.replicator.handle_after_update if cool_widget + end + end + ``` + + See `app/workers/post_receive.rb` for more examples. + +- [ ] Make sure the repository removal is also handled. You may need to add something like the following in the destroy service of the repository: + + ```ruby + cool_widget.replicator.handle_after_destroy if cool_widget.repository + ``` + +- [ ] Make sure a Geo secondary site can request and download Cool Widgets on the Geo primary site. You may need to make some changes to `Gitlab::GitAccessCoolWidget`. For example, see [this change for Group-level Wikis](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54914/diffs?commit_id=0f2b36f66697b4addbc69bd377ee2818f648dd33). +- [ ] Generate the feature flag definition file by running the feature flag command and following the command prompts: + + ```shell + bin/feature-flag --ee geo_cool_widget_replication --type development --group 'group::geo' + ``` + +- [ ] Add this replicator class to the method `replicator_classes` in + `ee/lib/gitlab/geo.rb`: + + ```ruby + REPLICATOR_CLASSES = [ + ::Geo::PackageFileReplicator, + ::Geo::CoolWidgetReplicator + ] + end + ``` + +- [ ] Create `ee/spec/replicators/geo/cool_widget_replicator_spec.rb` and perform the necessary setup to define the `model_record` variable for the shared examples: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Geo::CoolWidgetReplicator do + let(:model_record) { build(:cool_widget) } + + include_examples 'a repository replicator' + include_examples 'a verifiable replicator' + end + ``` + +- [ ] Create `ee/app/models/geo/cool_widget_registry.rb`: + + ```ruby + # frozen_string_literal: true + + class Geo::CoolWidgetRegistry < Geo::BaseRegistry + include ::Geo::ReplicableRegistry + include ::Geo::VerifiableRegistry + + MODEL_CLASS = ::CoolWidget + MODEL_FOREIGN_KEY = :cool_widget_id + + belongs_to :cool_widget, class_name: 'CoolWidget' + end + ``` + +- [ ] Update `REGISTRY_CLASSES` in `ee/app/workers/geo/secondary/registry_consistency_worker.rb`. +- [ ] Update `def model_class_factory_name` in `ee/spec/services/geo/registry_consistency_service_spec.rb`. +- [ ] Update `it 'creates missing registries for each registry class'` in `ee/spec/workers/geo/secondary/registry_consistency_worker_spec.rb`. +- [ ] Add `cool_widget_registry` to `ActiveSupport::Inflector.inflections` in `config/initializers_before_autoloader/000_inflections.rb`. +- [ ] Create `ee/spec/factories/geo/cool_widget_registry.rb`: + + ```ruby + # frozen_string_literal: true + + FactoryBot.define do + factory :geo_cool_widget_registry, class: 'Geo::CoolWidgetRegistry' do + cool_widget + state { Geo::CoolWidgetRegistry.state_value(:pending) } + + trait :synced do + state { Geo::CoolWidgetRegistry.state_value(:synced) } + last_synced_at { 5.days.ago } + end + + trait :failed do + state { Geo::CoolWidgetRegistry.state_value(:failed) } + last_synced_at { 1.day.ago } + retry_count { 2 } + last_sync_failure { 'Random error' } + end + + trait :started do + state { Geo::CoolWidgetRegistry.state_value(:started) } + last_synced_at { 1.day.ago } + retry_count { 0 } + end + end + end + ``` + +- [ ] Create `ee/spec/models/geo/cool_widget_registry_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Geo::CoolWidgetRegistry, :geo, type: :model do + let_it_be(:registry) { create(:geo_cool_widget_registry) } + + specify 'factory is valid' do + expect(registry).to be_valid + end + + include_examples 'a Geo framework registry' + include_examples 'a Geo verifiable registry' + end + ``` + +#### Step 2. Implement metrics gathering + +Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in `GeoNodeStatus` for display in the UI, and sent to Prometheus: + +- [ ] Add the following fields to Geo Node Status example responses in `doc/api/geo_nodes.md`: + - `cool_widgets_count` + - `cool_widgets_checksum_total_count` + - `cool_widgets_checksummed_count` + - `cool_widgets_checksum_failed_count` + - `cool_widgets_synced_count` + - `cool_widgets_failed_count` + - `cool_widgets_registry_count` + - `cool_widgets_verification_total_count` + - `cool_widgets_verified_count` + - `cool_widgets_verification_failed_count` + - `cool_widgets_synced_in_percentage` + - `cool_widgets_verified_in_percentage` +- [ ] Add the same fields to `GET /geo_nodes/status` example response in + `ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json`. +- [ ] Add the following fields to the `Sidekiq metrics` table in `doc/administration/monitoring/prometheus/gitlab_metrics.md`: + - `geo_cool_widgets` + - `geo_cool_widgets_checksum_total` + - `geo_cool_widgets_checksummed` + - `geo_cool_widgets_checksum_failed` + - `geo_cool_widgets_synced` + - `geo_cool_widgets_failed` + - `geo_cool_widgets_registry` + - `geo_cool_widgets_verification_total` + - `geo_cool_widgets_verified` + - `geo_cool_widgets_verification_failed` +- [ ] Add the following to the parameterized table in the `context 'Replicator stats' do` block in `ee/spec/models/geo_node_status_spec.rb`: + + ```ruby + Geo::CoolWidgetReplicator | :cool_widget | :geo_cool_widget_registry + ``` + +- [ ] Add the following to `spec/factories/cool_widgets.rb`: + + ```ruby + trait(:verification_succeeded) do + with_file + verification_checksum { 'abc' } + verification_state { CoolWidget.verification_state_value(:verification_succeeded) } + end + + trait(:verification_failed) do + with_file + verification_failure { 'Could not calculate the checksum' } + verification_state { CoolWidget.verification_state_value(:verification_failed) } + end + ``` + +- [ ] Make sure the factory also allows setting a `project` attribute. If the model does not have a direct relation to a project, you can use a `transient` attribute. Check out `spec/factories/merge_request_diffs.rb` for an example. + +Cool Widget replication and verification metrics should now be available in the API, the `Admin > Geo > Nodes` view, and Prometheus. + +#### Step 3. Implement the GraphQL API + +The GraphQL API is used by `Admin > Geo > Replication Details` views, and is directly queryable by administrators. + +- [ ] Add a new field to `GeoNodeType` in `ee/app/graphql/types/geo/geo_node_type.rb`: + + ```ruby + field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type, + null: true, + resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver, + description: 'Find Cool Widget registries on this Geo node', + feature_flag: :geo_cool_widget_replication + ``` + +- [ ] Add the new `cool_widget_registries` field name to the `expected_fields` array in `ee/spec/graphql/types/geo/geo_node_type_spec.rb`. +- [ ] Create `ee/app/graphql/resolvers/geo/cool_widget_registries_resolver.rb`: + + ```ruby + # frozen_string_literal: true + + module Resolvers + module Geo + class CoolWidgetRegistriesResolver < BaseResolver + type ::Types::Geo::GeoNodeType.connection_type, null: true + + include RegistriesResolver + end + end + end + ``` + +- [ ] Create `ee/spec/graphql/resolvers/geo/cool_widget_registries_resolver_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Resolvers::Geo::CoolWidgetRegistriesResolver do + it_behaves_like 'a Geo registries resolver', :geo_cool_widget_registry + end + ``` + +- [ ] Create `ee/app/finders/geo/cool_widget_registry_finder.rb`: + + ```ruby + # frozen_string_literal: true + + module Geo + class CoolWidgetRegistryFinder + include FrameworkRegistryFinder + end + end + ``` + +- [ ] Create `ee/spec/finders/geo/cool_widget_registry_finder_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Geo::CoolWidgetRegistryFinder do + it_behaves_like 'a framework registry finder', :geo_cool_widget_registry + end + ``` + +- [ ] Create `ee/app/graphql/types/geo/cool_widget_registry_type.rb`: + + ```ruby + # frozen_string_literal: true + + module Types + module Geo + # rubocop:disable Graphql/AuthorizeTypes because it is included + class CoolWidgetRegistryType < BaseObject + include ::Types::Geo::RegistryType + + graphql_name 'CoolWidgetRegistry' + description 'Represents the Geo replication and verification state of a cool_widget' + + field :cool_widget_id, GraphQL::ID_TYPE, null: false, description: 'ID of the Cool Widget' + end + end + end + ``` + +- [ ] Create `ee/spec/graphql/types/geo/cool_widget_registry_type_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe GitlabSchema.types['CoolWidgetRegistry'] do + it_behaves_like 'a Geo registry type' + + it 'has the expected fields (other than those included in RegistryType)' do + expected_fields = %i[cool_widget_id] + + expect(described_class).to have_graphql_fields(*expected_fields).at_least + end + end + ``` + +- [ ] Add integration tests for providing CoolWidget registry data to the frontend via the GraphQL API, by duplicating and modifying the following shared examples in `ee/spec/requests/api/graphql/geo/registries_spec.rb`: + + ```ruby + it_behaves_like 'gets registries for', { + field_name: 'coolWidgetRegistries', + registry_class_name: 'CoolWidgetRegistry', + registry_factory: :geo_cool_widget_registry, + registry_foreign_key_field_name: 'coolWidgetId' + } + ``` + +- [ ] Update the GraphQL reference documentation: + + ```shell + bundle exec rake gitlab:graphql:compile_docs + ``` + +Individual Cool Widget replication and verification data should now be available via the GraphQL API. + +### Release Geo support of Cool Widgets + +- [ ] In the rollout issue you created when creating the feature flag, modify the Roll Out Steps: + - [ ] Cross out any steps related to testing on production GitLab.com, because Geo is not running on production GitLab.com at the moment. + - [ ] Add a step to `Test replication and verification of Cool Widgets on a non-GDK-deployment. For example, using GitLab Environment Toolkit`. + - [ ] Add a step to `Ping the Geo PM and EM to coordinate testing`. For example, you might add steps to generate Cool Widgets, and then a Geo engineer may take it from there. +- [ ] In `ee/config/feature_flags/development/geo_cool_widget_replication.yml`, set `default_enabled: true` + +- [ ] In `ee/app/replicators/geo/cool_widget_replicator.rb`, delete the `self.replication_enabled_by_default?` method: + + ```ruby + module Geo + class CoolWidgetReplicator < Gitlab::Geo::Replicator + ... + + # REMOVE THIS METHOD + def self.replication_enabled_by_default? + false + end + # REMOVE THIS METHOD + + ... + end + end + ``` + +- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `feature_flag` option for the released type: + + ```ruby + field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type, + null: true, + resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver, + description: 'Find Cool Widget registries on this Geo node', + feature_flag: :geo_cool_widget_replication # REMOVE THIS LINE + ``` + +- [ ] Add a row for Cool Widgets to the `Data types` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#data-types) +- [ ] Add a row for Cool Widgets to the `Limitations on replication/verification` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#limitations-on-replicationverification). If the row already exists, then update it to show that Replication and Verification is released in the current version. diff --git a/.gitlab/issue_templates/Geo: Replicate a new blob type.md b/.gitlab/issue_templates/Geo: Replicate a new blob type.md new file mode 100644 index 0000000000..12fe6a6f5b --- /dev/null +++ b/.gitlab/issue_templates/Geo: Replicate a new blob type.md @@ -0,0 +1,722 @@ + + +## Replicate Cool Widgets + +This issue is for implementing Geo replication and verification of Cool Widgets. + +For more background, see [Geo self-service framework](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo/framework.md). + +In order to implement and test this feature, you need to first [set up Geo locally](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/geo.md). + +There are three main sections below. It is a good idea to structure your merge requests this way as well: + +1. Modify database schemas to prepare to add Geo support for Cool Widgets +1. Implement Geo support of Cool Widgets behind a feature flag +1. Release Geo support of Cool Widgets + +It is also a good idea to first open a proof-of-concept merge request. It can be helpful for working out kinks and getting initial support and feedback from the Geo team. As an example, see the [Proof of Concept to replicate Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56423). + +### Modify database schemas to prepare to add Geo support for Cool Widgets + +You might do this section in its own merge request, but it is not required. + +#### Add the registry table to track replication and verification state + +Geo secondary sites have a [Geo tracking database](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/geo.md#tracking-database) independent of the main database. It is used to track the replication and verification state of all replicables. Every Model has a corresponding "registry" table in the Geo tracking database. + +- [ ] Create the migration file in `ee/db/geo/migrate`: + + ```shell + bin/rails generate geo_migration CreateCoolWidgetRegistry + ``` + +- [ ] Replace the contents of the migration file with the following. Note that we cannot add a foreign key constraint on `cool_widget_id` because the `cool_widgets` table is in a different database. The application code must handle logic such as propagating deletions. + + ```ruby + # frozen_string_literal: true + + class CreateCoolWidgetRegistry < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + def up + unless table_exists?(:cool_widget_registry) + ActiveRecord::Base.transaction do + create_table :cool_widget_registry, id: :bigserial, force: :cascade do |t| + t.bigint :cool_widget_id, null: false + t.datetime_with_timezone :created_at, null: false + t.datetime_with_timezone :last_synced_at + t.datetime_with_timezone :retry_at + t.datetime_with_timezone :verified_at + t.datetime_with_timezone :verification_started_at + t.datetime_with_timezone :verification_retry_at + t.integer :state, default: 0, null: false, limit: 2 + t.integer :verification_state, default: 0, null: false, limit: 2 + t.integer :retry_count, default: 0, limit: 2, null: false + t.integer :verification_retry_count, default: 0, limit: 2, null: false + t.boolean :checksum_mismatch, default: false, null: false + t.binary :verification_checksum + t.binary :verification_checksum_mismatched + t.string :verification_failure, limit: 255 # rubocop:disable Migration/PreventStrings see https://gitlab.com/gitlab-org/gitlab/-/issues/323806 + t.string :last_sync_failure, limit: 255 # rubocop:disable Migration/PreventStrings see https://gitlab.com/gitlab-org/gitlab/-/issues/323806 + + t.index :cool_widget_id, name: :index_cool_widget_registry_on_cool_widget_id, unique: true + t.index :retry_at + t.index :state + # To optimize performance of CoolWidgetRegistry.verification_failed_batch + t.index :verification_retry_at, name: :cool_widget_registry_failed_verification, order: "NULLS FIRST", where: "((state = 2) AND (verification_state = 3))" + # To optimize performance of CoolWidgetRegistry.needs_verification_count + t.index :verification_state, name: :cool_widget_registry_needs_verification, where: "((state = 2) AND (verification_state = ANY (ARRAY[0, 3])))" + # To optimize performance of CoolWidgetRegistry.verification_pending_batch + t.index :verified_at, name: :cool_widget_registry_pending_verification, order: "NULLS FIRST", where: "((state = 2) AND (verification_state = 0))" + end + end + end + end + + def down + drop_table :cool_widget_registry + end + end + ``` + +- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md). +- [ ] Run Geo tracking database migrations: + + ```shell + bin/rake geo:db:migrate + ``` + +- [ ] Be sure to commit the relevant changes in `ee/db/geo/schema.rb` + +### Add verification state fields on the Geo primary site + +The Geo primary site needs to checksum every replicable in order for secondaries to verify their own checksums. To do this, Geo requires fields on the Model. There are two ways to add the necessary verification state fields. If the table is large and wide, then it may be a good idea to add verification state fields to a separate table (Option 2). Consult a database expert if needed. + +#### Add verification state fields to the model table (Option 1) + +- [ ] Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration AddVerificationStateToCoolWidgets + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class AddVerificationStateToCoolWidgets < ActiveRecord::Migration[6.0] + def change + change_table(:cool_widgets) do |t| + t.integer :verification_state, default: 0, limit: 2, null: false + t.column :verification_started_at, :datetime_with_timezone + t.integer :verification_retry_count, limit: 2, null: false + t.column :verification_retry_at, :datetime_with_timezone + t.column :verified_at, :datetime_with_timezone + t.binary :verification_checksum, using: 'verification_checksum::bytea' + + t.text :verification_failure # rubocop:disable Migration/AddLimitToTextColumns + end + end + end + ``` + +- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md). +- [ ] If `cool_widgets` is a high-traffic table, follow [the database documentation to use `with_lock_retries`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/migration_style_guide.md#when-to-use-the-helper-method) +- [ ] Adding a `text` column also [requires](../database/strings_and_the_text_data_type.md#add-a-text-column-to-an-existing-table) setting a limit. Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration AddVerificationFailureLimitToCoolWidgets + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class AddVerificationFailureLimitToCoolWidgets < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + CONSTRAINT_NAME = 'cool_widget_verification_failure_text_limit' + + def up + add_text_limit :cool_widget, :verification_failure, 255, constraint_name: CONSTRAINT_NAME + end + + def down + remove_check_constraint(:cool_widget, CONSTRAINT_NAME) + end + end + ``` + +- [ ] Add indexes on verification fields to ensure verification can be performed efficiently. Some or all of these indexes can be omitted if the table is guaranteed to be small. Ask a database expert if you are considering omitting indexes. Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration AddVerificationIndexesToCoolWidgets + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class AddVerificationIndexesToCoolWidgets < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + VERIFICATION_STATE_INDEX_NAME = "index_cool_widgets_on_verification_state" + PENDING_VERIFICATION_INDEX_NAME = "index_cool_widgets_pending_verification" + FAILED_VERIFICATION_INDEX_NAME = "index_cool_widgets_failed_verification" + NEEDS_VERIFICATION_INDEX_NAME = "index_cool_widgets_needs_verification" + + disable_ddl_transaction! + + def up + add_concurrent_index :cool_widgets, :verification_state, name: VERIFICATION_STATE_INDEX_NAME + add_concurrent_index :cool_widgets, :verified_at, where: "(verification_state = 0)", order: { verified_at: 'ASC NULLS FIRST' }, name: PENDING_VERIFICATION_INDEX_NAME + add_concurrent_index :cool_widgets, :verification_retry_at, where: "(verification_state = 3)", order: { verification_retry_at: 'ASC NULLS FIRST' }, name: FAILED_VERIFICATION_INDEX_NAME + add_concurrent_index :cool_widgets, :verification_state, where: "(verification_state = 0 OR verification_state = 3)", name: NEEDS_VERIFICATION_INDEX_NAME + end + + def down + remove_concurrent_index_by_name :cool_widgets, VERIFICATION_STATE_INDEX_NAME + remove_concurrent_index_by_name :cool_widgets, PENDING_VERIFICATION_INDEX_NAME + remove_concurrent_index_by_name :cool_widgets, FAILED_VERIFICATION_INDEX_NAME + remove_concurrent_index_by_name :cool_widgets, NEEDS_VERIFICATION_INDEX_NAME + end + end + ``` + +- [ ] Run database migrations: + + ```shell + bin/rake db:migrate + ``` + +- [ ] Be sure to commit the relevant changes in `db/structure.sql` + +#### Add verification state fields to a separate table (Option 2) + +- [ ] Create the migration file in `db/migrate`: + + ```shell + bin/rails generate migration CreateCoolWidgetStates + ``` + +- [ ] Replace the contents of the migration file with: + + ```ruby + # frozen_string_literal: true + + class CreateCoolWidgetStates < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + VERIFICATION_STATE_INDEX_NAME = "index_cool_widget_states_on_verification_state" + PENDING_VERIFICATION_INDEX_NAME = "index_cool_widget_states_pending_verification" + FAILED_VERIFICATION_INDEX_NAME = "index_cool_widget_states_failed_verification" + NEEDS_VERIFICATION_INDEX_NAME = "index_cool_widget_states_needs_verification" + + disable_ddl_transaction! + + def up + unless table_exists?(:cool_widget_states) + with_lock_retries do + create_table :cool_widget_states, id: false do |t| + t.references :cool_widget, primary_key: true, null: false, foreign_key: { on_delete: :cascade } + t.integer :verification_state, default: 0, limit: 2, null: false + t.column :verification_started_at, :datetime_with_timezone + t.datetime_with_timezone :verification_retry_at + t.datetime_with_timezone :verified_at + t.integer :verification_retry_count, limit: 2 + t.binary :verification_checksum, using: 'verification_checksum::bytea' + t.text :verification_failure + + t.index :verification_state, name: VERIFICATION_STATE_INDEX_NAME + t.index :verified_at, where: "(verification_state = 0)", order: { verified_at: 'ASC NULLS FIRST' }, name: PENDING_VERIFICATION_INDEX_NAME + t.index :verification_retry_at, where: "(verification_state = 3)", order: { verification_retry_at: 'ASC NULLS FIRST' }, name: FAILED_VERIFICATION_INDEX_NAME + t.index :verification_state, where: "(verification_state = 0 OR verification_state = 3)", name: NEEDS_VERIFICATION_INDEX_NAME + end + end + end + + add_text_limit :cool_widget_states, :verification_failure, 255 + end + + def down + drop_table :cool_widget_states + end + end + ``` + +- [ ] If deviating from the above example, then be sure to order columns according to [our guidelines](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/ordering_table_columns.md). +- [ ] Run database migrations: + + ```shell + bin/rake db:migrate + ``` + +- [ ] Be sure to commit the relevant changes in `db/structure.sql` + +That's all of the required database changes. + +### Implement Geo support of Cool Widgets behind a feature flag + +#### Step 1. Implement replication and verification + +- [ ] Include `Gitlab::Geo::ReplicableModel` in the `CoolWidget` class, and specify the Replicator class `with_replicator Geo::CoolWidgetReplicator`. + + At this point the `CoolWidget` class should look like this: + + ```ruby + # frozen_string_literal: true + + class CoolWidget < ApplicationRecord + include ::Gitlab::Geo::ReplicableModel + include ::Gitlab::Geo::VerificationState + + with_replicator Geo::CoolWidgetReplicator + + mount_uploader :file, CoolWidgetUploader + + # Override the `all` default if not all records can be replicated. For an + # example of an existing Model that needs to do this, see + # `EE::MergeRequestDiff`. + # scope :available_replicables, -> { all } + + # @param primary_key_in [Range, CoolWidget] arg to pass to primary_key_in scope + # @return [ActiveRecord::Relation] everything that should be synced to this node, restricted by primary key + def self.replicables_for_current_secondary(primary_key_in) + # This issue template does not help you write this method. + # + # This method is called only on Geo secondary sites. It is called when + # we want to know which records to replicate. This is not easy to automate + # because for example: + # + # * The "selective sync" feature allows admins to choose which namespaces # to replicate, per secondary site. Most Models are scoped to a + # namespace, but the nature of the relationship to a namespace varies + # between Models. + # * The "selective sync" feature allows admins to choose which shards to + # replicate, per secondary site. Repositories are associated with + # shards. Most blob types are not, but Project Uploads are. + # * Remote stored replicables are not replicated, by default. But the + # setting `sync_object_storage` enables replication of remote stored + # replicables. + # + # Search the codebase for examples, and consult a Geo expert if needed. + end + ... + end + ``` + +- [ ] Implement `CoolWidget.replicables_for_current_secondary` above. +- [ ] Ensure `CoolWidget.replicables_for_current_secondary` is well-tested. Search the codebase for `replicables_for_current_secondary` to find examples of parameterized table specs. You may need to add more `FactoryBot` traits. +- [ ] If you are using a separate table `cool_widget_states` to track verification state on the Geo primary site, then: + - [ ] Do not include `::Gitlab::Geo::VerificationState` on the `CoolWidget` class. + - [ ] Add the following lines to the `cool_widget_state.rb` model: + + ```ruby + class CoolWidgetState < ApplicationRecord + ... + self.primary_key = :cool_widget_id + + include ::Gitlab::Geo::VerificationState + + belongs_to :cool_widget, inverse_of: :cool_widget_state + ... + end + ``` + + - [ ] Add the following lines to the `cool_widget` model: + + ```ruby + class CoolWidget < ApplicationRecord + ... + has_one :cool_widget_state, inverse_of: :cool_widget + + delegate :verification_retry_at, :verification_retry_at=, + :verified_at, :verified_at=, + :verification_checksum, :verification_checksum=, + :verification_failure, :verification_failure=, + :verification_retry_count, :verification_retry_count=, + to: :cool_widget_state + ... + end + ``` + +- [ ] Create `ee/app/replicators/geo/cool_widget_replicator.rb`. Implement the `#carrierwave_uploader` method which should return a `CarrierWave::Uploader`, and implement the class method `.model` to return the `CoolWidget` class: + + ```ruby + # frozen_string_literal: true + + module Geo + class CoolWidgetReplicator < Gitlab::Geo::Replicator + include ::Geo::BlobReplicatorStrategy + + def self.model + ::CoolWidget + end + + def carrierwave_uploader + model_record.file + end + + # The feature flag follows the format `geo_#{replicable_name}_replication`, + # so here it would be `geo_cool_widget_replication` + def self.replication_enabled_by_default? + false + end + + override :verification_feature_flag_enabled? + def self.verification_feature_flag_enabled? + # We are adding verification at the same time as replication, so we + # don't need to toggle verification separately from replication. When + # the replication feature flag is off, then verification is also off + # (see `VerifiableReplicator.verification_enabled?`) + true + end + + end + end + ``` + +- [ ] Generate the feature flag definition file by running the feature flag command and following the command prompts: + + ```shell + bin/feature-flag --ee geo_cool_widget_replication --type development --group 'group::geo' + ``` + +- [ ] Add this replicator class to the method `replicator_classes` in + `ee/lib/gitlab/geo.rb`: + + ```ruby + REPLICATOR_CLASSES = [ + ::Geo::PackageFileReplicator, + ::Geo::CoolWidgetReplicator + ] + end + ``` + +- [ ] Create `ee/spec/replicators/geo/cool_widget_replicator_spec.rb` and perform the necessary setup to define the `model_record` variable for the shared examples: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Geo::CoolWidgetReplicator do + let(:model_record) { build(:cool_widget) } + + include_examples 'a blob replicator' + include_examples 'a verifiable replicator' + end + ``` + +- [ ] Create `ee/app/models/geo/cool_widget_registry.rb`: + + ```ruby + # frozen_string_literal: true + + class Geo::CoolWidgetRegistry < Geo::BaseRegistry + include ::Geo::ReplicableRegistry + include ::Geo::VerifiableRegistry + + MODEL_CLASS = ::CoolWidget + MODEL_FOREIGN_KEY = :cool_widget_id + + belongs_to :cool_widget, class_name: 'CoolWidget' + end + ``` + +- [ ] Update `REGISTRY_CLASSES` in `ee/app/workers/geo/secondary/registry_consistency_worker.rb`. +- [ ] Update `def model_class_factory_name` in `ee/spec/services/geo/registry_consistency_service_spec.rb`. +- [ ] Update `it 'creates missing registries for each registry class'` in `ee/spec/workers/geo/secondary/registry_consistency_worker_spec.rb`. +- [ ] Add `cool_widget_registry` to `ActiveSupport::Inflector.inflections` in `config/initializers_before_autoloader/000_inflections.rb`. +- [ ] Create `ee/spec/factories/geo/cool_widget_registry.rb`: + + ```ruby + # frozen_string_literal: true + + FactoryBot.define do + factory :geo_cool_widget_registry, class: 'Geo::CoolWidgetRegistry' do + cool_widget + state { Geo::CoolWidgetRegistry.state_value(:pending) } + + trait :synced do + state { Geo::CoolWidgetRegistry.state_value(:synced) } + last_synced_at { 5.days.ago } + end + + trait :failed do + state { Geo::CoolWidgetRegistry.state_value(:failed) } + last_synced_at { 1.day.ago } + retry_count { 2 } + last_sync_failure { 'Random error' } + end + + trait :started do + state { Geo::CoolWidgetRegistry.state_value(:started) } + last_synced_at { 1.day.ago } + retry_count { 0 } + end + end + end + ``` + +- [ ] Create `ee/spec/models/geo/cool_widget_registry_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Geo::CoolWidgetRegistry, :geo, type: :model do + let_it_be(:registry) { create(:geo_cool_widget_registry) } + + specify 'factory is valid' do + expect(registry).to be_valid + end + + include_examples 'a Geo framework registry' + include_examples 'a Geo verifiable registry' + end + ``` + +#### Step 2. Implement metrics gathering + +Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in `GeoNodeStatus` for display in the UI, and sent to Prometheus: + +- [ ] Add the following fields to Geo Node Status example responses in `doc/api/geo_nodes.md`: + - `cool_widgets_count` + - `cool_widgets_checksum_total_count` + - `cool_widgets_checksummed_count` + - `cool_widgets_checksum_failed_count` + - `cool_widgets_synced_count` + - `cool_widgets_failed_count` + - `cool_widgets_registry_count` + - `cool_widgets_verification_total_count` + - `cool_widgets_verified_count` + - `cool_widgets_verification_failed_count` + - `cool_widgets_synced_in_percentage` + - `cool_widgets_verified_in_percentage` +- [ ] Add the same fields to `GET /geo_nodes/status` example response in + `ee/spec/fixtures/api/schemas/public_api/v4/geo_node_status.json`. +- [ ] Add the following fields to the `Sidekiq metrics` table in `doc/administration/monitoring/prometheus/gitlab_metrics.md`: + - `geo_cool_widgets` + - `geo_cool_widgets_checksum_total` + - `geo_cool_widgets_checksummed` + - `geo_cool_widgets_checksum_failed` + - `geo_cool_widgets_synced` + - `geo_cool_widgets_failed` + - `geo_cool_widgets_registry` + - `geo_cool_widgets_verification_total` + - `geo_cool_widgets_verified` + - `geo_cool_widgets_verification_failed` +- [ ] Add the following to the parameterized table in the `context 'Replicator stats' do` block in `ee/spec/models/geo_node_status_spec.rb`: + + ```ruby + Geo::CoolWidgetReplicator | :cool_widget | :geo_cool_widget_registry + ``` + +- [ ] Add the following to `spec/factories/cool_widgets.rb`: + + ```ruby + trait(:verification_succeeded) do + with_file + verification_checksum { 'abc' } + verification_state { CoolWidget.verification_state_value(:verification_succeeded) } + end + + trait(:verification_failed) do + with_file + verification_failure { 'Could not calculate the checksum' } + verification_state { CoolWidget.verification_state_value(:verification_failed) } + end + ``` + +- [ ] Make sure the factory also allows setting a `project` attribute. If the model does not have a direct relation to a project, you can use a `transient` attribute. Check out `spec/factories/merge_request_diffs.rb` for an example. + +Cool Widget replication and verification metrics should now be available in the API, the `Admin > Geo > Nodes` view, and Prometheus. + +#### Step 3. Implement the GraphQL API + +The GraphQL API is used by `Admin > Geo > Replication Details` views, and is directly queryable by administrators. + +- [ ] Add a new field to `GeoNodeType` in `ee/app/graphql/types/geo/geo_node_type.rb`: + + ```ruby + field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type, + null: true, + resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver, + description: 'Find Cool Widget registries on this Geo node', + feature_flag: :geo_cool_widget_replication + ``` + +- [ ] Add the new `cool_widget_registries` field name to the `expected_fields` array in `ee/spec/graphql/types/geo/geo_node_type_spec.rb`. +- [ ] Create `ee/app/graphql/resolvers/geo/cool_widget_registries_resolver.rb`: + + ```ruby + # frozen_string_literal: true + + module Resolvers + module Geo + class CoolWidgetRegistriesResolver < BaseResolver + type ::Types::Geo::GeoNodeType.connection_type, null: true + + include RegistriesResolver + end + end + end + ``` + +- [ ] Create `ee/spec/graphql/resolvers/geo/cool_widget_registries_resolver_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Resolvers::Geo::CoolWidgetRegistriesResolver do + it_behaves_like 'a Geo registries resolver', :geo_cool_widget_registry + end + ``` + +- [ ] Create `ee/app/finders/geo/cool_widget_registry_finder.rb`: + + ```ruby + # frozen_string_literal: true + + module Geo + class CoolWidgetRegistryFinder + include FrameworkRegistryFinder + end + end + ``` + +- [ ] Create `ee/spec/finders/geo/cool_widget_registry_finder_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe Geo::CoolWidgetRegistryFinder do + it_behaves_like 'a framework registry finder', :geo_cool_widget_registry + end + ``` + +- [ ] Create `ee/app/graphql/types/geo/cool_widget_registry_type.rb`: + + ```ruby + # frozen_string_literal: true + + module Types + module Geo + # rubocop:disable Graphql/AuthorizeTypes because it is included + class CoolWidgetRegistryType < BaseObject + include ::Types::Geo::RegistryType + + graphql_name 'CoolWidgetRegistry' + description 'Represents the Geo replication and verification state of a cool_widget' + + field :cool_widget_id, GraphQL::ID_TYPE, null: false, description: 'ID of the Cool Widget' + end + end + end + ``` + +- [ ] Create `ee/spec/graphql/types/geo/cool_widget_registry_type_spec.rb`: + + ```ruby + # frozen_string_literal: true + + require 'spec_helper' + + RSpec.describe GitlabSchema.types['CoolWidgetRegistry'] do + it_behaves_like 'a Geo registry type' + + it 'has the expected fields (other than those included in RegistryType)' do + expected_fields = %i[cool_widget_id] + + expect(described_class).to have_graphql_fields(*expected_fields).at_least + end + end + ``` + +- [ ] Add integration tests for providing CoolWidget registry data to the frontend via the GraphQL API, by duplicating and modifying the following shared examples in `ee/spec/requests/api/graphql/geo/registries_spec.rb`: + + ```ruby + it_behaves_like 'gets registries for', { + field_name: 'coolWidgetRegistries', + registry_class_name: 'CoolWidgetRegistry', + registry_factory: :geo_cool_widget_registry, + registry_foreign_key_field_name: 'coolWidgetId' + } + ``` + +- [ ] Update the GraphQL reference documentation: + + ```shell + bundle exec rake gitlab:graphql:compile_docs + ``` + +Individual Cool Widget replication and verification data should now be available via the GraphQL API. + +### Release Geo support of Cool Widgets + +- [ ] In the rollout issue you created when creating the feature flag, modify the Roll Out Steps: + - [ ] Cross out any steps related to testing on production GitLab.com, because Geo is not running on production GitLab.com at the moment. + - [ ] Add a step to `Test replication and verification of Cool Widgets on a non-GDK-deployment. For example, using GitLab Environment Toolkit`. + - [ ] Add a step to `Ping the Geo PM and EM to coordinate testing`. For example, you might add steps to generate Cool Widgets, and then a Geo engineer may take it from there. +- [ ] In `ee/config/feature_flags/development/geo_cool_widget_replication.yml`, set `default_enabled: true` + +- [ ] In `ee/app/replicators/geo/cool_widget_replicator.rb`, delete the `self.replication_enabled_by_default?` method: + + ```ruby + module Geo + class CoolWidgetReplicator < Gitlab::Geo::Replicator + ... + + # REMOVE THIS METHOD + def self.replication_enabled_by_default? + false + end + # REMOVE THIS METHOD + + ... + end + end + ``` + +- [ ] In `ee/app/graphql/types/geo/geo_node_type.rb`, remove the `feature_flag` option for the released type: + + ```ruby + field :cool_widget_registries, ::Types::Geo::CoolWidgetRegistryType.connection_type, + null: true, + resolver: ::Resolvers::Geo::CoolWidgetRegistriesResolver, + description: 'Find Cool Widget registries on this Geo node', + feature_flag: :geo_cool_widget_replication # REMOVE THIS LINE + ``` + +- [ ] Add a row for Cool Widgets to the `Data types` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#data-types) +- [ ] Add a row for Cool Widgets to the `Limitations on replication/verification` table in [Geo data types support](https://gitlab.com/gitlab-org/gitlab/blob/master/doc/administration/geo/replication/datatypes.md#limitations-on-replicationverification). If the row already exists, then update it to show that Replication and Verification is released in the current version. diff --git a/.gitlab/issue_templates/Implementation.md b/.gitlab/issue_templates/Implementation.md index 888c993766..058834264b 100644 --- a/.gitlab/issue_templates/Implementation.md +++ b/.gitlab/issue_templates/Implementation.md @@ -39,24 +39,25 @@ Add details for required items and delete others. + +e.g.: - [ ] ~frontend Step 1 - [ ] `@person` Step 1a - [ ] ~frontend Step 2 +--> + -/label ~"workflow::refinement" - - + +/label ~"workflow::refinement" +/milestone %Backlog diff --git a/.gitlab/issue_templates/Lean Feature Proposal.md b/.gitlab/issue_templates/Lean Feature Proposal.md index fb9ac306f3..828d516126 100644 --- a/.gitlab/issue_templates/Lean Feature Proposal.md +++ b/.gitlab/issue_templates/Lean Feature Proposal.md @@ -101,3 +101,6 @@ In which enterprise tier should this feature go? See https://about.gitlab.com/ha ### Is this a cross-stage feature? Communicate if this change will affect multiple Stage Groups or product areas. We recommend always start with the assumption that a feature request will have an impact into another Group. Loop in the most relevant PM and Product Designer from that Group to provide strategic support to help align the Group's broader plan and vision, as well as to avoid UX and technical debt. https://about.gitlab.com/handbook/product/#cross-stage-features --> + +/label ~documentation +/label ~direction diff --git a/.gitlab/issue_templates/Migrations.md b/.gitlab/issue_templates/Migrations.md deleted file mode 100644 index 822722a0f7..0000000000 --- a/.gitlab/issue_templates/Migrations.md +++ /dev/null @@ -1,67 +0,0 @@ -# Project Name | Migration Tracker - - -## Background - - - -### Goals - - - -## Quick Facts - - - - * **Timeline.** - - * **Product.** - GitLab Gold/Ultimate or Community Edition - * **Project's License.** What kind of OSI-approved license does your project use? - -## Current Tooling and Replacements - - - -| Tool | Feature | GitLab feature | GitLab edition | -| --- | --- | --- | --- | -| | | | | - -## Collaborators - - - -## Related Issues - - - -### Blockers - * [ ] ADD_LINK_TO_ISSUE_HERE - -### Urgent - * [ ] - -### Important but not urgent - * [ ] - -### Nice to have - * [ ] - - ------- - -/label ~"Open Source" ~movingtogitlab -/cc @nuritzi diff --git a/.gitlab/issue_templates/OSS_Partner.md b/.gitlab/issue_templates/OSS_Partner.md new file mode 100644 index 0000000000..d9c05026e7 --- /dev/null +++ b/.gitlab/issue_templates/OSS_Partner.md @@ -0,0 +1,68 @@ + + +## Background + + + +### Goals + + + +## Quick Facts + + + + * **Timeline.** - + * **Product.** - SaaS-Ultimate/Self-Managed-Ultimate or Community Edition + * **Project's License.** What kind of OSI-approved license does your project use? + +## Current Tooling and Replacements + + + +| Tool | Feature | GitLab feature | GitLab edition | +| --- | --- | --- | --- | +| | | | | + +## Collaborators + + + +## Related Issues + + + +### Blockers + * [ ] ADD_LINK_TO_ISSUE_HERE + +### Urgent + * [ ] + +### Important but not urgent + * [ ] + +### Nice to have + * [ ] + + +------ + +/label ~"Open Source Partners" +/cc @nuritzi @greg diff --git a/.gitlab/issue_templates/Productivity Improvement.md b/.gitlab/issue_templates/Productivity Improvement.md index 974f11f6da..06692d3ede 100644 --- a/.gitlab/issue_templates/Productivity Improvement.md +++ b/.gitlab/issue_templates/Productivity Improvement.md @@ -34,6 +34,6 @@ after the implementation is merged/deployed/released. - [ ] The solution improved the situation. - If yes, check this box and close the issue. Well done! :tada: - - Otherwise, create a new "Productivity Improvement" issue. You can re-use the description from this issue, but obviously another solution should be chosen this time. + - Otherwise, create a new "Productivity Improvement" issue. You can re-use the description from this issue, but another solution should be chosen this time. /label ~"Engineering Productivity" ~meta diff --git a/.gitlab/issue_templates/Query Performance Investigation.md b/.gitlab/issue_templates/Query Performance Investigation.md index ddd361e4f2..354cdb1bfe 100644 --- a/.gitlab/issue_templates/Query Performance Investigation.md +++ b/.gitlab/issue_templates/Query Performance Investigation.md @@ -10,6 +10,16 @@ As the name implies, the purpose of the template is to detail underperforming qu - [ ] Provide [priority and severity labels](https://about.gitlab.com/handbook/engineering/quality/issue-triage/#availability) - [ ] If this requires immediate attention cc `@gitlab-org/database-team` and reach out in the #g_database slack channel +### SQL Statement + +```sql + +``` + +### Data from Elastic + +Instructions on collecting data from [PostgreSQL slow logs stored in Elasticsearch](https://gitlab.com/gitlab-com/runbooks/-/merge_requests/3361/diffs) + ### Requested Data points Please provide as many of these fields as possible when submitting a query performance report. @@ -20,7 +30,6 @@ Please provide as many of these fields as possible when submitting a query perfo - Database time relative to total database time - Source of calls (Sidekiq, WebAPI, etc) - Query ID -- SQL Statement - Query Plan - Query Example - Total number of calls (relative) diff --git a/.gitlab/issue_templates/Security developer workflow.md b/.gitlab/issue_templates/Security developer workflow.md index beb066cdfc..25825fc888 100644 --- a/.gitlab/issue_templates/Security developer workflow.md +++ b/.gitlab/issue_templates/Security developer workflow.md @@ -10,9 +10,10 @@ Set the title to: `Description of the original issue` - [ ] Read the [security process for developers] if you are not familiar with it. - Verify if the issue you're working on `gitlab-org/gitlab` is confidential, if it's public fix should be placed on GitLab canonical and no backports are required. -- [ ] Mark this [issue as related] to the Security Release Tracking Issue. You can find it on the topic of the `#releases` Slack channel. +- [ ] Mark this [issue as linked] to the Security Release Tracking Issue. You can find it on the topic of the `#releases` Slack channel. - Fill out the [Links section](#links): - [ ] Next to **Issue on GitLab**, add a link to the `gitlab-org/gitlab` issue that describes the security vulnerability. +- [ ] Add one of the `~severity::x` labels to the issue and all associated merge requests. ## Development @@ -64,6 +65,6 @@ After your merge request has been approved according to our [approval guidelines [secpick documentation]: https://gitlab.com/gitlab-org/release/docs/-/blob/master/general/security/utilities/secpick_script.md [security Release merge request template]: https://gitlab.com/gitlab-org/security/gitlab/blob/master/.gitlab/merge_request_templates/Security%20Release.md [approval guidelines]: https://docs.gitlab.com/ee/development/code_review.html#approval-guidelines -[issue as related]: https://docs.gitlab.com/ee/user/project/issues/related_issues.html#adding-a-related-issue +[issue as linked]: https://docs.gitlab.com/ee/user/project/issues/related_issues.html#add-a-linked-issue /label ~security diff --git a/.gitlab/issue_templates/experiment_tracking_template.md b/.gitlab/issue_templates/experiment_tracking_template.md index 432ae57e59..c653a3a2d4 100644 --- a/.gitlab/issue_templates/experiment_tracking_template.md +++ b/.gitlab/issue_templates/experiment_tracking_template.md @@ -27,7 +27,7 @@ As well as defining the experiment rollout and cleanup, this issue incorporates ### What might happen if this goes wrong? ### What can we monitor to detect problems with this? - + ### Tracked data @@ -81,6 +81,7 @@ If applicable, any groups/projects that are happy to have this feature turned on - [ ] Announce on the issue that the flag has been enabled - [ ] Remove experiment code and feature flag and add changelog entry - a separate [cleanup issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Experiment%20Successful%20Cleanup) might be required - [ ] After the flag removal is deployed, [clean up the feature flag](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) by running chatops command in `#production` channel +- [ ] Assign to the product manager to update the [knowledge base](https://about.gitlab.com/direction/growth/#growth-insights-knowledge-base) (if applicable) ## Rollback Steps diff --git a/.gitlab/merge_request_templates/New End To End Test.md b/.gitlab/merge_request_templates/New End To End Test.md index c38c3ce340..9e6c4049b9 100644 --- a/.gitlab/merge_request_templates/New End To End Test.md +++ b/.gitlab/merge_request_templates/New End To End Test.md @@ -10,7 +10,7 @@ Please link to the respective test case in the testcases project - [ ] Note if the test is intended to run in specific scenarios. If a scenario is new, add a link to the MR that adds the new scenario. - [ ] Follow the end-to-end tests [style guide](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/style_guide.html) and [best practices](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/best_practices.html). - [ ] Use the appropriate [RSpec metadata tag(s)](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/rspec_metadata_tests.html#rspec-metadata-for-end-to-end-tests). -- [ ] Ensure that a created resource is removed after test execution. +- [ ] Ensure that a created resource is removed after test execution. A `Group` resource can be shared between multiple tests. Do not remove it unless it has a unique path. Note that we have a cleanup job that periodically removes groups under `gitlab-qa-sandbox-group`. - [ ] Ensure that no [transient bugs](https://about.gitlab.com/handbook/engineering/quality/issue-triage/#transient-bugs) are hidden accidentally due to the usage of `waits` and `reloads`. - [ ] Verify the tags to ensure it runs on the desired test environments. - [ ] If this MR has a dependency on another MR, such as a GitLab QA MR, specify the order in which the MRs should be merged. diff --git a/.gitlab/merge_request_templates/Quarantine End to End Test.md b/.gitlab/merge_request_templates/Quarantine End to End Test.md new file mode 100644 index 0000000000..5794a62df9 --- /dev/null +++ b/.gitlab/merge_request_templates/Quarantine End to End Test.md @@ -0,0 +1,44 @@ +## What does this MR do? + + + + +### E2E Test Failure issue(s) + + + + +### Check-list + +- [ ] General code guidelines check-list + - [ ] [Code review guidelines](https://docs.gitlab.com/ee/development/code_review.html) + - [ ] [Style guides](https://docs.gitlab.com/ee/development/contributing/style_guides.html) +- [ ] Quarantine test check-list + - [ ] Follow the [Quarantining Tests guide](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#quarantining-tests). + - [ ] Confirm the test has a [`quarantine:` tag with the specified quarantine type](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#quarantined-test-types). + - [ ] Note if the test should be [quarantined for a specific environment](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/environment_selection.html#quarantining-a-test-for-a-specific-environment). +- [ ] Dequarantine test check-list + - [ ] Follow the [Dequarantining Tests guide](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#dequarantining-tests). + - [ ] Confirm the test consistently passes on the target GitLab environment(s). + - [ ] (Optionally) [Trigger a manual GitLab-QA pipeline](https://about.gitlab.com/handbook/engineering/quality/guidelines/tips-and-tricks/#running-gitlab-qa-pipeline-against-a-specific-gitlab-release) against a specific GitLab environment using the `RELEASE` variable from the `package-and-qa` job of the current merge request. +- [ ] To ensure a faster turnaround, ask in the `#quality` Slack channel for someone to review and merge the merge request, rather than assigning it directly. + + +/label ~"Quality" ~"QA" ~"feature" ~"feature::maintenance" + + +/label ~"Pick into auto-deploy" ~"priority::1" ~"severity::1" + + +/label ~devops:: + + +/milestone % diff --git a/.haml-lint.yml b/.haml-lint.yml index 4adb5e62f8..0ec1af6a6c 100644 --- a/.haml-lint.yml +++ b/.haml-lint.yml @@ -104,22 +104,18 @@ linters: # These cops should eventually get enabled - Cop/LineBreakAfterGuardClauses - - Cop/LineBreakAroundConditionalBlock - Cop/ProjectPathHelper + - Gitlab/FeatureAvailableUsage - GitlabSecurity/PublicSend - Layout/EmptyLineAfterGuardClause - Layout/LeadingCommentSpace - - Layout/SpaceAfterColon - - Layout/SpaceAfterComma - Layout/SpaceAroundOperators - Layout/SpaceBeforeBlockBraces - Layout/SpaceBeforeComma - Layout/SpaceBeforeFirstArg - - Layout/SpaceInsideArrayLiteralBrackets - Layout/SpaceInsideHashLiteralBraces - Layout/SpaceInsideStringInterpolation - Layout/TrailingEmptyLines - - Lint/BooleanSymbol - Lint/LiteralInInterpolation - Lint/ParenthesesAsGroupedExpression - Lint/RedundantWithIndex @@ -131,18 +127,14 @@ linters: - Rails/LinkToBlank - Rails/Presence - Rails/RequestReferer - - Style/AndOr - Style/ColonMethodCall - Style/ConditionalAssignment - Style/HashSyntax - Style/IdenticalConditionalBranches - Style/NegatedIf - Style/NestedTernaryOperator - - Style/Not - Style/ParenthesesAroundCondition - - Style/RedundantParentheses - Style/SelfAssignment - - Style/Semicolon - Style/TernaryParentheses - Style/TrailingCommaInHashLiteral - Style/UnlessElse @@ -150,6 +142,9 @@ linters: - Style/WordArray - Style/ZeroLengthPredicate + # WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/207950 + - Cop/UserAdmin + RubyComments: enabled: true diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml index 446bde8cef..9f201dcc28 100644 --- a/.haml-lint_todo.yml +++ b/.haml-lint_todo.yml @@ -1,363 +1,7 @@ # This configuration was generated by # `haml-lint --auto-gen-config` -# on 2020-05-21 10:58:59 -0400 using Haml-Lint version 0.34.0. +# on 2021-04-01 00:00:00 +0000 using Haml-Lint version 0.36.0. # The point is for the user to remove these configuration records # one by one as the lints are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of Haml-Lint, may require this file to be generated again. - -linters: - # Offense count: 1552 - NoPlainNodes: - enabled: true - exclude: - - 'app/views/admin/abuse_reports/_abuse_report.html.haml' - - 'app/views/admin/abuse_reports/index.html.haml' - - 'app/views/admin/appearances/_form.html.haml' - - 'app/views/admin/application_settings/_abuse.html.haml' - - 'app/views/admin/application_settings/_diff_limits.html.haml' - - 'app/views/admin/application_settings/_gitaly.html.haml' - - 'app/views/admin/application_settings/_ip_limits.html.haml' - - 'app/views/admin/application_settings/_performance.html.haml' - - 'app/views/admin/application_settings/_plantuml.html.haml' - - 'app/views/admin/application_settings/_prometheus.html.haml' - - 'app/views/admin/application_settings/_realtime.html.haml' - - 'app/views/admin/application_settings/_repository_check.html.haml' - - 'app/views/admin/application_settings/_signin.html.haml' - - 'app/views/admin/application_settings/_signup.html.haml' - - 'app/views/admin/application_settings/_spam.html.haml' - - 'app/views/admin/application_settings/_terminal.html.haml' - - 'app/views/admin/application_settings/_usage.html.haml' - - 'app/views/admin/application_settings/_visibility_and_access.html.haml' - - 'app/views/admin/applications/_delete_form.html.haml' - - 'app/views/admin/applications/_form.html.haml' - - 'app/views/admin/applications/edit.html.haml' - - 'app/views/admin/applications/index.html.haml' - - 'app/views/admin/applications/new.html.haml' - - 'app/views/admin/applications/show.html.haml' - - 'app/views/admin/background_jobs/show.html.haml' - - 'app/views/admin/broadcast_messages/index.html.haml' - - 'app/views/admin/dashboard/index.html.haml' - - 'app/views/admin/deploy_keys/new.html.haml' - - 'app/views/admin/health_check/show.html.haml' - - 'app/views/admin/hook_logs/_index.html.haml' - - 'app/views/admin/hook_logs/show.html.haml' - - 'app/views/admin/hooks/_form.html.haml' - - 'app/views/admin/hooks/edit.html.haml' - - 'app/views/admin/logs/show.html.haml' - - 'app/views/admin/projects/_projects.html.haml' - - 'app/views/admin/requests_profiles/index.html.haml' - - 'app/views/admin/runners/_runner.html.haml' - - 'app/views/admin/runners/index.html.haml' - - 'app/views/admin/runners/show.html.haml' - - 'app/views/admin/services/_form.html.haml' - - 'app/views/admin/services/index.html.haml' - - 'app/views/admin/spam_logs/_spam_log.html.haml' - - 'app/views/admin/spam_logs/index.html.haml' - - 'app/views/admin/system_info/show.html.haml' - - 'app/views/admin/users/_form.html.haml' - - 'app/views/admin/users/_head.html.haml' - - 'app/views/admin/users/_profile.html.haml' - - 'app/views/admin/users/_projects.html.haml' - - 'app/views/admin/users/new.html.haml' - - 'app/views/admin/users/projects.html.haml' - - 'app/views/admin/users/show.html.haml' - - 'app/views/authentication/_authenticate.html.haml' - - 'app/views/authentication/_register.html.haml' - - 'app/views/clusters/clusters/_cluster.html.haml' - - 'app/views/clusters/clusters/new.html.haml' - - 'app/views/dashboard/milestones/index.html.haml' - - 'app/views/dashboard/projects/_blank_state_admin_welcome.html.haml' - - 'app/views/dashboard/projects/_blank_state_welcome.html.haml' - - 'app/views/dashboard/todos/_todo.html.haml' - - 'app/views/dashboard/todos/index.html.haml' - - 'app/views/devise/confirmations/almost_there.haml' - - 'app/views/devise/mailer/_confirmation_instructions_account.html.haml' - - 'app/views/devise/mailer/_confirmation_instructions_secondary.html.haml' - - 'app/views/devise/mailer/email_changed.html.haml' - - 'app/views/devise/mailer/password_change.html.haml' - - 'app/views/devise/mailer/reset_password_instructions.html.haml' - - 'app/views/devise/mailer/unlock_instructions.html.haml' - - 'app/views/devise/passwords/edit.html.haml' - - 'app/views/devise/sessions/_new_base.html.haml' - - 'app/views/devise/sessions/_new_crowd.html.haml' - - 'app/views/devise/sessions/_new_ldap.html.haml' - - 'app/views/devise/sessions/new.html.haml' - - 'app/views/devise/sessions/two_factor.html.haml' - - 'app/views/devise/shared/_omniauth_box.html.haml' - - 'app/views/devise/shared/_sign_in_link.html.haml' - - 'app/views/devise/shared/_tabs_normal.html.haml' - - 'app/views/discussions/_discussion.html.haml' - - 'app/views/discussions/_headline.html.haml' - - 'app/views/discussions/_notes.html.haml' - - 'app/views/doorkeeper/applications/_delete_form.html.haml' - - 'app/views/doorkeeper/authorized_applications/_delete_form.html.haml' - - 'app/views/errors/encoding.html.haml' - - 'app/views/errors/git_not_found.html.haml' - - 'app/views/errors/omniauth_error.html.haml' - - 'app/views/errors/precondition_failed.html.haml' - - 'app/views/events/_event_push.atom.haml' - - 'app/views/events/event/_push.html.haml' - - 'app/views/groups/_create_chat_team.html.haml' - - 'app/views/groups/_group_admin_settings.html.haml' - - 'app/views/groups/labels/edit.html.haml' - - 'app/views/groups/labels/new.html.haml' - - 'app/views/groups/milestones/edit.html.haml' - - 'app/views/groups/milestones/index.html.haml' - - 'app/views/groups/milestones/new.html.haml' - - 'app/views/groups/projects.html.haml' - - 'app/views/groups/runners/edit.html.haml' - - 'app/views/groups/settings/_advanced.html.haml' - - 'app/views/groups/settings/_lfs.html.haml' - - 'app/views/help/index.html.haml' - - 'app/views/help/instance_configuration.html.haml' - - 'app/views/help/instance_configuration/_gitlab_ci.html.haml' - - 'app/views/help/instance_configuration/_gitlab_pages.html.haml' - - 'app/views/import/bitbucket/status.html.haml' - - 'app/views/import/bitbucket_server/status.html.haml' - - 'app/views/invites/show.html.haml' - - 'app/views/jira_connect/subscriptions/index.html.haml' - - 'app/views/layouts/_mailer.html.haml' - - 'app/views/layouts/header/_default.html.haml' - - 'app/views/layouts/header/_new_dropdown.haml' - - 'app/views/layouts/jira_connect.html.haml' - - 'app/views/layouts/notify.html.haml' - - 'app/views/notify/_failed_builds.html.haml' - - 'app/views/notify/_reassigned_issuable_email.html.haml' - - 'app/views/notify/_removal_notification.html.haml' - - 'app/views/notify/_successful_pipeline.html.haml' - - 'app/views/notify/autodevops_disabled_email.html.haml' - - 'app/views/notify/changed_milestone_email.html.haml' - - 'app/views/notify/import_issues_csv_email.html.haml' - - 'app/views/notify/issue_moved_email.html.haml' - - 'app/views/notify/member_access_denied_email.html.haml' - - 'app/views/notify/member_invite_accepted_email.html.haml' - - 'app/views/notify/member_invited_email.html.haml' - - 'app/views/notify/new_gpg_key_email.html.haml' - - 'app/views/notify/new_mention_in_issue_email.html.haml' - - 'app/views/notify/new_ssh_key_email.html.haml' - - 'app/views/notify/new_user_email.html.haml' - - 'app/views/notify/pages_domain_disabled_email.html.haml' - - 'app/views/notify/pages_domain_enabled_email.html.haml' - - 'app/views/notify/pages_domain_verification_failed_email.html.haml' - - 'app/views/notify/pages_domain_verification_succeeded_email.html.haml' - - 'app/views/notify/pipeline_failed_email.html.haml' - - 'app/views/notify/project_was_exported_email.html.haml' - - 'app/views/notify/project_was_moved_email.html.haml' - - 'app/views/notify/project_was_not_exported_email.html.haml' - - 'app/views/notify/push_to_merge_request_email.html.haml' - - 'app/views/notify/remote_mirror_update_failed_email.html.haml' - - 'app/views/notify/removed_milestone_issue_email.html.haml' - - 'app/views/notify/removed_milestone_merge_request_email.html.haml' - - 'app/views/notify/repository_push_email.html.haml' - - 'app/views/profiles/chat_names/_chat_name.html.haml' - - 'app/views/profiles/chat_names/index.html.haml' - - 'app/views/profiles/chat_names/new.html.haml' - - 'app/views/projects/_bitbucket_import_modal.html.haml' - - 'app/views/projects/_customize_workflow.html.haml' - - 'app/views/projects/_deletion_failed.html.haml' - - 'app/views/projects/_fork_suggestion.html.haml' - - 'app/views/projects/_gitlab_import_modal.html.haml' - - 'app/views/projects/_home_panel.html.haml' - - 'app/views/projects/_import_project_pane.html.haml' - - 'app/views/projects/_readme.html.haml' - - 'app/views/projects/artifacts/_artifact.html.haml' - - 'app/views/projects/artifacts/_tree_file.html.haml' - - 'app/views/projects/artifacts/browse.html.haml' - - 'app/views/projects/blame/_age_map_legend.html.haml' - - 'app/views/projects/blame/show.html.haml' - - 'app/views/projects/blob/_editor.html.haml' - - 'app/views/projects/blob/_header_content.html.haml' - - 'app/views/projects/blob/_remove.html.haml' - - 'app/views/projects/blob/_render_error.html.haml' - - 'app/views/projects/blob/edit.html.haml' - - 'app/views/projects/blob/new.html.haml' - - 'app/views/projects/blob/preview.html.haml' - - 'app/views/projects/blob/viewers/_empty.html.haml' - - 'app/views/projects/blob/viewers/_stl.html.haml' - - 'app/views/projects/branches/_branch.html.haml' - - 'app/views/projects/branches/_delete_protected_modal.html.haml' - - 'app/views/projects/branches/new.html.haml' - - 'app/views/projects/ci/builds/_build.html.haml' - - 'app/views/projects/ci/lints/_create.html.haml' - - 'app/views/projects/compare/_form.html.haml' - - 'app/views/projects/compare/index.html.haml' - - 'app/views/projects/cycle_analytics/_empty_stage.html.haml' - - 'app/views/projects/cycle_analytics/_no_access.html.haml' - - 'app/views/projects/cycle_analytics/_overview.html.haml' - - 'app/views/projects/cycle_analytics/show.html.haml' - - 'app/views/projects/deploy_keys/_form.html.haml' - - 'app/views/projects/deploy_keys/_index.html.haml' - - 'app/views/projects/deploy_keys/edit.html.haml' - - 'app/views/projects/deployments/_deployment.html.haml' - - 'app/views/projects/diffs/_file_header.html.haml' - - 'app/views/projects/diffs/_replaced_image_diff.html.haml' - - 'app/views/projects/diffs/_stats.html.haml' - - 'app/views/projects/empty.html.haml' - - 'app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml' - - 'app/views/projects/hook_logs/_index.html.haml' - - 'app/views/projects/hook_logs/show.html.haml' - - 'app/views/projects/hooks/edit.html.haml' - - 'app/views/projects/imports/new.html.haml' - - 'app/views/projects/imports/show.html.haml' - - 'app/views/projects/issues/_new_branch.html.haml' - - 'app/views/projects/issues/show.html.haml' - - 'app/views/projects/jobs/_header.html.haml' - - 'app/views/projects/jobs/_table.html.haml' - - 'app/views/projects/jobs/index.html.haml' - - 'app/views/projects/labels/edit.html.haml' - - 'app/views/projects/labels/new.html.haml' - - 'app/views/projects/mattermosts/_no_teams.html.haml' - - 'app/views/projects/mattermosts/_team_selection.html.haml' - - 'app/views/projects/mattermosts/new.html.haml' - - 'app/views/projects/merge_requests/_commits.html.haml' - - 'app/views/projects/merge_requests/_mr_title.html.haml' - - 'app/views/projects/merge_requests/creations/_diffs.html.haml' - - 'app/views/projects/merge_requests/creations/_new_compare.html.haml' - - 'app/views/projects/merge_requests/creations/_new_submit.html.haml' - - 'app/views/projects/merge_requests/diffs/_different_base.html.haml' - - 'app/views/projects/merge_requests/diffs/_diffs.html.haml' - - 'app/views/projects/merge_requests/diffs/_version_controls.html.haml' - - 'app/views/projects/merge_requests/invalid.html.haml' - - 'app/views/projects/merge_requests/widget/open/_error.html.haml' - - 'app/views/projects/mirrors/_regenerate_public_ssh_key_confirm_modal.html.haml' - - 'app/views/projects/mirrors/_ssh_host_keys.html.haml' - - 'app/views/projects/no_repo.html.haml' - - 'app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml' - - 'app/views/projects/pipelines/_info.html.haml' - - 'app/views/projects/protected_branches/shared/_dropdown.html.haml' - - 'app/views/projects/protected_branches/shared/_index.html.haml' - - 'app/views/projects/protected_branches/shared/_matching_branch.html.haml' - - 'app/views/projects/protected_branches/shared/_protected_branch.html.haml' - - 'app/views/projects/protected_branches/show.html.haml' - - 'app/views/projects/protected_tags/shared/_create_protected_tag.html.haml' - - 'app/views/projects/protected_tags/shared/_dropdown.html.haml' - - 'app/views/projects/protected_tags/shared/_index.html.haml' - - 'app/views/projects/protected_tags/shared/_matching_tag.html.haml' - - 'app/views/projects/protected_tags/shared/_protected_tag.html.haml' - - 'app/views/projects/protected_tags/shared/_tags_list.html.haml' - - 'app/views/projects/protected_tags/show.html.haml' - - 'app/views/projects/registry/repositories/_tag.html.haml' - - 'app/views/projects/repositories/_feed.html.haml' - - 'app/views/projects/runners/_shared_runners.html.haml' - - 'app/views/projects/runners/edit.html.haml' - - 'app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml' - - 'app/views/projects/services/mattermost_slash_commands/_help.html.haml' - - 'app/views/projects/services/prometheus/_metrics.html.haml' - - 'app/views/projects/services/slack_slash_commands/_help.html.haml' - - 'app/views/projects/settings/ci_cd/_badge.html.haml' - - 'app/views/projects/settings/ci_cd/_form.html.haml' - - 'app/views/projects/tags/index.html.haml' - - 'app/views/projects/tags/releases/edit.html.haml' - - 'app/views/projects/tree/_tree_row.html.haml' - - 'app/views/projects/tree/_truncated_notice_tree_row.html.haml' - - 'app/views/projects/triggers/_form.html.haml' - - 'app/views/projects/triggers/_index.html.haml' - - 'app/views/projects/triggers/_trigger.html.haml' - - 'app/views/projects/triggers/edit.html.haml' - - 'app/views/search/results/_issue.html.haml' - - 'app/views/search/results/_note.html.haml' - - 'app/views/search/results/_snippet_blob.html.haml' - - 'app/views/search/results/_snippet_title.html.haml' - - 'app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml' - - 'app/views/shared/_commit_message_container.html.haml' - - 'app/views/shared/_delete_label_modal.html.haml' - - 'app/views/shared/_group_form.html.haml' - - 'app/views/shared/_group_tips.html.haml' - - 'app/views/shared/_md_preview.html.haml' - - 'app/views/shared/_milestone_expired.html.haml' - - 'app/views/shared/_no_password.html.haml' - - 'app/views/shared/_ping_consent.html.haml' - - 'app/views/shared/_project_limit.html.haml' - - 'app/views/shared/boards/components/_sidebar.html.haml' - - 'app/views/shared/boards/components/sidebar/_due_date.html.haml' - - 'app/views/shared/boards/components/sidebar/_labels.html.haml' - - 'app/views/shared/boards/components/sidebar/_milestone.html.haml' - - 'app/views/shared/hook_logs/_content.html.haml' - - 'app/views/shared/issuable/_assignees.html.haml' - - 'app/views/shared/issuable/_board_create_list_dropdown.html.haml' - - 'app/views/shared/issuable/_form.html.haml' - - 'app/views/shared/issuable/_search_bar.html.haml' - - 'app/views/shared/issuable/_sidebar.html.haml' - - 'app/views/shared/issuable/form/_default_templates.html.haml' - - 'app/views/shared/issuable/form/_template_selector.html.haml' - - 'app/views/shared/issuable/form/_title.html.haml' - - 'app/views/shared/labels/_form.html.haml' - - 'app/views/shared/members/_member.html.haml' - - 'app/views/shared/milestones/_form_dates.html.haml' - - 'app/views/shared/milestones/_issuable.html.haml' - - 'app/views/shared/milestones/_milestone.html.haml' - - 'app/views/shared/milestones/_sidebar.html.haml' - - 'app/views/shared/milestones/_top.html.haml' - - 'app/views/shared/notes/_hints.html.haml' - - 'app/views/shared/runners/_runner_description.html.haml' - - 'app/views/shared/runners/show.html.haml' - - 'app/views/shared/snippets/_header.html.haml' - - 'app/views/shared/snippets/_snippet.html.haml' - - 'app/views/shared/web_hooks/_form.html.haml' - - 'app/views/shared/web_hooks/_hook.html.haml' - - 'app/views/shared/wikis/_pages_wiki_page.html.haml' - - 'app/views/users/_deletion_guidance.html.haml' - - 'ee/app/views/admin/_namespace_plan_info.html.haml' - - 'ee/app/views/admin/application_settings/_templates.html.haml' - - 'ee/app/views/admin/audit_logs/index.html.haml' - - 'ee/app/views/admin/emails/show.html.haml' - - 'ee/app/views/admin/geo/projects/_registry_failed.html.haml' - - 'ee/app/views/admin/geo/projects/_registry_never.html.haml' - - 'ee/app/views/admin/licenses/_upload_trial_license.html.haml' - - 'ee/app/views/admin/licenses/new.html.haml' - - 'ee/app/views/admin/monitoring/ee/_nav.html.haml' - - 'ee/app/views/admin/projects/_shared_runner_status.html.haml' - - 'ee/app/views/admin/users/_auditor_access_level_radio.html.haml' - - 'ee/app/views/admin/users/_auditor_user_badge.html.haml' - - 'ee/app/views/admin/users/_limits.html.haml' - - 'ee/app/views/admin/users/_user_detail_note.html.haml' - - 'ee/app/views/dashboard/projects/_blank_state_ee_trial.html.haml' - - 'ee/app/views/errors/kerberos_denied.html.haml' - - 'ee/app/views/groups/ee/_settings_nav.html.haml' - - 'ee/app/views/groups/group_members/_ldap_sync.html.haml' - - 'ee/app/views/groups/hooks/edit.html.haml' - - 'ee/app/views/groups/ldap_group_links/index.html.haml' - - 'ee/app/views/layouts/nav/ee/admin/_new_monitoring_sidebar.html.haml' - - 'ee/app/views/layouts/service_desk.html.haml' - - 'ee/app/views/ldap_group_links/_form.html.haml' - - 'ee/app/views/ldap_group_links/_ldap_group_link.html.haml' - - 'ee/app/views/ldap_group_links/_ldap_group_links.html.haml' - - 'ee/app/views/ldap_group_links/_ldap_group_links_show.html.haml' - - 'ee/app/views/namespaces/_shared_runner_status.html.haml' - - 'ee/app/views/namespaces/_shared_runners_minutes_setting.html.haml' - - 'ee/app/views/namespaces/pipelines_quota/_extra_shared_runners_minutes_quota.html.haml' - - 'ee/app/views/namespaces/pipelines_quota/_list.haml' - - 'ee/app/views/notify/approved_merge_request_email.html.haml' - - 'ee/app/views/notify/epic_status_changed_email.html.haml' - - 'ee/app/views/notify/new_review_email.html.haml' - - 'ee/app/views/notify/send_admin_notification.html.haml' - - 'ee/app/views/notify/send_unsubscribed_notification.html.haml' - - 'ee/app/views/notify/unapproved_merge_request_email.html.haml' - - 'ee/app/views/oauth/geo_auth/error.html.haml' - - 'ee/app/views/projects/commits/_mirror_status.html.haml' - - 'ee/app/views/projects/merge_requests/_approvals_count.html.haml' - - 'ee/app/views/projects/merge_requests/widget/open/_geo.html.haml' - - 'ee/app/views/projects/mirrors/_mirrored_repositories_count.html.haml' - - 'ee/app/views/projects/protected_branches/_update_protected_branch.html.haml' - - 'ee/app/views/projects/protected_branches/ee/_create_protected_branch.html.haml' - - 'ee/app/views/projects/protected_branches/ee/_dropdown.html.haml' - - 'ee/app/views/projects/protected_tags/_protected_tag_extra_create_access_levels.haml' - - 'ee/app/views/projects/protected_tags/ee/_create_protected_tag.html.haml' - - 'ee/app/views/projects/push_rules/_index.html.haml' - - 'ee/app/views/projects/services/gitlab_slack_application/_help.html.haml' - - 'ee/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml' - - 'ee/app/views/projects/settings/slacks/edit.html.haml' - - 'ee/app/views/shared/epic/_search_bar.html.haml' - - 'ee/app/views/shared/issuable/_approvals.html.haml' - - 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml' - - 'ee/app/views/shared/issuable/_filter_weight.html.haml' - - 'ee/app/views/shared/members/ee/_ldap_tag.html.haml' - - 'ee/app/views/shared/members/ee/_sso_badge.html.haml' - - 'ee/app/views/shared/milestones/_burndown.html.haml' - - 'ee/app/views/shared/milestones/_weight.html.haml' - - 'ee/app/views/shared/promotions/_promote_issue_weights.html.haml' - - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' - - 'ee/app/views/shared/promotions/_promote_servicedesk.html.haml' - - 'ee/app/views/shared/push_rules/_form.html.haml' - - 'ee/app/views/unsubscribes/show.html.haml' diff --git a/.rubocop.yml b/.rubocop.yml index 8f5407c64c..a19cba5eb4 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -629,3 +629,31 @@ Lint/RedundantSafeNavigation: Style/ClassEqualityComparison: Enabled: true + +# WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/207950 +Cop/UserAdmin: + Enabled: true + Exclude: + - 'app/controllers/admin/sessions_controller.rb' + - 'app/controllers/concerns/enforces_admin_authentication.rb' + - 'app/policies/base_policy.rb' + - 'lib/gitlab/auth/current_user_mode.rb' + - 'spec/**/*.rb' + - 'ee/spec/**/*.rb' + +Performance/OpenStruct: + Exclude: + - 'ee/spec/**/*.rb' + +# See https://gitlab.com/gitlab-org/gitlab/-/issues/327495 +Style/RegexpLiteral: + Enabled: false + +Style/RegexpLiteralMixedPreserve: + Enabled: true + SupportedStyles: + - slashes + - percent_r + - mixed + - mixed_preserve + EnforcedStyle: mixed_preserve diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index 9b20af5552..f2aa94ac7e 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -41,23 +41,11 @@ Graphql/Descriptions: - 'ee/app/graphql/types/vulnerability_severity_enum.rb' - 'ee/app/graphql/types/vulnerability_state_enum.rb' -# WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/267606 -FactoryBot/InlineAssociation: - Exclude: - - 'spec/factories/atlassian_identities.rb' - - 'spec/factories/events.rb' - - 'spec/factories/git_wiki_commit_details.rb' - - 'spec/factories/gitaly/commit.rb' - - 'spec/factories/group_group_links.rb' - - 'spec/factories/import_export_uploads.rb' - # WIP: See https://gitlab.com/gitlab-org/gitlab/-/issues/220040 Rails/SaveBang: Exclude: - 'ee/spec/controllers/projects/merge_requests_controller_spec.rb' - 'ee/spec/controllers/subscriptions_controller_spec.rb' - - 'ee/spec/frontend/fixtures/analytics.rb' - - 'ee/spec/graphql/resolvers/vulnerabilities_resolver_spec.rb' - 'ee/spec/initializers/fog_google_https_private_urls_spec.rb' - 'ee/spec/lib/analytics/merge_request_metrics_calculator_spec.rb' - 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb' @@ -77,8 +65,6 @@ Rails/SaveBang: - 'ee/spec/models/approval_merge_request_rule_spec.rb' - 'ee/spec/models/approval_project_rule_spec.rb' - 'ee/spec/models/burndown_spec.rb' - - 'ee/spec/models/ci/pipeline_spec.rb' - - 'ee/spec/models/ci/subscriptions/project_spec.rb' - 'ee/spec/models/ee/appearance_spec.rb' - 'ee/spec/models/ee/ci/job_artifact_spec.rb' - 'ee/spec/models/ee/protected_branch_spec.rb' @@ -87,11 +73,7 @@ Rails/SaveBang: - 'ee/spec/models/elasticsearch_indexed_namespace_spec.rb' - 'ee/spec/models/environment_spec.rb' - 'ee/spec/models/epic_spec.rb' - - 'ee/spec/models/geo/project_registry_spec.rb' - - 'ee/spec/models/geo_node_spec.rb' - - 'ee/spec/models/geo_node_status_spec.rb' - 'ee/spec/models/gitlab_subscription_spec.rb' - - 'ee/spec/models/group_spec.rb' - 'ee/spec/models/issue_spec.rb' - 'ee/spec/models/label_note_spec.rb' - 'ee/spec/models/lfs_object_spec.rb' @@ -110,28 +92,6 @@ Rails/SaveBang: - 'ee/spec/models/visible_approvable_spec.rb' - 'ee/spec/models/vulnerabilities/feedback_spec.rb' - 'ee/spec/models/vulnerabilities/issue_link_spec.rb' - - 'ee/spec/presenters/audit_event_presenter_spec.rb' - - 'ee/spec/presenters/epic_presenter_spec.rb' - - 'ee/spec/requests/api/boards_spec.rb' - - 'ee/spec/requests/api/epic_issues_spec.rb' - - 'ee/spec/requests/api/epic_links_spec.rb' - - 'ee/spec/requests/api/epics_spec.rb' - - 'ee/spec/requests/api/geo_nodes_spec.rb' - - 'ee/spec/requests/api/geo_spec.rb' - - 'ee/spec/requests/api/graphql/group/epics_spec.rb' - - 'ee/spec/requests/api/graphql/mutations/epic_tree/reorder_spec.rb' - - 'ee/spec/requests/api/groups_spec.rb' - - 'ee/spec/requests/api/issues_spec.rb' - - 'ee/spec/requests/api/ldap_group_links_spec.rb' - - 'ee/spec/requests/api/merge_request_approval_rules_spec.rb' - - 'ee/spec/requests/api/merge_request_approvals_spec.rb' - - 'ee/spec/requests/api/merge_requests_spec.rb' - - 'ee/spec/requests/api/project_approvals_spec.rb' - - 'ee/spec/requests/api/projects_spec.rb' - - 'ee/spec/requests/api/protected_branches_spec.rb' - - 'ee/spec/requests/api/scim_spec.rb' - - 'ee/spec/requests/api/todos_spec.rb' - - 'ee/spec/requests/lfs_http_spec.rb' - 'ee/spec/services/approval_rules/finalize_service_spec.rb' - 'ee/spec/services/approval_rules/update_service_spec.rb' - 'ee/spec/services/ee/boards/issues/create_service_spec.rb' @@ -188,101 +148,16 @@ Rails/SaveBang: - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb' - 'spec/controllers/abuse_reports_controller_spec.rb' - - 'spec/controllers/admin/impersonations_controller_spec.rb' - - 'spec/controllers/admin/runners_controller_spec.rb' - - 'spec/controllers/admin/services_controller_spec.rb' - 'spec/controllers/boards/issues_controller_spec.rb' - - 'spec/controllers/groups/milestones_controller_spec.rb' - - 'spec/controllers/groups/runners_controller_spec.rb' - - 'spec/controllers/groups/uploads_controller_spec.rb' - - 'spec/controllers/groups_controller_spec.rb' - - 'spec/controllers/oauth/authorizations_controller_spec.rb' - - 'spec/controllers/omniauth_callbacks_controller_spec.rb' - - 'spec/controllers/profiles/emails_controller_spec.rb' - - 'spec/controllers/profiles/notifications_controller_spec.rb' - - 'spec/controllers/projects/artifacts_controller_spec.rb' - - 'spec/controllers/projects/cycle_analytics/events_controller_spec.rb' - - 'spec/controllers/projects/cycle_analytics_controller_spec.rb' - - 'spec/controllers/projects/discussions_controller_spec.rb' - - 'spec/controllers/projects/forks_controller_spec.rb' - - 'spec/controllers/projects/group_links_controller_spec.rb' - - 'spec/controllers/projects/imports_controller_spec.rb' - - 'spec/controllers/projects/issues_controller_spec.rb' - - 'spec/controllers/projects/labels_controller_spec.rb' - - 'spec/controllers/projects/milestones_controller_spec.rb' - - 'spec/controllers/projects/notes_controller_spec.rb' - - 'spec/controllers/projects/pipelines_controller_spec.rb' - - 'spec/controllers/projects/releases/evidences_controller_spec.rb' - - 'spec/controllers/projects/runners_controller_spec.rb' - - 'spec/controllers/projects/starrers_controller_spec.rb' - - 'spec/controllers/projects/uploads_controller_spec.rb' - - 'spec/controllers/projects_controller_spec.rb' - 'spec/controllers/sent_notifications_controller_spec.rb' - 'spec/controllers/sessions_controller_spec.rb' - - 'spec/factories_spec.rb' - - 'spec/features/admin/admin_appearance_spec.rb' - - 'spec/features/admin/admin_labels_spec.rb' - - 'spec/features/admin/admin_mode/login_spec.rb' - - 'spec/features/admin/admin_runners_spec.rb' - - 'spec/features/admin/admin_sees_project_statistics_spec.rb' - - 'spec/features/admin/admin_sees_projects_statistics_spec.rb' - - 'spec/features/admin/admin_users_impersonation_tokens_spec.rb' - - 'spec/features/boards/sidebar_spec.rb' - - 'spec/features/calendar_spec.rb' - - 'spec/features/commits_spec.rb' - - 'spec/features/dashboard/datetime_on_tooltips_spec.rb' - - 'spec/features/dashboard/issuables_counter_spec.rb' - - 'spec/features/dashboard/project_member_activity_index_spec.rb' - - 'spec/features/dashboard/projects_spec.rb' - - 'spec/features/error_tracking/user_sees_error_index_spec.rb' - - 'spec/features/groups/members/request_access_spec.rb' - - 'spec/features/issuables/close_reopen_report_toggle_spec.rb' - - 'spec/features/issues/bulk_assignment_labels_spec.rb' - - 'spec/features/issues/gfm_autocomplete_spec.rb' - - 'spec/features/issues/issue_sidebar_spec.rb' - - 'spec/features/issues/note_polling_spec.rb' - - 'spec/features/issues/user_creates_branch_and_merge_request_spec.rb' - - 'spec/features/issues/user_creates_confidential_merge_request_spec.rb' - - 'spec/features/issues/user_edits_issue_spec.rb' - - 'spec/features/issues/user_filters_issues_spec.rb' - - 'spec/features/issues/user_sees_live_update_spec.rb' - - 'spec/features/issues/user_sorts_issues_spec.rb' - - 'spec/features/profiles/emails_spec.rb' - - 'spec/features/profiles/password_spec.rb' - - 'spec/features/profiles/personal_access_tokens_spec.rb' - - 'spec/features/projects/features_visibility_spec.rb' - - 'spec/features/projects/fork_spec.rb' - - 'spec/features/projects/jobs_spec.rb' - - 'spec/features/projects/members/user_requests_access_spec.rb' - - 'spec/features/projects/pages_lets_encrypt_spec.rb' - - 'spec/features/projects/pages_spec.rb' - - 'spec/features/projects/pipelines/pipeline_spec.rb' - - 'spec/features/projects/pipelines/pipelines_spec.rb' - - 'spec/features/projects/remote_mirror_spec.rb' - - 'spec/features/projects/services/user_activates_slack_notifications_spec.rb' - - 'spec/features/projects/settings/access_tokens_spec.rb' - - 'spec/features/projects/show/user_sees_deletion_failure_message_spec.rb' - - 'spec/features/projects/user_sees_sidebar_spec.rb' - - 'spec/features/projects/wiki/user_updates_wiki_page_spec.rb' - - 'spec/features/projects/wiki/user_views_wiki_page_spec.rb' - - 'spec/features/projects/wiki/users_views_asciidoc_page_with_includes_spec.rb' - - 'spec/features/runners_spec.rb' - - 'spec/features/security/project/internal_access_spec.rb' - - 'spec/features/security/project/private_access_spec.rb' - - 'spec/features/security/project/public_access_spec.rb' - - 'spec/features/users/login_spec.rb' - - 'spec/features/users/show_spec.rb' - 'spec/frontend/fixtures/issues.rb' - 'spec/frontend/fixtures/merge_requests.rb' - 'spec/graphql/mutations/merge_requests/set_locked_spec.rb' - 'spec/graphql/mutations/merge_requests/set_wip_spec.rb' - 'spec/graphql/resolvers/boards_resolver_spec.rb' - - 'spec/initializers/active_record_locking_spec.rb' - - 'spec/initializers/fog_google_https_private_urls_spec.rb' - 'spec/lib/after_commit_queue_spec.rb' - 'spec/lib/backup/manager_spec.rb' - - 'spec/lib/banzai/reference_parser/external_issue_parser_spec.rb' - - 'spec/lib/banzai/reference_redactor_spec.rb' - 'spec/lib/gitlab/alerting/alert_spec.rb' - 'spec/lib/gitlab/analytics/cycle_analytics/records_fetcher_spec.rb' - 'spec/lib/gitlab/auth/ldap/user_spec.rb' @@ -291,18 +166,12 @@ Rails/SaveBang: - 'spec/lib/gitlab/auth_spec.rb' - 'spec/lib/gitlab/authorized_keys_spec.rb' - 'spec/lib/gitlab/bitbucket_server_import/importer_spec.rb' - - 'spec/lib/gitlab/ci/ansi2json/style_spec.rb' - - 'spec/lib/gitlab/ci/status/build/common_spec.rb' - 'spec/lib/gitlab/cycle_analytics/base_event_fetcher_spec.rb' - 'spec/lib/gitlab/database/custom_structure_spec.rb' - 'spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb' - 'spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb' - - 'spec/lib/gitlab/email/handler/create_note_handler_spec.rb' - - 'spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb' - 'spec/lib/gitlab/gfm/reference_rewriter_spec.rb' - 'spec/lib/gitlab/git_access_spec.rb' - - 'spec/lib/gitlab/gitaly_client/object_pool_service_spec.rb' - - 'spec/lib/gitlab/gitaly_client/repository_service_spec.rb' - 'spec/lib/gitlab/import_export/avatar_saver_spec.rb' - 'spec/lib/gitlab/import_export/base/relation_factory_spec.rb' - 'spec/lib/gitlab/import_export/design_repo_restorer_spec.rb' @@ -327,29 +196,15 @@ Rails/SaveBang: - 'spec/lib/gitlab/import_export/uploads_manager_spec.rb' - 'spec/lib/gitlab/import_export/uploads_saver_spec.rb' - 'spec/lib/gitlab/import_export/wiki_restorer_spec.rb' - - 'spec/lib/gitlab/legacy_github_import/importer_spec.rb' - - 'spec/lib/gitlab/legacy_github_import/issue_formatter_spec.rb' - - 'spec/lib/gitlab/legacy_github_import/milestone_formatter_spec.rb' - - 'spec/lib/gitlab/legacy_github_import/pull_request_formatter_spec.rb' - 'spec/lib/gitlab/lets_encrypt/client_spec.rb' - - 'spec/lib/gitlab/markdown_cache/active_record/extension_spec.rb' - - 'spec/lib/gitlab/markdown_cache/redis/store_spec.rb' - 'spec/lib/gitlab/middleware/go_spec.rb' - 'spec/lib/gitlab/shard_health_cache_spec.rb' - - 'spec/lib/mattermost/command_spec.rb' - - 'spec/lib/mattermost/session_spec.rb' - - 'spec/lib/mattermost/team_spec.rb' - 'spec/mailers/notify_spec.rb' - 'spec/models/appearance_spec.rb' - 'spec/models/application_record_spec.rb' - 'spec/models/application_setting_spec.rb' - 'spec/models/clusters/applications/helm_spec.rb' - - 'spec/models/commit_spec.rb' - - 'spec/models/commit_status_spec.rb' - 'spec/models/container_repository_spec.rb' - - 'spec/models/deploy_keys_project_spec.rb' - - 'spec/models/deploy_token_spec.rb' - - 'spec/models/deployment_spec.rb' - 'spec/models/design_management/version_spec.rb' - 'spec/models/diff_discussion_spec.rb' - 'spec/models/diff_note_spec.rb' @@ -360,11 +215,7 @@ Rails/SaveBang: - 'spec/models/generic_commit_status_spec.rb' - 'spec/models/grafana_integration_spec.rb' - 'spec/models/group_spec.rb' - - 'spec/models/hooks/system_hook_spec.rb' - - 'spec/models/hooks/web_hook_spec.rb' - 'spec/models/identity_spec.rb' - - 'spec/models/issue/metrics_spec.rb' - - 'spec/models/issue_spec.rb' - 'spec/models/jira_import_state_spec.rb' - 'spec/models/key_spec.rb' - 'spec/models/lfs_objects_project_spec.rb' @@ -399,28 +250,6 @@ Rails/SaveBang: - 'spec/models/user_status_spec.rb' - 'spec/models/wiki_page/meta_spec.rb' - 'spec/models/wiki_page_spec.rb' - - 'spec/presenters/ci/build_runner_presenter_spec.rb' - - 'spec/presenters/ci/trigger_presenter_spec.rb' - - 'spec/presenters/packages/conan/package_presenter_spec.rb' - - 'spec/requests/api/ci/runner_spec.rb' - - 'spec/requests/api/commit_statuses_spec.rb' - - 'spec/requests/api/conan_packages_spec.rb' - - 'spec/requests/api/deployments_spec.rb' - - 'spec/requests/api/environments_spec.rb' - - 'spec/requests/api/go_proxy_spec.rb' - - 'spec/requests/api/graphql/mutations/merge_requests/set_labels_spec.rb' - - 'spec/requests/api/graphql/user_query_spec.rb' - - 'spec/requests/api/graphql_spec.rb' - - 'spec/requests/api/group_import_spec.rb' - - 'spec/requests/api/group_milestones_spec.rb' - - 'spec/requests/api/internal/base_spec.rb' - - 'spec/requests/api/issues/get_group_issues_spec.rb' - - 'spec/requests/api/issues/post_projects_issues_spec.rb' - - 'spec/requests/api/jobs_spec.rb' - - 'spec/requests/api/labels_spec.rb' - - 'spec/requests/api/project_import_spec.rb' - - 'spec/requests/projects/cycle_analytics_events_spec.rb' - - 'spec/requests/users_controller_spec.rb' Rails/TimeZone: Enabled: true @@ -578,6 +407,620 @@ Rails/TimeZone: - 'spec/tooling/rspec_flaky/listener_spec.rb' - 'spec/tooling/rspec_flaky/report_spec.rb' +# WIP: https://gitlab.com/gitlab-org/gitlab/-/issues/325836 +RSpec/EmptyLineAfterFinalLetItBe: + Exclude: + - ee/spec/controllers/groups/analytics/cycle_analytics/stages_controller_spec.rb + - ee/spec/controllers/groups/analytics/cycle_analytics/summary_controller_spec.rb + - ee/spec/controllers/groups/analytics/cycle_analytics/value_streams_controller_spec.rb + - ee/spec/controllers/groups/analytics/tasks_by_type_controller_spec.rb + - ee/spec/controllers/groups/autocomplete_sources_controller_spec.rb + - ee/spec/controllers/groups/insights_controller_spec.rb + - ee/spec/controllers/groups/todos_controller_spec.rb + - ee/spec/controllers/projects/branches_controller_spec.rb + - ee/spec/controllers/projects/incident_management/oncall_schedules_controller_spec.rb + - ee/spec/controllers/projects/insights_controller_spec.rb + - ee/spec/controllers/projects/licenses_controller_spec.rb + - ee/spec/controllers/projects/merge_requests_controller_spec.rb + - ee/spec/controllers/projects/mirrors_controller_spec.rb + - ee/spec/controllers/projects/threat_monitoring_controller_spec.rb + - ee/spec/controllers/subscriptions_controller_spec.rb + - ee/spec/features/boards/group_boards/multiple_boards_spec.rb + - ee/spec/features/ci_shared_runner_warnings_spec.rb + - ee/spec/features/dashboards/todos_spec.rb + - ee/spec/features/groups/groups_security_credentials_spec.rb + - ee/spec/features/groups/hooks/user_edits_hooks_spec.rb + - ee/spec/features/groups/iterations/user_edits_iteration_spec.rb + - ee/spec/features/groups/usage_quotas_spec.rb + - ee/spec/features/integrations/jira/jira_issues_list_spec.rb + - ee/spec/features/issues/bulk_assignment_epic_spec.rb + - ee/spec/features/issues/user_uses_quick_actions_spec.rb + - ee/spec/features/markdown/metrics_spec.rb + - ee/spec/features/registrations/group_invites_during_signup_flow_spec.rb + - ee/spec/features/subscriptions_spec.rb + - ee/spec/graphql/ee/mutations/concerns/mutations/resolves_issuable_spec.rb + - ee/spec/graphql/mutations/boards/update_epic_user_preferences_spec.rb + - ee/spec/graphql/mutations/clusters/agent_tokens/create_spec.rb + - ee/spec/graphql/mutations/compliance_management/frameworks/create_spec.rb + - ee/spec/graphql/mutations/compliance_management/frameworks/destroy_spec.rb + - ee/spec/graphql/mutations/compliance_management/frameworks/update_spec.rb + - ee/spec/graphql/mutations/dast_scanner_profiles/delete_spec.rb + - ee/spec/graphql/mutations/epics/add_issue_spec.rb + - ee/spec/graphql/mutations/gitlab_subscriptions/activate_spec.rb + - ee/spec/graphql/mutations/incident_management/oncall_rotation/create_spec.rb + - ee/spec/graphql/mutations/incident_management/oncall_rotation/destroy_spec.rb + - ee/spec/graphql/mutations/incident_management/oncall_schedule/create_spec.rb + - ee/spec/graphql/mutations/incident_management/oncall_schedule/destroy_spec.rb + - ee/spec/graphql/mutations/incident_management/oncall_schedule/update_spec.rb + - ee/spec/graphql/mutations/issues/set_epic_spec.rb + - ee/spec/graphql/mutations/requirements_management/export_requirements_spec.rb + - ee/spec/graphql/mutations/vulnerabilities/create_external_issue_link_spec.rb + - ee/spec/graphql/types/issue_type_spec.rb + - ee/spec/helpers/ee/graph_helper_spec.rb + - ee/spec/helpers/ee/issues_helper_spec.rb + - ee/spec/helpers/ee/projects/incidents_helper_spec.rb + - ee/spec/helpers/ee/projects/security/api_fuzzing_configuration_helper_spec.rb + - ee/spec/helpers/ee/projects/security/configuration_helper_spec.rb + - ee/spec/helpers/ee/projects/security/sast_configuration_helper_spec.rb + - ee/spec/helpers/ee/trial_helper_spec.rb + - ee/spec/helpers/ee/user_callouts_helper_spec.rb + - ee/spec/helpers/vulnerabilities_helper_spec.rb + - ee/spec/lib/ee/api/entities/user_with_admin_spec.rb + - ee/spec/lib/ee/api/entities/vulnerability_spec.rb + - ee/spec/lib/ee/event_filter_spec.rb + - ee/spec/lib/ee/gitlab/alert_management/payload/generic_spec.rb + - ee/spec/lib/ee/gitlab/alert_management/payload_spec.rb + - ee/spec/lib/ee/gitlab/ci/pipeline/chain/validate/external_spec.rb + - ee/spec/lib/ee/gitlab/ci/pipeline/quota/activity_spec.rb + - ee/spec/lib/ee/gitlab/ci/pipeline/quota/job_activity_spec.rb + - ee/spec/lib/ee/gitlab/ci/pipeline/quota/size_spec.rb + - ee/spec/lib/ee/gitlab/git_access_design_spec.rb + - ee/spec/lib/ee/gitlab/git_access_snippet_spec.rb + - ee/spec/lib/ee/gitlab/hook_data/issue_builder_spec.rb + - ee/spec/lib/ee/gitlab/import_export/project/tree_restorer_spec.rb + - ee/spec/lib/ee/gitlab/snippet_search_results_spec.rb + - ee/spec/lib/elastic/latest/git_class_proxy_spec.rb + - ee/spec/lib/gitlab/alert_management/payload/cilium_spec.rb + - ee/spec/lib/gitlab/analytics/cycle_analytics/summary/group/stage_time_summary_spec.rb + - ee/spec/lib/gitlab/checks/diff_check_spec.rb + - ee/spec/lib/gitlab/code_owners/loader_spec.rb + - ee/spec/lib/gitlab/elastic/document_reference_spec.rb + - ee/spec/lib/gitlab/elastic/group_search_results_spec.rb + - ee/spec/lib/gitlab/elastic/project_search_results_spec.rb + - ee/spec/lib/gitlab/git_access_spec.rb + - ee/spec/lib/gitlab/git_access_wiki_spec.rb + - ee/spec/lib/gitlab/graphql/aggregations/vulnerability_statistics/lazy_aggregate_spec.rb + - ee/spec/lib/gitlab/insights/project_insights_config_spec.rb + - ee/spec/lib/gitlab/sitemaps/url_extractor_spec.rb + - ee/spec/requests/api/analytics/code_review_analytics_spec.rb + - ee/spec/requests/api/audit_events_spec.rb + - ee/spec/requests/api/commits_spec.rb + - ee/spec/requests/api/dora/metrics_spec.rb + - ee/spec/requests/api/epics_spec.rb + - ee/spec/requests/api/external_approval_rules_spec.rb + - ee/spec/requests/api/geo_spec.rb + - ee/spec/requests/api/graphql/boards/epic_board_list_epics_query_spec.rb + - ee/spec/requests/api/graphql/current_user/todos_query_spec.rb + - ee/spec/requests/api/graphql/group/epic/epic_issues_spec.rb + - ee/spec/requests/api/graphql/group/epics_spec.rb + - ee/spec/requests/api/graphql/mutations/analytics/devops_adoption/segments/create_spec.rb + - ee/spec/requests/api/graphql/mutations/analytics/devops_adoption/segments/delete_spec.rb + - ee/spec/requests/api/graphql/mutations/boards/create_spec.rb + - ee/spec/requests/api/graphql/mutations/boards/epic_boards/create_spec.rb + - ee/spec/requests/api/graphql/mutations/boards/epic_boards/update_spec.rb + - ee/spec/requests/api/graphql/mutations/boards/issues/issue_move_list_spec.rb + - ee/spec/requests/api/graphql/mutations/boards/lists/update_limit_metrics_spec.rb + - ee/spec/requests/api/graphql/mutations/compliance_management/frameworks/destroy_spec.rb + - ee/spec/requests/api/graphql/mutations/compliance_management/frameworks/update_spec.rb + - ee/spec/requests/api/graphql/mutations/dast_scanner_profiles/update_spec.rb + - ee/spec/requests/api/graphql/mutations/environments/canary_ingress/update_spec.rb + - ee/spec/requests/api/graphql/mutations/epics/add_issue_spec.rb + - ee/spec/requests/api/graphql/mutations/epics/set_subscription_spec.rb + - ee/spec/requests/api/graphql/mutations/epics/update_spec.rb + - ee/spec/requests/api/graphql/mutations/gitlab_subscriptions/activate_spec.rb + - ee/spec/requests/api/graphql/mutations/incident_management/oncall_rotation/create_spec.rb + - ee/spec/requests/api/graphql/mutations/incident_management/oncall_schedule/create_spec.rb + - ee/spec/requests/api/graphql/mutations/incident_management/oncall_schedule/destroy_spec.rb + - ee/spec/requests/api/graphql/mutations/incident_management/oncall_schedule/update_spec.rb + - ee/spec/requests/api/graphql/mutations/issues/promote_to_epic_spec.rb + - ee/spec/requests/api/graphql/mutations/issues/update_spec.rb + - ee/spec/requests/api/graphql/mutations/iterations/create_spec.rb + - ee/spec/requests/api/graphql/mutations/notes/create/note_spec.rb + - ee/spec/requests/api/graphql/mutations/quality_management/test_cases/create_spec.rb + - ee/spec/requests/api/graphql/namespace/compliance_frameworks_spec.rb + - ee/spec/requests/api/graphql/project/alert_management/payload_fields_spec.rb + - ee/spec/requests/api/graphql/project/requirements_management/requirements_spec.rb + - ee/spec/requests/api/graphql/projects/compliance_frameworks_spec.rb + - ee/spec/requests/api/groups_spec.rb + - ee/spec/requests/api/internal/base_spec.rb + - ee/spec/requests/api/issues_spec.rb + - ee/spec/requests/api/ldap_spec.rb + - ee/spec/requests/api/merge_request_approval_rules_spec.rb + - ee/spec/requests/api/merge_request_approvals_spec.rb + - ee/spec/requests/api/merge_requests_spec.rb + - ee/spec/requests/api/merge_trains_spec.rb + - ee/spec/requests/api/project_approval_rules_spec.rb + - ee/spec/requests/api/project_approval_settings_spec.rb + - ee/spec/requests/api/projects_spec.rb + - ee/spec/requests/api/todos_spec.rb + - ee/spec/requests/api/vulnerabilities_spec.rb + - ee/spec/requests/api/vulnerability_issue_links_spec.rb + - ee/spec/requests/api/wikis_spec.rb + - ee/spec/requests/callout_spec.rb + - ee/spec/requests/git_http_geo_spec.rb + - ee/spec/requests/repositories/git_http_controller_spec.rb + - ee/spec/services/alert_management/extract_alert_payload_fields_service_spec.rb + - ee/spec/services/alert_management/process_prometheus_alert_service_spec.rb + - ee/spec/services/approval_rules/create_service_spec.rb + - ee/spec/services/audit_event_service_spec.rb + - ee/spec/services/award_emojis/add_service_spec.rb + - ee/spec/services/award_emojis/destroy_service_spec.rb + - ee/spec/services/billable_members/destroy_service_spec.rb + - ee/spec/services/boards/epic_boards/destroy_service_spec.rb + - ee/spec/services/clusters/agent_tokens/create_service_spec.rb + - ee/spec/services/compliance_management/frameworks/create_service_spec.rb + - ee/spec/services/compliance_management/frameworks/update_service_spec.rb + - ee/spec/services/dast_scanner_profiles/destroy_service_spec.rb + - ee/spec/services/dast_scanner_profiles/update_service_spec.rb + - ee/spec/services/dast_site_profiles/destroy_service_spec.rb + - ee/spec/services/dora/aggregate_metrics_service_spec.rb + - ee/spec/services/external_approval_rules/create_service_spec.rb + - ee/spec/services/external_approval_rules/destroy_service_spec.rb + - ee/spec/services/external_approval_rules/update_service_spec.rb + - ee/spec/services/gitlab_subscriptions/activate_service_spec.rb + - ee/spec/services/gitlab_subscriptions/apply_trial_service_spec.rb + - ee/spec/services/incident_management/incidents/upload_metric_service_spec.rb + - ee/spec/services/incident_management/oncall_rotations/edit_service_spec.rb + - ee/spec/services/merge_request_approval_settings/update_service_spec.rb + - ee/spec/services/personal_access_tokens/create_service_audit_log_spec.rb + - ee/spec/services/personal_access_tokens/groups/update_lifetime_service_spec.rb + - ee/spec/services/projects/after_rename_service_spec.rb + - ee/spec/services/projects/alerting/notify_service_spec.rb + - ee/spec/services/projects/destroy_service_spec.rb + - ee/spec/services/projects/gitlab_projects_import_service_spec.rb + - ee/spec/services/projects/import_export/export_service_spec.rb + - ee/spec/services/projects/transfer_service_spec.rb + - ee/spec/services/push_rules/create_or_update_service_spec.rb + - ee/spec/services/quality_management/test_cases/create_service_spec.rb + - ee/spec/services/quick_actions/interpret_service_spec.rb + - ee/spec/services/requirements_management/create_requirement_service_spec.rb + - ee/spec/services/requirements_management/export_csv_service_spec.rb + - ee/spec/services/requirements_management/update_requirement_service_spec.rb + - ee/spec/services/resource_access_tokens/create_service_spec.rb + - ee/spec/services/resource_access_tokens/revoke_service_spec.rb + - ee/spec/services/todo_service_spec.rb + - ee/spec/support/shared_examples/graphql/geo/geo_registries_resolver_shared_examples.rb + - ee/spec/support/shared_examples/graphql/mutations/set_multiple_assignees_shared_examples.rb + - ee/spec/support/shared_examples/quick_actions/issue/status_page_quick_actions_shared_examples.rb + - ee/spec/support/shared_examples/services/search_notes_shared_examples.rb + - spec/controllers/confirmations_controller_spec.rb + - spec/controllers/dashboard/projects_controller_spec.rb + - spec/controllers/invites_controller_spec.rb + - spec/controllers/profiles/emails_controller_spec.rb + - spec/controllers/users/terms_controller_spec.rb + - spec/features/cycle_analytics_spec.rb + - spec/features/dashboard/datetime_on_tooltips_spec.rb + - spec/features/dashboard/merge_requests_spec.rb + - spec/features/file_uploads/group_import_spec.rb + - spec/features/file_uploads/project_import_spec.rb + - spec/features/file_uploads/user_avatar_spec.rb + - spec/features/issues/user_sees_breadcrumb_links_spec.rb + - spec/features/markdown/metrics_spec.rb + - spec/features/merge_request/user_creates_merge_request_spec.rb + - spec/features/merge_request/user_posts_notes_spec.rb + - spec/features/operations_sidebar_link_spec.rb + - spec/features/participants_autocomplete_spec.rb + - spec/features/projects/badges/pipeline_badge_spec.rb + - spec/features/projects/branches/user_deletes_branch_spec.rb + - spec/features/projects/commit/cherry_pick_spec.rb + - spec/features/projects/commit/user_comments_on_commit_spec.rb + - spec/features/projects/commit/user_reverts_commit_spec.rb + - spec/features/projects/commit/user_views_user_status_on_commit_spec.rb + - spec/features/projects/confluence/user_views_confluence_page_spec.rb + - spec/features/projects/files/gitlab_ci_syntax_yml_dropdown_spec.rb + - spec/features/projects/issues/design_management/user_views_design_images_spec.rb + - spec/features/projects/labels/user_sees_links_to_issuables_spec.rb + - spec/features/projects/labels/user_views_labels_spec.rb + - spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb + - spec/features/projects/merge_request_button_spec.rb + - spec/features/projects/pages/user_adds_domain_spec.rb + - spec/features/projects/pipelines/pipeline_spec.rb + - spec/features/projects/product_analytics/events_spec.rb + - spec/features/projects/settings/project_settings_spec.rb + - spec/features/projects/settings/repository_settings_spec.rb + - spec/features/projects/snippets/user_views_snippets_spec.rb + - spec/features/projects/user_sees_user_popover_spec.rb + - spec/features/snippets/embedded_snippet_spec.rb + - spec/finders/alert_management/alerts_finder_spec.rb + - spec/finders/ci/commit_statuses_finder_spec.rb + - spec/finders/container_repositories_finder_spec.rb + - spec/finders/deployments_finder_spec.rb + - spec/finders/events_finder_spec.rb + - spec/finders/group_descendants_finder_spec.rb + - spec/finders/groups_finder_spec.rb + - spec/finders/packages/conan/package_file_finder_spec.rb + - spec/finders/packages/go/module_finder_spec.rb + - spec/finders/packages/group_packages_finder_spec.rb + - spec/finders/packages/nuget/package_finder_spec.rb + - spec/finders/packages/package_file_finder_spec.rb + - spec/finders/packages/package_finder_spec.rb + - spec/finders/template_finder_spec.rb + - spec/finders/todos_finder_spec.rb + - spec/finders/user_recent_events_finder_spec.rb + - spec/frontend/fixtures/pipelines.rb + - spec/graphql/features/authorization_spec.rb + - spec/graphql/gitlab_schema_spec.rb + - spec/graphql/mutations/alert_management/alerts/todo/create_spec.rb + - spec/graphql/mutations/alert_management/create_alert_issue_spec.rb + - spec/graphql/mutations/alert_management/http_integration/create_spec.rb + - spec/graphql/mutations/alert_management/http_integration/destroy_spec.rb + - spec/graphql/mutations/alert_management/http_integration/reset_token_spec.rb + - spec/graphql/mutations/alert_management/http_integration/update_spec.rb + - spec/graphql/mutations/alert_management/prometheus_integration/create_spec.rb + - spec/graphql/mutations/alert_management/prometheus_integration/reset_token_spec.rb + - spec/graphql/mutations/alert_management/prometheus_integration/update_spec.rb + - spec/graphql/mutations/alert_management/update_alert_status_spec.rb + - spec/graphql/mutations/boards/lists/update_spec.rb + - spec/graphql/mutations/custom_emoji/create_spec.rb + - spec/graphql/mutations/discussions/toggle_resolve_spec.rb + - spec/graphql/mutations/environments/canary_ingress/update_spec.rb + - spec/graphql/mutations/issues/set_severity_spec.rb + - spec/graphql/mutations/labels/create_spec.rb + - spec/graphql/mutations/notes/reposition_image_diff_note_spec.rb + - spec/graphql/resolvers/admin/analytics/usage_trends/measurements_resolver_spec.rb + - spec/graphql/resolvers/alert_management/alert_status_counts_resolver_spec.rb + - spec/graphql/resolvers/branch_commit_resolver_spec.rb + - spec/graphql/resolvers/design_management/designs_resolver_spec.rb + - spec/graphql/resolvers/design_management/version/designs_at_version_resolver_spec.rb + - spec/graphql/resolvers/group_milestones_resolver_spec.rb + - spec/graphql/resolvers/merge_request_pipelines_resolver_spec.rb + - spec/graphql/resolvers/metrics/dashboards/annotation_resolver_spec.rb + - spec/graphql/resolvers/project_pipeline_resolver_spec.rb + - spec/graphql/resolvers/project_pipelines_resolver_spec.rb + - spec/graphql/resolvers/timelog_resolver_spec.rb + - spec/lib/bulk_imports/groups/loaders/group_loader_spec.rb + - spec/lib/extracts_path_spec.rb + - spec/lib/extracts_ref_spec.rb + - spec/lib/gitlab/cache/ci/project_pipeline_status_spec.rb + - spec/lib/gitlab/ci/build/policy/changes_spec.rb + - spec/lib/gitlab/ci/config/external/file/local_spec.rb + - spec/lib/gitlab/ci/config/external/file/project_spec.rb + - spec/lib/gitlab/ci/config/external/file/template_spec.rb + - spec/lib/gitlab/ci/config/external/mapper_spec.rb + - spec/lib/gitlab/ci/config/external/processor_spec.rb + - spec/lib/gitlab/ci/pipeline/chain/build_spec.rb + - spec/lib/gitlab/ci/pipeline/chain/cancel_pending_pipelines_spec.rb + - spec/lib/gitlab/ci/pipeline/chain/template_usage_spec.rb + - spec/lib/gitlab/ci/pipeline/chain/validate/external_spec.rb + - spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb + - spec/lib/gitlab/ci/pipeline/seed/build_spec.rb + - spec/lib/gitlab/ci/pipeline/seed/deployment_spec.rb + - spec/lib/gitlab/ci/pipeline/seed/environment_spec.rb + - spec/lib/gitlab/ci/pipeline/seed/processable/resource_group_spec.rb + - spec/lib/gitlab/ci/reports/test_failure_history_spec.rb + - spec/lib/gitlab/ci/syntax_templates_spec.rb + - spec/lib/gitlab/ci/trace/chunked_io_spec.rb + - spec/lib/gitlab/ci/trace_spec.rb + - spec/lib/gitlab/closing_issue_extractor_spec.rb + - spec/lib/gitlab/composer/cache_spec.rb + - spec/lib/gitlab/data_builder/wiki_page_spec.rb + - spec/lib/gitlab/database/partitioning_migration_helpers/foreign_key_helpers_spec.rb + - spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb + - spec/lib/gitlab/deploy_key_access_spec.rb + - spec/lib/gitlab/email/handler/service_desk_handler_spec.rb + - spec/lib/gitlab/git/lfs_changes_spec.rb + - spec/lib/gitlab/git/merge_base_spec.rb + - spec/lib/gitlab/git/push_spec.rb + - spec/lib/gitlab/git_access_design_spec.rb + - spec/lib/gitlab/git_access_project_spec.rb + - spec/lib/gitlab/git_access_wiki_spec.rb + - spec/lib/gitlab/gitaly_client/operation_service_spec.rb + - spec/lib/gitlab/gl_repository/repo_type_spec.rb + - spec/lib/gitlab/group_search_results_spec.rb + - spec/lib/gitlab/json_cache_spec.rb + - spec/lib/gitlab/language_detection_spec.rb + - spec/lib/gitlab/project_search_results_spec.rb + - spec/lib/gitlab/prometheus/query_variables_spec.rb + - spec/lib/gitlab/reactive_cache_set_cache_spec.rb + - spec/lib/gitlab/reference_extractor_spec.rb + - spec/lib/gitlab/repository_cache_spec.rb + - spec/lib/gitlab/repository_hash_cache_spec.rb + - spec/lib/gitlab/repository_set_cache_spec.rb + - spec/lib/gitlab/repository_size_checker_spec.rb + - spec/lib/gitlab/repository_size_error_message_spec.rb + - spec/lib/gitlab/search_results_spec.rb + - spec/lib/gitlab/shell_spec.rb + - spec/models/abuse_report_spec.rb + - spec/models/alert_management/alert_spec.rb + - spec/models/audit_event_spec.rb + - spec/models/chat_name_spec.rb + - spec/models/chat_team_spec.rb + - spec/models/clusters/kubernetes_namespace_spec.rb + - spec/models/commit_spec.rb + - spec/models/deploy_token_spec.rb + - spec/models/deployment_spec.rb + - spec/models/diff_viewer/server_side_spec.rb + - spec/models/environment_spec.rb + - spec/models/event_collection_spec.rb + - spec/models/label_note_spec.rb + - spec/models/lfs_file_lock_spec.rb + - spec/models/member_spec.rb + - spec/models/merge_request_diff_spec.rb + - spec/models/namespace/root_storage_statistics_spec.rb + - spec/models/note_spec.rb + - spec/models/notification_setting_spec.rb + - spec/models/operations/feature_flag_spec.rb + - spec/models/packages/dependency_spec.rb + - spec/models/packages/go/module_version_spec.rb + - spec/models/packages/package_spec.rb + - spec/models/packages/tag_spec.rb + - spec/models/plan_limits_spec.rb + - spec/models/prometheus_alert_spec.rb + - spec/models/protected_branch/push_access_level_spec.rb + - spec/models/release_spec.rb + - spec/models/releases/evidence_spec.rb + - spec/models/releases/source_spec.rb + - spec/models/repository_spec.rb + - spec/models/service_spec.rb + - spec/models/snippet_repository_spec.rb + - spec/models/snippet_spec.rb + - spec/models/terraform/state_spec.rb + - spec/models/u2f_registration_spec.rb + - spec/models/user_spec.rb + - spec/models/wiki_page/meta_spec.rb + - spec/models/wiki_page_spec.rb + - spec/presenters/alert_management/alert_presenter_spec.rb + - spec/presenters/ci/pipeline_presenter_spec.rb + - spec/presenters/label_presenter_spec.rb + - spec/presenters/packages/composer/packages_presenter_spec.rb + - spec/presenters/packages/conan/package_presenter_spec.rb + - spec/presenters/packages/detail/package_presenter_spec.rb + - spec/presenters/packages/npm/package_presenter_spec.rb + - spec/presenters/packages/nuget/search_results_presenter_spec.rb + - spec/presenters/project_presenter_spec.rb + - spec/presenters/prometheus_alert_presenter_spec.rb + - spec/presenters/release_presenter_spec.rb + - spec/presenters/user_presenter_spec.rb + - spec/requests/api/api_spec.rb + - spec/requests/api/award_emoji_spec.rb + - spec/requests/api/branches_spec.rb + - spec/requests/api/ci/pipelines_spec.rb + - spec/requests/api/composer_packages_spec.rb + - spec/requests/api/deploy_tokens_spec.rb + - spec/requests/api/deployments_spec.rb + - spec/requests/api/error_tracking_spec.rb + - spec/requests/api/feature_flags_spec.rb + - spec/requests/api/freeze_periods_spec.rb + - spec/requests/api/generic_packages_spec.rb + - spec/requests/api/graphql/boards/board_lists_query_spec.rb + - spec/requests/api/graphql/ci/pipelines_spec.rb + - spec/requests/api/graphql/current_user_todos_spec.rb + - spec/requests/api/graphql/group/timelogs_spec.rb + - spec/requests/api/graphql/issue_status_counts_spec.rb + - spec/requests/api/graphql/metrics/dashboard_query_spec.rb + - spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb + - spec/requests/api/graphql/mutations/alert_management/alerts/set_assignees_spec.rb + - spec/requests/api/graphql/mutations/alert_management/alerts/todo/create_spec.rb + - spec/requests/api/graphql/mutations/alert_management/alerts/update_alert_status_spec.rb + - spec/requests/api/graphql/mutations/alert_management/http_integration/create_spec.rb + - spec/requests/api/graphql/mutations/alert_management/prometheus_integration/create_spec.rb + - spec/requests/api/graphql/mutations/award_emojis/add_spec.rb + - spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb + - spec/requests/api/graphql/mutations/boards/create_spec.rb + - spec/requests/api/graphql/mutations/boards/destroy_spec.rb + - spec/requests/api/graphql/mutations/boards/lists/destroy_spec.rb + - spec/requests/api/graphql/mutations/boards/lists/update_spec.rb + - spec/requests/api/graphql/mutations/branches/create_spec.rb + - spec/requests/api/graphql/mutations/ci/ci_cd_settings_update_spec.rb + - spec/requests/api/graphql/mutations/commits/create_spec.rb + - spec/requests/api/graphql/mutations/container_expiration_policy/update_spec.rb + - spec/requests/api/graphql/mutations/discussions/toggle_resolve_spec.rb + - spec/requests/api/graphql/mutations/environments/canary_ingress/update_spec.rb + - spec/requests/api/graphql/mutations/issues/set_locked_spec.rb + - spec/requests/api/graphql/mutations/issues/set_severity_spec.rb + - spec/requests/api/graphql/mutations/issues/update_spec.rb + - spec/requests/api/graphql/mutations/jira_import/import_users_spec.rb + - spec/requests/api/graphql/mutations/jira_import/start_spec.rb + - spec/requests/api/graphql/mutations/labels/create_spec.rb + - spec/requests/api/graphql/mutations/merge_requests/accept_spec.rb + - spec/requests/api/graphql/mutations/merge_requests/create_spec.rb + - spec/requests/api/graphql/mutations/metrics/dashboard/annotations/create_spec.rb + - spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb + - spec/requests/api/graphql/mutations/notes/create/diff_note_spec.rb + - spec/requests/api/graphql/mutations/notes/create/image_diff_note_spec.rb + - spec/requests/api/graphql/mutations/notes/create/note_spec.rb + - spec/requests/api/graphql/mutations/notes/reposition_image_diff_note_spec.rb + - spec/requests/api/graphql/mutations/notes/update/image_diff_note_spec.rb + - spec/requests/api/graphql/mutations/snippets/mark_as_spam_spec.rb + - spec/requests/api/graphql/mutations/snippets/update_spec.rb + - spec/requests/api/graphql/mutations/user_callouts/create_spec.rb + - spec/requests/api/graphql/namespace/package_settings_spec.rb + - spec/requests/api/graphql/project/alert_management/alert/issue_spec.rb + - spec/requests/api/graphql/project/alert_management/alert_status_counts_spec.rb + - spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb + - spec/requests/api/graphql/project/error_tracking/sentry_errors_request_spec.rb + - spec/requests/api/graphql/project/issue/designs/designs_spec.rb + - spec/requests/api/graphql/project/project_pipeline_statistics_spec.rb + - spec/requests/api/graphql/project_query_spec.rb + - spec/requests/api/graphql/query_spec.rb + - spec/requests/api/graphql/user/starred_projects_query_spec.rb + - spec/requests/api/graphql/user_query_spec.rb + - spec/requests/api/graphql_spec.rb + - spec/requests/api/group_import_spec.rb + - spec/requests/api/group_milestones_spec.rb + - spec/requests/api/group_packages_spec.rb + - spec/requests/api/groups_spec.rb + - spec/requests/api/helpers_spec.rb + - spec/requests/api/import_bitbucket_server_spec.rb + - spec/requests/api/internal/base_spec.rb + - spec/requests/api/lint_spec.rb + - spec/requests/api/markdown_spec.rb + - spec/requests/api/merge_requests_spec.rb + - spec/requests/api/metrics/dashboard/annotations_spec.rb + - spec/requests/api/metrics/user_starred_dashboards_spec.rb + - spec/requests/api/nuget_project_packages_spec.rb + - spec/requests/api/project_clusters_spec.rb + - spec/requests/api/project_container_repositories_spec.rb + - spec/requests/api/project_milestones_spec.rb + - spec/requests/api/project_packages_spec.rb + - spec/requests/api/pypi_packages_spec.rb + - spec/requests/api/rubygem_packages_spec.rb + - spec/requests/api/unleash_spec.rb + - spec/requests/api/users_spec.rb + - spec/requests/groups/email_campaigns_controller_spec.rb + - spec/requests/import/gitlab_groups_controller_spec.rb + - spec/requests/jwt_controller_spec.rb + - spec/requests/lfs_http_spec.rb + - spec/requests/product_analytics/collector_app_spec.rb + - spec/requests/rack_attack_global_spec.rb + - spec/services/admin/propagate_service_template_spec.rb + - spec/services/alert_management/create_alert_issue_service_spec.rb + - spec/services/audit_event_service_spec.rb + - spec/services/auth/dependency_proxy_authentication_service_spec.rb + - spec/services/auto_merge_service_spec.rb + - spec/services/bulk_create_integration_service_spec.rb + - spec/services/ci/change_variable_service_spec.rb + - spec/services/ci/change_variables_service_spec.rb + - spec/services/ci/create_pipeline_service/cross_project_pipeline_spec.rb + - spec/services/ci/create_pipeline_service/custom_config_content_spec.rb + - spec/services/ci/create_pipeline_service/dry_run_spec.rb + - spec/services/ci/create_pipeline_service/environment_spec.rb + - spec/services/ci/create_pipeline_service/parameter_content_spec.rb + - spec/services/ci/create_pipeline_service/parent_child_pipeline_spec.rb + - spec/services/ci/create_pipeline_service_spec.rb + - spec/services/ci/create_web_ide_terminal_service_spec.rb + - spec/services/ci/expire_pipeline_cache_service_spec.rb + - spec/services/ci/external_pull_requests/create_pipeline_service_spec.rb + - spec/services/ci/find_exposed_artifacts_service_spec.rb + - spec/services/ci/job_artifacts/create_service_spec.rb + - spec/services/ci/parse_dotenv_artifact_service_spec.rb + - spec/services/ci/pipeline_bridge_status_service_spec.rb + - spec/services/ci/pipeline_trigger_service_spec.rb + - spec/services/ci/prometheus_metrics/observe_histograms_service_spec.rb + - spec/services/ci/register_job_service_spec.rb + - spec/services/ci/resource_groups/assign_resource_from_resource_group_service_spec.rb + - spec/services/ci/retry_build_service_spec.rb + - spec/services/ci/stop_environments_service_spec.rb + - spec/services/clusters/applications/prometheus_health_check_service_spec.rb + - spec/services/container_expiration_policy_service_spec.rb + - spec/services/dependency_proxy/find_or_create_manifest_service_spec.rb + - spec/services/discussions/resolve_service_spec.rb + - spec/services/discussions/unresolve_service_spec.rb + - spec/services/feature_flags/create_service_spec.rb + - spec/services/feature_flags/destroy_service_spec.rb + - spec/services/feature_flags/disable_service_spec.rb + - spec/services/feature_flags/enable_service_spec.rb + - spec/services/feature_flags/update_service_spec.rb + - spec/services/git/branch_push_service_spec.rb + - spec/services/import/bitbucket_server_service_spec.rb + - spec/services/incident_management/incidents/create_service_spec.rb + - spec/services/incident_management/pager_duty/create_incident_issue_service_spec.rb + - spec/services/incident_management/pager_duty/process_webhook_service_spec.rb + - spec/services/integrations/test/project_service_spec.rb + - spec/services/issuable/bulk_update_service_spec.rb + - spec/services/jira_connect/sync_service_spec.rb + - spec/services/jira_import/start_import_service_spec.rb + - spec/services/jira_import/users_importer_spec.rb + - spec/services/markdown_content_rewriter_service_spec.rb + - spec/services/members/create_service_spec.rb + - spec/services/members/invite_service_spec.rb + - spec/services/metrics/dashboard/annotations/create_service_spec.rb + - spec/services/metrics/dashboard/gitlab_alert_embed_service_spec.rb + - spec/services/metrics/users_starred_dashboards/create_service_spec.rb + - spec/services/notes/copy_service_spec.rb + - spec/services/notes/create_service_spec.rb + - spec/services/notes/destroy_service_spec.rb + - spec/services/notes/quick_actions_service_spec.rb + - spec/services/notes/update_service_spec.rb + - spec/services/notification_service_spec.rb + - spec/services/packages/composer/create_package_service_spec.rb + - spec/services/packages/conan/search_service_spec.rb + - spec/services/packages/create_package_file_service_spec.rb + - spec/services/packages/debian/find_or_create_package_service_spec.rb + - spec/services/packages/generic/create_package_file_service_spec.rb + - spec/services/packages/maven/find_or_create_package_service_spec.rb + - spec/services/packages/nuget/search_service_spec.rb + - spec/services/packages/rubygems/dependency_resolver_service_spec.rb + - spec/services/pod_logs/base_service_spec.rb + - spec/services/pod_logs/elasticsearch_service_spec.rb + - spec/services/pod_logs/kubernetes_service_spec.rb + - spec/services/projects/alerting/notify_service_spec.rb + - spec/services/projects/create_service_spec.rb + - spec/services/projects/destroy_rollback_service_spec.rb + - spec/services/projects/destroy_service_spec.rb + - spec/services/projects/gitlab_projects_import_service_spec.rb + - spec/services/projects/group_links/create_service_spec.rb + - spec/services/projects/group_links/destroy_service_spec.rb + - spec/services/projects/group_links/update_service_spec.rb + - spec/services/projects/prometheus/alerts/notify_service_spec.rb + - spec/services/projects/transfer_service_spec.rb + - spec/services/projects/update_pages_service_spec.rb + - spec/services/prometheus/create_default_alerts_service_spec.rb + - spec/services/quick_actions/interpret_service_spec.rb + - spec/services/releases/create_evidence_service_spec.rb + - spec/services/repositories/destroy_rollback_service_spec.rb + - spec/services/repositories/destroy_service_spec.rb + - spec/services/repositories/shell_destroy_service_spec.rb + - spec/services/resource_access_tokens/create_service_spec.rb + - spec/services/resource_access_tokens/revoke_service_spec.rb + - spec/services/resource_events/change_labels_service_spec.rb + - spec/services/resource_events/merge_into_notes_service_spec.rb + - spec/services/security/ci_configuration/sast_create_service_spec.rb + - spec/services/snippets/bulk_destroy_service_spec.rb + - spec/services/snippets/create_service_spec.rb + - spec/services/snippets/update_service_spec.rb + - spec/services/spam/ham_service_spec.rb + - spec/services/spam/spam_action_service_spec.rb + - spec/services/spam/spam_verdict_service_spec.rb + - spec/services/system_note_service_spec.rb + - spec/services/system_notes/issuables_service_spec.rb + - spec/services/test_hooks/project_service_spec.rb + - spec/services/test_hooks/system_service_spec.rb + - spec/services/users/approve_service_spec.rb + - spec/services/users/reject_service_spec.rb + - spec/services/users/validate_otp_service_spec.rb + - spec/services/wiki_pages/event_create_service_spec.rb + - spec/support/shared_examples/graphql/design_fields_shared_examples.rb + - spec/support/shared_examples/graphql/mutations/set_assignees_shared_examples.rb + - spec/support/shared_examples/models/slack_mattermost_notifications_shared_examples.rb + - spec/support/shared_examples/quick_actions/issuable/issuable_quick_actions_shared_examples.rb + - spec/support/shared_examples/services/container_registry_auth_service_shared_examples.rb + - spec/support/shared_examples/services/packages_shared_examples.rb + - spec/tasks/gitlab/db_rake_spec.rb + - spec/tasks/gitlab/packages/composer_rake_spec.rb + - spec/tasks/gitlab/snippets_rake_spec.rb + - spec/uploaders/content_type_whitelist_spec.rb + - spec/uploaders/dependency_proxy/file_uploader_spec.rb + - spec/views/admin/application_settings/_eks.html.haml_spec.rb + - spec/views/admin/application_settings/_package_registry.html.haml_spec.rb + - spec/views/layouts/nav/sidebar/_project_security_link.html.haml_spec.rb + - spec/views/projects/pipelines/new.html.haml_spec.rb + - spec/views/projects/pipelines/show.html.haml_spec.rb + - spec/views/search/_results.html.haml_spec.rb + - spec/views/shared/_label_row.html.haml_spec.rb + - spec/views/shared/milestones/_top.html.haml_spec.rb + - spec/workers/ci/create_cross_project_pipeline_worker_spec.rb + - spec/workers/cluster_update_app_worker_spec.rb + - spec/workers/environments/canary_ingress/update_worker_spec.rb + - spec/workers/expire_job_cache_worker_spec.rb + - spec/workers/gitlab/jira_import/import_issue_worker_spec.rb + - spec/workers/gitlab/jira_import/stage/start_import_worker_spec.rb + - spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb + - spec/workers/import_issues_csv_worker_spec.rb + - spec/workers/incident_management/add_severity_system_note_worker_spec.rb + - spec/workers/incident_management/process_alert_worker_spec.rb + - spec/workers/incident_management/process_prometheus_alert_worker_spec.rb + - spec/workers/jira_connect/sync_project_worker_spec.rb + - spec/workers/namespaces/onboarding_issue_created_worker_spec.rb + - spec/workers/packages/composer/cache_update_worker_spec.rb + - spec/workers/pages_domain_ssl_renewal_cron_worker_spec.rb + - spec/workers/projects/git_garbage_collect_worker_spec.rb + - spec/workers/prometheus/create_default_alerts_worker_spec.rb + - spec/workers/propagate_integration_group_worker_spec.rb + - spec/workers/propagate_integration_project_worker_spec.rb + - spec/workers/run_pipeline_schedule_worker_spec.rb + - spec/workers/update_external_pull_requests_worker_spec.rb + RSpec/TimecopFreeze: Exclude: - 'ee/spec/controllers/admin/application_settings_controller_spec.rb' @@ -756,7 +1199,6 @@ RSpec/AnyInstanceOf: - 'ee/spec/migrations/update_vulnerability_severity_column_spec.rb' - 'ee/spec/models/ee/namespace_spec.rb' - 'ee/spec/models/geo_node_status_spec.rb' - - 'ee/spec/models/group_spec.rb' - 'ee/spec/models/issue_spec.rb' - 'ee/spec/models/merge_request_spec.rb' - 'ee/spec/models/project_import_state_spec.rb' @@ -892,8 +1334,8 @@ RSpec/AnyInstanceOf: - 'spec/lib/backup/files_spec.rb' - 'spec/lib/backup/manager_spec.rb' - 'spec/lib/banzai/commit_renderer_spec.rb' - - 'spec/lib/banzai/filter/external_issue_reference_filter_spec.rb' - - 'spec/lib/banzai/filter/issue_reference_filter_spec.rb' + - 'spec/lib/banzai/filter/references/external_issue_reference_filter_spec.rb' + - 'spec/lib/banzai/filter/references/issue_reference_filter_spec.rb' - 'spec/lib/banzai/filter/repository_link_filter_spec.rb' - 'spec/lib/banzai/pipeline/gfm_pipeline_spec.rb' - 'spec/lib/extracts_ref_spec.rb' @@ -1249,6 +1691,7 @@ Gitlab/NamespacedClass: - 'app/finders/deployments_finder.rb' - 'app/finders/environment_names_finder.rb' - 'app/finders/environments_finder.rb' + - 'app/finders/environments_by_deployments_finder.rb' - 'app/finders/events_finder.rb' - 'app/finders/feature_flags_finder.rb' - 'app/finders/feature_flags_user_lists_finder.rb' @@ -1320,7 +1763,6 @@ Gitlab/NamespacedClass: - 'app/models/application_setting/term.rb' - 'app/models/approval.rb' - 'app/models/audit_event.rb' - - 'app/models/audit_event_archived.rb' - 'app/models/authentication_event.rb' - 'app/models/award_emoji.rb' - 'app/models/badge.rb' @@ -1673,6 +2115,7 @@ Gitlab/NamespacedClass: - 'app/policies/service_policy.rb' - 'app/policies/suggestion_policy.rb' - 'app/policies/timebox_policy.rb' + - 'app/policies/timelog_policy.rb' - 'app/policies/todo_policy.rb' - 'app/policies/user_policy.rb' - 'app/policies/wiki_page_policy.rb' @@ -2275,7 +2718,6 @@ Gitlab/NamespacedClass: - 'ee/app/policies/iteration_policy.rb' - 'ee/app/policies/push_rule_policy.rb' - 'ee/app/policies/saml_provider_policy.rb' - - 'ee/app/policies/timelog_policy.rb' - 'ee/app/policies/vulnerability_policy.rb' - 'ee/app/presenters/approval_rule_presenter.rb' - 'ee/app/presenters/audit_event_presenter.rb' @@ -2451,59 +2893,404 @@ Gitlab/NamespacedClass: - 'spec/tasks/gitlab/task_helpers_spec.rb' - 'spec/uploaders/object_storage_spec.rb' -# WIP: https://gitlab.com/gitlab-org/gitlab/-/issues/322739 -Style/HashTransformation: +Style/ClassEqualityComparison: Exclude: - - 'app/controllers/projects/branches_controller.rb' - - 'app/finders/ci/commit_statuses_finder.rb' - - 'app/helpers/learn_gitlab_helper.rb' - - 'app/models/ci/build_trace_chunk.rb' - - 'app/models/concerns/cache_markdown_field.rb' - - 'app/models/gpg_key.rb' - - 'app/presenters/packages/npm/package_presenter.rb' - - 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb' - - 'app/services/ci/retry_build_service.rb' - - 'app/services/packages/nuget/create_dependency_service.rb' + - spec/lib/peek/views/active_record_spec.rb + - ee/spec/lib/peek/views/active_record_spec.rb + +# WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/207950 +Cop/UserAdmin: + Exclude: + - 'app/controllers/admin/impersonations_controller.rb' + - 'app/controllers/concerns/spammable_actions.rb' + - 'app/controllers/sessions_controller.rb' + - 'app/finders/autocomplete/routes_finder.rb' + - 'app/finders/ci/jobs_finder.rb' + - 'app/finders/ci/runners_finder.rb' + - 'app/finders/personal_access_tokens_finder.rb' + - 'app/finders/users_finder.rb' + - 'app/graphql/mutations/admin/sidekiq_queues/delete_jobs.rb' + - 'app/graphql/resolvers/admin/analytics/usage_trends/measurements_resolver.rb' + - 'app/helpers/application_helper.rb' + - 'app/helpers/import_helper.rb' + - 'app/helpers/nav_helper.rb' + - 'app/helpers/projects_helper.rb' + - 'app/helpers/search_helper.rb' + - 'app/helpers/user_callouts_helper.rb' + - 'app/helpers/users_helper.rb' + - 'app/helpers/visibility_level_helper.rb' + - 'app/models/concerns/protected_ref_access.rb' + - 'app/models/concerns/spammable.rb' + - 'app/models/issue_collection.rb' + - 'app/models/merge_requests_closing_issues.rb' + - 'app/models/protected_branch.rb' + - 'app/models/user.rb' + - 'app/policies/note_policy.rb' + - 'app/serializers/deploy_key_entity.rb' + - 'app/services/auth/container_registry_authentication_service.rb' + - 'app/services/emails/create_service.rb' + - 'app/services/projects/enable_deploy_key_service.rb' + - 'app/services/projects/fork_service.rb' + - 'app/services/users/build_service.rb' + - 'ee/app/controllers/ee/projects_controller.rb' + - 'ee/app/graphql/mutations/admin/analytics/devops_adoption/segments/mixins.rb' + - 'ee/app/graphql/resolvers/admin/analytics/devops_adoption/segments_resolver.rb' + - 'ee/app/helpers/ee/dashboard_helper.rb' + - 'ee/app/helpers/ee/import_helper.rb' + - 'ee/app/helpers/ee/subscribable_banner_helper.rb' + - 'ee/app/helpers/ee/user_callouts_helper.rb' + - 'ee/app/helpers/license_monitoring_helper.rb' + - 'ee/app/helpers/push_rules_helper.rb' + - 'ee/app/models/concerns/ee/protected_ref_access.rb' + - 'ee/app/models/ee/user.rb' + - 'ee/app/models/protected_environment/deploy_access_level.rb' + - 'ee/app/policies/ee/group_policy.rb' + - 'ee/app/policies/ee/project_policy.rb' + - 'ee/app/services/ee/groups/create_service.rb' + - 'ee/app/services/ee/groups/update_service.rb' + - 'ee/app/services/ee/projects/update_service.rb' + - 'ee/lib/ee/api/helpers.rb' + - 'ee/lib/ee/gitlab/git_access.rb' + - 'lib/api/award_emoji.rb' + - 'lib/api/ci/runners.rb' + - 'lib/api/entities/runner_details.rb' + - 'lib/api/entities/user_safe.rb' + - 'lib/api/groups.rb' + - 'lib/api/helpers.rb' + - 'lib/api/personal_access_tokens.rb' + - 'lib/api/users.rb' + - 'lib/api/v3/github.rb' + - 'lib/constraints/admin_constrainer.rb' + - 'lib/gitlab/auth.rb' + - 'lib/gitlab/background_migration/user_mentions/models/group.rb' + - 'lib/gitlab/ci/runner_instructions.rb' + - 'lib/gitlab/import_export/members_mapper.rb' + - 'lib/gitlab/performance_bar.rb' + - 'lib/gitlab/visibility_level.rb' + - 'qa/qa/runtime/api/client.rb' + +# WIP https://gitlab.com/gitlab-org/gitlab/-/issues/325744 +Performance/OpenStruct: + Exclude: + - 'Guardfile' + - 'app/finders/snippets_finder.rb' + - 'app/helpers/application_settings_helper.rb' + - 'app/models/cycle_analytics/project_level_stage_adapter.rb' + - 'ee/lib/gitlab/graphql/aggregations/epics/epic_node.rb' + - 'ee/lib/gitlab/graphql/aggregations/epics/epic_node.rb' + - 'lib/api/wikis.rb' + - 'lib/gitlab/ci/ansi2html.rb' + - 'lib/gitlab/ci/reports/test_suite_comparer.rb' + - 'lib/gitlab/git/diff_collection.rb' + - 'lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb' + - 'lib/gitlab/testing/request_inspector_middleware.rb' + - 'lib/mattermost/session.rb' + +# WIP: https://gitlab.com/gitlab-org/gitlab/-/issues/324629 +Gitlab/DelegatePredicateMethods: + Exclude: + - 'app/models/clusters/cluster.rb' + - 'app/models/clusters/platforms/kubernetes.rb' + - 'app/models/concerns/ci/metadatable.rb' + - 'app/models/concerns/diff_positionable_note.rb' + - 'app/models/concerns/resolvable_discussion.rb' + - 'app/models/concerns/services/data_fields.rb' + - 'app/models/project.rb' + - 'ee/app/models/concerns/ee/ci/metadatable.rb' + - 'ee/app/models/ee/group.rb' + - 'ee/app/models/ee/namespace.rb' + - 'ee/app/models/license.rb' + - 'lib/gitlab/ci/trace/stream.rb' + +# Offense count: 298 +Gitlab/FeatureAvailableUsage: + Exclude: + - 'app/controllers/projects/application_controller.rb' + - 'app/graphql/types/project_type.rb' + - 'app/helpers/events_helper.rb' + - 'app/helpers/labels_helper.rb' + - 'app/policies/project_policy.rb' + - 'app/views/groups/issues.html.haml' + - 'app/views/groups/merge_requests.html.haml' + - 'app/views/shared/boards/_switcher.html.haml' + - 'ee/app/controllers/concerns/description_diff_actions.rb' + - 'ee/app/controllers/concerns/ee/boards_actions.rb' + - 'ee/app/controllers/concerns/security_dashboards_permissions.rb' + - 'ee/app/controllers/ee/boards/lists_controller.rb' + - 'ee/app/controllers/ee/groups/application_controller.rb' + - 'ee/app/controllers/ee/groups/group_members_controller.rb' + - 'ee/app/controllers/ee/projects/autocomplete_sources_controller.rb' + - 'ee/app/controllers/ee/projects/issues_controller.rb' + - 'ee/app/controllers/ee/projects/security/configuration_controller.rb' + - 'ee/app/controllers/ee/projects/settings/ci_cd_controller.rb' + - 'ee/app/controllers/ee/projects/settings/operations_controller.rb' + - 'ee/app/controllers/ee/projects/settings/repository_controller.rb' + - 'ee/app/controllers/groups/analytics/application_controller.rb' + - 'ee/app/controllers/groups/audit_events_controller.rb' + - 'ee/app/controllers/groups/bulk_update_controller.rb' + - 'ee/app/controllers/groups/contribution_analytics_controller.rb' + - 'ee/app/controllers/groups/epics_controller.rb' + - 'ee/app/controllers/groups/hooks_controller.rb' + - 'ee/app/controllers/groups/issues_analytics_controller.rb' + - 'ee/app/controllers/groups/iterations_controller.rb' + - 'ee/app/controllers/projects/analytics/issues_analytics_controller.rb' + - 'ee/app/controllers/projects/audit_events_controller.rb' + - 'ee/app/controllers/projects/cluster_agents_controller.rb' + - 'ee/app/controllers/projects/iterations/inherited_controller.rb' + - 'ee/app/controllers/projects/iterations_controller.rb' + - 'ee/app/controllers/projects/path_locks_controller.rb' + - 'ee/app/controllers/projects/subscriptions_controller.rb' + - 'ee/app/finders/autocomplete/vulnerabilities_autocomplete_finder.rb' + - 'ee/app/finders/clusters/agents_finder.rb' + - 'ee/app/finders/ee/alert_management/alerts_finder.rb' + - 'ee/app/finders/ee/alert_management/http_integrations_finder.rb' + - 'ee/app/finders/ee/group_projects_finder.rb' + - 'ee/app/graphql/ee/types/group_type.rb' + - 'ee/app/graphql/mutations/dast/profiles/create.rb' + - 'ee/app/graphql/mutations/dast/profiles/run.rb' + - 'ee/app/graphql/mutations/dast/profiles/update.rb' + - 'ee/app/graphql/mutations/instance_security_dashboard/remove_project.rb' + - 'ee/app/graphql/resolvers/boards/epic_boards_resolver.rb' + - 'ee/app/graphql/resolvers/clusters/agent_tokens_resolver.rb' + - 'ee/app/graphql/resolvers/epics_resolver.rb' + - 'ee/app/helpers/ee/analytics/navbar_helper.rb' + - 'ee/app/helpers/ee/application_helper.rb' + - 'ee/app/helpers/ee/boards_helper.rb' + - 'ee/app/helpers/ee/clusters_helper.rb' + - 'ee/app/helpers/ee/dashboard_helper.rb' + - 'ee/app/helpers/ee/form_helper.rb' + - 'ee/app/helpers/ee/graph_helper.rb' + - 'ee/app/helpers/ee/groups_helper.rb' + - 'ee/app/helpers/ee/issues_helper.rb' + - 'ee/app/helpers/ee/lock_helper.rb' + - 'ee/app/helpers/ee/operations_helper.rb' + - 'ee/app/helpers/ee/projects/incidents_helper.rb' + - 'ee/app/helpers/ee/projects_helper.rb' + - 'ee/app/helpers/ee/releases_helper.rb' + - 'ee/app/helpers/ee/search_helper.rb' + - 'ee/app/helpers/ee/tree_helper.rb' + - 'ee/app/helpers/groups/security_features_helper.rb' + - 'ee/app/models/approval_state.rb' + - 'ee/app/models/concerns/approvable.rb' + - 'ee/app/models/concerns/ee/project_security_scanners_information.rb' + - 'ee/app/models/concerns/ee/protected_ref_access.rb' + - 'ee/app/models/concerns/has_timelogs_report.rb' + - 'ee/app/models/concerns/insights_feature.rb' + - 'ee/app/models/ee/board.rb' - 'ee/app/models/ee/ci/build.rb' - - 'ee/app/models/productivity_analytics.rb' - - 'ee/app/models/sca/license_compliance.rb' - - 'ee/app/services/security/store_report_service.rb' - - 'ee/lib/ee/gitlab/auth/ldap/sync/group.rb' - - 'ee/lib/ee/gitlab/usage_data.rb' - - 'ee/lib/gitlab/custom_file_templates.rb' - - 'ee/spec/elastic_integration/global_search_spec.rb' - - 'ee/spec/lib/ee/gitlab/application_context_spec.rb' - - 'lib/api/helpers/packages/conan/api_helpers.rb' - - 'lib/api/projects.rb' - - 'lib/atlassian/jira_connect/client.rb' - - 'lib/banzai/filter/repository_link_filter.rb' - - 'lib/gitlab/ci/config/entry/product/variables.rb' - - 'lib/gitlab/ci/config/entry/variables.rb' - - 'lib/gitlab/ci/variables/collection.rb' - - 'lib/gitlab/ci/variables/helpers.rb' - - 'lib/gitlab/git/commit.rb' - - 'lib/gitlab/import_sources.rb' - - 'lib/gitlab/language_detection.rb' - - 'lib/gitlab/metrics/samplers/database_sampler.rb' - - 'lib/gitlab/metrics/subscribers/active_record.rb' - - 'lib/gitlab/phabricator_import/project_creator.rb' - - 'lib/gitlab/prometheus_client.rb' - - 'lib/gitlab/repository_hash_cache.rb' - - 'lib/gitlab/static_site_editor/config/file_config.rb' - - 'lib/gitlab/template/base_template.rb' - - 'lib/gitlab/usage_data_counters/base_counter.rb' - - 'lib/gitlab/usage_data_counters/note_counter.rb' - - 'spec/lib/atlassian/jira_connect/serializers/pull_request_entity_spec.rb' - - 'spec/lib/gitlab/ci/status/composite_spec.rb' - - 'spec/lib/gitlab/conflict/file_spec.rb' - - 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb' + - 'ee/app/models/ee/ci/build_dependencies.rb' + - 'ee/app/models/ee/ci/pipeline.rb' + - 'ee/app/models/ee/group.rb' + - 'ee/app/models/ee/group_member.rb' + - 'ee/app/models/ee/issue.rb' + - 'ee/app/models/ee/list.rb' + - 'ee/app/models/ee/merge_request.rb' + - 'ee/app/models/ee/milestone_release.rb' + - 'ee/app/models/ee/namespace.rb' + - 'ee/app/models/ee/namespace_setting.rb' + - 'ee/app/models/ee/project.rb' + - 'ee/app/models/ee/project_ci_cd_setting.rb' + - 'ee/app/models/namespace_statistics.rb' + - 'ee/app/models/project_security_setting.rb' + - 'ee/app/models/saml_provider.rb' + - 'ee/app/policies/compliance_management/framework_policy.rb' + - 'ee/app/policies/compliance_management/framework_policy.rb' + - 'ee/app/policies/ee/group_policy.rb' + - 'ee/app/policies/ee/namespace_policy.rb' + - 'ee/app/policies/ee/project_policy.rb' + - 'ee/app/policies/ee/protected_branch_policy.rb' + - 'ee/app/presenters/ee/label_presenter.rb' + - 'ee/app/presenters/epic_presenter.rb' + - 'ee/app/presenters/merge_request_approver_presenter.rb' + - 'ee/app/serializers/dashboard_operations_project_entity.rb' + - 'ee/app/serializers/ee/environment_entity.rb' + - 'ee/app/serializers/ee/evidences/release_entity.rb' + - 'ee/app/serializers/ee/note_entity.rb' + - 'ee/app/services/boards/epic_boards/update_service.rb' + - 'ee/app/services/ci/audit_variable_change_service.rb' + - 'ee/app/services/clusters/agent_tokens/create_service.rb' + - 'ee/app/services/clusters/agents/create_service.rb' + - 'ee/app/services/dashboard/projects/create_service.rb' + - 'ee/app/services/dashboard/projects/list_service.rb' + - 'ee/app/services/dast/profiles/create_service.rb' + - 'ee/app/services/dast/profiles/update_service.rb' + - 'ee/app/services/dast_on_demand_scans/create_service.rb' + - 'ee/app/services/dast_site_tokens/create_service.rb' + - 'ee/app/services/dast_site_validations/create_service.rb' + - 'ee/app/services/dast_site_validations/revoke_service.rb' + - 'ee/app/services/dast_site_validations/validate_service.rb' + - 'ee/app/services/ee/alert_management/http_integrations/create_service.rb' + - 'ee/app/services/ee/audit_event_service.rb' + - 'ee/app/services/ee/boards/issues/list_service.rb' + - 'ee/app/services/ee/boards/lists/create_service.rb' + - 'ee/app/services/ee/boards/update_service.rb' + - 'ee/app/services/ee/groups/create_service.rb' + - 'ee/app/services/ee/ide/schemas_config_service.rb' + - 'ee/app/services/ee/issuable_base_service.rb' + - 'ee/app/services/ee/issue_links/create_service.rb' + - 'ee/app/services/ee/issues/build_service.rb' + - 'ee/app/services/ee/lfs/lock_file_service.rb' + - 'ee/app/services/ee/lfs/unlock_file_service.rb' + - 'ee/app/services/ee/merge_requests/approval_service.rb' + - 'ee/app/services/ee/merge_requests/build_service.rb' + - 'ee/app/services/ee/merge_requests/merge_base_service.rb' + - 'ee/app/services/ee/merge_requests/refresh_service.rb' + - 'ee/app/services/ee/merge_requests/update_service.rb' + - 'ee/app/services/ee/projects/create_service.rb' + - 'ee/app/services/ee/protected_branches/create_service.rb' + - 'ee/app/services/ee/releases/create_evidence_service.rb' + - 'ee/app/services/ee/search/group_service.rb' + - 'ee/app/services/iterations/cadences/create_service.rb' + - 'ee/app/services/iterations/cadences/update_service.rb' + - 'ee/app/services/iterations/create_service.rb' + - 'ee/app/services/iterations/update_service.rb' + - 'ee/app/services/merge_requests/sync_report_approver_approval_rules.rb' + - 'ee/app/services/merge_requests/update_blocks_service.rb' + - 'ee/app/services/projects/mark_for_deletion_service.rb' + - 'ee/app/services/quality_management/test_cases/create_service.rb' + - 'ee/app/services/requirements_management/process_test_reports_service.rb' + - 'ee/app/services/security/store_scans_service.rb' + - 'ee/app/views/groups/_templates_setting.html.haml' + - 'ee/app/views/groups/contribution_analytics/show.html.haml' + - 'ee/app/views/groups/ee/_settings_nav.html.haml' + - 'ee/app/views/groups/epics/index.html.haml' + - 'ee/app/views/groups/epics/show.html.haml' + - 'ee/app/views/groups/epics/show.html.haml' + - 'ee/app/views/groups/hooks/index.html.haml' + - 'ee/app/views/groups/roadmap/show.html.haml' + - 'ee/app/views/groups/settings/_allowed_email_domain.html.haml' + - 'ee/app/views/groups/settings/_ip_restriction.html.haml' + - 'ee/app/views/layouts/nav/_test_cases_link.html.haml' + - 'ee/app/views/layouts/nav/sidebar/_project_iterations_link.html.haml' + - 'ee/app/views/projects/_merge_request_approvals_settings.html.haml' + - 'ee/app/views/projects/_merge_request_settings.html.haml' + - 'ee/app/views/projects/_merge_request_settings_description_text.html.haml' + - 'ee/app/views/projects/audit_events/index.html.haml' + - 'ee/app/views/projects/blob/_header_file_locks.html.haml' + - 'ee/app/views/projects/issues/_related_issues.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/merge_requests/show.html.haml' + - 'ee/app/views/projects/pipelines/_tabs_content.html.haml' + - 'ee/app/views/projects/protected_branches/ee/_code_owner_approval_form.html.haml' + - 'ee/app/views/projects/protected_branches/ee/_code_owner_approval_table.html.haml' + - 'ee/app/views/projects/protected_branches/ee/_code_owner_approval_table_head.html.haml' + - 'ee/app/views/projects/push_rules/_index.html.haml' + - 'ee/app/views/projects/settings/_default_issue_template.html.haml' + - 'ee/app/views/projects/settings/_marked_for_removal.html.haml' + - 'ee/app/views/projects/settings/_restore.html.haml' + - 'ee/app/views/projects/settings/ci_cd/_auto_rollback.html.haml' + - 'ee/app/views/projects/settings/ci_cd/_pipeline_subscriptions.html.haml' + - 'ee/app/views/projects/settings/operations/_status_page.html.haml' + - 'ee/app/views/projects/settings/repository/_protected_branches.html.haml' + - 'ee/app/views/projects/sidebar/_repository_locked_files.html.haml' + - 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml' + - 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml' + - 'ee/app/views/shared/issuable/_group_bulk_update_sidebar.html.haml' + - 'ee/app/views/shared/issuable/_iteration_select.html.haml' + - 'ee/app/views/shared/issuable/form/_default_templates.html.haml' + - 'ee/app/views/shared/labels/_create_label_help_text.html.haml' + - 'ee/app/views/shared/promotions/_promote_mr_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_mr_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' + - 'ee/app/views/shared/promotions/_promote_repository_features.html.haml' + - 'ee/app/workers/analytics/code_review_metrics_worker.rb' + - 'ee/app/workers/group_saml_group_sync_worker.rb' + - 'ee/lib/api/external_approval_rules.rb' + - 'ee/lib/api/helpers/epics_helpers.rb' + - 'ee/lib/api/ldap_group_links.rb' + - 'ee/lib/ee/api/entities/approval_state.rb' + - 'ee/lib/ee/api/entities/board.rb' + - 'ee/lib/ee/api/entities/group.rb' + - 'ee/lib/ee/api/entities/issue.rb' + - 'ee/lib/ee/api/entities/project.rb' + - 'ee/lib/ee/api/groups.rb' + - 'ee/lib/ee/api/helpers.rb' + - 'ee/lib/ee/api/internal/kubernetes.rb' + - 'ee/lib/ee/api/job_artifacts.rb' + - 'ee/lib/ee/api/projects.rb' + - 'ee/lib/ee/gitlab/alert_management/payload/generic.rb' + - 'ee/lib/ee/gitlab/checks/diff_check.rb' + - 'ee/lib/ee/gitlab/gon_helper.rb' + - 'ee/lib/ee/gitlab/tree_summary.rb' + - 'ee/lib/gitlab/alert_management.rb' + - 'ee/lib/gitlab/auth/group_saml/group_lookup.rb' + - 'ee/lib/gitlab/ci/pipeline/chain/config/content/compliance.rb' + - 'ee/lib/gitlab/code_owners.rb' + - 'ee/lib/gitlab/import_export/group/group_and_descendants_repo_restorer.rb' + - 'ee/lib/gitlab/incident_management.rb' + - 'ee/lib/gitlab/path_locks_finder.rb' + - 'ee/lib/incident_management/incident_sla.rb' + - 'ee/spec/models/ee/namespace_spec.rb' + - 'ee/spec/models/instance_security_dashboard_spec.rb' + - 'ee/spec/models/license_spec.rb' + - 'ee/spec/models/project_spec.rb' + - 'lib/api/helpers/related_resources_helpers.rb' - 'spec/models/concerns/featurable_spec.rb' - - 'spec/models/event_spec.rb' - - 'spec/models/packages/dependency_spec.rb' - - 'spec/requests/api/graphql/project/alert_management/alert/assignees_spec.rb' - - 'spec/requests/api/graphql/project/alert_management/alert/notes_spec.rb' - - 'spec/requests/api/graphql/project/alert_management/alert/todos_spec.rb' + +# WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/327490 +Style/RegexpLiteralMixedPreserve: + Exclude: + - 'app/controllers/projects/repositories_controller.rb' + - 'app/helpers/ci/variables_helper.rb' + - 'app/models/alert_management/alert.rb' + - 'app/models/application_setting.rb' + - 'app/models/blob_viewer/go_mod.rb' + - 'app/models/concerns/ci/maskable.rb' + - 'app/models/operations/feature_flag.rb' + - 'app/models/packages/go/module.rb' + - 'app/models/project_services/chat_message/base_message.rb' + - 'app/services/packages/conan/search_service.rb' + - 'app/services/projects/update_remote_mirror_service.rb' + - 'config/initializers/rspec_profiling.rb' + - 'ee/app/models/status_page/project_setting.rb' + - 'ee/app/presenters/vulnerability_presenter.rb' + - 'ee/lib/api/geo_nodes.rb' + - 'ee/lib/gitlab/vulnerabilities/standard_vulnerability.rb' + - 'ee/spec/controllers/concerns/ee/routable_actions/sso_enforcement_redirect_spec.rb' + - 'ee/spec/controllers/concerns/routable_actions_spec.rb' + - 'ee/spec/controllers/groups/groups_controller_spec.rb' + - 'ee/spec/features/groups/saml_enforcement_spec.rb' + - 'ee/spec/features/markdown/metrics_spec.rb' + - 'ee/spec/lib/gitlab/database/load_balancing/load_balancer_spec.rb' + - 'ee/spec/models/project_services/jira_service_spec.rb' + - 'ee/spec/services/jira/requests/issues/list_service_spec.rb' + - 'lib/api/invitations.rb' + - 'lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb' + - 'lib/gitlab/metrics/requests_rack_middleware.rb' + - 'lib/gitlab/metrics/subscribers/active_record.rb' + - 'lib/gitlab/regex.rb' + - 'lib/gitlab/utils.rb' + - 'lib/product_analytics/tracker.rb' + - 'qa/qa/page/project/settings/advanced.rb' + - 'qa/spec/service/docker_run/gitlab_runner_spec.rb' + - 'rubocop/cop/gitlab/duplicate_spec_location.rb' + - 'spec/features/clusters/cluster_health_dashboard_spec.rb' + - 'spec/features/markdown/metrics_spec.rb' + - 'spec/features/search/user_searches_for_code_spec.rb' + - 'spec/features/snippets/embedded_snippet_spec.rb' + - 'spec/helpers/diff_helper_spec.rb' + - 'spec/helpers/releases_helper_spec.rb' + - 'spec/lib/gitlab/ci/reports/test_case_spec.rb' + - 'spec/lib/gitlab/consul/internal_spec.rb' + - 'spec/lib/gitlab/import_export/shared_spec.rb' + - 'spec/lib/gitlab/utils/usage_data_spec.rb' + - 'spec/presenters/ci/build_runner_presenter_spec.rb' - 'spec/requests/api/projects_spec.rb' - - 'spec/support/helpers/graphql_helpers.rb' - - 'spec/support/import_export/project_tree_expectations.rb' - - 'spec/support/shared_contexts/services/projects/container_repository/delete_tags_service_shared_context.rb' + - 'spec/services/jira/requests/projects/list_service_spec.rb' + - 'spec/support/capybara.rb' + - 'spec/support/helpers/grafana_api_helpers.rb' + - 'spec/support/helpers/query_recorder.rb' + - 'spec/support/helpers/require_migration.rb' + - 'spec/support/shared_examples/models/slack_mattermost_notifications_shared_examples.rb' + - 'spec/views/layouts/_head.html.haml_spec.rb' diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index deb7f287f7..4bd885c35d 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -32,24 +32,6 @@ Graphql/IDType: Layout/ArgumentAlignment: Enabled: false -# Offense count: 11 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyleAlignWith, Severity. -# SupportedStylesAlignWith: start_of_line, begin -Layout/BeginEndAlignment: - Exclude: - - 'app/controllers/groups/shared_projects_controller.rb' - - 'app/workers/concerns/reactive_cacheable_worker.rb' - - 'ee/app/services/security/token_revocation_service.rb' - - 'ee/lib/gitlab/analytics/cycle_analytics/summary/group/deploy.rb' - - 'ee/lib/gitlab/ci/config/entry/vault/secret.rb' - - 'lib/api/internal/base.rb' - - 'lib/atlassian/jira_connect/serializers/build_entity.rb' - - 'lib/gitlab/ci/jwt.rb' - - 'lib/gitlab/external_authorization/client.rb' - - 'lib/gitlab/phabricator_import/project_creator.rb' - - 'scripts/gitaly_test.rb' - # Offense count: 54 # Cop supports --auto-correct. # Configuration parameters: AllowAliasSyntax, AllowedMethods. @@ -94,20 +76,6 @@ Layout/LineLength: Layout/MultilineOperationIndentation: Enabled: false -# Offense count: 11 -# Cop supports --auto-correct. -Layout/RescueEnsureAlignment: - Exclude: - - 'app/models/blob_viewer/dependency_manager.rb' - - 'app/models/project.rb' - - 'app/services/prometheus/proxy_service.rb' - - 'app/workers/concerns/reactive_cacheable_worker.rb' - - 'app/workers/delete_stored_files_worker.rb' - - 'config/initializers/1_settings.rb' - - 'config/initializers/trusted_proxies.rb' - - 'lib/api/internal/base.rb' - - 'lib/gitlab/highlight.rb' - # Offense count: 53 # Cop supports --auto-correct. Layout/SpaceAroundMethodCallOperator: @@ -202,21 +170,6 @@ Lint/MixedRegexpCaptureTypes: Lint/RedundantCopDisableDirective: Enabled: false -# Offense count: 9 -# Cop supports --auto-correct. -# Configuration parameters: AllowedMethods. -# AllowedMethods: instance_of?, kind_of?, is_a?, eql?, respond_to?, equal? -Lint/RedundantSafeNavigation: - Exclude: - - 'app/controllers/concerns/labels_as_hash.rb' - - 'app/policies/note_policy.rb' - - 'app/services/users/update_canonical_email_service.rb' - - 'ee/app/presenters/iteration_presenter.rb' - - 'ee/app/services/ee/members/destroy_service.rb' - - 'ee/lib/ee/gitlab/email/handler/reply_processing.rb' - - 'qa/qa/specs/helpers/quarantine.rb' - - 'spec/controllers/boards/issues_controller_spec.rb' - # Offense count: 1 Lint/SelfAssignment: Exclude: @@ -255,12 +208,6 @@ Metrics/CyclomaticComplexity: Metrics/PerceivedComplexity: Max: 25 -# Offense count: 1 -# Cop supports --auto-correct. -Migration/DepartmentName: - Exclude: - - 'app/models/commit.rb' - # Offense count: 196 # Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, Regex, IgnoreExecutableScripts, AllowedAcronyms. # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS @@ -693,11 +640,6 @@ Rails/WhereEquals: Rails/WhereExists: Enabled: false -# Offense count: 21 -# Cop supports --auto-correct. -Rails/WhereNot: - Enabled: false - # Offense count: 8 # Cop supports --auto-correct. Security/YAMLLoad: @@ -903,11 +845,6 @@ Style/Next: Style/NumericLiteralPrefix: Enabled: false -# Offense count: 140 -# Cop supports --auto-correct. -Style/ParallelAssignment: - Enabled: false - # Offense count: 2698 # Cop supports --auto-correct. # Configuration parameters: PreferredDelimiters. @@ -922,11 +859,6 @@ Style/RaiseArgs: Enabled: false EnforcedStyle: exploded -# Offense count: 73 -# Cop supports --auto-correct. -Style/RedundantAssignment: - Enabled: false - # Offense count: 2 # Cop supports --auto-correct. Style/RedundantBegin: @@ -951,11 +883,6 @@ Style/RedundantFetchBlock: Style/RedundantFileExtensionInRequire: Enabled: false -# Offense count: 248 -# Cop supports --auto-correct. -Style/RedundantFreeze: - Enabled: false - # Offense count: 206 # Cop supports --auto-correct. Style/RedundantInterpolation: @@ -985,20 +912,6 @@ Style/RedundantRegexpEscape: Style/RedundantSelf: Enabled: false -# Offense count: 2 -# Cop supports --auto-correct. -Style/RedundantSelfAssignment: - Exclude: - - 'app/models/concerns/issuable.rb' - - 'spec/db/schema_spec.rb' - -# Offense count: 213 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, AllowInnerSlashes. -# SupportedStyles: slashes, percent_r, mixed -Style/RegexpLiteral: - Enabled: false - # Offense count: 53 # Cop supports --auto-correct. Style/RescueModifier: diff --git a/CHANGELOG.md b/CHANGELOG.md index d9436b873d..a48f0afd15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,18 +2,834 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. -## 13.10.4 (2021-04-27) +## 13.11.2 (2021-04-27) -### Security (6 changes) +### Security (5 changes) - Prevent tokens with only read_api scope from executing mutations. -- Update mermaid to version 8.9.2. - Do not allow deploy tokens in the dependency proxy authentication service. - Disable keyset pagination for branches by default. - Bump Carrierwave gem to v1.3.2. - Restrict setting system_note_timestamp to owners. +## 13.11.1 (2021-04-22) + +### Changed (1 change) + +- Change unsubscribe language for email campaign on self managed. !59121 + +### Added (1 change) + +- Add documentation about Pages deployment migration. !59475 + + +## 13.11.0 (2021-04-22) + +### Security (3 changes) + +- Update to Rails v6.0.3.6. !59328 +- Update mermaid to version 8.9.2. +- Allow to disable exiftool depending on env variable. + +### Removed (10 changes, 1 of them is from the community) + +- Redirect deprecated pipeline routes. !53990 +- Remove CI lint button from Jobs page nav. !56854 +- Remove graphql_individual_release_page feature flag. !56882 +- Remove deprecated repository archive routes. !57236 +- Remove add issues modal from issue boards (this has been disabled since 13.6). !57329 +- Remove unused feature flag ':roadmap_buffered_rendering'. !57486 +- Remove HipChat integration from frontend and docs. !57556 +- Remove temporary index from vulnerabilities table. !57656 (Huzaifa Iftikhar @huzaifaiftikhar) +- Remove unused feature flag checks. !58469 +- Remove ability to create new service templates. !58624 + +### Fixed (175 changes, 90 of them are from the community) + +- Update gatsby project template to address the pipeline failure. !37410 (Takuya Noguchi) +- Fixed an issue where the link commit message did not end with a newline. !49086 (Kazuya Kojima) +- Partially fix incorrect icons for non-standard license files. !53207 +- Add language- prefix to CSS class of markdown code blocks. !55076 (Camil Staps) +- Filter out pipelines that were excluded in the relation scope in Ci::Pipeline#latest_pipeline_per_commit. !55657 (Cong Chen @gentcys) +- Fix mermaid diagrams in dark mode. !56183 +- Catch network errors. !56457 (Shubham Kumar (@imskr)) +- Fix the Maven sync worker to not fail if the versionless package is not found. !56514 +- Fix `#current_authenticated_job` when used with `.authenticate_with` in Grape APIs. !56564 +- Move graphql timelogs to CE. !56633 (Lee Tickett @leetickett) +- Fix bug in wiki link rewriter filter. !56636 +- Fix bug in Gollum Tags filter. !56638 +- Fix derivation of effective permissions (access level) of group members. !56677 (Jonas Wälter @wwwjon) +- Fix word wrapping in parallel diffs. !56713 +- Don't close issue label select box on click if only mouseup outside. !56721 (Simon Stieger @sim0) +- Fix reference widget icon and text spacing. !56759 +- Fix test report merge request widget summary and issues alignment. !56768 +- Fix artifacts section from showing up when no artifacts are present. !56784 +- Push confidential_notes feature flag to mr frontend. !56798 (Lee Tickett @leetickett) +- Fixed offenses Layout/BeginEndAlignment. !56827 (Shubham Kumar (@imskr)) +- Close DropLab dropdowns on click instead of mousedown. !56847 (Simon Stieger @sim0) +- Add labels to UI toggles. !56848 +- Fix offense Layout/RescueEnsureAlignment. !56870 (Shubham Kumar (@imskr)) +- Fixes offense Lint/RedundantSafeNavigation. !56884 (Shubham Kumar (@imskr)) +- In admin new user page, fix external checkbox warning hide with keyboard interaction. !56896 +- Fix Conan project-level API to return correct download-urls and fix Conan project-level functionality. !56899 +- Remove Kramdown patch and update to v2.3.1 gem. !56917 +- Fixed styling of commit comment buttons. !56982 +- Update weight transaltion for Russian locale. !56986 (Gennady Kovalev (@belolap)) +- Fixes rubocop offense Migration/DepartmentName. !56997 (Shubham Kumar (@imskr)) +- Do not render empty title in HelpPopover. !57025 +- Validate import manifest url scheme. !57071 +- Inherit default branch name for subgroups. !57101 +- Fix ruby alpine CI template. !57109 +- Fix rails binding for ruby alpine template. !57112 +- Update admin edit button icon class. !57151 +- Fix branch switch to be exact instead of partial match. !57197 +- Add aria labels to icon buttons. !57261 +- Ensure search param is kept in scrolled commit. !57307 +- Fix remote_mirrors usage ping metric. !57332 +- Remove calls to jQuery animations to fix infinite scrolling on the Repository commits page. !57379 +- Hide project-specific views on group / instance level integrations. !57381 +- A blocked URL for a push mirror is a hard failure. !57392 +- Fix usage data count start/finish export issue. !57403 +- Fix tooltip position in mini pipeline chart. !57425 +- Use search param in refs call to filter revisions. !57442 +- Update the Package settings to use the blue primary button. !57468 +- Always save default on empty values in Exp Policies. !57470 +- Allow all file types to be uploaded from the repo file upload tool. !57498 +- Fix Assignee dropdown showing assignee(s) twice. !57513 +- Fix inconsistent production environment definition on VSA. !57557 +- Fix namespace validation (unique path) on group creation. !57563 (Jonas Wälter @wwwjon) +- Give better feedback when quick actions have no effect. !57570 (Hilco van der Wilk) +- Fix security report fetching in Merge Requests. !57574 +- Display error message when runner installation instructions modal cannot be loaded correctly. !57588 +- Fix two data races in the branch names cache. !57607 +- Add aria labels to icon-only buttons. !57610 +- Fix Rails/SaveBang rubocop offenses in spec/controllers/projects/*. !57643 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang Rubocop offenses for admin controllers. !57644 (Huzaifa Iftikhar @huzaifaiftikhar) +- Make NuGet SearchQueryService q parameter optional. !57654 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix MR Source Branch styling. !57662 +- Fix updating GraphQL boards cards on assignees update. !57687 +- Revert Ignore default_enabled value in Feature.enabled?. !57707 +- Simplify Build Group name correction. !57739 +- Fix force_random_password option when creating Users via API. !57751 +- Fix issue where merge description not showing when merged with merge train. !57787 +- Covert has-tooltip on commit page to pajamas. !57858 +- Fix Rails/SaveBang rubocop offenses in spec/controllers/groups*. !57879 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang Rubocop offenses for requests module. !57883 (Huzaifa Iftikhar @huzaifaiftikhar) +- Disable trigger manual job button after click. !57885 +- Fix Rails/SaveBang rubocop offenses in auth controllers. !57886 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang Rubocop offenses for requests/api module. !57887 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang Rubocop offenses for presenters. !57888 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang rubocop offenses in profiles & projects controllers. !57890 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang rubocop offenses in spec/features/admin. !57891 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang rubocop offenses in spec/features/dashboard. !57898 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang rubocop offenses in spec/features/issues. !57900 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang rubocop offenses in spec/features/projects. !57904 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang rubocop offenses in spec/features/. !57907 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang Rubocop offenses for hooks module. !57918 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fixes rubocop offenses Style/RedundantSelfAssignment. !57920 (Shubham Kumar (@imskr)) +- Fix closed icon for merge requests to match close issue icon. !57981 (jesus beltran) +- Resolves offenses Style/ParallelAssignment. !57999 (Shubham Kumar (@imskr)) +- Resolves offenses Style/RedundantAssignment. !58013 (Shubham Kumar (@imskr)) +- Fix Rails/SaveBang Rubocop offenses for deployment modules. !58040 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang Rubocop offenses for mattermost modules. !58048 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang rubocop offenses in spec/initializers. !58049 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang Rubocop offenses for issue models. !58052 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang Rubocop offenses for legacy github import. !58054 (Huzaifa Iftikhar @huzaifaiftikhar) +- Resolves rubocop offenses Rails/WhereNot. !58062 (Shubham Kumar (@imskr)) +- Fix Rails/SaveBang Rubocop offenses for markdown cache modules. !58063 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang Rubocop offenses for commit models. !58069 (Huzaifa Iftikhar @huzaifaiftikhar) +- Only link merge requests to successful deployments. !58072 +- Fix Rails/SaveBang Rubocop offenses for gitaly client models. !58089 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang Rubocop offenses for email handlers. !58095 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang rubocop offenses in spec/factories_spec.rb. !58102 (Abdul Wadood @abdulwd) +- Fix Rails/SaveBang Rubocop offenses for ci models. !58104 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix Rails/SaveBang Rubocop offenses for banzai modules. !58108 (Huzaifa Iftikhar @huzaifaiftikhar) +- Ensures that the "Suggest GitLab CI" popover is shown after selecting a template type. !58120 +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for groups controller. !58174 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for boards module. !58180 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses for error tracking module. !58182 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for groups module. !58183 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses for design management module. !58189 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for metrics module. !58190 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for helpers. !58192 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for api entities. !58193 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for api helpers. !58194 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix overflow UI bug with longer commit title on Wiki Page History. !58212 (Takuya Noguchi) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/graphql/types. !58241 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/banzai. !58242 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe in spec/lib/gitlab/alert_management. !58244 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab/analytics. !58245 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab/auth. !58246 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab/checks. !58248 (Huzaifa Iftikhar @huzaifaiftikhar) +- Disable pages_serve_with_zip_file_protocol by default. !58253 +- Fix EmptyLineAfterFinalLetItBe offenses spec/lib/gitlab/github_import. !58256 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab/graphql. !58261 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab/hook_data. !58262 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses spec/lib/gitlab/import_export. !58264 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab/jira_import. !58266 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix visibility filter on explore projects page. !58293 (Jonas Wälter @wwwjon) +- Fix EmptyLineAfterFinalLetItBe in spec/lib/gitlab/phabricator_import. !58297 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/lib/gitlab. !58314 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/mailers. !58319 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/models/blob_viewer. !58325 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/models/ci. !58327 (Huzaifa Iftikhar @huzaifaiftikhar) +- Update the group permission check in packages finder helper. !58329 +- Fix EmptyLineAfterFinalLetItBe offenses in spec/models/concerns. !58367 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/models/project. !58372 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/policies. !58393 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/serializers. !58406 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/award_emojis. !58407 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/boards. !58413 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe in spec/services/design_management. !58416 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/environments. !58418 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/groups. !58423 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/ide. !58424 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/issues. !58425 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fix EmptyLineAfterFinalLetItBe offenses in spec/services/merge_requests. !58429 (Huzaifa Iftikhar @huzaifaiftikhar) +- Add aria labels to icon-only buttons. !58459 +- Fixes admin ci variables not showing up. !58496 +- Fix previous deployment fetches wrong deployment. !58567 +- Fix delete source branch status message. !58605 +- Fix member autocomplete sort order. !58652 +- Show bottom border on milestones sidebar widget for incident issues. !58662 +- Fix project access token creation group settings link. !58686 +- Avoid listing snippets through GraphQL when user profile is private. !58739 +- Fix notification when new Service Desk Issue is created. !58803 +- Fix dark mode colors of retried jobs in job details page. !58855 +- Fix Forward Deployment Worker causes deadlock. !58861 +- Fix select2 dropdowns in dark mode. !58862 +- Fix badge s and borders in dark mode info wells. !58875 +- Dark mode nav improvements. !58891 +- Fix style for adding a related issue in free tiers. !58893 (Michael Telgkamp @michael.telgkamp) +- Fix user reference transformation in EpicsPipeline. !58913 +- Avoid inflating Redis memory when aborting pipelines. !59018 +- Fix sign out button in error pages. !59030 +- Add aria labels to icon-only buttons. !59037 +- Skip Rack Attack rate limiting for container registry event API. !59085 +- Fix loading pipelines by commit SHA for GraphQL. !59110 +- Drop user pipelines async when user is blocked. !59129 +- IPython KaTeX rendering of comparison operators for markdown. !59132 (Reinhold Gschweicher ) +- Fix MR diff file tree being hidden behind review bar. !59150 +- Add invited group members to search results on assignees widget. !59152 +- Fix tooltip not rendering. !59202 +- Fix revert commit query. !59356 +- Do not show sort by project in Package project page. !59367 +- Return 403 status code to the Runner when CI Job is deleted. !59382 +- Fix character escaping in Resolved By tooltips. !59428 +- Fix Jenkins integration for GitLab FOSS. !59476 +- Exclude projects dropdown from revert modal. !59504 +- Ensure all tooltips appear with a 500ms delay. !59561 +- Added feature flag to show/hide assignees GraphQL widget. !59620 +- Fix rare race condition in GitLab-internal feature flags with database load balancing enabled. + +### Deprecated (5 changes, 1 of them is from the community) + +- Rename event to action in Snowplow helpers and FE event handlers. !55698 +- Deprecate Product Intelligence test aggregated metrics. !57377 +- Bump recommended Redis version from 4.0 to 5.0. !59072 (Takuya Noguchi) +- Deprecate Alerts for Managed Prometheus. !59433 +- Deprecate assigneeUsername issue filter in GraphQL. !59538 + +### Changed (211 changes, 76 of them are from the community) + +- Adds CI pipeline and job features to GraphQL API. !44703 +- Unify the Docker Image build CI template and use the default branch instead of hardcoded 'master'. !51931 (dnsmichi) +- Update performance bar background color to use Pajamas compliant colour palette. !52775 (Yogi (@yo)) +- Remove extra tooltip from pipelines overview page. !52902 (Yogi (@yo)) +- Update RubyGems metadata constraints and add gem metadata extraction. !53673 +- Returns deep stringified keys for merged_yaml in linting endpoint. !54336 +- Add space to graph in contributor page. !54431 (Yogi (@yo)) +- Move from btn-success to btn-confirm in app/views/profiles directory. !54748 (Yogi (@yo)) +- Add multi-line styling within contribution tooltip. !54765 (Yogi (@yo)) +- Update import statuses texts and icons. !54957 +- Add branch names field to repository GraphQL type. !55074 +- Remove referencing TokenWithIv model in the codebase and dynamic nonce creation feature flag. !55209 +- Move to btn-confirm from btn-success in views/invites directory. !55293 (Yogi (@yo)) +- Add validation for emails on push recipients. !55550 +- Migrate bootstrap modal to GlModal for repo single file uploads. !55587 +- Record sent in-product marketing emails and don't send the same email twice. !55840 +- Alerts integration form UX cleanup. !55892 +- Sync single-file mode user preference when changed from the MR cog menu checkbox. !55931 +- Remove group member: add option to also remove direct user membership from subgroups and projects. !55980 (Jonas Wälter @wwwjon) +- Move to btn-danger for delete button in applications. !56088 (Yogi (@yo)) +- Apply new GitLab UI for badge in starrers page. !56091 (Yogi (@yo)) +- Move to btn-confirm from btn-primary in wiki empty state. !56192 (Yogi (@yo)) +- Move to btn-confirm in download directory dropdown. !56193 (Yogi (@yo)) +- Add btn-default class for Service Desk toggle in settings. !56195 (Yogi (@yo)) +- Move to confirm variant from success in pipeline_new directory. !56199 (Yogi (@yo)) +- Move to confirm varient from success in pipeline_editor directory. !56200 (Yogi (@yo)) +- Move from btn-success to btn-confirm in pipeline_schedules directory. !56201 (Yogi (@yo)) +- Move to confirm variant from success in feature_flags directory. !56202 (Yogi (@yo)) +- Move to confirm variant from success in alert_management directory. !56206 (Yogi (@yo)) +- Move from btn-success to btn-confirm in tracings directory. !56209 (Yogi (@yo)) +- Move from btn-success to btn-confirm in logs directory. !56211 (Yogi (@yo)) +- Move from btn-success to btn-confirm in environments directory. !56212 (Yogi (@yo)) +- Move from btn-success to btn-confirm in blob directory. !56213 (Yogi (@yo)) +- BulkImports: Track pipeline worker with BulkImports::Tracker#status. !56242 +- Update master to main inside monitor copy. !56264 +- Project Settings Operations headers Alerts/Error tracking/Jeager tracing/Jeager tracing expand/collapse on-click/on-tap. !56269 (Daniel Schömer) +- Project Settings Operations header Grafana authentication expand/collapse on-click/on-tap. !56270 (Daniel Schömer) +- Add support for commit_email to Users API. !56272 +- Project Settings Operations header Incidents expand/collapse on-click/on-tap. !56273 (Daniel Schömer) +- Project Settings Operations header Metrics dashboard expand/collapse on-click/on-tap. !56274 (Daniel Schömer) +- Clean up integration form titles and password fields. !56309 +- Move from btn-success to btn-confirm in branches directory. !56325 (Yogi (@yo)) +- Move from btn-success to btn-confirm in cleanup directory. !56329 (Yogi (@yo)) +- Move from btn-success to btn-confirm in default_branch directory. !56330 (Yogi (@yo)) +- Move from btn-success to btn-confirm in deploy_keys directory. !56331 (Yogi (@yo)) +- Move from btn-success to btn-confirm in forks directory. !56333 (Yogi (@yo)) +- Move from btn-success to btn-confirm in hooks directory. !56334 (Yogi (@yo)) +- Move from btn-success to btn-confirm in imports directory. !56336 (Yogi (@yo)) +- Allow setting the shard/replica separately for standalone indexes. !56344 +- Move from btn-success to btn-confirm in network directory. !56345 (Yogi (@yo)) +- Move usage of delayed_project_removal to namespace settings. !56397 +- Update buttons on issue page. !56425 +- Create new policies for read, destroy, and create tokens. !56464 +- Update Jira issues list to use new UI components. !56465 +- Move from btn-success to btn-confirm in protected_branches directory. !56477 (Yogi (@yo)) +- Move from btn-success to btn-confirm in protected_tags directory. !56478 (Yogi (@yo)) +- Move from btn-success to btn-confirm in runners directory. !56485 (Yogi (@yo)) +- Enable new RPC call to retrieve wiki files. !56491 +- Center the pipeline stages dropdown in the commit details page. !56505 +- Update mini pipeline appearance in commit page to match other mini pipelines in the application. !56510 +- Disable pipeline schedules when a user is blocked. !56513 +- Add Username to Email From Header in Notifications. !56588 +- WebIDE show fork button when cannot push code. !56608 +- Add empty state CTA in pipeline editor section for new root CI files. !56665 +- Support newlines for the chatops "run" command. !56668 +- Adds skipped state to duration cell for single stage manual pipelines. !56669 +- Support for --prefer-source option for Composer registry. !56693 +- Allow Email Replies to Notes to Create Discussions. !56711 +- Add id and short_sha GraphQL fields to jobType in the CI namespace. !56714 +- Remove the commit message from the package details UI. !56716 +- Assignee dropdown in issue page displays only participants by default. !56742 +- Render Kramdown format using Gitlab markup. !56750 +- Relax version validation on generic packages. !56755 +- Show popovers on hover and focus by default. !56778 +- Change icon size in the pipeline editor. !56780 +- Show password hint only if password_authentication_enabled_for_web? on new location logins. !56783 (Roger Meier) +- Add Vulnerabilities::FindingEvidence model. !56790 +- Update compare branches button to btn-confirm. !56791 +- Update buttons and spacing on commit page. !56793 +- Update secondary nav elements right margin to 8px. !56794 +- Add created_at to job webhooks. !56835 +- Rename pipelines setting to CI/CD and move out from under repository section. !56857 +- Change the way deprecation information is presented in GraphQL documentation. !56864 +- Validate null constraint for cluster token name. !56868 +- Move from btn-success to btn-confirm in projects/services directory. !56937 (Yogi (@yo)) +- Move from btn-success to btn-confirm in projects/settings directory. !56938 (Yogi (@yo)) +- Move from btn-success to btn-confirm in projects/snippets directory. !56939 (Yogi (@yo)) +- Move from btn-success to btn-confirm in projects/tags directory. !56940 (Yogi (@yo)) +- Move from btn-success to btn-confirm in projects directory. !56943 (Yogi (@yo)) +- Move from btn-success to btn-confirm in registrations directory. !56944 (Yogi (@yo)) +- Move from btn-success to btn-confirm in users directory. !56945 (Yogi (@yo)) +- Adjust gitlab_database_transaction_seconds histogram bucket. !56952 +- Add extra fields to the external pipeline validation payload. !56969 +- Change assignee dropdown invite to utilize invite modal. !57002 +- Enable DISTINCT optimization for ObjectHierarchy globally. !57052 +- Redirect to the pipeline editor when clicking on CI/CD quick links. !57085 +- Update learn gitlab template for new registrations. !57098 +- Add loading icon to create merge request button. !57105 +- Move Pipeline Editor repo link outside of feature flag conditional. !57144 +- Show the Contribution Analytics promotion page for users without permission. !57222 +- Show skipped duration state for all skipped pipelines. !57242 +- Add Runner ID as title in Runner details page. !57247 +- Remove feature flag usage_data_track_ci_templates_unique_projects. !57280 +- Deprecate but keep support for Klar up to version 3. A new analyzer based on Trivy will be used from version 4 onwards. !57281 +- Hydrate some of the variables in the Overview tab suggestion commit placeholder by switching the Diffs data source for it. !57419 +- Remove Slack attachment from new issues created via Slash commands. !57431 +- Make VALIDATION_REQUEST_TIMEOUT configurable. !57521 +- Remove programmatic access to registration tokens. !57524 +- Update Jira subscriptions list to use Vue. !57561 +- Update runner badges look and feel in admin runners table. !57566 +- Rename jobs to promote a smoother transition between Klar and Trivy based scanners. !57593 +- Do not trim input for sample & test payload on alerts integration form. !57617 +- Allow a Global ID to be used when filtering issue by iterationId in GraphQL. !57620 +- Add tags field to jobType in the CI namespace. !57631 +- Expose createdAt and updatedAt fields for Board in the GraphQL API. !57645 +- Update validation trigger flow on the alerts integration form. !57697 +- Remove groupId and projectId arguments to Runner install instructions. !57720 +- GraphQL: expose milestone iid. !57732 +- Move commit neighbor buttons to sticky MR controls. !57743 +- Update title on revoke member invite modal and hide unneeded related issues and merge requests checkbox. !57755 +- Deprecate btn-warning on admin area delete user modal. !57761 +- Remove deprecated button classes from issue detail view. !57763 +- Utilize btn-tertiary for copy project id on project overview. !57766 +- Remove top margin for print layout. !57824 +- Fail batch-aborted pipelines with reason. !57838 +- Replace deprecated Close Milestone button on list view. !57871 +- Replace deprecated button on new epic creation form. !57874 +- Hide pipeline filtered search when no pipeline exists. !57881 +- Add gl-badge for badges in group members page. !57933 (Yogi (@yo)) +- Add gl-badge for badges in project members page. !57934 (Yogi (@yo)) +- Display error message when dashboard activity fetch fails. !57935 +- Add gl-badge for badges in dashboard nav. !57936 (Yogi (@yo)) +- Update GIicon size in geo_node_header.vue. !57952 (singhanshuman) +- Move to confirm variant for buttons in vulnerabilities page. !57961 (Yogi (@yo)) +- Add gl-badge for badges in MR page nav. !57969 (Yogi (@yo)) +- Align project stars and date to center of project in groups page. !57972 (Yogi (@yo)) +- Add btn-icon class for GPG key delete button. !57974 (Yogi (@yo)) +- Add btn-default for mirror update button. !57978 (Yogi (@yo)) +- Update ruby-magic-static to v0.3.5. !57984 +- Reduce button size for revoke button in PAT page. !57989 (Yogi (@yo)) +- Apply gl-form-input for fields in GPG keys page. !58002 (Yogi (@yo)) +- Apply gl-form-input for fields in new schedule page. !58015 (Yogi (@yo)) +- Move to btn-confirm from btn-success in licenses directory. !58024 (Yogi (@yo)) +- Move to btn-confirm from btn-success in geo directory. !58031 (Yogi (@yo)) +- Move to btn-confirm from btn-success in push_rules directory. !58033 (Yogi (@yo)) +- Move to btn-confirm from btn-success in devise directory. !58035 (Yogi (@yo)) +- Add btn-default class for toggle button in admin templates. !58041 (Yogi (@yo)) +- Move to btn-confirm from btn-success in ee project settings. !58047 (Yogi (@yo)) +- Improve UI of Runner Installation instructions: add a loading indicator, use checkmark on selected options, reduce height of modal. !58055 +- Update New Issue form description copy from 'wite a comment' to 'wite a description'. !58068 +- BulkImports: Import milestone iid. !58107 +- Replace deprecated buttons on epic detail view. !58152 +- Replace deprecated buttons on board view. !58153 +- Small text updates on the SAST Config UI page. !58188 +- Update GlIcon size in environments.vue. !58208 (Md. Pial Ahamed (@root.pial)) +- Link to revision in version on admin dashboard. !58225 (Yogi (@yo)) +- Rename Gitlab to GitLab in admin dashboard. !58228 (Yogi (@yo)) +- Remove underline in apply for credit button in k8s page alert. !58232 (Yogi (@yo)) +- Add btn-default class for file picker button. !58238 (Yogi (@yo)) +- Rename Submit issue to Create issue in boards and docs. !58243 (Yogi (@yo)) +- Update label container background and border colour from dark grey to use the same light grey as the board's containers. !58279 +- UI improvement of Admin Dashboard top page. !58373 (Takuya Noguchi) +- Add warning icon beside in progress text if pipeline is stuck. !58427 +- Set workhorse_extract_filename_base feature flag to default. !58504 +- Update resolving alert system notes to use term Recovery Alert. !58513 +- Update default spinner color to pajamas. !58517 +- Update ruby-magic to v0.3.2. !58537 +- Fix HAML in _promote_issue_weights.html.haml. !58546 (Yogi (@yo)) +- Update popover placement and cursor on warning icon in PB. !58552 (Yogi (@yo)) +- Remove vertical-align-middle from user location and work in profile. !58554 (Yogi (@yo)) +- Enable chronological sort order for other items in the performance bar. !58572 +- Use GlTable design system component for pipelines table. !58581 +- Update MobSF to version 3.4.0 in the SAST template. !58594 +- Add count of unique users to receive on-call notification to usage ping. !58606 +- Add global callout for Service template deprecation. !58613 +- Remove cached_api_merge_request_version feature flag. !58670 +- Bump minimum git version to v2.31.0. !58737 +- Add a chaos endpoint that signals QUIT. !58755 +- Improve runners status icon usability and accessibility in the project settings view. !58781 +- Make ref parameter optional in get raw file api. !58787 +- Centralize shared state in Authoring section. !58790 +- Update default branch in divergence graph. !58871 +- Update Pipeline Graph Visualization. !58889 +- Move initial pipeline processing to Sidekiq. !58901 +- Display runner token and description consistently in the job sidebar and admin list. !58904 +- Update ruby-magic to v0.4.0. !58947 +- Update search and sort from the branches page. !58951 +- Return email confirmation time from email entity. !58957 +- Update runner type indicators in view/edit pages. !59005 +- Default enable cascading settings feature flag. !59026 +- Fix gl-emoji in abuse report page. !59078 (Yogi (@yo)) +- Adds new clusters_integrations_prometheus table and model for Prometheus Cluster Integration. !59091 +- Include project and build ID in Pages tmp directory. !59106 +- Deactivate prune webhook logs worker. !59120 +- Reduce pipeline tooltip delay to 0. !59155 +- Remove gldropdown_branches feature flag. !59179 +- Clarify on welcome page that we do not share any data. !59183 +- Schedule artifact expiry backfill again. !59270 +- Create prometheus service asynchronously by default when creating a project. !59273 +- Show archive notice on empty project. !59286 +- Enable in-product emails only for free instances. !59290 +- Log all API uploads that exceed max attachment size. !59292 +- Pages: Add feature flag to disable deployment to legacy storage. !59298 +- Hide What's New for unauthenticated users. !59330 +- Add queue label to metrics dispatched by background transaction. !59344 +- Update Ruby from 2.5 to 2.7 in Dockerfile templates. !59345 (Takuya Noguchi) +- Update profile SSH key labels to refer to expired keys as "Expired". !59381 +- Display project settings runners identifiers consistently. !59383 +- Migrate Start Review button on MRs to use confirm variant. !59523 +- Update auto-build-image to v0.6.0, updating the included docker to 20.10.6 and pack to 0.18.0. !59525 +- Apply new GitLab UI for buttons in create tag page. (Yogi (@yo)) + +### Performance (107 changes, 1 of them is from the community) + +- Cache namespace traversal path. !52854 +- Use empty-query by default to check database connection. !54366 (Leandro Gomes @leandrogs) +- API JSON caching for tags endpoint. !54975 +- Cache open merge requests count in group sidebar. !55971 +- Add index on ci_stages to speed up batch pipeline cancellation. !56126 +- Backfill traversal_ids for gitlab-org staging. !56293 +- Linear version of Namespace#self_and_descendants. !56296 +- Add database index for cancelable ci_pipelines on user and id. !56314 +- Improve the performance of Merge Request Analytics table. !56380 +- Move fetching projects and groups on todos page to API call. !56507 +- Fix Workhorse acceleration for encoded project IDs in API. !56731 +- Prevent sticking to DB primary when experiments are tracked. !56852 +- Move link icon to CSS. !56980 +- Drop unused preload from PipelineSerializer. !56988 +- Speed up destroying of group Todos when user leaves group. !56995 +- Optimise query for Deployment#previous_environment_deployment in LinkMergeRequestWorker. !57039 +- Optimize database performance of loading assigned issue count on header bar. !57073 +- Backfill traversal_ids for gitlab-org .com. !57075 +- Check access only for requesting user when checking if subscribed. !57201 +- Add gin index for namespaces.traversal_ids. !57207 +- Accelerate uploads via API with Workhorse. !57250 +- Add additional index to merge_requests table for project/status/created_at. !57267 +- Preload group parent to fix N+1 queries for project search. !57277 +- Preload additional data to fix N+1 queries for merge request search. !57284 +- Remove N+1 for API commits/:sha/merge_requests. !57290 +- Remove N+1 for API :id/deploy_keys. !57295 +- Reduce query count for ExpirePipelineCacheWorker. !57304 +- Remove N + 1 for milestones issues. !57349 +- Add partial index to improve mirrors update. !57353 +- Apply optimizations to JobsController#show.json. !57367 +- Fix N+1 issue when loading merge request comments. !57374 +- Perform more merge request creation tasks asynchronously to improve response times. !57453 +- Fix N+1 for searching notes (comments) scope. !57460 +- Resolve N + 1 for JIRA pulls. !57482 +- Make `ci_runner_builds_queue_on_replicas` default. !57484 +- Reduce queries on group labels controller. !57517 +- Reduce number of queries in mergeRequestSetAssignees GraphQL mutation. !57523 +- Reduce N+1 queries in creating todos after user mentions in a note. !57525 +- Optimize Deploy Keys Presenter. !57551 +- Add index to improve project deployments endpoint performance. !57554 +- Resolve N + 1 for deployments API. !57558 +- Cache merge request diff version API. !57568 +- Reduce SQL requests number for issue links. !57602 +- Avoid N+1 query when updating todo count cache. !57622 +- Resolve N + 1 for commits notes API. !57641 +- Resolve more N+1 issues in Jira pulls API. !57658 +- Reduce number of SQL queries in Profiles::SlacksController#edit. !57674 +- Preload all user callouts in a single request. !57679 +- Add TargetProject And SourceBranch Index To MergeRequest. !57691 +- Optimize group level Maven package finder query. !57692 +- Remove ci_lower_frequency_trace_update feature flag. !57713 +- Cache MRs count on milestone page. !57714 +- Fix N+1 for searching milestone scope. !57715 +- Avoid N+1 queries in breadcrumbs. !57725 +- Move project hooks routes under /-/ scope. !57734 +- Add composite index to support epic filtering by award emoji. !57759 +- Reduce query count for popular worker ExpireJobCacheWorker. !57773 +- Remove feature flag optimize_issue_filter_assigned_to_self. !57775 +- Ensure a project iid is set before transitioning on pipeline error. !57783 +- Fix N+1 in projects REST endpoint with forked projects. !57798 +- Bulk-abort user pipelines on block. !57801 +- Move pipelines calculation from widget.json to cached_widget.json. !57822 +- Delete all issuable todos asynchronously when issuable is destroyed. !57830 +- Reduce queries on projects labels controller. !57864 +- Optimize database query for last deployment. !57979 +- Fix N + 1 for MilestonesController#merge_requests. !57980 +- Minor performance improvement for ref finder. !58099 +- Reduce milestone issue list display limit to 500. !58168 +- Partial index optimization for namespaces id. !58220 +- Add caching to variables calculation of builds. !58286 +- Reduce SQL requests on building artifacts. !58339 +- Drop unused mirror_data index. !58349 +- Add index on file_store for pages_deployments table. !58355 +- Eliminage N+1 database queries on the user notifications page. !58397 +- Create finder for searching branch names via redis. !58439 +- Preload associations in Ci::Pipeline#cancel_running. !58484 +- Add new MergeRequests::SyncCodeOwnerApprovalRulesWorker. !58512 +- Create the pipelines asynchronously when refreshing merge requests. !58542 +- Optimize searching cherry-picked merge requests for linking deployments. !58568 +- Use object quarantine directory to enumerate new LFS pointers. !58634 +- Resolve merge request todos asynchronously on update. !58647 +- Enable cached avatar lookups by email. !58659 +- Resolve group_member policy n+1. !58668 +- Move CI related paths to cached MR widget. !58711 +- Fix N+1 in REST projects and service desk. !58747 +- Optimize environment serializer to reduce N+1 problems. !58748 +- Handle assignee changes side effects asynchronously. !58783 +- Remove paths from BuildArtifactEntity. !58818 +- Use fast path helpers in BuildDetailsEntity. !58824 +- Add framework for using specialized services to improve performance of MergeRequests::UpdateService. !58836 +- Fix N+1 for searching commits. !58867 +- Fix N+1 queries to find or initialize services. !58879 +- Adjust indices to improve query performance for notification_settings. !58895 +- Fix N+1 queries for issues search. !58915 +- Optimize query for cherry picked merge requests. !58967 +- Cache issues count in sidebar at group level. !59004 +- Improve performance by moving TODO creation out of the jobs/request path. !59022 +- Eliminate N+1 database queries on the user notifications page within the project notifications section. !59029 +- Add migration to index members on user_id, source_id, and source_type. !59051 +- Reduce the number of SQL queries executed on Maven file API endpoints. !59136 +- Add user index on spam logs. !59151 +- Limit number of GraphQL requests tracked in performance bar to 10. !59158 +- Add index for the path column on the packages_maven_metadata table. !59241 +- Reduce timeouts on tab counts for searches to 5s. !59435 +- Add partial index on members to optimize highest access level query. !59455 +- Optimize issuable updates. !59468 +- Ensure the project iid is set before dropping pipeline. !59626 + +### Added (108 changes, 11 of them are from the community) + +- Support adding and removing assignees w/ push opts. !25904 +- Add Go Packages as a cache for the Go proxy. !34558 (Ethan Reesor (@firelizzard)) +- Allow admin users to define admin notes on groups. !47825 +- Resolve nested variable values sent to the runner. !48627 +- Hide "Resolve conflicts" button when source branch is protected. !51121 (Marcin Majkowski @marcinmajkowski) +- Allow Add Comment To Review. !51718 (Lee Tickett @leetickett) +- Add click to copy button over project ID. !53224 (Virgile MATHIEU @vmathieu) +- Convert admin mode feature flag to system application setting. !53610 (Diego Louzán) +- Send in-product marketing emails to guide users setting up their groups. !53715 +- Automatically try to migrate gitlab pages to zip storage. !54578 +- Add user-merge request interaction type. !54588 +- Save usage_data_id from versions app in raw_usage_data. !54738 +- Create UserPreferences API. !55033 +- Support group applications. !55152 (Jonas Wälter @wwwjon, Bastian Blank) +- Ability to add Prometheus as cluster integration. !55244 +- Add JavaScript, TypeScript, and React support to the semgrep analyzer. !55257 +- Added local_store to Pages settings in gitlab.yml file. !55470 +- Add additional fields to dast_site_profiles database table. !55579 +- Cascade delayed project removal setting lookup to parent namespace. !55678 +- Support automatic transitions of Jira issues. !55773 +- Add blocked issues detail popover for boards cards. !55821 +- Allow users to mark pages projects as not deployed during migration to zip storage. !55862 +- Add dast_profile_secret_variables table. !56067 +- Support daily DORA metrics API. !56080 +- Track agent token last_used. !56143 +- Add CI_COMMIT_AUTHOR predefined variable. !56144 (Craig Andrews @candrews) +- Linking to a single line number in Web IDE. !56159 +- Migrate group badges when using Bulk Import. !56357 +- Add Ability to Edit Freeze Periods. !56407 +- Add GraphQL mutation to delete an existing release asset link. !56417 +- Personal access token revoke for managed accounts (feature flag removed). !56427 +- Migration: add trial extension type to gitlab_subscription. !56460 +- Geo: Prepare snippet_repositories and snippet_repository_registry tables for adding verification. !56596 +- User Availability - Allow users to schedule un-setting of their status values. !56649 +- Add missing icon for files with .c++ extension. !56650 (Peter Kovář @peter.kovar) +- Add in-page search for all settings pages. !56659 +- Support include_ancestors when querying group milestones via GraphQL. !56667 +- Add recaptcha to top-level group creation behind feature flag. !56707 +- Configure issue and merge request description templates at group level and rolldown description templates in the group hierarchy. !56737 +- Enabled phabricator importer by default. !56765 +- Generalize alert details status. !56800 +- Create database table dast_profiles_pipelines. !56821 +- Allow selecting a CI template by providing the template name as a URL param gitlab_ci_yml. !56861 +- Group SAML - Check SSO status on Git activity. !56867 +- Send email notification on SSH key expiration. !56888 +- Support custom tag formats for changelogs. !56889 +- Delete records from security_findings table with missing UUID values. !56975 +- Link squashed commits using the changelog API. !56985 +- Allow users to enable force push to protected branches. !57053 +- Add rake tasks for Pages deployment migration. !57120 +- Code suggestions correctly add based on multi-line comments. !57125 +- BulkImports: Add `BulkImports::PipelineWorker` to process each BulkImport pipeline on its own background job. !57153 +- Connect Registries searches to URL. !57251 +- Sort code quality degradations in MR Widget comparison reports. !57258 +- Add unified metrics definition YAML file API endpoint. !57270 +- Clarify what coverage means on the merge request pipeline section. !57275 +- Improve payload format of DORA metrics API. !57314 +- Expose timelogs against issues and merge requests in GraphQL. !57321 (Lee Tickett @leetickett) +- Populate missing dismissal information for vulnerabilities. !57347 +- Clarify the impact of selecting incidents in the new issue form. !57373 +- Add jobs field to the project type. !57376 +- When removing a user, warn Admin user is part of an on-call schedule. !57397 +- Exposes schedulingType on CiJobType and adds usesNeeds to PipelineType. !57398 +- '/projects/:id/repository/compare' supports comparing branches/commits on different projects. !57418 (Exchizz (@Exchizz)) +- Add geo database changes for pipeline artifact replication. !57506 +- Add more fields to the job type. !57530 +- Capture test report summary widget views via usage ping. !57543 +- Allow filtering GraphQL alertManagementIntegrations and alertManagementHttpIntegrations by ID. !57590 +- Add search functionality to Jira Connect App namespaces. !57669 +- Add Conan GraphQL type to package. !57719 +- Log message when upload via API exceeds limit. !57774 +- Migration: Add cloud column to licenses. !57781 +- Re-add swap revisions feature (legacy). !57802 +- Add support for SMTP connection pooling when sending emails. !57805 +- Add a migration to insert trail plans within SAAS for Ultimate and Premium plans. !57814 +- Add link to test case file in the test report for merge requests. !57911 +- Upgrade GitLab Pages to v1.37.0. !57946 +- Add negative filters for merge requests API. !58021 +- Add setting to change default target project for merge requests from forks. !58093 +- Support negated filtering of issues by iids, label_name, milestone_title, assignee_usernames and assignee_id in GraphQL. !58154 +- User notification when SSH key is set to expire soon. !58171 +- Allow user to filter epics by their reaction emoji via GraphQL. !58211 +- Add config support for using Microsoft Graph with MailRoom. !58250 +- Let users create groups and projects at signup and onboard them through issues on gitlab.com. !58301 +- Reschedule background migration to copy projects.container_registry_enabled to project_features.container_registry_access_level. !58360 +- Prettify JSON of sample alert payload. !58433 +- Add spent quick action alias. !58539 (Lee Tickett @leetickett) +- Add GraphQL endpoint for test report summary for pipelines. !58596 +- Show pipeline finished timestamp on MR widget. !58618 +- Add Hello World CI Template. !58649 +- Make blobs directly accessible through the graphql repository. !58677 +- Add target_type column to dast_site_profiles database table. !58723 +- Add GraphQL endpoint for a specific test suite in pipelines. !58924 +- Add blob filename to attachment content disposition. !58977 +- Rollout product_intelligence_metrics_names_suggestions feature flag. !58995 +- Support filtering by assignee wildcard in GraphQL board list issues query. !58996 +- Remove pages_serve_from_migrated_zip feature flag. !59002 +- Enables multiple_cache_per_job feature flag by default. !59016 +- Add CODECLIMATE_PREFIX variable to code quality template. !59041 +- Add instance_url column to the jira_connect_installations table. !59148 +- Remove codequality_backend_comparison feature flag. !59320 +- Allow cherry-picking to a fork's parent. !59399 +- Add kotlin support to spotbugs-sast job. !59431 +- Upgrade GitLab Pages to 1.38.0. !59464 +- Add documentation about Pages deployment migration. !59475 +- Re-enable serving pages with zip file protocol. !59486 +- Enable pipeline_status_for_pipeline_editor by default. !59495 +- Extract creation of prometheus service from Projects::CreateService. + +### Other (160 changes, 74 of them are from the community) + +- Resolve Improve text for error No issue found for given params in UI. !45064 +- Update gon gem to 6.4.0. !51210 +- Initialize conversion of events.id to bigint, and add execute_batched_migrations_on_schedule feature flag to control scheduled background migrations. !51332 +- Apply new GitLab UI buttons in the webhooks list. !51977 (Yogi (@yo)) +- Fix alignment of folder-caret and actions button in the subgroup list. !52400 (Yogi (@yo)) +- Remove JSON endpoint for project container index. !52407 (Takuya Noguchi) +- Update HIPAA logo for project templates. !53270 +- Apply GitLab UI button styles to buttons in app/views/shared directory. !53474 (Yogi (@yo)) +- Drop non-partitioned audit_events_archived table. !53880 +- Add message for repository backup skip. !54285 +- Updated MR Approvals to specify settings section. !54985 +- Remove markdown from comment search result. !55255 +- Deduplicate issue_metrics table. !55285 +- Document how to use custom omniauth button icon. !55388 (Diego Louzán) +- Create Cop to enforce using policies framework for administrators. !55693 (Diego Louzán) +- Remove tabindex on skip link that could negatively impact keyboard focus management and order. !55756 +- Mark merge request as preparing on create. !56086 +- Update Search and Apply buttons to confirm variant to align with Pajamas design system. !56122 +- Decrease spacing between controls on the Commit page header. !56129 +- Create new unit test tables. !56137 +- Convert Commit dropdown to Vue. !56142 +- Enable the instance variables UI. !56255 +- Set the scope in search context from group issue and MR pages. !56383 +- Remove On-call Edit feature flag. !56445 +- Fix cop offenses for Style/HashTransformation in app directory. !56579 (Karthik Sivadas @karthik.sivadas) +- Fix cop offenses for Style/HashTransformation in ee directory. !56581 (Karthik Sivadas @karthik.sivadas) +- Fix cop offenses for Style/HashTransformation in lib directory. !56583 (Karthik Sivadas @karthik.sivadas) +- Fix cop offenses for Style/HashTransformation in spec directory. !56586 (Karthik Sivadas @karthik.sivadas) +- Track epic note created via usage ping. !56609 +- Aggregate code review metrics. !56734 +- Update android template to default branch. !56738 +- Stop using json-schema gem for production. !56745 +- Refactor docs and UI for Jaeger tracing. !56819 +- Add support for the MATERIALIZED keyword when using WITH (CTE) queries in PostgreSQL 12. !56976 +- Externalize project deploy keys (edit) strings. !57015 (Jonston Chan @JonstonChan) +- Migrates the expand button in MR reports to GitLab UI. !57021 +- Update GitLab Runner Helm Chart to 0.27.0. !57048 +- Remove unnecessary use of freeze. !57056 (Lee Tickett @leetickett) +- Remove unnecessary use of freeze. !57057 (Lee Tickett @leetickett) +- Remove unnecessary use of freeze. !57058 (Lee Tickett @leetickett) +- Remove unnecessary use of freeze. !57059 (Lee Tickett @leetickett) +- Remove unnecessary use of freeze. !57060 (Lee Tickett @leetickett) +- Remove the FF skip_dag_manual_and_delayed_jobs. !57086 +- Remove the FF ci_trigger_payload_into_pipeline. !57087 +- Updated documented K8s snippet to undeprecated API. !57100 (Raimund Hook (@stingrayza)) +- Validate NOT NULL constraint on gitlab_subscriptions namespace_id. !57113 +- Update button variants on the project boards controller to better align with the Pajamas Design System. !57129 +- Remove the recursive_namespace_lookup_as_inner_join feature flag. !57131 +- Only display focus mode button at md+ breakpoint and make it the tertiary style. !57139 +- Remove feature flag for customize homepage banner. !57147 +- Update issuable submit content order, button variants, and button alignment. !57172 +- Send invited users to sign up instead of sign in when possible. !57240 +- Updated UI text to match style guidelines. !57276 +- Enable RedundantFreeze Cop and Remove Remaining Offenses. !57288 (Lee Tickett @leetickett) +- Review and revise Integrations/Asana UI text. !57362 +- Add enqueueing of Onboarding Progress to the Invite Service. !57372 +- Validate foreign key on ServiceHooks. !57483 +- Removed migrate_delayed_project_removal feature flag. !57541 +- Migration to cleanup after partitioned web_hook_logs backfill. !57580 +- Update BulkImport default page size to 500 in order to process larger page of data. !57594 +- Refactor member/invitation services to share common code. !57618 +- Fix triggers page externalization. !57637 (Jonston Chan @JonstonChan) +- Add foreign key from web_hooks to groups. !57735 +- Remove batch_suggestions feature flag. !57745 +- Remove remove_resolve_note feature flag. !57757 +- Remove deprecated info button from issue list view. !57762 +- Track the different overflows for diff collections. !57790 +- Update Jira plugin UI copy. !57793 (Russell Dickenson rdickenson@gitlab.com) +- Rename table/model vulnerability_finding_fingerprints to *_signatures. !57840 +- Move to btn-confirm from btn-success in pipelines quotas page. !57861 (Yogi (@yo)) +- Remove records without group from webhooks table. !57863 +- Updated UI text to match style guidelines. !57884 +- Add a template for using Indeni Cloudrail in GitLab. !57919 +- Externalise-strings in _ip_limits.html.haml. !58003 (nuwe1) +- Externalise strings in application_settings/_pages.html.haml. !58011 (nuwe1) +- Externalize strings in _performance.html.haml. !58016 (nuwe1) +- Externalise strings in application_settings/_performance_bar.html.haml. !58018 (nuwe1) +- Externalise strings in /application_settings/_realtime.html.haml. !58039 (nuwe1) +- Externalise strings in _registry.html.haml. !58051 (nuwe1) +- Externalise strings in /application_settings/_repository_check.html.haml. !58058 (nuwe1) +- Update Design Management added design icon to be slightly smaller which conforms to the Pajamas design guide. !58086 (Andreas Resch @reschandreas) +- Externalise strings in admin/users/_head.html.haml. !58101 (nuwe1) +- Updating success button to confirm variant and reordering buttons per Pajamas Design System guidelines for buttons. !58112 +- Externalize strings in /abuse_reports/index.html.haml. !58132 (nuwe1) +- Use Gitlab::AppLogger in settings. !58134 (Huzaifa Iftikhar @huzaifaiftikhar) +- Fill in all placeholder values in the apply suggestion commit message placeholder text. !58136 +- Externalize strings in broadcast_messages/index.html.haml. !58146 (nuwe1) +- Externalize strings in deploy_keys/new.html.haml. !58148 (nuwe1) +- Externalize strings in hook_logs/_index.html.haml. !58155 (nuwe1) +- Externalize strings in projects/_projects.html.haml. !58158 (nuwe1) +- Externalize strings in projects/index.html.haml. !58160 (nuwe1) +- Externalize strings in services/index.html.haml. !58167 (nuwe1) +- Externalise strings in runners/_runner.html.haml. !58168 (nuwe1) +- Externalise strings in spam_logs/_spam_log.html.haml. !58169 (nuwe1) +- Fix EmptyLineAfterFinalLetItBe Rubocop offenses for projects controller. !58176 (Huzaifa Iftikhar @huzaifaiftikhar) +- Externalize strings in _confirmation_instructions_account.html.haml. !58214 (nuwe1) +- Externalize strings in _confirmation_instructions_account.text.erb. !58215 (nuwe1) +- Externalize strings in _confirmation_instructions_secondary.text.erb. !58218 (nuwe1) +- Externalise strings in password_change files. !58219 (nuwe1) +- Externalize strings in unlock_instructions.html.haml. !58227 (nuwe1) +- Externalize strings in passwords/edit.html.haml. !58233 (nuwe1) +- Externalize strings in passwords/new.html.haml. !58236 (nuwe1) +- Externalize strings in sessions/_new_ldap.html.haml. !58267 (nuwe1) +- Externalize strings in registrations/edit.html.erb. !58268 (nuwe1) +- Externalize strings in sessions/_new_crowd.html.haml. !58269 (nuwe1) +- Externalise strings in sessions/new.html.haml. !58274 (nuwe1) +- Externalize strings in sessions/two_factor.html.haml. !58275 (nuwe1) +- Externalize strings in shared/_omniauth_box.html.haml. !58281 (nuwe1) +- Externalize strings in shared/_sign_in_link.html.haml. !58283 (nuwe1) +- Externalise strings in shared/_tabs_ldap.html.haml. !58285 (nuwe1) +- Externalize strings in unlocks/new.html.haml. !58289 (nuwe1) +- Externalise strings in labels/edit.html.haml. !58294 (nuwe1) +- Externalize strings in milestones/_form.html.haml. !58298 (nuwe1) +- Externalize strings in milestones/edit.html.haml. !58306 (nuwe1) +- Externalise strings in runners/edit.html.haml. !58315 (nuwe1) +- Externalise strings in groups/_activities.html.haml. !58324 (nuwe1) +- Externalize strings in groups/_create_chat_team.html.haml. !58328 (nuwe1) +- Externalise strings in groups/_group_admin_settings.html.haml. !58331 (nuwe1) +- Externalises strings in groups/activity.html.haml. !58332 (nuwe1) +- Update pipeline email service UI text. !58377 +- Update pot file. !58392 +- Updated UI text for Assembla integration to match style guidelines. !58400 +- Externalize strings in instance_configuration/_gitlab_ci.html.haml. !58435 (nuwe1) +- Externalize strings in instance_configuration/_gitlab_pages.html.haml. !58437 (nuwe1) +- Externalize strings in help/index.html.haml. !58441 (nuwe1) +- Externalize strings in instance_configuration.html.haml. !58443 (nuwe1) +- Externalize strings in chat_names/_chat_name.html.haml. !58444 (nuwe1) +- Externalizes strings in viewers/_empty.html.haml. !58451 (nuwe1) +- Externalize strings in viewers/_loading_auxiliary.html.haml. !58454 (nuwe1) +- Review and revise Pages settings-related UI text. !58479 +- Updated Alert integration UI text to match style guidelines. !58507 +- If creating a new issue fails in boards, remove the issue card from a list. !58558 +- Enable Layout/SpaceAfterColon cop for HAML. !58564 (Takuya Noguchi) +- Update mattermost integration UI text. !58570 +- Update Emails on push UI Text to match style guidelines. !58597 +- Updated outdated UI text and docs. !58600 +- Update UI text of Jenkins integration. !58623 +- Track total_tuple_count for batched migrations. !58675 +- Update Project Management metrics definitions. !58710 +- Add correlation id in X-Request-ID for external pipeline validation. !58741 +- Update UI text from timing to Duration. !58838 +- Update Discord integration UI text. !58842 +- Update UI text for slack notifications integration. !58845 +- Review and revise Redmine Integration UI text. !58899 +- Bump devise-two-factor version. !58929 +- Update metric definition under verify testing group. !59028 +- Remove issue_perform_after_creation_tasks_async feature flag. !59042 +- Obtain pipeline validation service token from config not ENV. !59101 +- Bump rspec-rails to 4.1.2. !59130 +- Add index services on project and type where inherit is null. !59168 +- Replace deprecated skeleton loader in the user popover with slightly darker SVG based skelton loader. !59180 +- Bump rspec-rails to 5.0.1. !59194 +- Update drone integration UI text. !59231 +- Add index on (created_at, web_hook_id) to the partitioned web_hook_logs. !59261 +- Add index on web_hook_id to partitioned web_hook_logs. !59266 +- Add a foreign key from the partitioned web_hook_logs to web_hooks. !59282 +- Bump minimum required Go version for workhorse to 1.15. !59347 +- Update UI text for TeamCity integration. !59493 +- Remove redundant index from epics. !59494 +- Externalize strings in labels/new.html.haml. (nuwe1) + + ## 13.10.3 (2021-04-13) ### Security (3 changes) @@ -583,6 +1399,43 @@ entry. - Convert mattermost alert to pajamas. !56556 +## 13.9.6 (2021-04-13) + +### Security (2 changes) + +- Clean only legitimate JPG and TIFF files. +- Update ruby-saml and rexml gems. + + +## 13.9.5 (2021-03-31) + +### Security (6 changes) + +- Leave pool repository on fork unlinking. +- Fixed XSS in merge requests sidebar. +- Fix arbitrary read/write in AsciiDoctor and Kroki gems. +- Prevent infinite loop when checking if collaboration is allowed. +- Disable arbitrary URI and file reads in JSON validator. +- Require POST request to trigger system hooks. + +### Removed (1 change) + +- Make HipChat project service do nothing. !57434 + +### Other (3 changes) + +- Remove direct mimemagic dependency. !57387 +- Refactor MimeMagic calls to new MimeType class. !57421 +- Switch to using a fake mimemagic gem. !57443 + + +## 13.9.4 (2021-03-17) + +### Security (1 change) + +- Patch Kramdown syntax highlighter gem. + + ## 13.9.3 (2021-03-08) ### Fixed (4 changes) @@ -1191,6 +2044,42 @@ entry. - Apply new GitLab UI for buttons in pipeline schedules. +## 13.8.8 (2021-04-13) + +### Security (2 changes) + +- Clean only legitimate JPG and TIFF files. +- Update ruby-saml and rexml gems. + + +## 13.8.7 (2021-03-31) + +### Security (5 changes) + +- Fixed XSS in merge requests sidebar. +- Leave pool repository on fork unlinking. +- Fix arbitrary read/write in AsciiDoctor and Kroki gems. +- Prevent infinite loop when checking if collaboration is allowed. +- Require POST request to trigger system hooks. + +### Removed (1 change) + +- Make HipChat project service do nothing. !57434 + +### Other (3 changes) + +- Remove direct mimemagic dependency. !57387 +- Refactor MimeMagic calls to new MimeType class. !57421 +- Switch to using a fake mimemagic gem. !57443 + + +## 13.8.6 (2021-03-17) + +### Security (1 change) + +- Patch Kramdown syntax highlighter gem. + + ## 13.8.5 (2021-03-04) ### Security (6 changes) @@ -1603,6 +2492,13 @@ entry. - Add verbiage + link sast to show it's in core. !51935 +## 13.7.9 (2021-03-17) + +### Security (1 change) + +- Patch Kramdown syntax highlighter gem. + + ## 13.7.8 (2021-03-04) ### Security (5 changes) diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 402deed307..07ae670e11 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -13.10.4 \ No newline at end of file +13.11.2 \ No newline at end of file diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index 8ba26053a6..f35ba50998 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -13.9.1 +13.11.1 diff --git a/GITLAB_PAGES_VERSION b/GITLAB_PAGES_VERSION index 39fc130ef8..ebeef2f2d6 100644 --- a/GITLAB_PAGES_VERSION +++ b/GITLAB_PAGES_VERSION @@ -1 +1 @@ -1.36.0 +1.38.0 diff --git a/Gemfile b/Gemfile index ab8e7cc3b9..876bcfaabf 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' -gem 'rails', '~> 6.0.3.1' +gem 'rails', '~> 6.0.3.6' gem 'bootsnap', '~> 1.4.6' @@ -61,7 +61,7 @@ gem 'akismet', '~> 3.0' gem 'invisible_captcha', '~> 1.1.0' # Two-factor authentication -gem 'devise-two-factor', '~> 3.1.0' +gem 'devise-two-factor', '~> 4.0.0' gem 'rqrcode-rails3', '~> 0.1.7' gem 'attr_encrypted', '~> 3.1.0' gem 'u2f', '~> 0.2.1' @@ -110,7 +110,7 @@ gem 'hashie-forbidden_attributes' gem 'kaminari', '~> 1.0' # HAML -gem 'hamlit', '~> 2.14.4' +gem 'hamlit', '~> 2.15.0' # Files attachments gem 'carrierwave', '~> 1.3' @@ -152,7 +152,7 @@ gem 'deckar01-task_list', '2.3.1' gem 'gitlab-markup', '~> 1.7.1' gem 'github-markup', '~> 1.7.0', require: 'github/markup' gem 'commonmarker', '~> 0.21' -gem 'kramdown', '~> 2.3.0' +gem 'kramdown', '~> 2.3.1' gem 'RedCloth', '~> 4.3.2' gem 'rdoc', '~> 6.1.2' gem 'org-ruby', '~> 0.9.12' @@ -200,7 +200,7 @@ gem 'acts-as-taggable-on', '~> 7.0' gem 'sidekiq', '~> 5.2.7' gem 'sidekiq-cron', '~> 1.0' gem 'redis-namespace', '~> 1.7.0' -gem 'gitlab-sidekiq-fetcher', '0.5.5', require: 'sidekiq-reliable-fetch' +gem 'gitlab-sidekiq-fetcher', '0.5.6', require: 'sidekiq-reliable-fetch' # Cron Parser gem 'fugit', '~> 1.2.1' @@ -276,10 +276,7 @@ gem 'licensee', '~> 9.14.1' gem 'charlock_holmes', '~> 0.7.7' # Detect mime content type from content -gem 'ruby-magic-static', '~> 0.3.4' - -# Fake version of the gem to trick bundler -gem 'mimemagic', '0.3.7', path: 'vendor/shims/mimemagic', require: false +gem 'ruby-magic', '~> 0.4' # Faster blank gem 'fast_blank' @@ -296,11 +293,11 @@ gem 'terser', '1.0.2' gem 'addressable', '~> 2.7' gem 'gemojione', '~> 3.3' -gem 'gon', '~> 6.2' +gem 'gon', '~> 6.4.0' gem 'request_store', '~> 1.5' gem 'base32', '~> 0.3.0' -gem "gitlab-license", "~> 1.3" +gem "gitlab-license", "~> 1.4" # Protect against bruteforcing gem 'rack-attack', '~> 6.3.0' @@ -314,7 +311,7 @@ gem 'pg_query', '~> 1.3.0' gem 'premailer-rails', '~> 1.10.3' # LabKit: Tracing and Correlation -gem 'gitlab-labkit', '~> 0.16.1' +gem 'gitlab-labkit', '~> 0.16.2' # Thrift is a dependency of gitlab-labkit, we want a version higher than 0.14.0 # because of https://gitlab.com/gitlab-org/gitlab/-/issues/321900 gem 'thrift', '>= 0.14.0' @@ -345,13 +342,12 @@ group :metrics do end group :development do - gem 'brakeman', '~> 4.2', require: false - gem 'lefthook', '~> 0.7', require: false + gem 'lefthook', '~> 0.7.0', require: false - gem 'letter_opener_web', '~> 1.3.4' + gem 'letter_opener_web', '~> 1.4.0' # Better errors handler - gem 'better_errors', '~> 2.7.1' + gem 'better_errors', '~> 2.9.0' # thin instead webrick gem 'thin', '~> 1.8.0' @@ -368,7 +364,7 @@ group :development, :test do gem 'database_cleaner', '~> 1.7.0' gem 'factory_bot_rails', '~> 6.1.0' - gem 'rspec-rails', '~> 4.0.2' + gem 'rspec-rails', '~> 5.0.1' # Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826) gem 'minitest', '~> 5.11.0' @@ -379,14 +375,14 @@ group :development, :test do gem 'spring', '~> 2.1.0' gem 'spring-commands-rspec', '~> 1.0.4' - gem 'gitlab-styles', '~> 6.1.0', require: false + gem 'gitlab-styles', '~> 6.2.0', require: false gem 'haml_lint', '~> 0.36.0', require: false gem 'bundler-audit', '~> 0.7.0.1', require: false gem 'benchmark-ips', '~> 2.3.0', require: false - gem 'knapsack', '~> 1.17' + gem 'knapsack', '~> 1.21.1' gem 'crystalball', '~> 0.7.0', require: false gem 'simple_po_parser', '~> 1.1.2', require: false @@ -398,11 +394,12 @@ group :development, :test do gem 'parallel', '~> 1.19', require: false gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false + + gem 'test_file_finder', '~> 0.1.3' end group :development, :test, :danger do - gem 'danger-gitlab', '~> 8.0', require: false - gem 'gitlab-dangerfiles', '~> 0.8.0', require: false + gem 'gitlab-dangerfiles', '~> 1.1.1', require: false end group :development, :test, :coverage do @@ -416,6 +413,7 @@ group :development, :test, :omnibus do end group :test do + gem 'json-schema', '~> 2.8.0' gem 'fuubar', '~> 2.2.0' gem 'rspec-retry', '~> 0.6.1' gem 'rspec_profiling', '~> 0.0.6' @@ -477,11 +475,11 @@ group :ed25519 do end # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 13.9.0.pre.rc1' +gem 'gitaly', '~> 13.11.0.pre.rc1' gem 'grpc', '~> 1.30.2' -gem 'google-protobuf', '~> 3.12' +gem 'google-protobuf', '~> 3.14.0' gem 'toml-rb', '~> 1.0.0' @@ -490,7 +488,7 @@ gem 'flipper', '~> 0.17.1' gem 'flipper-active_record', '~> 0.17.1' gem 'flipper-active_support_cache_store', '~> 0.17.1' gem 'unleash', '~> 0.1.5' -gem 'gitlab-experiment', '~> 0.5.0' +gem 'gitlab-experiment', '~> 0.5.3' # Structured logging gem 'lograge', '~> 0.5' @@ -513,16 +511,16 @@ gem 'erubi', '~> 1.9.0' # Monkey-patched in `config/initializers/mail_encoding_patch.rb` # See https://gitlab.com/gitlab-org/gitlab/issues/197386 gem 'mail', '= 2.7.1' +gem 'mail-smtp_pool', '~> 0.1.0', path: 'vendor/gems/mail-smtp_pool', require: false # File encryption -gem 'lockbox', '~> 0.3.3' +gem 'lockbox', '~> 0.6.2' # Email validation gem 'valid_email', '~> 0.1' # JSON gem 'json', '~> 2.3.0' -gem 'json-schema', '~> 2.8.0' gem 'json_schemer', '~> 0.2.12' gem 'oj', '~> 3.10.6' gem 'multi_json', '~> 1.14.1' diff --git a/Gemfile.lock b/Gemfile.lock index b5bbd5a61d..007ca87b46 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,9 @@ PATH - remote: vendor/shims/mimemagic + remote: vendor/gems/mail-smtp_pool specs: - mimemagic (0.3.7) + mail-smtp_pool (0.1.0) + connection_pool (~> 2.0) + mail (~> 2.7) GEM remote: https://rubygems.org/ @@ -10,59 +12,59 @@ GEM abstract_type (0.0.7) acme-client (2.0.6) faraday (>= 0.17, < 2.0.0) - actioncable (6.0.3.4) - actionpack (= 6.0.3.4) + actioncable (6.0.3.6) + actionpack (= 6.0.3.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.0.3.4) - actionpack (= 6.0.3.4) - activejob (= 6.0.3.4) - activerecord (= 6.0.3.4) - activestorage (= 6.0.3.4) - activesupport (= 6.0.3.4) + actionmailbox (6.0.3.6) + actionpack (= 6.0.3.6) + activejob (= 6.0.3.6) + activerecord (= 6.0.3.6) + activestorage (= 6.0.3.6) + activesupport (= 6.0.3.6) mail (>= 2.7.1) - actionmailer (6.0.3.4) - actionpack (= 6.0.3.4) - actionview (= 6.0.3.4) - activejob (= 6.0.3.4) + actionmailer (6.0.3.6) + actionpack (= 6.0.3.6) + actionview (= 6.0.3.6) + activejob (= 6.0.3.6) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.0.3.4) - actionview (= 6.0.3.4) - activesupport (= 6.0.3.4) + actionpack (6.0.3.6) + actionview (= 6.0.3.6) + activesupport (= 6.0.3.6) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.0.3.4) - actionpack (= 6.0.3.4) - activerecord (= 6.0.3.4) - activestorage (= 6.0.3.4) - activesupport (= 6.0.3.4) + actiontext (6.0.3.6) + actionpack (= 6.0.3.6) + activerecord (= 6.0.3.6) + activestorage (= 6.0.3.6) + activesupport (= 6.0.3.6) nokogiri (>= 1.8.5) - actionview (6.0.3.4) - activesupport (= 6.0.3.4) + actionview (6.0.3.6) + activesupport (= 6.0.3.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (6.0.3.4) - activesupport (= 6.0.3.4) + activejob (6.0.3.6) + activesupport (= 6.0.3.6) globalid (>= 0.3.6) - activemodel (6.0.3.4) - activesupport (= 6.0.3.4) - activerecord (6.0.3.4) - activemodel (= 6.0.3.4) - activesupport (= 6.0.3.4) + activemodel (6.0.3.6) + activesupport (= 6.0.3.6) + activerecord (6.0.3.6) + activemodel (= 6.0.3.6) + activesupport (= 6.0.3.6) activerecord-explain-analyze (0.1.0) activerecord (>= 4) pg - activestorage (6.0.3.4) - actionpack (= 6.0.3.4) - activejob (= 6.0.3.4) - activerecord (= 6.0.3.4) - marcel (~> 0.3.1) - activesupport (6.0.3.4) + activestorage (6.0.3.6) + actionpack (= 6.0.3.6) + activejob (= 6.0.3.6) + activerecord (= 6.0.3.6) + marcel (~> 1.0.0) + activesupport (6.0.3.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -138,7 +140,7 @@ GEM benchmark-ips (2.3.0) benchmark-memory (0.1.2) memory_profiler (~> 0.9) - better_errors (2.7.1) + better_errors (2.9.1) coderay (>= 1.0.0) erubi (>= 1.0.0) rack (>= 0.9.0) @@ -149,7 +151,6 @@ GEM bootstrap_form (4.2.0) actionpack (>= 5.0) activemodel (>= 5.0) - brakeman (4.2.1) browser (4.2.0) builder (3.2.4) bullet (6.1.3) @@ -265,12 +266,12 @@ GEM railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (3.1.0) - activesupport (< 6.1) + devise-two-factor (4.0.0) + activesupport (< 6.2) attr_encrypted (>= 1.3, < 4, != 2) devise (~> 4.0) - railties (< 6.1) - rotp (~> 2.0) + railties (< 6.2) + rotp (~> 6.0) diff-lcs (1.4.4) diff_match_patch (0.1.0) diffy (3.3.0) @@ -434,7 +435,7 @@ GEM rails (>= 3.2.0) git (1.7.0) rchardet (~> 1.8) - gitaly (13.9.0.pre.rc1) + gitaly (13.11.0.pre.rc1) grpc (~> 1.0) github-markup (1.7.0) gitlab (4.16.1) @@ -442,11 +443,11 @@ GEM terminal-table (~> 1.5, >= 1.5.1) gitlab-chronic (0.10.5) numerizer (~> 0.2) - gitlab-dangerfiles (0.8.0) - danger - gitlab-experiment (0.5.0) + gitlab-dangerfiles (1.1.1) + danger-gitlab + gitlab-experiment (0.5.3) activesupport (>= 3.0) - scientist (~> 1.5, >= 1.5.0) + scientist (~> 1.6, >= 1.6.0) gitlab-fog-azure-rm (1.0.1) azure-storage-blob (~> 2.0) azure-storage-common (~> 2.0) @@ -461,7 +462,7 @@ GEM fog-xml (~> 0.1.0) google-api-client (>= 0.44.2, < 0.51) google-cloud-env (~> 1.2) - gitlab-labkit (0.16.1) + gitlab-labkit (0.16.2) actionpack (>= 5.0.0, < 7.0.0) activesupport (>= 5.0.0, < 7.0.0) grpc (~> 1.19) @@ -469,16 +470,16 @@ GEM opentracing (~> 0.4) pg_query (~> 1.3) redis (> 3.0.0, < 5.0.0) - gitlab-license (1.3.1) + gitlab-license (1.4.0) gitlab-mail_room (0.0.9) gitlab-markup (1.7.1) gitlab-net-dns (0.9.1) gitlab-pry-byebug (3.9.0) byebug (~> 11.0) pry (~> 0.13.0) - gitlab-sidekiq-fetcher (0.5.5) + gitlab-sidekiq-fetcher (0.5.6) sidekiq (~> 5) - gitlab-styles (6.1.0) + gitlab-styles (6.2.0) rubocop (~> 0.91, >= 0.91.1) rubocop-gitlab-security (~> 0.1.1) rubocop-performance (~> 1.9.2) @@ -493,8 +494,9 @@ GEM rubyntlm (~> 0.5) globalid (0.4.2) activesupport (>= 4.2.0) - gon (6.2.0) - actionpack (>= 3.0) + gon (6.4.0) + actionpack (>= 3.0.20) + i18n (>= 0.7) multi_json request_store (>= 1.0) google-api-client (0.50.0) @@ -508,7 +510,7 @@ GEM signet (~> 0.12) google-cloud-env (1.4.0) faraday (>= 0.17.3, < 2.0) - google-protobuf (3.12.4) + google-protobuf (3.14.0) googleapis-common-protos-types (1.0.5) google-protobuf (~> 3.11) googleauth (0.14.0) @@ -585,7 +587,7 @@ GEM rainbow rubocop (>= 0.50.0) sysexits (~> 1.1) - hamlit (2.14.4) + hamlit (2.15.0) temple (>= 0.8.2) thor tilt @@ -620,7 +622,7 @@ GEM mime-types (~> 3.0) multi_xml (>= 0.5.2) httpclient (2.8.3) - i18n (1.8.9) + i18n (1.8.10) concurrent-ruby (~> 1.0) i18n_data (0.8.0) icalendar (2.4.1) @@ -646,7 +648,7 @@ GEM activesupport (>= 4.2) aes_key_wrap bindata - json-schema (2.8.0) + json-schema (2.8.1) addressable (>= 2.4) json_schemer (0.2.12) ecma-re-validator (~> 0.2) @@ -670,9 +672,9 @@ GEM kaminari-core (= 1.2.1) kaminari-core (1.2.1) kgio (2.11.3) - knapsack (1.17.0) + knapsack (1.21.1) rake - kramdown (2.3.0) + kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) @@ -681,12 +683,12 @@ GEM jsonpath (~> 1.0) recursive-open-struct (~> 1.1, >= 1.1.1) rest-client (~> 2.0) - launchy (2.4.3) - addressable (~> 2.3) + launchy (2.5.0) + addressable (~> 2.7) lefthook (0.7.2) letter_opener (1.7.0) launchy (~> 2.2) - letter_opener_web (1.3.4) + letter_opener_web (1.4.0) actionmailer (>= 3.2) letter_opener (~> 1.0) railties (>= 3.2) @@ -708,21 +710,20 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) locale (2.1.3) - lockbox (0.3.3) + lockbox (0.6.2) lograge (0.11.2) actionpack (>= 4) activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.8.0) + loofah (2.9.1) crass (~> 1.0.2) nokogiri (>= 1.5.9) lru_redux (1.1.0) lumberjack (1.2.7) mail (2.7.1) mini_mime (>= 0.1.1) - marcel (0.3.3) - mimemagic (~> 0.3.2) + marcel (1.0.1) marginalia (1.10.0) actionpack (>= 2.3) activerecord (>= 2.3) @@ -736,7 +737,7 @@ GEM mime-types-data (3.2020.0512) mini_histogram (0.3.1) mini_magick (4.10.1) - mini_mime (1.0.2) + mini_mime (1.1.0) mini_portile2 (2.5.0) minitest (5.11.3) mixlib-cli (2.1.8) @@ -775,7 +776,7 @@ GEM netrc (0.11.0) nio4r (2.5.4) no_proxy_fix (0.1.2) - nokogiri (1.11.1) + nokogiri (1.11.3) mini_portile2 (~> 2.5.0) racc (~> 1.4) nokogumbo (2.0.2) @@ -954,20 +955,20 @@ GEM rack-test (1.1.0) rack (>= 1.0, < 3) rack-timeout (0.5.2) - rails (6.0.3.4) - actioncable (= 6.0.3.4) - actionmailbox (= 6.0.3.4) - actionmailer (= 6.0.3.4) - actionpack (= 6.0.3.4) - actiontext (= 6.0.3.4) - actionview (= 6.0.3.4) - activejob (= 6.0.3.4) - activemodel (= 6.0.3.4) - activerecord (= 6.0.3.4) - activestorage (= 6.0.3.4) - activesupport (= 6.0.3.4) + rails (6.0.3.6) + actioncable (= 6.0.3.6) + actionmailbox (= 6.0.3.6) + actionmailer (= 6.0.3.6) + actionpack (= 6.0.3.6) + actiontext (= 6.0.3.6) + actionview (= 6.0.3.6) + activejob (= 6.0.3.6) + activemodel (= 6.0.3.6) + activerecord (= 6.0.3.6) + activestorage (= 6.0.3.6) + activesupport (= 6.0.3.6) bundler (>= 1.3.0) - railties (= 6.0.3.4) + railties (= 6.0.3.6) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -981,9 +982,9 @@ GEM rails-i18n (6.0.0) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 7) - railties (6.0.3.4) - actionpack (= 6.0.3.4) - activesupport (= 6.0.3.4) + railties (6.0.3.6) + actionpack (= 6.0.3.6) + activesupport (= 6.0.3.6) method_source rake (>= 0.8.7) thor (>= 0.20.3, < 2.0) @@ -1045,7 +1046,7 @@ GEM nokogiri rexml (3.2.5) rinku (2.0.0) - rotp (2.1.2) + rotp (6.2.0) rouge (3.26.0) rqrcode (0.7.0) chunky_png @@ -1069,10 +1070,10 @@ GEM proc_to_ast rspec (>= 2.13, < 4) unparser - rspec-rails (4.0.2) - actionpack (>= 4.2) - activesupport (>= 4.2) - railties (>= 4.2) + rspec-rails (5.0.1) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) rspec-core (~> 3.10) rspec-expectations (~> 3.10) rspec-mocks (~> 3.10) @@ -1114,7 +1115,8 @@ GEM i18n ruby-fogbugz (0.2.1) crack (~> 0.4) - ruby-magic-static (0.3.4) + ruby-magic (0.4.0) + mini_portile2 (~> 2.5.0) ruby-prof (1.3.1) ruby-progressbar (1.11.0) ruby-saml (1.12.1) @@ -1226,6 +1228,8 @@ GEM terser (1.0.2) execjs (>= 0.3.0, < 3) test-prof (0.12.0) + test_file_finder (0.1.3) + faraday (~> 1.0.1) text (1.3.1) thin (1.8.0) daemons (~> 1.0, >= 1.0.9) @@ -1363,10 +1367,9 @@ DEPENDENCIES bcrypt_pbkdf (~> 1.0) benchmark-ips (~> 2.3.0) benchmark-memory (~> 0.1) - better_errors (~> 2.7.1) + better_errors (~> 2.9.0) bootsnap (~> 1.4.6) bootstrap_form (~> 4.2.0) - brakeman (~> 4.2) browser (~> 4.2) bullet (~> 6.1.3) bundler-audit (~> 0.7.0.1) @@ -1380,7 +1383,6 @@ DEPENDENCIES countries (~> 3.0) creole (~> 0.5.0) crystalball (~> 0.7.0) - danger-gitlab (~> 8.0) database_cleaner (~> 1.7.0) deckar01-task_list (= 2.3.1) default_value_for (~> 3.4.0) @@ -1388,7 +1390,7 @@ DEPENDENCIES derailed_benchmarks device_detector devise (~> 4.7.2) - devise-two-factor (~> 3.1.0) + devise-two-factor (~> 4.0.0) diff_match_patch (~> 0.1.0) diffy (~> 3.3) discordrb-webhooks (~> 3.4) @@ -1423,26 +1425,26 @@ DEPENDENCIES gettext (~> 3.3) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly (~> 13.9.0.pre.rc1) + gitaly (~> 13.11.0.pre.rc1) github-markup (~> 1.7.0) gitlab-chronic (~> 0.10.5) - gitlab-dangerfiles (~> 0.8.0) - gitlab-experiment (~> 0.5.0) + gitlab-dangerfiles (~> 1.1.1) + gitlab-experiment (~> 0.5.3) gitlab-fog-azure-rm (~> 1.0.1) gitlab-fog-google (~> 1.13) - gitlab-labkit (~> 0.16.1) - gitlab-license (~> 1.3) + gitlab-labkit (~> 0.16.2) + gitlab-license (~> 1.4) gitlab-mail_room (~> 0.0.9) gitlab-markup (~> 1.7.1) gitlab-net-dns (~> 0.9.1) gitlab-pry-byebug - gitlab-sidekiq-fetcher (= 0.5.5) - gitlab-styles (~> 6.1.0) + gitlab-sidekiq-fetcher (= 0.5.6) + gitlab-styles (~> 6.2.0) gitlab_chronic_duration (~> 0.10.6.2) gitlab_omniauth-ldap (~> 2.1.1) - gon (~> 6.2) + gon (~> 6.4.0) google-api-client (~> 0.33) - google-protobuf (~> 3.12) + google-protobuf (~> 3.14.0) gpgme (~> 2.0.19) grape (~> 1.5.2) grape-entity (~> 0.7.1) @@ -1456,7 +1458,7 @@ DEPENDENCIES gssapi guard-rspec haml_lint (~> 0.36.0) - hamlit (~> 2.14.4) + hamlit (~> 2.15.0) hangouts-chat (~> 0.0.5) hashie hashie-forbidden_attributes @@ -1474,22 +1476,22 @@ DEPENDENCIES json_schemer (~> 0.2.12) jwt (~> 2.1.0) kaminari (~> 1.0) - knapsack (~> 1.17) - kramdown (~> 2.3.0) + knapsack (~> 1.21.1) + kramdown (~> 2.3.1) kubeclient (~> 4.9.1) - lefthook (~> 0.7) - letter_opener_web (~> 1.3.4) + lefthook (~> 0.7.0) + letter_opener_web (~> 1.4.0) license_finder (~> 6.0) licensee (~> 9.14.1) - lockbox (~> 0.3.3) + lockbox (~> 0.6.2) lograge (~> 0.5) loofah (~> 2.2) lru_redux mail (= 2.7.1) + mail-smtp_pool (~> 0.1.0)! marginalia (~> 1.10.0) memory_profiler (~> 0.9) method_source (~> 1.0) - mimemagic (= 0.3.7)! mini_magick (~> 4.10.1) minitest (~> 5.11.0) multi_json (~> 1.14.1) @@ -1539,7 +1541,7 @@ DEPENDENCIES rack-oauth2 (~> 1.16.0) rack-proxy (~> 0.6.0) rack-timeout (~> 0.5.1) - rails (~> 6.0.3.1) + rails (~> 6.0.3.6) rails-controller-testing rails-i18n (~> 6.0) rainbow (~> 3.0) @@ -1559,12 +1561,12 @@ DEPENDENCIES rouge (~> 3.26.0) rqrcode-rails3 (~> 0.1.7) rspec-parameterized - rspec-rails (~> 4.0.2) + rspec-rails (~> 5.0.1) rspec-retry (~> 0.6.1) rspec_junit_formatter rspec_profiling (~> 0.0.6) ruby-fogbugz (~> 0.2.1) - ruby-magic-static (~> 0.3.4) + ruby-magic (~> 0.4) ruby-prof (~> 1.3.0) ruby-progressbar (~> 1.10) ruby-saml (~> 1.12.1) @@ -1594,6 +1596,7 @@ DEPENDENCIES sys-filesystem (~> 1.1.6) terser (= 1.0.2) test-prof (~> 0.12.0) + test_file_finder (~> 0.1.3) thin (~> 1.8.0) thrift (>= 0.14.0) timecop (~> 0.9.1) diff --git a/README.md b/README.md index e3712d3f9f..63c9570474 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ GitLab is a Ruby on Rails application that runs on the following software: - Ubuntu/Debian/CentOS/RHEL/OpenSUSE - Ruby (MRI) 2.7.2 -- Git 2.24+ +- Git 2.31+ - Redis 4.0+ - PostgreSQL 11+ diff --git a/Rakefile b/Rakefile index 445542e5c0..eb2f158972 100755 --- a/Rakefile +++ b/Rakefile @@ -4,6 +4,8 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. +Rake::TaskManager.record_task_metadata = true + require File.expand_path('config/application', __dir__) relative_url_conf = File.expand_path('config/initializers/relative_url', __dir__) diff --git a/VERSION b/VERSION index 402deed307..07ae670e11 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -13.10.4 \ No newline at end of file +13.11.2 \ No newline at end of file diff --git a/app/assets/images/learn_gitlab/issue_created.svg b/app/assets/images/learn_gitlab/issue_created.svg new file mode 100644 index 0000000000..01652b97fc --- /dev/null +++ b/app/assets/images/learn_gitlab/issue_created.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/assets/images/learn_gitlab/section_deploy.svg b/app/assets/images/learn_gitlab/section_deploy.svg new file mode 100644 index 0000000000..187956a66d --- /dev/null +++ b/app/assets/images/learn_gitlab/section_deploy.svg @@ -0,0 +1,16 @@ + + + + Group + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/app/assets/images/learn_gitlab/section_plan.svg b/app/assets/images/learn_gitlab/section_plan.svg new file mode 100644 index 0000000000..2348e837e5 --- /dev/null +++ b/app/assets/images/learn_gitlab/section_plan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/images/learn_gitlab/section_workspace.svg b/app/assets/images/learn_gitlab/section_workspace.svg new file mode 100644 index 0000000000..5cb7fd36dd --- /dev/null +++ b/app/assets/images/learn_gitlab/section_workspace.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/javascripts/access_tokens/index.js b/app/assets/javascripts/access_tokens/index.js index 43d56295f7..7f5f0403de 100644 --- a/app/assets/javascripts/access_tokens/index.js +++ b/app/assets/javascripts/access_tokens/index.js @@ -1,20 +1,10 @@ import Vue from 'vue'; import createFlash from '~/flash'; +import { parseRailsFormFields } from '~/lib/utils/forms'; import { __ } from '~/locale'; import ExpiresAtField from './components/expires_at_field.vue'; -const getInputAttrs = (el) => { - const input = el.querySelector('input'); - - return { - id: input.id, - name: input.name, - value: input.value, - placeholder: input.placeholder, - }; -}; - export const initExpiresAtField = () => { const el = document.querySelector('.js-access-tokens-expires-at'); @@ -22,7 +12,7 @@ export const initExpiresAtField = () => { return null; } - const inputAttrs = getInputAttrs(el); + const { expiresAt: inputAttrs } = parseRailsFormFields(el); return new Vue({ el, @@ -43,7 +33,7 @@ export const initProjectsField = () => { return null; } - const inputAttrs = getInputAttrs(el); + const { projects: inputAttrs } = parseRailsFormFields(el); if (window.gon.features.personalAccessTokensScopedToProjects) { return new Promise((resolve) => { diff --git a/app/assets/javascripts/activities.js b/app/assets/javascripts/activities.js index 5064d9ee2d..b671d038ce 100644 --- a/app/assets/javascripts/activities.js +++ b/app/assets/javascripts/activities.js @@ -2,14 +2,20 @@ import $ from 'jquery'; import Cookies from 'js-cookie'; +import createFlash from '~/flash'; +import { s__ } from '~/locale'; import { localTimeAgo } from './lib/utils/datetime_utility'; import Pager from './pager'; export default class Activities { - constructor(container = '') { - this.container = container; + constructor(containerSelector = '') { + this.containerSelector = containerSelector; + this.containerEl = this.containerSelector + ? document.querySelector(this.containerSelector) + : undefined; + this.$contentList = $('.content_list'); - Pager.init(20, true, false, (data) => data, this.updateTooltips, this.container); + this.loadActivities(); $('.event-filter-link').on('click', (e) => { e.preventDefault(); @@ -18,13 +24,30 @@ export default class Activities { }); } + loadActivities() { + Pager.init({ + limit: 20, + preload: true, + prepareData: (data) => data, + successCallback: () => this.updateTooltips(), + errorCallback: () => + createFlash({ + message: s__( + 'Activity|An error occured while retrieving activity. Reload the page to try again.', + ), + parent: this.containerEl, + }), + container: this.containerSelector, + }); + } + updateTooltips() { localTimeAgo($('.js-timeago', '.content_list')); } reloadActivities() { - $('.content_list').html(''); - Pager.init(20, true, false, (data) => data, this.updateTooltips, this.container); + this.$contentList.html(''); + this.loadActivities(); } toggleFilter(sender) { diff --git a/app/assets/javascripts/admin/statistics_panel/constants.js b/app/assets/javascripts/admin/statistics_panel/constants.js index 2dce19a389..de413b2e7f 100644 --- a/app/assets/javascripts/admin/statistics_panel/constants.js +++ b/app/assets/javascripts/admin/statistics_panel/constants.js @@ -3,7 +3,7 @@ import { s__ } from '~/locale'; const statisticsLabels = { forks: s__('AdminStatistics|Forks'), issues: s__('AdminStatistics|Issues'), - mergeRequests: s__('AdminStatistics|Merge Requests'), + mergeRequests: s__('AdminStatistics|Merge requests'), notes: s__('AdminStatistics|Notes'), snippets: s__('AdminStatistics|Snippets'), sshKeys: s__('AdminStatistics|SSH Keys'), diff --git a/app/assets/javascripts/admin/users/components/users_table.vue b/app/assets/javascripts/admin/users/components/users_table.vue index 8962068601..8b41a063ab 100644 --- a/app/assets/javascripts/admin/users/components/users_table.vue +++ b/app/assets/javascripts/admin/users/components/users_table.vue @@ -1,9 +1,9 @@ diff --git a/app/assets/javascripts/alerts_settings/constants.js b/app/assets/javascripts/alerts_settings/constants.js index ce6cf61b5d..4a180ed2bc 100644 --- a/app/assets/javascripts/alerts_settings/constants.js +++ b/app/assets/javascripts/alerts_settings/constants.js @@ -10,96 +10,118 @@ export const i18n = { selectType: { label: s__('AlertSettings|Select integration type'), enterprise: s__( - 'AlertSettings|In free versions of GitLab, only one integration for each type can be added. %{linkStart}Upgrade your subscription%{linkEnd} to add additional integrations.', + 'AlertSettings|Free versions of GitLab are limited to one integration per type. To add more, %{linkStart}upgrade your subscription%{linkEnd}.', ), }, nameIntegration: { label: s__('AlertSettings|Name integration'), placeholder: s__('AlertSettings|Enter integration name'), activeToggle: __('Active'), + error: __("Name can't be blank"), + }, + enableIntegration: { + label: s__('AlertSettings|Enable integration'), + help: s__( + 'AlertSettings|A webhook URL and authorization key is generated for the integration. After you save the integration, both are visible under the “View credentials” tab.', + ), }, setupCredentials: { help: s__( - "AlertSettings|Utilize the URL and authorization key below to authorize an external service to send alerts to GitLab. Review your external service's documentation to learn where to add these details, and the %{linkStart}GitLab documentation%{linkEnd} to learn more about configuring your endpoint.", + 'AlertSettings|Use the URL and authorization key below to configure how an external service sends alerts to GitLab. %{linkStart}How do I configure the endpoint?%{linkEnd}', ), prometheusHelp: s__( - 'AlertSettings|Utilize the URL and authorization key below to authorize Prometheus to send alerts to GitLab. Review the Prometheus documentation to learn where to add these details, and the %{linkStart}GitLab documentation%{linkEnd} to learn more about configuring your endpoint.', + 'AlertSettings|Use the URL and authorization key below to configure how Prometheus sends alerts to GitLab. Review the %{linkStart}GitLab documentation%{linkEnd} to learn how to configure your endpoint.', ), webhookUrl: s__('AlertSettings|Webhook URL'), authorizationKey: s__('AlertSettings|Authorization key'), reset: s__('AlertSettings|Reset Key'), }, - setSamplePayload: { - label: s__('AlertSettings|Sample alert payload (optional)'), - testPayloadHelpHttp: s__( - 'AlertSettings|Provide an example payload from the monitoring tool you intend to integrate with. This payload can be used to create a custom mapping (optional).', - ), - testPayloadHelp: s__( - 'AlertSettings|Provide an example payload from the monitoring tool you intend to integrate with. This will allow you to send an alert to an active GitLab alerting point.', + mapFields: { + label: s__('AlertSettings|Customize alert payload mapping (optional)'), + help: s__( + 'AlertSettings|To create a custom mapping, enter an example payload from your monitoring tool, in JSON format. Select the "Parse payload fields" button to continue.', ), placeholder: s__('AlertSettings|{ "events": [{ "application": "Name of application" }] }'), - resetHeader: s__('AlertSettings|Reset the mapping'), - resetBody: s__( - "AlertSettings|If you edit the payload, the stored mapping will be reset, and you'll need to re-map the fields.", - ), - resetOk: s__('AlertSettings|Proceed with editing'), editPayload: s__('AlertSettings|Edit payload'), - parsePayload: s__('AlertSettings|Parse payload for custom mapping'), + parsePayload: s__('AlertSettings|Parse payload fields'), payloadParsedSucessMsg: s__( 'AlertSettings|Sample payload has been parsed. You can now map the fields.', ), - }, - mapFields: { - label: s__('AlertSettings|Customize alert payload mapping (optional)'), - intro: s__( - 'AlertSettings|If you intend to create a custom mapping, provide an example payload from your monitoring tool and click "parse payload fields" button to continue. The sample payload is required for completing the custom mapping; if you want to skip the mapping step, progress straight to saving your integration.', + resetHeader: s__('AlertSettings|Reset the mapping'), + resetBody: s__('AlertSettings|If you edit the payload, you must re-map the fields again.'), + resetOk: s__('AlertSettings|Proceed with editing'), + mapIntro: s__( + 'AlertSettings|You can map default GitLab alert fields to your payload keys in the dropdowns below.', ), }, + testPayload: { + help: s__( + 'AlertSettings|Enter an example payload from your selected monitoring tool. This supports sending alerts to a GitLab endpoint.', + ), + placeholder: s__('AlertSettings|{ "events": [{ "application": "Name of application" }] }'), + modalTitle: s__('AlertSettings|The form has unsaved changes'), + modalBody: s__('AlertSettings|The form has unsaved changes. How would you like to proceed?'), + savedAndTest: s__('AlertSettings|Save integration & send'), + proceedWithoutSave: s__('AlertSettings|Send without saving'), + cancel: __('Cancel'), + }, prometheusFormUrl: { label: s__('AlertSettings|Prometheus API base URL'), - help: s__('AlertSettings|URL cannot be blank and must start with http or https'), + help: s__('AlertSettings|URL cannot be blank and must start with http: or https:.'), + blankUrlError: __('URL cannot be blank'), + invalidUrlError: __('URL is invalid'), }, restKeyInfo: { label: s__( - 'AlertSettings|Resetting the authorization key for this project will require updating the authorization key in every alert source it is enabled in.', + 'AlertSettings|If you reset the authorization key for this project, you must update the key in every enabled alert source.', ), }, }, saveIntegration: s__('AlertSettings|Save integration'), - changesSaved: s__('AlertSettings|Your integration was successfully updated.'), + saveAndTestIntegration: s__('AlertSettings|Save & create test alert'), cancelAndClose: __('Cancel and close'), - send: s__('AlertSettings|Send'), + send: __('Send'), copy: __('Copy'), + integrationCreated: { + title: s__('AlertSettings|Integration successfully saved'), + successMsg: s__( + 'AlertSettings|GitLab has created a URL and authorization key for your integration. You can use them to set up a webhook and authorize your endpoint to send alerts to GitLab.', + ), + btnCaption: s__('AlertSettings|View URL and authorization key'), + }, + changesSaved: s__('AlertsIntegrations|The integration is saved.'), + integrationRemoved: s__('AlertsIntegrations|The integration is deleted.'), + alertSent: s__('AlertsIntegrations|The test alert should now be visible in your alerts list.'), + addNewIntegration: s__('AlertSettings|Add new integration'), }; export const integrationSteps = { selectType: 'SELECT_TYPE', nameIntegration: 'NAME_INTEGRATION', - setPrometheusApiUrl: 'SET_PROMETHEUS_API_URL', - setSamplePayload: 'SET_SAMPLE_PAYLOAD', + enableHttpIntegration: 'ENABLE_HTTP_INTEGRATION', + enablePrometheusIntegration: 'ENABLE_PROMETHEUS_INTEGRATION', customizeMapping: 'CUSTOMIZE_MAPPING', }; export const createStepNumbers = { [integrationSteps.selectType]: 1, [integrationSteps.nameIntegration]: 2, - [integrationSteps.setPrometheusApiUrl]: 2, - [integrationSteps.setSamplePayload]: 3, + [integrationSteps.enableHttpIntegration]: 3, + [integrationSteps.enablePrometheusIntegration]: 2, [integrationSteps.customizeMapping]: 4, }; export const editStepNumbers = { - [integrationSteps.selectType]: 1, [integrationSteps.nameIntegration]: 1, - [integrationSteps.setPrometheusApiUrl]: null, - [integrationSteps.setSamplePayload]: 2, + [integrationSteps.enableHttpIntegration]: 2, + [integrationSteps.enablePrometheusIntegration]: null, [integrationSteps.customizeMapping]: 3, }; export const integrationTypes = { none: { value: '', text: s__('AlertSettings|Select integration type') }, http: { value: 'HTTP', text: s__('AlertSettings|HTTP Endpoint') }, - prometheus: { value: 'PROMETHEUS', text: s__('AlertSettings|External Prometheus') }, + prometheus: { value: 'PROMETHEUS', text: s__('AlertSettings|Prometheus') }, }; export const typeSet = { @@ -127,4 +149,10 @@ export const mappingFields = { fallback: 'fallback', }; -export const viewCredentialsTabIndex = 1; +export const tabIndices = { + configureDetails: 0, + viewCredentials: 1, + sendTestAlert: 2, +}; + +export const testAlertModalId = 'confirmSendTestAlert'; diff --git a/app/assets/javascripts/alerts_settings/index.js b/app/assets/javascripts/alerts_settings/index.js index 321af9fedb..953a867b2b 100644 --- a/app/assets/javascripts/alerts_settings/index.js +++ b/app/assets/javascripts/alerts_settings/index.js @@ -3,12 +3,15 @@ import Vue from 'vue'; import { parseBoolean } from '~/lib/utils/common_utils'; import AlertSettingsWrapper from './components/alerts_settings_wrapper.vue'; import apolloProvider from './graphql'; +import getCurrentIntegrationQuery from './graphql/queries/get_current_integration.query.graphql'; -apolloProvider.clients.defaultClient.cache.writeData({ +apolloProvider.clients.defaultClient.cache.writeQuery({ + query: getCurrentIntegrationQuery, data: { currentIntegration: null, }, }); + Vue.use(GlToast); export default (el) => { @@ -16,23 +19,7 @@ export default (el) => { return null; } - const { - prometheusActivated, - prometheusUrl, - prometheusAuthorizationKey, - prometheusFormPath, - prometheusResetKeyPath, - prometheusApiUrl, - activated: activatedStr, - alertsSetupUrl, - alertsUsageUrl, - formPath, - authorizationKey, - url, - projectPath, - multiIntegrations, - alertFields, - } = el.dataset; + const { alertsUsageUrl, projectPath, multiIntegrations, alertFields } = el.dataset; return new Vue({ el, @@ -40,22 +27,7 @@ export default (el) => { AlertSettingsWrapper, }, provide: { - prometheus: { - active: parseBoolean(prometheusActivated), - url: prometheusUrl, - token: prometheusAuthorizationKey, - prometheusFormPath, - prometheusResetKeyPath, - prometheusApiUrl, - }, - generic: { - alertsSetupUrl, - alertsUsageUrl, - active: parseBoolean(activatedStr), - formPath, - token: authorizationKey, - url, - }, + alertsUsageUrl, projectPath, multiIntegrations: parseBoolean(multiIntegrations), }, diff --git a/app/assets/javascripts/alerts_settings/utils/error_messages.js b/app/assets/javascripts/alerts_settings/utils/error_messages.js index e380257f98..9a0644b4e2 100644 --- a/app/assets/javascripts/alerts_settings/utils/error_messages.js +++ b/app/assets/javascripts/alerts_settings/utils/error_messages.js @@ -1,4 +1,4 @@ -import { s__ } from '~/locale'; +import { s__, __ } from '~/locale'; export const DELETE_INTEGRATION_ERROR = s__( 'AlertsIntegrations|The integration could not be deleted. Please try again.', @@ -19,3 +19,9 @@ export const RESET_INTEGRATION_TOKEN_ERROR = s__( export const INTEGRATION_PAYLOAD_TEST_ERROR = s__( 'AlertsIntegrations|Integration payload is invalid.', ); + +export const INTEGRATION_INACTIVE_PAYLOAD_TEST_ERROR = s__( + 'AlertsIntegrations|The integration is currently inactive. Enable the integration to send the test alert.', +); + +export const DEFAULT_ERROR = __('Something went wrong on our end.'); diff --git a/app/assets/javascripts/analytics/usage_trends/components/charts_config.js b/app/assets/javascripts/analytics/usage_trends/components/charts_config.js index 014f823cdc..ea11ecb0c5 100644 --- a/app/assets/javascripts/analytics/usage_trends/components/charts_config.js +++ b/app/assets/javascripts/analytics/usage_trends/components/charts_config.js @@ -83,7 +83,7 @@ export default [ 'UsageTrends|Could not load the issues and merge requests chart. Please refresh the page to try again.', ), noDataMessage, - chartTitle: s__('UsageTrends|Issues & Merge Requests'), + chartTitle: s__('UsageTrends|Issues & merge requests'), yAxisTitle: s__('UsageTrends|Items'), xAxisTitle: s__('UsageTrends|Month'), queries: [ diff --git a/app/assets/javascripts/analytics/usage_trends/components/usage_counts.vue b/app/assets/javascripts/analytics/usage_trends/components/usage_counts.vue index 0630cca93a..80ad36d051 100644 --- a/app/assets/javascripts/analytics/usage_trends/components/usage_counts.vue +++ b/app/assets/javascripts/analytics/usage_trends/components/usage_counts.vue @@ -45,7 +45,7 @@ export default { projects: s__('UsageTrends|Projects'), groups: s__('UsageTrends|Groups'), issues: s__('UsageTrends|Issues'), - mergeRequests: s__('UsageTrends|Merge Requests'), + mergeRequests: s__('UsageTrends|Merge requests'), pipelines: s__('UsageTrends|Pipelines'), }, loadCountsError: s__('Could not load usage counts. Please refresh the page to try again.'), diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index 48005787d8..516235657c 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -44,7 +44,7 @@ const Api = { projectMilestonesPath: '/api/:version/projects/:id/milestones', projectIssuePath: '/api/:version/projects/:id/issues/:issue_iid', mergeRequestsPath: '/api/:version/merge_requests', - groupLabelsPath: '/groups/:namespace_path/-/labels', + groupLabelsPath: '/api/:version/groups/:namespace_path/labels', issuableTemplatePath: '/:namespace_path/:project_path/templates/:type/:key', issuableTemplatesPath: '/:namespace_path/:project_path/templates/:type', projectTemplatePath: '/api/:version/projects/:id/templates/:type/:key', @@ -79,6 +79,7 @@ const Api = { issuePath: '/api/:version/projects/:id/issues/:issue_iid', tagsPath: '/api/:version/projects/:id/repository/tags', freezePeriodsPath: '/api/:version/projects/:id/freeze_periods', + freezePeriodPath: '/api/:version/projects/:id/freeze_periods/:freeze_period_id', usageDataIncrementCounterPath: '/api/:version/usage_data/increment_counter', usageDataIncrementUniqueUsersPath: '/api/:version/usage_data/increment_unique_users', featureFlagUserLists: '/api/:version/projects/:id/feature_flags_user_lists', @@ -282,7 +283,7 @@ const Api = { }, /** - * Get all Merge Requests for a project, eventually filtering based on + * Get all merge requests for a project, eventually filtering based on * supplied parameters * @param projectPath * @param params @@ -306,7 +307,7 @@ const Api = { return axios.post(url, options); }, - // Return Merge Request for project + // Return merge request for project projectMergeRequest(projectPath, mergeRequestId, params = {}) { const url = Api.buildUrl(Api.projectMergeRequestPath) .replace(':id', encodeURIComponent(projectPath)) @@ -401,18 +402,29 @@ const Api = { newLabel(namespacePath, projectPath, data, callback) { let url; + let payload; if (projectPath) { url = Api.buildUrl(Api.projectLabelsPath) .replace(':namespace_path', namespacePath) .replace(':project_path', projectPath); + payload = { + label: data, + }; } else { url = Api.buildUrl(Api.groupLabelsPath).replace(':namespace_path', namespacePath); + + // groupLabelsPath uses public API which accepts + // `name` and `color` props. + payload = { + name: data.title, + color: data.color, + }; } return axios .post(url, { - label: data, + ...payload, }) .then((res) => callback(res.data)) .catch((e) => callback(e.response.data)); @@ -784,7 +796,7 @@ const Api = { return axios.delete(url, { data }); }, - getRawFile(id, path, params = { ref: 'master' }) { + getRawFile(id, path, params = {}) { const url = Api.buildUrl(this.rawFilePath) .replace(':id', encodeURIComponent(id)) .replace(':path', encodeURIComponent(path)); @@ -832,6 +844,14 @@ const Api = { return axios.post(url, freezePeriod); }, + updateFreezePeriod(id, freezePeriod = {}) { + const url = Api.buildUrl(this.freezePeriodPath) + .replace(':id', encodeURIComponent(id)) + .replace(':freeze_period_id', encodeURIComponent(freezePeriod.id)); + + return axios.put(url, freezePeriod); + }, + trackRedisCounterEvent(event) { if (!gon.features?.usageDataApi) { return null; diff --git a/app/assets/javascripts/api/user_api.js b/app/assets/javascripts/api/user_api.js index 5efc7063ef..27901120c5 100644 --- a/app/assets/javascripts/api/user_api.js +++ b/app/assets/javascripts/api/user_api.js @@ -55,12 +55,13 @@ export function getUserProjects(userId, query, options, callback) { .catch(() => flash(__('Something went wrong while fetching projects'))); } -export function updateUserStatus({ emoji, message, availability }) { +export function updateUserStatus({ emoji, message, availability, clearStatusAfter }) { const url = buildApiUrl(USER_POST_STATUS_PATH); return axios.put(url, { emoji, message, availability, + clear_status_after: clearStatusAfter, }); } diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js index dbdc7e43d2..3a2f2078e4 100644 --- a/app/assets/javascripts/awards_handler.js +++ b/app/assets/javascripts/awards_handler.js @@ -446,7 +446,7 @@ export class AwardsHandler { createAwardButtonForVotesBlock(votesBlock, emojiName) { const buttonHtml = ` - diff --git a/app/assets/javascripts/badges/components/badge.vue b/app/assets/javascripts/badges/components/badge.vue index 9e5d70075f..309af368df 100644 --- a/app/assets/javascripts/badges/components/badge.vue +++ b/app/assets/javascripts/badges/components/badge.vue @@ -1,7 +1,11 @@ @@ -62,51 +88,64 @@ export default { class="board-inner gl-display-flex gl-flex-direction-column gl-relative gl-h-full gl-rounded-base gl-bg-white" >

{{ $options.i18n.newList }}

-
- -
-
- -

{{ formDescription }}

- -
- - -
{{ $options.i18n.noneSelected }}
-
+
+
+

+ {{ $options.i18n.scope }} +

+

{{ $options.i18n.scopeDescription }}

- - + + + + + + + + +
+ + + + + +
+ + +

{{ $options.i18n.noResults }}

+
+
- -
- - - - - -
- - -

{{ $options.i18n.noResults }}

-
diff --git a/app/assets/javascripts/boards/components/board_blocked_icon.vue b/app/assets/javascripts/boards/components/board_blocked_icon.vue new file mode 100644 index 0000000000..0f92e71475 --- /dev/null +++ b/app/assets/javascripts/boards/components/board_blocked_icon.vue @@ -0,0 +1,192 @@ + + diff --git a/app/assets/javascripts/boards/components/board_card_inner.vue b/app/assets/javascripts/boards/components/board_card_inner.vue index d4d6b17a58..9ff2cdd76d 100644 --- a/app/assets/javascripts/boards/components/board_card_inner.vue +++ b/app/assets/javascripts/boards/components/board_card_inner.vue @@ -10,6 +10,7 @@ import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate.vue'; import UserAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue'; import { ListType } from '../constants'; import eventHub from '../eventhub'; +import BoardBlockedIcon from './board_blocked_icon.vue'; import IssueDueDate from './issue_due_date.vue'; import IssueTimeEstimate from './issue_time_estimate.vue'; @@ -22,6 +23,7 @@ export default { IssueDueDate, IssueTimeEstimate, IssueCardWeight: () => import('ee_component/boards/components/issue_card_weight.vue'), + BoardBlockedIcon, }, directives: { GlTooltip: GlTooltipDirective, @@ -52,7 +54,7 @@ export default { }; }, computed: { - ...mapState(['isShowingLabels']), + ...mapState(['isShowingLabels', 'issuableType']), ...mapGetters(['isEpicBoard']), cappedAssignees() { // e.g. maxRender is 4, @@ -114,7 +116,7 @@ export default { }, }, methods: { - ...mapActions(['performSearch']), + ...mapActions(['performSearch', 'setError']), isIndexLessThanlimit(index) { return index < this.limitBeforeCounter; }, @@ -164,14 +166,12 @@ export default {
diff --git a/app/assets/javascripts/boards/components/board_card_loading_skeleton.vue b/app/assets/javascripts/boards/components/board_card_loading_skeleton.vue new file mode 100644 index 0000000000..15bff1226a --- /dev/null +++ b/app/assets/javascripts/boards/components/board_card_loading_skeleton.vue @@ -0,0 +1,26 @@ + + + diff --git a/app/assets/javascripts/boards/components/board_content.vue b/app/assets/javascripts/boards/components/board_content.vue index e9c4237d75..a4b1e6adac 100644 --- a/app/assets/javascripts/boards/components/board_content.vue +++ b/app/assets/javascripts/boards/components/board_content.vue @@ -17,21 +17,20 @@ export default { gon.features?.graphqlBoardLists || gon.features?.epicBoards ? BoardColumn : BoardColumnDeprecated, - BoardContentSidebar: () => import('ee_component/boards/components/board_content_sidebar.vue'), + BoardContentSidebar: () => import('~/boards/components/board_content_sidebar.vue'), + EpicBoardContentSidebar: () => + import('ee_component/boards/components/epic_board_content_sidebar.vue'), EpicsSwimlanes: () => import('ee_component/boards/components/epics_swimlanes.vue'), GlAlert, }, mixins: [glFeatureFlagMixin()], + inject: ['canAdminList'], props: { lists: { type: Array, required: false, default: () => [], }, - canAdminList: { - type: Boolean, - required: true, - }, disabled: { type: Boolean, required: true, @@ -69,7 +68,7 @@ export default { }, }, methods: { - ...mapActions(['moveList']), + ...mapActions(['moveList', 'unsetError']), afterFormEnters() { const el = this.canDragColumns ? this.$refs.list.$el : this.$refs.list; el.scrollTo({ left: el.scrollWidth, behavior: 'smooth' }); @@ -99,8 +98,8 @@ export default { diff --git a/app/assets/javascripts/boards/components/board_content_sidebar.vue b/app/assets/javascripts/boards/components/board_content_sidebar.vue new file mode 100644 index 0000000000..46359cc2bc --- /dev/null +++ b/app/assets/javascripts/boards/components/board_content_sidebar.vue @@ -0,0 +1,96 @@ + + + diff --git a/app/assets/javascripts/boards/components/board_extra_actions.vue b/app/assets/javascripts/boards/components/board_extra_actions.vue deleted file mode 100644 index b802ccc788..0000000000 --- a/app/assets/javascripts/boards/components/board_extra_actions.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/app/assets/javascripts/boards/components/board_form.vue b/app/assets/javascripts/boards/components/board_form.vue index d8504dcfb0..78da4137d6 100644 --- a/app/assets/javascripts/boards/components/board_form.vue +++ b/app/assets/javascripts/boards/components/board_form.vue @@ -107,7 +107,7 @@ export default { }; }, computed: { - ...mapGetters(['isEpicBoard', 'isGroupBoard', 'isProjectBoard']), + ...mapGetters(['isIssueBoard', 'isGroupBoard', 'isProjectBoard']), isNewForm() { return this.currentPage === formType.new; }, @@ -127,7 +127,7 @@ export default { if (this.isDeleteForm) { return 'danger'; } - return 'info'; + return 'confirm'; }, title() { if (this.readonly) { @@ -163,6 +163,9 @@ export default { currentMutation() { return this.board.id ? updateBoardMutation : createBoardMutation; }, + deleteMutation() { + return destroyBoardMutation; + }, baseMutationVariables() { const { board } = this; const variables = { @@ -182,7 +185,7 @@ export default { groupPath: this.isGroupBoard ? this.fullPath : undefined, }; }, - boardScopeMutationVariables() { + issueBoardScopeMutationVariables() { /* eslint-disable @gitlab/require-i18n-strings */ return { weight: this.board.weight, @@ -193,13 +196,18 @@ export default { this.board.milestone?.id || this.board.milestone?.id === 0 ? convertToGraphQLId('Milestone', this.board.milestone.id) : null, - labelIds: this.board.labels.map(fullLabelId), iterationId: this.board.iteration_id ? convertToGraphQLId('Iteration', this.board.iteration_id) : null, }; /* eslint-enable @gitlab/require-i18n-strings */ }, + boardScopeMutationVariables() { + return { + labelIds: this.board.labels.map(fullLabelId), + ...(this.isIssueBoard && this.issueBoardScopeMutationVariables), + }; + }, mutationVariables() { return { ...this.baseMutationVariables, @@ -239,17 +247,20 @@ export default { return this.boardUpdateResponse(response.data); }, + async deleteBoard() { + await this.$apollo.mutate({ + mutation: this.deleteMutation, + variables: { + id: fullBoardId(this.board.id), + }, + }); + }, async submit() { if (this.board.name.length === 0) return; this.isLoading = true; if (this.isDeleteForm) { try { - await this.$apollo.mutate({ - mutation: destroyBoardMutation, - variables: { - id: fullBoardId(this.board.id), - }, - }); + await this.deleteBoard(); visitUrl(this.rootPath); } catch { Flash(this.$options.i18n.deleteErrorMessage); @@ -324,7 +335,7 @@ export default { /> {{ __('Submit issue') }}{{ __('Create issue') }} -import { mapActions } from 'vuex'; -import { historyPushState } from '~/lib/utils/common_utils'; -import { setUrlParams } from '~/lib/utils/url_utility'; -import { __ } from '~/locale'; -import FilteredSearch from '~/vue_shared/components/filtered_search_bar/filtered_search_bar_root.vue'; - -export default { - i18n: { - search: __('Search'), - }, - components: { FilteredSearch }, - props: { - search: { - type: String, - required: false, - default: '', - }, - }, - computed: { - initialSearch() { - return [{ type: 'filtered-search-term', value: { data: this.search } }]; - }, - }, - methods: { - ...mapActions(['performSearch']), - handleSearch(filters) { - let itemValue = ''; - const [item] = filters; - - if (filters.length === 0) { - itemValue = ''; - } else { - itemValue = item?.value?.data; - } - - historyPushState(setUrlParams({ search: itemValue }, window.location.href)); - - this.performSearch(); - }, - }, -}; - - - diff --git a/app/assets/javascripts/boards/components/modal/empty_state.vue b/app/assets/javascripts/boards/components/modal/empty_state.vue deleted file mode 100644 index 486b012e3d..0000000000 --- a/app/assets/javascripts/boards/components/modal/empty_state.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - diff --git a/app/assets/javascripts/boards/components/modal/filters.js b/app/assets/javascripts/boards/components/modal/filters.js deleted file mode 100644 index 2fb38a549f..0000000000 --- a/app/assets/javascripts/boards/components/modal/filters.js +++ /dev/null @@ -1,27 +0,0 @@ -import FilteredSearchContainer from '../../../filtered_search/container'; -import FilteredSearchBoards from '../../filtered_search_boards'; - -export default { - name: 'modal-filters', - props: { - store: { - type: Object, - required: true, - }, - }, - mounted() { - FilteredSearchContainer.container = this.$el; - - this.filteredSearch = new FilteredSearchBoards(this.store); - this.filteredSearch.setup(); - this.filteredSearch.removeTokens(); - this.filteredSearch.handleInputPlaceholder(); - this.filteredSearch.toggleClearSearchButton(); - }, - destroyed() { - this.filteredSearch.cleanup(); - FilteredSearchContainer.container = document; - this.store.path = ''; - }, - template: '#js-board-modal-filter', -}; diff --git a/app/assets/javascripts/boards/components/modal/footer.vue b/app/assets/javascripts/boards/components/modal/footer.vue deleted file mode 100644 index 05e1219bc7..0000000000 --- a/app/assets/javascripts/boards/components/modal/footer.vue +++ /dev/null @@ -1,80 +0,0 @@ - - diff --git a/app/assets/javascripts/boards/components/modal/header.vue b/app/assets/javascripts/boards/components/modal/header.vue deleted file mode 100644 index c3a71e7177..0000000000 --- a/app/assets/javascripts/boards/components/modal/header.vue +++ /dev/null @@ -1,80 +0,0 @@ - - diff --git a/app/assets/javascripts/boards/components/modal/index.vue b/app/assets/javascripts/boards/components/modal/index.vue deleted file mode 100644 index 5af90c1ee6..0000000000 --- a/app/assets/javascripts/boards/components/modal/index.vue +++ /dev/null @@ -1,151 +0,0 @@ - - diff --git a/app/assets/javascripts/boards/components/modal/list.vue b/app/assets/javascripts/boards/components/modal/list.vue deleted file mode 100644 index e66cae0ce1..0000000000 --- a/app/assets/javascripts/boards/components/modal/list.vue +++ /dev/null @@ -1,141 +0,0 @@ - - diff --git a/app/assets/javascripts/boards/components/modal/lists_dropdown.vue b/app/assets/javascripts/boards/components/modal/lists_dropdown.vue deleted file mode 100644 index 2065568d27..0000000000 --- a/app/assets/javascripts/boards/components/modal/lists_dropdown.vue +++ /dev/null @@ -1,49 +0,0 @@ - - diff --git a/app/assets/javascripts/boards/components/modal/tabs.vue b/app/assets/javascripts/boards/components/modal/tabs.vue deleted file mode 100644 index 0b717f516d..0000000000 --- a/app/assets/javascripts/boards/components/modal/tabs.vue +++ /dev/null @@ -1,42 +0,0 @@ - - diff --git a/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue b/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue index 61863bbe2a..352a25ef6d 100644 --- a/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue +++ b/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue @@ -98,14 +98,14 @@ export default { {{ __('Edit') }} -
+
{{ __('None') }}
diff --git a/app/assets/javascripts/boards/components/sidebar/board_sidebar_due_date.vue b/app/assets/javascripts/boards/components/sidebar/board_sidebar_due_date.vue index 6d92833739..13e1e23267 100644 --- a/app/assets/javascripts/boards/components/sidebar/board_sidebar_due_date.vue +++ b/app/assets/javascripts/boards/components/sidebar/board_sidebar_due_date.vue @@ -18,16 +18,16 @@ export default { }; }, computed: { - ...mapGetters(['activeIssue', 'projectPathForActiveIssue']), + ...mapGetters(['activeBoardItem', 'projectPathForActiveIssue']), hasDueDate() { - return this.activeIssue.dueDate != null; + return this.activeBoardItem.dueDate != null; }, parsedDueDate() { if (!this.hasDueDate) { return null; } - return parsePikadayDate(this.activeIssue.dueDate); + return parsePikadayDate(this.activeBoardItem.dueDate); }, formattedDueDate() { if (!this.hasDueDate) { @@ -69,6 +69,7 @@ export default { -import { GlAlert, GlButton, GlForm, GlFormGroup, GlFormInput } from '@gitlab/ui'; -import { mapGetters, mapActions } from 'vuex'; -import BoardEditableItem from '~/boards/components/sidebar/board_editable_item.vue'; -import createFlash from '~/flash'; -import { joinPaths } from '~/lib/utils/url_utility'; -import { __ } from '~/locale'; -import autofocusonshow from '~/vue_shared/directives/autofocusonshow'; - -export default { - components: { - GlForm, - GlAlert, - GlButton, - GlFormGroup, - GlFormInput, - BoardEditableItem, - }, - directives: { - autofocusonshow, - }, - data() { - return { - title: '', - loading: false, - showChangesAlert: false, - }; - }, - computed: { - ...mapGetters({ issue: 'activeIssue' }), - pendingChangesStorageKey() { - return this.getPendingChangesKey(this.issue); - }, - projectPath() { - const referencePath = this.issue.referencePath || ''; - return referencePath.slice(0, referencePath.indexOf('#')); - }, - validationState() { - return Boolean(this.title); - }, - }, - watch: { - issue: { - handler(updatedIssue, formerIssue) { - if (formerIssue?.title !== this.title) { - localStorage.setItem(this.getPendingChangesKey(formerIssue), this.title); - } - - this.title = updatedIssue.title; - this.setPendingState(); - }, - immediate: true, - }, - }, - methods: { - ...mapActions(['setActiveIssueTitle']), - getPendingChangesKey(issue) { - if (!issue) { - return ''; - } - - return joinPaths( - window.location.pathname.slice(1), - String(issue.id), - 'issue-title-pending-changes', - ); - }, - async setPendingState() { - const pendingChanges = localStorage.getItem(this.pendingChangesStorageKey); - - if (pendingChanges) { - this.title = pendingChanges; - this.showChangesAlert = true; - await this.$nextTick(); - this.$refs.sidebarItem.expand(); - } else { - this.showChangesAlert = false; - } - }, - cancel() { - this.title = this.issue.title; - this.$refs.sidebarItem.collapse(); - this.showChangesAlert = false; - localStorage.removeItem(this.pendingChangesStorageKey); - }, - async setTitle() { - this.$refs.sidebarItem.collapse(); - - if (!this.title || this.title === this.issue.title) { - return; - } - - try { - this.loading = true; - await this.setActiveIssueTitle({ title: this.title, projectPath: this.projectPath }); - localStorage.removeItem(this.pendingChangesStorageKey); - this.showChangesAlert = false; - } catch (e) { - this.title = this.issue.title; - createFlash({ message: this.$options.i18n.updateTitleError }); - } finally { - this.loading = false; - } - }, - handleOffClick() { - if (this.title !== this.issue.title) { - this.showChangesAlert = true; - localStorage.setItem(this.pendingChangesStorageKey, this.title); - } else { - this.$refs.sidebarItem.collapse(); - } - }, - }, - i18n: { - issueTitlePlaceholder: __('Issue title'), - submitButton: __('Save changes'), - cancelButton: __('Cancel'), - updateTitleError: __('An error occurred when updating the issue title'), - invalidFeedback: __('An issue title is required'), - reviewYourChanges: __('Changes to the title have not been saved'), - }, -}; - - - diff --git a/app/assets/javascripts/boards/components/sidebar/board_sidebar_labels_select.vue b/app/assets/javascripts/boards/components/sidebar/board_sidebar_labels_select.vue index 55b1596ee1..f78be83cd8 100644 --- a/app/assets/javascripts/boards/components/sidebar/board_sidebar_labels_select.vue +++ b/app/assets/javascripts/boards/components/sidebar/board_sidebar_labels_select.vue @@ -21,9 +21,9 @@ export default { }; }, computed: { - ...mapGetters(['activeIssue', 'projectPathForActiveIssue']), + ...mapGetters(['activeBoardItem', 'projectPathForActiveIssue']), selectedLabels() { - const { labels = [] } = this.activeIssue; + const { labels = [] } = this.activeBoardItem; return labels.map((label) => ({ ...label, @@ -31,7 +31,7 @@ export default { })); }, issueLabels() { - const { labels = [] } = this.activeIssue; + const { labels = [] } = this.activeBoardItem; return labels.map((label) => ({ ...label, @@ -40,7 +40,7 @@ export default { }, }, methods: { - ...mapActions(['setActiveIssueLabels']), + ...mapActions(['setActiveBoardItemLabels']), async setLabels(payload) { this.loading = true; this.$refs.sidebarItem.collapse(); @@ -52,7 +52,7 @@ export default { .map((label) => label.id); const input = { addLabelIds, removeLabelIds, projectPath: this.projectPathForActiveIssue }; - await this.setActiveIssueLabels(input); + await this.setActiveBoardItemLabels(input); } catch (e) { createFlash({ message: __('An error occurred while updating labels.') }); } finally { @@ -65,7 +65,7 @@ export default { try { const removeLabelIds = [getIdFromGraphQLId(id)]; const input = { removeLabelIds, projectPath: this.projectPathForActiveIssue }; - await this.setActiveIssueLabels(input); + await this.setActiveBoardItemLabels(input); } catch (e) { createFlash({ message: __('An error occurred when removing the label.') }); } finally { diff --git a/app/assets/javascripts/boards/components/sidebar/board_sidebar_milestone_select.vue b/app/assets/javascripts/boards/components/sidebar/board_sidebar_milestone_select.vue index 829f1c7280..ad225c7bf5 100644 --- a/app/assets/javascripts/boards/components/sidebar/board_sidebar_milestone_select.vue +++ b/app/assets/javascripts/boards/components/sidebar/board_sidebar_milestone_select.vue @@ -56,20 +56,20 @@ export default { }, }, computed: { - ...mapGetters(['activeIssue']), + ...mapGetters(['activeBoardItem']), hasMilestone() { - return this.activeIssue.milestone !== null; + return this.activeBoardItem.milestone !== null; }, groupFullPath() { - const { referencePath = '' } = this.activeIssue; + const { referencePath = '' } = this.activeBoardItem; return referencePath.slice(0, referencePath.indexOf('/')); }, projectPath() { - const { referencePath = '' } = this.activeIssue; + const { referencePath = '' } = this.activeBoardItem; return referencePath.slice(0, referencePath.indexOf('#')); }, dropdownText() { - return this.activeIssue.milestone?.title ?? this.$options.i18n.noMilestone; + return this.activeBoardItem.milestone?.title ?? this.$options.i18n.noMilestone; }, }, methods: { @@ -113,11 +113,12 @@ export default { ref="sidebarItem" :title="$options.i18n.milestone" :loading="loading" - @open="handleOpen()" + data-testid="sidebar-milestones" + @open="handleOpen" @close="handleClose" > {{ $options.i18n.noMilestone }} @@ -142,7 +143,7 @@ export default { v-for="milestone in milestones" :key="milestone.id" :is-check-item="true" - :is-checked="activeIssue.milestone && milestone.id === activeIssue.milestone.id" + :is-checked="activeBoardItem.milestone && milestone.id === activeBoardItem.milestone.id" data-testid="milestone-item" @click="setMilestone(milestone.id)" > diff --git a/app/assets/javascripts/boards/components/sidebar/board_sidebar_subscription.vue b/app/assets/javascripts/boards/components/sidebar/board_sidebar_subscription.vue index f01c8e8fa2..376985f7cb 100644 --- a/app/assets/javascripts/boards/components/sidebar/board_sidebar_subscription.vue +++ b/app/assets/javascripts/boards/components/sidebar/board_sidebar_subscription.vue @@ -21,27 +21,31 @@ export default { components: { GlToggle, }, + inject: ['emailsDisabled'], data() { return { loading: false, }; }, computed: { - ...mapGetters(['activeIssue', 'projectPathForActiveIssue']), + ...mapGetters(['activeBoardItem', 'projectPathForActiveIssue', 'isEpicBoard']), + isEmailsDisabled() { + return this.isEpicBoard ? this.emailsDisabled : this.activeBoardItem.emailsDisabled; + }, notificationText() { - return this.activeIssue.emailsDisabled + return this.isEmailsDisabled ? this.$options.i18n.header.subscribeDisabledDescription : this.$options.i18n.header.title; }, }, methods: { - ...mapActions(['setActiveIssueSubscribed']), + ...mapActions(['setActiveItemSubscribed']), async handleToggleSubscription() { this.loading = true; try { - await this.setActiveIssueSubscribed({ - subscribed: !this.activeIssue.subscribed, + await this.setActiveItemSubscribed({ + subscribed: !this.activeBoardItem.subscribed, projectPath: this.projectPathForActiveIssue, }); } catch (error) { @@ -61,8 +65,8 @@ export default { > {{ notificationText }} +import { mapGetters } from 'vuex'; +import IssuableTimeTracker from '~/sidebar/components/time_tracking/time_tracker.vue'; + +export default { + components: { + IssuableTimeTracker, + }, + inject: ['timeTrackingLimitToHours'], + computed: { + ...mapGetters(['activeBoardItem']), + }, +}; + + + diff --git a/app/assets/javascripts/boards/components/sidebar/board_sidebar_title.vue b/app/assets/javascripts/boards/components/sidebar/board_sidebar_title.vue new file mode 100644 index 0000000000..b8d3107c37 --- /dev/null +++ b/app/assets/javascripts/boards/components/sidebar/board_sidebar_title.vue @@ -0,0 +1,169 @@ + + + diff --git a/app/assets/javascripts/boards/components/toggle_focus.vue b/app/assets/javascripts/boards/components/toggle_focus.vue index 74805f8a68..49f5e7d20a 100644 --- a/app/assets/javascripts/boards/components/toggle_focus.vue +++ b/app/assets/javascripts/boards/components/toggle_focus.vue @@ -38,14 +38,16 @@ export default {